このところ、機会があるたびにX68000エミュレータを触り続けていた。
これまで「エミュレータは作るもの」という感覚があった私は、世の中のエミュレータというものを触ったことがあまりない。今回、既存のエミュレータを触った事は結構な衝撃で、開発者の方々には本当に頭が上がらない!(T-T)
私自身、昨年末まで頑張ってMC68000エミュレータを開発していたが、友人の他界など気持ち的な事情もあってしばらくお休みをしていた。その間、せっかくのチャンスなのでたくさんいろいろ触ってみるかーって事で、ゲーム機で遊びまくっていた(ゲームしてたとは言わないw
開発のアプローチを変えてみる
68000CPUエミュレータの開発は、X68000のROMを読み込みつつ実行させていく事で命令を充実させていこうとしていた。開発が進むにつれてX68000の機能が動いていくので、感覚的にはとても楽しいのだ(^^)
だけどその反面、MC68000の開発をしながらX68000のハードについても調査をしていくという、単純に考えても作業量が爆発する。「この機能は対応しない」と思っていたものについても、「その部分」と気づかずに手を付けてしまってる事もあり、気がついたら中途半端に実装をしてしまっていた…なんて事も往々にあった。
X68000に対する知識が多いわけではないので、これは大変だ…と感じ始めたが後の祭り。MC68000の変なバグに見舞われてしまい、開発は停滞してしまった(T-T)
そこで…まずは68000CPUのエミュレーションに集中する事にした。
68000の命令をチェックするような、そんな都合の良いプログラムは存在しないんだろうか…と思って探してみたら…
なんと!68000CPUのテストプログラムを書いてくださっている方が居た!
Motorola 68000 Test Code – MicroCore Labs
演算結果によりフラグの変化がおかしいと実行が停止(無限ループ)するという、とても便利なものだ!これがあれば、各命令の実装が正しいのかが分かる!
本来はどう動くの?ってのも手元にX68000本体があるので試す事が可能だ。
これを利用させてもらって、まずはCPUエミュレーションの完成度を上げる事にした!
プログラムのバイナリがほしいんだ!
上記のリンクを見てみるとわかるが、大きめのテキストファイルが1つ置いてあるだけだ。
どうやらこれを実行してみれば良いらしい。
そのテキストに「Easy68K simulator」という言葉が出てくる。
……Easy68Kってなんだ?
なんとなくだけど、そのシミュレータの上で動くアセンブラ用って感じに読める。
うーん、なんとかしてこのソースをアセンブルしたバイナリを手に入れないと厳しいな…。
そう思って調べてみると、なんと都合の良い事にアセンブラも公開されてた!!
ドキュメントを見る(読んでない)限り、なんとなくLinuxまたはMacで動きそう。
さっそく手元に持ってきてビルドしてみる。
Macだとmalloc.hがないというエラーが出てしまうが、これはasm.hにある
#include <malloc.h>
をコメントアウトして対応した!
使い方もコマンドラインで操作できるのでとても簡単!
よーし!これで必要なバイナリが得られる……と思ったが甘かった(ToT)
出力ファイルがS68形式?というテキストで出力されている!
名前を見て「ああ、インテルHEX形式のモトローラ版?」とピンときた。中身を見て確信。
これは意識したことはあったけど、詳しく見たことがなかった。
そしたらなんとWikipediaにフォーマットまで詳しく書かれていた!(^^;
ホント、便利な世の中になったもんだ(^-^)
このフォーマットを解析してバイナリに変換するツールを探せば良い。
……と思ったけど、作っても大したことないなコレ…という事でさくっと作成。
今度こそ必要なバイナリが手に入った!(^-^)
さっそく実行してみるけど…
出来上がったバイナリを開発中のMC68000エミュレータに組み込んで実行してみる。
!!!
すごい、最初の1命令しか実行できてない!(^^;;
これを全部実行できるようになれば、おそらくMC68000エミュレータの完成といえるものができるんだろう。
よーし、すごいやる気になってきた!(^^)
というわけで、開発を再開したよのお知らせでした(^^;
のんびり頑張っていきます。
ではまた次回!(^-^)ノ