CPU 作成中っぽい何か。


実装の前にエミュレータの資料はエミュレータ(ソース)だろうということで
ファミコンエミュレータの VirturNES と PC-88 エミュレータの QUASI88、
また「エミュレータ開発必勝本 〜君もエミュレータ製作者になれる!?〜」という解説ページも読みました。
(作ってるのはシミュレータという突っ込みは置いといて。)


CPU の実装はこんな感じという感覚は掴めた感じではあるのですが。
上記ソースはフェッチ、デコード、エクスキュートを
1バイト命令も2バイト命令も3バイト命令もプログラム的に1回で処理を済ませてしまってます。
GMC-4のステップ実行の場合、
1バイト命令は1回、2バイト命令は2回、3バイト命令は3回のステップを踏んでからエクスキュートという挙動なので
参考ソース同様に実装してしまうとステップ実行を再現できなくなります。
ユーザメモリ越えした場合の命令中断処理も必要ですし。


近い動作を行うエミュレータ、シミュレータはないものかと検索してたら
WCASL-II という COMET/CASLII シミュレータのステップ実行の動作が実装の参考になりそうに思えました。
ここまで複雑なステップは踏みませんが実装の方向性は見えてきたかもです。


フェッチ→デコードはステップ毎に必ず実行され
エクスキュートはオペコード・オペランドが全てそろったステップ時のみ実行という
状態動作を組んでしまえばステップ実行が再現できるかと。


命令の中断は、フェッチ前にユーザメモリアドレス越えか判断することで対応できそうです。


エクスキュートの中身自体は参考ソースにあったスイッチケース文を使ったコードで
実行する命令を分岐していけばよさそうですし。


CPU を組むのが初めてのことなので少し時間が掛かりそうですが
とりあえず yasuho さんのナイトライダーと自作のラーメンタイマー実働を
最初の目標にしてがんばろうと思います。