NESエミュレータを作っていた。(JavaScript)
https://bit.ly/3a5R9Lq
作り始めたのはだいぶ前だったと思うが、APUデバッグがめんどくさすぎて頓挫していた。
そういえばと思って再開したら思いの外ささっとバグが取れたので割とまともに動くようになった。
作る上で参考にしたのは下記。
- Nesdev Wiki https://bit.ly/3yshCfh
- githubにある無数のNESエミュソースコード
Nesdev Wikiに書いてある内容は充実してるけど、それだけで作るのは絶対に無理だ。
githubにある先人たちの知恵を参考にする必要がある。
だから、まぁ作ったというよりは答えを見ながらポーティングしてた感覚に近い。
はっきり言ってエミュレータを作るのに一番必要な能力はプログラミング能力ではない。
そのアーキテクチャの仕様を理解する能力だ。
-----
NESを作る上でめんどくさいのは下記だと思う。
(1) CPUデバッグ
命令自体は100も無いから時間はそこまでかからないと思うが、問題は実装がある程度終わった後だ。
コードを目視してもどこが間違ってるのか絶対にわからんw
最終的には完成済の6502エミュレータを持ってきて出力を全部比べるしかないw
(2) APUデバッグ
これがまた分かりづらいんだよなぁ。
実装してみて、なんとなくそれっぽい音が出ても何が間違っているのやら...
Audacityでキャプチャして波形を見るも、細かい違いまではわからない。
最終的に波形サンプル全出力して、gnuplotで短形波や三角波を全て絵にすることになる。
あとはパフォーマンスのボトルネックも絶対にぶち当たる壁ではあると思うが
これはモニタリングするツールがあるなら何とかなるだろう。
Chromeのパフォーマンスモニタがこんな感じ↓でかなり優秀。
これを細かく見ていけば、何の関数が遅いとか割とすぐわかる。
CPU/APUに比べると、PPUは視覚的に分かりやすいからデバッグしやすいのよね。
こんなんなったらスプライトまわりなんかおかしくね?と思うし。
これだと、ミラーリングおかしくね?みたいな感じ。
-----
あとはマッパーを増やして遊べるゲームを増やしていくだけなので、いったんここで終わりだな。
次はゲームボーイを作ろうかね。
blog comments powered by