tunozemichanの日記 / tunozemichan's diary

SORD社のコンピューターM68やM68MXの解析についての備忘録です。This blog is a memorandum about the analysis of SORD's computers M68 and M68MX.

68000シミュレーターMusashiで、SORD M68MXのBIOSをふんわり動かしてみる。

radare2で一応逆アセンブルできるとはいえ、時々おかしなコードを逆アセンブルしてしまう問題は残っている。

 

今回は、有名なエミュレータMAMEで68000のCPU(MPU)エミュレータとしても使われている、信頼性の高いシミュレータMusashiを使って、SORD M68MXのBIOSをふんわり動かしてみた。

 

まず、BIOSの先頭は0xe00000となっているので、ファイルの先頭に0x0を挿入する。

 

head -c 14680064 /dev/zero > zero.bin

 

14680064は0xe00000の10進数表記。

 

これをBIOSファイルbios.binの先頭に入れる。

 

cat bios.bin >> zero.bin

cp zero.bin bios_offset.bin

 

とかしてみた。このファイルの先頭に、リセットベクターの8バイトを書き込んでおく(bios.binの先頭8バイトをバイナリエディタでコピーするだけ)。

 

次に、Musashiのexampleディレクトリのsim.cの以下の部分を修正する。これは適当。ちゃんとROMとRAMのサイズを調べるべき。しかし、これでもふんわりとは動かせる。

 

/* ROM and RAM sizes */
#define MAX_ROM 0xffffff
#define MAX_RAM 0xffffff

更に、main関数内でコメントアウトされている以下の一行を解除する。

    disassemble_program();

これで、実行しているコードが出力される。makeして終了。

 

実行すると猛烈な勢いでコードが出力されるので、ログにとっておいてあとで確認する。

 

68000シミュレータMusashiは非常に高速で正確なシミュレータであることが分かった。もっともハマったのは、MusashiがROMやRAMの先頭アドレスという概念がない点。これに気付かずにコード中を探し回ってしまった。実アドレスと同じようにROMとRAMを並べてあげる必要がある。

また、先頭に0x0を入れたbios_offset.binをradare2に読ませたら、気持ち正確なコードを吐くようになった気がする。