2019年5月3日金曜日

ROMをどうするか

CPUは手に入ったわけですが、起動するにはROMが必要です。残念ながら手持ちがありません。

考えられる手は、素直にUV-EPROMを購入することです。幸いまだ出回っていて買えるようですが、ROMにプログラムを書き込むライタと消去するのに紫外線ランプも必要です。以前は、どちらも持っていたのが、やはり断舎利の対象となってしまっていました。

もう一つの方法は、ネットで見つけたAtmelのマイコンチップをつかってRAMに起動用のプログラムを書き込んでスタートさせる方法です。ブートコードはチップに書き込んでおきます。
昔のトグルスイッチでぱちぱちブートコードを書き込んでいたのを高級にした感じでしょうか。情報を手繰っていくと、Z80-MBC2: 4ICs homemade Z80 computer に行き着きました。クロックやリセットの信号もチップで作っているようです。

下手したらZ8001よりAtmelのチップのほうが高速だったりするかもしれず悩みどころですが、こちらの方法のほうが時間とコストがかからなそうです。はんだ付けの量も減らせそうなので、こちらを検討してみます。

問題は、リセット後にAtmelのチップがBUSREQでバスを握れて、CPUがBUSACKを返してくれるのかどうかです。
Z8001 Technical Manual の 9.6.2 Bus Request (p.262) によると、BUSREQはマシンサイクルの最初のクロックの立ち上がりで捉えられ、次のサイクルでBUSACKが返されます。

7.5 Reset (p.239) によると、Z8001はリセット後、連続したメモリリードサイクルに入り、0x0002からFCW、0x0004からセグメント番号、0006からPCの値を読み込み、この3サイクルの後、PCの値からの命令を実行するサイクルに入ります。この時点まできてやっとBUSREQを受け付けてくれるようになるようです。

このリセット後の3サイクルのリードサイクルに、0x0000を連続して読ませても大丈夫なら、ADをプルダウンしておくだけですみます。

2.7.1 Program Status Registers (p.26)によると、FCWが0x0000だと、ノンセグメント、ノーマルモード、割り込み禁止、EPAなしの設定になるだけで特に問題はなさそうです。

最初に実行される命令は、セグメント番号:00、 PC:0x0000にある0x0000と続く0x0000なので、
  ADDB RH0, #0
が実行されます。CPUは、ずっとこの命令を実行し続けることになり、BUSREQがかかるとバスを明け渡してくれるはずです。たぶん。

0 件のコメント:

コメントを投稿