PC-1245をブラインドROM吸い出ししてみる。

ご存知の通り、PC-1245のメモリマップは、
0x0000-0x1fff 内部ROM
0x4000-0x7fff 外部ROM
0xc000-0xc7fff RAM(2Kしかない!)

特に内部ROMの吸い出し方のロジックはPOEMSのサイトなどを見て欲しい。

1.内部ROMのデータをメモリに転送するマシン語プログラム
2.1をメモリに書き込むのとCSAVEするBASICプログラム
3.1の書き込みエリア0x400(1K)分

これらを0xc000-0xc7fffの中に配置するんだけど、後半の領域はBASIC実行のためのスタックやシステム管理情報に使われるので、実際は0xc600以降(正確には0xc6b0ぐらいからそれ以降)は使えない。
なので、
0xc000-0xc1?? BASICプログラム(大体256byteぐらいに収める)
0xc1a0-0xc1ff マシン語プログラム
0xc200-0xc5ff 1K分のワークエリア
という感じの配置を狙ってみる。

10 POKE &C1A0,&00,&03,&10,&C1,&C0,&84,&18,&07
20 POKE &C1A8,&02,&03,&34,&02,&FF,&34,&00,&01
30 POKE &C1B0,&82,&13,&04,&08,&90,&35,&90,&DB
40 POKE &C1B8,&04,&26,&2F,&0D,&2F,&12,&37
50 POKE &C1C0,&00,&00,&00,&C2
60 A=0
70 BEEP 1:PRINT A
80 POKE &C1C1,A:CALL &C1A0
90 CSAVEM &C200,&C5FF
95 A=A+4:IF A<&20 GOTO 70

このプログラムは前半の内部ROMをワークメモリに書き込むマシン語プログラムを0xc1a0から書き込む処理と、後半の1KずつCSAVEMを8回実行する処理で構成している。
処理の途中でBEEPを鳴らし、PRINT処理(表示は見えないが)で一時停止させる。
ちなみにこのBASICプログラムは256byte(0xc000-0xc100に収まる)。

外部ROMは普通にCSAVEMすればいいだけなので、
10 A=&4000
20 BEEP 1:PRINT A
30 CSAVEM A, A+&fff
40 A=A+&1000:IF A<&8000 GOTO 20
これでいいかな。
一気にCSAVEMしてもいいんだけど、0x1000バイトずつ細切れで4回実施する。

キャプチャしたwavファイルをcload.plでマシン語のバイナリーデータにデコードし、つなぎ合わせればROMイメージの完成。
なお、0x2000-0x3fffはダミーデータで埋めればよく、また、PC-1245の場合は0x0000-0x7fff分があれば事足りる。


ということで、めでたく PC-1245 のブラインドROM吸い出しができることがわかった。
GoogleDriveなどを経由してAndroid端末の所定のフォルダにROMイメージを置きます。

→ /sdcard/pokecom/rom (端末によって微妙にディレクトリ構造が違うけど)
 

Screenshot_20200707_153114


Pokecom GOで動かせば、ROMイメージも救われる(魂は生きている、、なんのこっちゃ)