radare2で一応逆アセンブルできるとはいえ、時々おかしなコードを逆アセンブルしてしまう問題は残っている。
今回は、有名なエミュレータMAMEで68000のCPU(MPU)エミュレータとしても使われている、信頼性の高いシミュレータMusashiを使って、SORD M68MXのBIOSをふんわり動かしてみた。
まず、BIOSの先頭は0xe00000となっているので、ファイルの先頭に0x0を挿入する。
head -c 14680064 /dev/zero > zero.bin
14680064は0xe00000の10進数表記。
cat bios.bin >> zero.bin
cp zero.bin bios_offset.bin
とかしてみた。このファイルの先頭に、リセットベクターの8バイトを書き込んでおく(bios.binの先頭8バイトをバイナリエディタでコピーするだけ)。
次に、Musashiのexampleディレクトリのsim.cの以下の部分を修正する。これは適当。ちゃんとROMとRAMのサイズを調べるべき。しかし、これでもふんわりとは動かせる。
更に、main関数内でコメントアウトされている以下の一行を解除する。
これで、実行しているコードが出力される。makeして終了。
実行すると猛烈な勢いでコードが出力されるので、ログにとっておいてあとで確認する。
68000シミュレータMusashiは非常に高速で正確なシミュレータであることが分かった。もっともハマったのは、MusashiがROMやRAMの先頭アドレスという概念がない点。これに気付かずにコード中を探し回ってしまった。実アドレスと同じようにROMとRAMを並べてあげる必要がある。
また、先頭に0x0を入れたbios_offset.binをradare2に読ませたら、気持ち正確なコードを吐くようになった気がする。