デジホリのblog

釣りと自転車とDIYを愛するオヤジのブログ

2020年07月

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イメージも救われる(魂は生きている、、なんのこっちゃ)

久々のポケコンネタ。
液晶がダメになったポケコン君が何台かあるんだけど、
IMG_20200706_194702

PC-1245君とPC-1251君
BEEP 1とかするとピッと鳴るので、ダメなのは液晶だけ。
簡単なコマンドならブラインド入力できるから、カセットI/Fでプログラムをロードして実行すればROMの吸い出しぐらいはできそう。
ということで、ブラインドROM吸い出しをやってみました。

【事前確認】
1.ポケコンがコマンドを受け付けること

"B.1"ENTERでピッと鳴ること。("B."はBEEPの省略表現)

2.CLOADができること

例えば、10 BEEP 3みたいな1行プログラムを書いて、bas2wav.plでwavファイルに変換し、ポケコンに転送する。転送後にRUNして動作確認する。(表示が出ないからBEEPの確認ぐらいしかできない)

3.CSAVEMが機能すること

例えば、10 CSAVEM &4000,&4100というプログラムをポケコンに転送(別にキーで打ち込んでもいいけど、正しく入力できる気がしない)し、RUNする。
うまく動くと「ピーーーーー、ギャギャギャ・・・」と可愛い音を出してくれる。

4.CSAVEMのデータをwavファイルにキャプチャしてcload.plでバイナリ変換できること

Audacityのような音声データ編集ソフトを使って「ピーーーーー、ギャギャギャ・・・」をキャプチャする。
必要なところをトリミングしてからwavファイルに書き出す。cload.plでバイナリ変換できることを確認する。


ここまで確認ができれば、動作環境的にはOK。
ということで、ひとつずつやってみる。

必要なものは、
ポケコンとカセットI/F
IMG_20200706_194928

マイク、イヤホン端子のあるパソコン
適当なOS(とりあえずLinux)と音声編集ソフト(とりあえずAudacity)、perlも使えるようにしておく。
Screenshot at 2020-07-06 20-56-15

BASICのソースコードをwavファイルに変換してくれるスクリプト bas2wav.pl はここのサイトのを使います。
wav ファイルをマシン語のバイナリーに変換してくれるスクリプト cload.pl は POEMSのサイトから入手できます。

wavファイルをポケコンに転送するときはCLOADが安定するように音量を調整する。大きめに設定しないとロードでエラーになる。もちろんエラー表示は確認できないので、ロード終了後にプログラムを実行してBEEP音がなることでロード成功を判断する。

一方、ポケコンからPCへのデータ転送も、Audacityの波形をみて入力レベルの調整をする。
ちなみに入力設定は
 サンプリング周波数:8,000Hz
 サンプル形式:16-bit
ファイル書き出し時の形式は WAV(Microsoft) unsigned 8bit PCM です。
ここで書き出した wavファイルは cload.pl にてポケコンのROM形式のバイナリファイルに変換する。

$perl cload.pl -old -o xxx.bin xxx.wav

というような感じだ。
POEMSのサイトでも解説か書かれているので参照されたし。
おいらのサイトでも解説しているので、合わせて見てちょ。

ここまでできたら環境構築はおしまい。
次回はいよいよ実際のROM吸い出しだ!

↑このページのトップヘ