10 |
Arduino Mega 2560 Proの入手 |
FM-7のROMデータ抜き出し法は各種ありますが、RS232Cやフロッピードライブ、カセットテープ等、いずれもFM-7のI/Oを用いています。例えばRS232Cの場合は、FM-7上にプログラムを配置し、シリアルデータとして抜き出す方法。この場合はそのプログラム配置ができないため、手で入力するしかありません。別の方法としてはフロッピーディスクを接続し、そこからプログラムをロードし、それを実行してフロッピーに書きこむ方式。
フロッピーディスクドライブは高価で場所も取るため、別の手段を考えます。条件はFM-7側に一切プログラムを置かない方法です。カセットテープというわけにもいかず、FM-7のメディアが無い以上、FM-7側のプログラムを一切使わない方法として、Z80インタフェースを使用することを考えます。
Z80カードは、FM-7の内部バスに対して、別のバスマスタを使用可能にするものであり、メインCPUである6809から\$FD05のLSBを1にすれば、メインCPUにHALTがかかり、外部バスマスタであるZ80による内部バスアクセスが可能になるものです。
手持ちのBeagleBoneでROM抜きボードを作成しようと思っていました。これだと外形的に厚みが出てしまい、それを避けるためにはZ80コネクタとBeagleBoneをイクステンションボードで接続する等、ボードが無駄に大きくなりそうでした。別の方法を検討したところ、Arduino Mega 2560 Proという薄型のボードを見つけました。原理としては同じで、シリアル通信でボード上のCPUと通信し、そこからZ80インタフェースを通してFM-7のバスマスタとして内部をアクセスする方式です。
図145.2にボード接続図を示します。Arduino MegaはI/Oが非常に多いため、このような30本近くあるI/Oも楽に制御可能です。
アクセス法は図145.3にあるように、アドレスをセットし、制御信号(RWB/EB/QB)を制御して、1バイトずつ読み出しを行います。EB、QBの順番は6809と逆なことに注意。リードに関してはQB、EBの順でも動作しますが、ライト時にQBの立ち上がりでデータ確定していることが必要です。これを繰り返すことで全ROMの読み出しを行います。サブシステムのROMは直接読み出せないため、メンテナンスコマンドによりサブCPUにプログラムを実行させ、読み出します。