Rust Nes

Posted on Apr 14, 2024

RustでNes Emulatorをやってみた。

2023年の10月頃から取り組んでて途中挫折しながらもなんとかスーパーマリオを動かせるところまでできたのでここに記しておく。

もともとはWriting NES Emulator in Rustを見つけて興味を持ったのが始まり。 CPU実装までは読みながら特に躓くことなく進めて一通り書いてあることは実装できた。 ただ、この記事自体は導入編みたいなもので、基本となるものだけを実装しているためppuあたりで色々と足りない機能がでてきた。 自分としてはそこは完璧にしたい気持ちもあり、NesDevなどを参考にしながら自分なりに進めた。 特にスクロールまわりは自分だけだとまだ知識が足りなかったこともあり、ChatGPTの力を借りながら協力して進めた。

成果物はこちら

2024年04月14日 18:04:18 JST

記事だとnmi時に画面を描画する実装になっていたが、スクロールとかだとそこまで影響ないがspriteの0ヒットに対応するには どうしてもラインごとで描画しないとnmi時にspriteの0ヒットがリセットされてしまって上手に描画できない問題があった。 毎回ラインごとに描画を行うとパフォーマンス的に悪くなって動作がもたつくので8ラインごとに描画することでそこはfps値を保ったままにしている。

成果物とおり、まだAPUやMapper実装はしていないのでこれからやっていきたい。 一定量スクロールした後も画面がチラつくのでそこも直したい。 コードは公開されているのでyoutubeのコメントやsnsなどでフィードバックをもらえると嬉しい🙏