以前ファミコンのエミュを書きたいといってROMを読んだ記事を書いた。
e-tipsmemo.hatenablog.com
コミットログを見ると始めてから2か月というところで、
giko00x.nesが動かないが、Donky kongがバグりつつ動いてくれたりと躓いているので。
かわりに雑記を書いていく。
ピーチが欠けている。スプライトが透過していない。など。
方針
ファミコンのエミュレータを製作するとはいっても、すでに多くの人たちが、多くの言語で実装を行っており、
NES emulator [言語]で調べると、日本語・英語で豊富な情報が得られる。
それらの実装ではほとんどが、クロックサイクルを内部でカウントし、実機のものと同じサイクルになったら処理を実行するといったものが多い。
しかし今回は、あるサイトを参考に別の方針でいくことにした。
I made a NES emulator in Rust using generators | ~kylewlacy
ファミコンのRust実装もいくつか見つけたが、
その中でも、このサイトではGeneratorというnightly機能を使用することによって、
タイミングを合わせることが非常に簡単である。(と書いてある)
generators - The Rust Unstable Book
そして、どのNESエミュレータもRom読み込み、CPU実装から始まり、
nestestのCPUテストをクリアしてppuへ。。といった手順を踏んでいる。
NES構成
参考サイトやTD4の反省をもとに
NES以下にCPU、RAM、PPU、Casetteがある。
Casetteは以前作ったものをcrateで利用している。
参考サイト
ファミコンエミュレータの創り方 - Hello, World!編 - - Qiita
opcodes and addressing modes – the 6502 – [ emudev ]
NES on FPGA +そんなベタなファミコンはイヤだ!+
NES研究室
次はCPU周りの実装時の記憶をもとに記事を書くつもり