週末なので、趣味のプロジェクトを書いて 1 週間のプログラミングから解放されます。
昨日、MOS 6502 CPU エミュレータのフレームワークを書きました。レジスタ、スタック、メモリ、およびすべてのオペコードが実装されています。(以下ソースへのリンク)
私が書いたデバッガーで一連の操作を手動で実行することはできますが、NES ROM をロードして、プログラム カウンターをその命令に合わせたいだけです。これが欠陥のあるオペコードを見つけるための最速の方法であると考えました。
簡単な NES rom ローダーを作成し、ROM バンクを CPU メモリにロードしました。
問題は、オペコードがどのようにエンコードされているかがわからないことです。オペコード自体は、オペコードを一意に識別するオペコードごとに 1 バイトのパターンに従うことを知っています。
0 - BRK
1 - ORA (D,X)
2 - COP b
等
ただし、オペコード引数がどこにあるのかわかりません。直後のバイトですか?絶対メモリでは、バイトではなくショートかもしれないと思います。
このCPUのメモリモデルに精通している人はいますか?
編集:これはおそらく暗闇で撮影されていることを認識していますが、古い学校のアップルとコモドールのハッカーがここに潜んでいることを望んでいました.
編集:ご協力いただきありがとうございます。各操作を調整するための適切な変更を実装した後、CPU はマリオ ブラザーズをロードして実行できます。開始を待ってループする以外は何もしませんが、それは良い兆候です:)
ソースをアップロードしました:
https://archive.codeplex.com/?p=cpu6502
エミュレーターがどのように機能するのか疑問に思ったことがある人なら、理解するのは非常に簡単です。少なくとも最適化されていませんが、2.4 GHz マシンで 2 MHz で動作する CPU をエミュレートしています :)