2018-12-13 16:27 — asano
呟いたら意外に反響があったので資料を残しておきます。
「表参道アドベンチャー」は「ASCII」1982年4月号の綴じ込み付録「AhSKI!」に掲載されたテキストのアドベンチャーゲームです。ソフトウェアに互換性の無いパソコンが乱立していた時代ですが、機種依存部分を分離することにより本体共通で PC-8001, MZ-80K/C, MZ-80B の各シリーズで実行可能となっていました。
この機種依存部分が分離されているということはそこだけ作り直せば他のハードウェアでも実行できる可能性があるということです。
ということで自作のボードで動かすために機種依存部分を解析しました。
こんなことをする人は少ないかもしれませんがここに記録しておきます。
まずこのゲームはZ80のバイナリなのでZ80か互換のプロセッサが必要です。あるいはZ80をエミュレーションする方法もあります。
プログラムは9000H~0C387Hを占めていて、9000H~90FFHまでの256バイトが機種依存部分です。ワークエリアは不明ですが、プログラムエリア内を使っているようです。このことからROM上で実行することはできないので、0000H~7FFFHにROMを配置してプログラムを格納し、実行時に8000H~0FFFFHのRAMにコピーするのが現実的です。今なら32kBならSRAM一つで済むので本当に使っているエリアを探し出す必要は無いでしょう。
それでは機種依存部分の内容です。アドレスが決まっているのは以下の通りです。
アドレス | 内容 | 備考 |
---|---|---|
9000H~9002H | 必要なら初期化を行いゲーム本体(9100H)へジャンプする | |
9003H,9004H | キー入力を待ってからAレジスタに入れて帰る | ゲームでは大文字しか使わないので大文字変換している PC-8001用はそうなっている |
9005H,9006H | Aレジスタの内容を表示する | BSキー使用時に1DH(カーソル左)が来るので08H(BS)などに変換が必要なことも |
9007H,9008H | 終了 | RET不要 |
9009H,900AH | ゲームの途中保存 完了後はRETではなくJP 92B9H |
0A535H~0C35DHまでのメモリを保存すればよい オリジナルはもちろんテープだが、私のボードではEEPROMに保存している |
900BH,900CH | 保存したゲームの再開 完了後はRETではなくJP 92B9H |
0A535H~0C35DHまでのメモリにロードすればよい |
9003H以降のエントリポイントはゲーム本体から適宜呼ばれます。2バイトしかないのでJR命令で実際の処理ルーチンに飛ぶしかありません。
900DH~90FFHまでは自由に使えます。
これだけなので AKI-80 などでも動作させられると思います。シリアル以外のポートは使わないのでEEPROMの24C64かなにかを積めばセーブ・ロードも難しくはないでしょう。
コメントを追加