1. ROMの吸い出し方法
<基本的な流れ>
1-1) 内部 ROM のデータをユーザーメモリにコピー(内部 ROM を吸い出す場合)
1-2) CSAVEM で PC に wav ファイルとして保存
1-3) cload.pl を使ってwav データを ROM のバイナリデータに変換
1-1) 内部 ROM のデータをユーザーメモリにコピー(内部 ROM を吸い出す場合)
(SC61860のマシン語プログラムが適当に理解できることを前提で書いています)
内部 ROM(0x0000-0x1fff) は直接読み出せないので、MVWP(0x35)命令で一旦ユーザーメモリにコピーします。
また、ユーザーメモリも容量が少ないので適当な大きさに分割し、あとで結合します。
例えばPC-1470Uの場合は、0x1000バイトずつ吸い出します。(PC-1245などは0x400ぐらいにする必要があります)
こんな感じで内部ROMをコピーするプログラムを作ります。
e200 : 00 03 10 e2 40 84 18 07
e208 : 02 0f 34 02 ff 34 00 01
e210 : 82 13 04 08 90 35 90 db
e218 : 04 26 2f 0d 2f 12 37
e240 : xx xx 00 e3 (xx xxは転送元の開始アドレス)
e300 〜 F2FF (転送先の領域)
e209の0x0fは転送するバイト数を表している。
0-255のループを何回繰り返すかという意味。0-15の繰り返しなので256x16=4096(=0x1000)。
0x08にすると、0-7のループになるので256x8=2048(=0x800)。
このプログラムを使って、0x0000-0x0fff, 0x1000-0x1fffの2回分やります。
1. POKE &E240,0,0
CALL &E200
CSAVEM &E300,&F2FF
2. POKE &E241,0x10
CALL &E200
CSAVEM &E300,&F2FF
1-2) CSAVEM で PC に wav ファイルとして保存
wav ファイルを PC でキャプチャする環境についてです。
これ、今までは ubuntu + Audacity の環境を主に使っていたのですが、Macでも動きましたので一例として紹介しておきます。
私の Mac はオーディオプラグが入出力コンボタイプなので、そのままではカセットI/Fが使えません。
なので、USBオーディオ変換ケーブルを使って入力しています。
入力レベルの設定がうまくできない(よくわからん??)ので、キャプチャ後にレベル変換しています。
これで、さっきの要領で、例えば rom0000-0fff.wav と rom1000-1fff.wav を作ります。
入力レベルの設定で、
サンプリング周波数:8000Hz
サンプル形式:16-bit
にしておき、適当にキャプチャします。
先頭のあたりにあるプチノイズを削除します。
これ結構大事で、これがあると cload.pl がフォーマットエラーを吐いてしまいます。
入力レベルを適当に調整し、ファイルに書き出します。
出力形式は WAV(Microsoft) unsigned 8bit PCM です。
1-3) cload.pl を使ってwav データを ROM のバイナリデータに変換
(このツールは perl で書かれているので、perl の動作環境がある前提で説明します)
さっき作った wav ファイルを cload.pl で ROM の生データに変換します。
ツールはこちらに置いてあります。
(再配布に関して作者のこばやしさんに了承をいただきました。こばやしさん、どうもありがとうございます。)
〜 動作イメージ 〜
$ perl cload.pl rom4000-4fff.wav -o rom4000-4fff.bin
cload.pl version 1.0 (13th Mar. 2003) by Yagshi
file length= 936558+8
freq. = 8000Hz
byte/sec = 8000
byte/sample= 1
bit/sample= 8
data length= 936522
file ID=67 BINARY
FOUND :
--- CHECK SUM OK ---
START : 4000
LENGTH: 0fff
--- CHECK SUM OK ---
4000 04 sum=04
4001 79 sum=14
4002 48 sum=20
4003 14 sum=25
4004 79 sum=35
4005 4f sum=48
--- 中略 ---
4ffe 40 sum=d1
4fff 10 sum=d2
-----END-----
5000 ff sum=f0
-----END-----
5001 ff sum=f0
--- CHECK SUM OK ---
-----END-----
5002 ff sum=00
出来上がった bin ファイルを結合したら完成!
$ cat rom0000-0fff.bin rom1000-1fff.bin > rom.bin
外部 ROM の場合は、普通に CSAVEM で保存できます。ただ、あまり大きいサイズで保存すると、途中でオートパワーオフしたりするので、適当に細切れでやったほうがいいです。
ちなみに、外部 ROM がバンク形式のタイプは、すごい面倒臭いです。
この件は1470U のページで解説しています。
2-1) PC-1245/1251/1401 などの場合
ROMイメージは図のように、内部ROMと外部ROMを所定のアドレスに配置し、その他の部分はdummyデータで埋めるようにしてください。
1245/1251の場合、0x8000以降はなくても問題ないです。
またファイル名は、
pc1245mem.bin
という感じでつけてください。
ファイルが正しく認識されると、起動時の画面で該当機種のテキストが黒字になります。
2-2) PC-1460/1470U などの外部 ROM がバンク形式になっている場合
内部 ROM と外部 ROM の 2 ファイル構成にします。
内部ROMは、
pc1460mem.bin
として作成してください。中身は0x0000-0x1fffの部分のみ必要です。
外部ROMのバンク部分は、
pc1460bank.bin
として作成し、バンクデータをそのまま並べて配置してください。
これも同じく、正しく認識されると、起動時の画面で該当機種のテキストが黒字になります。
[参考]メモリマップ
[pc-1245/1251]
0x0000-0x1fff : internal ROM
0x4000-0x7fff : external ROM
[pc-1261/1350/1401/1402/1450]
0x0000-0x1fff : internal ROM
0x8000-0xffff : external ROM
[pc-1460/1470U]
0x0000-0x1fff : internal ROM
0x4000-0x7fff : external ROM(BANK 1460:0-3, 1470U:0-7)