This page is writen in both English and Japanese. Each paragraph is written twice for the two langages.

日本語ページと英語ページを書くのは面倒なのでまとめちゃってます。 読みにくくてすみません。

Extracting ROM Data (ROM吸い出し)

In this docment, I show how to extract ROM data of the old sharp pocket computers. I will employ PC-1251 as an example.

シャープのSC61860ポケコンのROM吸い出し方法を説明します。 以下の例は PC-1251 を使っています。PC-1245だともっと面倒臭くて PC-1255だともっと楽ちんです。

Inner ROM (0x0000-0x1fff) (内部ROM)

Inner ROM is not accessible directly. It is necessary to use the special instruction (known as RST, DATA or MVWP). Here is a simple data moving program, memmove.s. Its dump list is as follows.

ESR-Hアーキテクチャの内部ROMは直接読み出せません。 0x35(MVWP) という命令を使う必要があります。 内部ROMデータを外部ROMに移動する 簡単なmemmove.sというツールを 作ってみましたので以下を参考にご利用ください。

c100 : 00 03 10 c1 40 84 18 07 : b7
c108 : 02 03 34 02 ff 34 00 01 : 6f
c110 : 82 13 04 08 90 35 90 db : d1
c118 : 04 26 2f 0d 2f 12 37 

The 03 of 0xc109 is data length. 03 means (3+1)*0x100=0x400. It is the maximum value for PC-1245. In case of PC-1251, 07 may be more convenient.

上記ダンプリストの0xc109番地の0x03が移動するデータ長です。 03だと0x400バイト(PC-1245で可能な設定)ですが、PC-1251の場合 もう少しまとめて転送した方が楽できるので7にしましょう。 (PC-1255だったらさらに倍の15も行けます。)

POKE &C109,7

Now, we are ready to extracting the inner ROM performing the following procedure.

準備完了なので、以下の手順で転送して、音声として保存しましょう。 内部ROMは8KBで、一回に0x800バイト転送するので4回繰り返す 必要があります。

POKE &C140,&00,&00,&80,&B8   (Copy [0x0000,0x07ff] to [0xb880,0xc07f])
CALL &C100
CSAVEM &B880,&C07F           (Save it as "mem0000_07ff.wav")

POKE &C140,&00,&08
CALL &C100
CSAVEM &B880,&C07F           (Save it as "mem0800_0fff.wav")

POKE &C140,&00,&10
CALL &C100
CSAVEM &B880,&C07F           (Save it as "mem1000_17ff.wav")

POKE &C140,&00,&18
CALL &C100
CSAVEM &B880,&C07F           (Save it as "mem1800_1fff.wav")

Then, use cload.pl to decode as binary.

そしたらwavファイルを拙作の cload.pl にかけて生バイナリを抽出してください。

$ perl cload.pl -old -o mem0000_07ff.bin mem0000_07ff.wav
$ perl cload.pl -old -o mem0800_0fff.bin mem0800_0fff.wav
$ perl cload.pl -old -o mem1000_17ff.bin mem1000_17ff.wav
$ perl cload.pl -old -o mem1800_1fff.bin mem1800_1fff.wav

Outer ROM (0x2000-) (外部ROM)

Outer ROM is quite easy to extract. Simply CSAVEM the target area and process it with cload.pl. Notice that you should not save whole the data at once. Your pocket-com may fall into asleep while saving because of the auto power off function!

外部ROMは何も考えずCSAVEM して cload.pl. すればおっけーです。でもあまり欲張って 一気にやろうとすると途中でまさかのオートパワオフしちゃうので 適当に細切れにした方が無難です。

CSAVEM &2000,&4FFF           (Save it as "mem2000_4fff.wav")
CSAVEM &5000,&7FFF           (Save it as "mem5000_7fff.wav")
$ perl cload.pl -old -o mem2000_4fff.bin mem2000_4fff.wav
$ perl cload.pl -old -o mem5000_7fff.bin mem5000_7fff.wav

Concatenating them (できあがり)

Finally, concatenate them into a file. In case of PC-1245, 1250, 1251 and 1255, 0x0000-0x7fff is enough for POEMS/Pokemun.

仕上げはバイナリを繋げるだけです。PC-1245〜55の場合は0x0000から0x7fffまで あれば十分です。

cat mem0000_07ff.bin mem0800_0fff.bin mem1000_17ff.bin mem1800_1fff.bin
mem2000_4fff.bin mem5000_7fff.bin > pc1251mem.bin

Copyright 2003 by こばやしひろゆき

hkoba@ctrl.titech.ac.jp