2020年2月1日土曜日

FM-7用のZ80カードを製作してみましたが...


いじって遊べるFM-7用のZ80カードが欲しい


手元に今でも動作するFM-7用のZ80カードとCP/M-80システムがあるのですが、そのカードの6809とZ80の切り替えの仕組みに興味がありました。
でも純正のZ80カードも古いですし、あれこれいじっていて故障させてしまうのは怖いので、いじり倒して遊べるZ80カードが欲しいと思っていました。

まず最初にFM-8用の倍速化した回路で製作してみました


インターフェース誌1983年7月号の村上啓司さんによる「FM-8を高速化する」という記事中に倍速化したFM-8用Z80カードの回路図が載っており、そのコネクタ信号がFM-7と同じようでしたので、もしかしたらFM-7でも動くのではないかと考えました。


FM-8用の倍速化回路を利用したZ80カード


手持ちの富士通製の純正Z80カードは19個ものICを使用していますが、この回路は11個と少ないのでサイズも小さくできて作りやすいので、ものは試しと製作してみることにしました。


左:富士通製 右:製作したカード

製作したカードの回路図を示します。
村上さんのFM-8の高速化の回路と倍速化Z80カードの回路のうちのZ80カードの部分のみにFM-7用の32Pコネクタをつけただけです。


FM-8用倍速化Z80カードの回路を利用しました


プリント基板を作り、試作してみました。
最初は、例によって全く動作しなかったのですが、自作したテストプログラムが悪いのかそれとも回路がダメなのかが分からずお手上げ状態でした。
そんな時に、WebでI/O誌の1985年9月号に掲載されたFM-7用Z80カードの製作記事を見つけ、その中のテストプログラムを利用することができ、ハードの調査に専念することができました。
あれこれと思いつく箇所を変更してみたりしていたのですが、結局、使用した手持ちの古いセラミックコンデンサ(1000pF)がショートしていたため74LS00の出力段を破損していることを見つけて、ICとCを交換して無事にテストプログラムが動作するようになりました。

動作中の様子を示します。
(画像中のディスプレイはWindows用で、FM-7用のディスプレイは左側に配置してあるので写っていません。)

動作中の様子(右基板がZ80カード、左はFDCカード)



次に、動くことは期待していなかったのですが、試しに富士通のFM-7用のCP/M-80を走らせてみました。

CP/M-80の起動画面


最初は画像のようなオープニングメッセージが表示されたところでハングアップするか、あるいは入力を受け付けたところでハングアップしてしまいました。
画面表示ができることや、入力を受け付けるときもあること、そして、2台のFM-7で微妙に動作が異なることから、メモリアクセスのタイミングに問題があるのだろうと考えて、とりあえず1000pFにCを並列に加えて容量を変えてみました。値を増やすと徐々に正常な動作に近づくのですが、それでも時々エラーでハングアップしてしまいます。
結局は、これも1000pFのコンデンサの不良(容量抜け?)が原因で、コンデンサを交換することで無事に動作しました。(1000pF~2000pFの範囲で正常動作しました。)

CP/M-80が動作している画面を示します。




このZ80カードは正常に動作すると思ったのですが...


ところが、何とこのZ80カードはもう一台のFM-7では正常に動作しないのです。
CP/M-80では起動画面でハングアップしますし、上記のテストプログラム(6809とZ80間のチェンジを8回繰り返す)では途中でエラーで終了してしまい、リストを取ってみるとプログラムが書き変わっています。
どうもNew7ではない同じFM-7でもメモリアクセス周りに微妙な違いがあるようです。

ということで、村上さんのFM-8用の倍速化Z80カードの回路は、そのままでは全てのFM-7で動作するというわけではないということになりそうです。

ならば、I/O誌に掲載されたFM-7用のZ80カードでということになるわけですが、実は、もう既にKiCadで回路図を起こして、修正したFM-FDC基板と共にFusionPCBに発注してあります。(春節とコロナウイルスのために未だ製造にも入っていませんが...)
ということで、I/O誌の回路によるZ80カードが完成し、正常に動作したら報告したいと思います。

5 件のコメント:

  1. FM-8のCPUカードコネクタとFM-7のCPUカードのコネクタでは信号線が一部変更されており、残念ながら相互に差し替えはできません。一番大きな違いとして、FM-8用はREF信号があります。FM-8では、DRAMリフレッシュは本体ハード側で実施されているのか、Z80カードからは信号が出ていません。一方、FM-7シリーズではDRAMリフレッシュはCPUカードの仕事にされており、Z80カードでREF信号を作成して本体側に供給しています。FM-8の回路のZ80カードですと、DRAMがリフレッシュされないので、メモリ内容が徐々に消えていくと思います。

    返信削除
  2. すいません、訂正です。
    FM-8用はREF信号がありません。

    返信削除
    返信
    1. はせりんさま コメントありがとうございます。
      そうだったのですね。FM-8用のZ80カードの回路図にリフレッシュ関係の信号がないのが不思議でしたが、本体側で行っていたと考えれば納得できます。
      何でも自分でやってみないと本当には分からないので、回路も簡単ですので試しに作ってみようと考えました。
      第2作ではI/O誌に載った回路で製作しましたが、これはちゃんと動作しています。また、Mega2560ボードではリフレッシュについて苦労しましたが、その分勉強させてもらいました。何でも経験ですね。
      今は中日電工さんのブログを見ながらCP/M-80のBIOSを書いています。
      Z80の機械語など全く分からないのですが、6809へ丸投げすれば良いのだろうと思って始めたのですが、四苦八苦しています。
      ということで、毎日のように第2作のZ80カードを動かしていますが、今のところ不具合はないようです。

      削除
  3. TPAをどれだけ広く取れるか、6809とZ80の分担をどう決めてBIOSのオーバーヘッドを少なくするか、腕の見せ所ですね。
    最近動かすことができたOh!FM誌掲載の63K CP/Mがいい線行ってました。
    これでRS232Cがサポートされれば完璧ですね。
    http://haserin09.la.coocan.jp/cpm80.html#CPMMAP
    フロッピーディスク以外は全部Z80直で良いのでは、と思っています。

    返信削除
    返信
    1. そうですね。本来、BIOSを自作するのはTPAを広くとるためか機能を追加するためだとは思いますが、私の場合は全くの素人が、公開されているCPMのソースを用いて自分のためのCPMを作ってみるという試みですので、とりあえず動作するということを目的としています。
      ですので、6809のBIOSをできる限り利用しようと思っているわけです。
      今はようやくRAMディスク上でCONSOLE I/OとRS232Cが動いたばかりですので、先は遠いです。

      削除