ROMイメージの作り方

ROMイメージファイルの作り方に対して問い合わせが来ることが多いので、説明ページを作りました。

1. ROMの吸い出し方法

2. ROMイメージファイルのフォーマット 

 


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. ROMイメージファイルのフォーマット

 

 

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)