NES(Nintendo Entertainment System) のエミュレータを Swift 4.2 で作成していく様子を記録するページです。
Swift で書かれた NES Emulator なので StNesEmu です。
GitHub
StNesEmu
LastUpdate
KeyPad
作成する NES Emulator について
今回はスクラッチから始めるのではなく JavaScript で書かれたものを Swift 4 に移植するかたちになります。基本的にオブジェクトやファイルの構成は同じにして、Swift で楽に書ける部分は Swift で楽をしていくようにします。とは言っても Swift の勉強も兼ねた移植なので難しいことはできません。
描画、音、キー入力などの UI 部分は、OS に依存する部分なので macOS に合わせたコードを独自に書くことになります。
開発環境
- iMac mid 2010
- macOS High Sierra 10.13.6
- Xcode 9.4.1
iMac が 8年も前の古いものなので High Sierra & Xcode 9.4.1 での開発になります。
一応 Mojave & Xcode 10.1 の入った MacBook Air でも動作確認しています。
参考にしたサイト
- bokuweb/flownes
オリジナルの JavaScript で書かれた NES Emulator です。コード量も少なくて読みやすいです。 - ファミコンエミュレータの創り方 - Hello, World!編 –
flownes を作った方が Qiita で書いた解説文です。PPU のコードを読む時に助かりました。 - NES 研究室
PPU の理解に助かりました。NesDev の PPU の部分の訳なのかな? - ギコ猫でもわかるファミコンプログラミング
このサイトでサンプルとして作成しているアプリをテスト用に使いました。アセンブラのコードと .nes ファイルが手に入るのでエミュレータの動作確認に役立ちます。 - NesDev
とにかく膨大な量の NES の技術資料があります。英語の情報なので全て読むのは辛いですが、PPU の詳細を確認するためにお世話になりました。
予定
以下の予定でアップデートしていくつもりです。
- Parser/Cartridge/ROM/RAMなど
- Nes/BUS/Interrupt
- 6502 CPU-1
- CPU-2 ステップ動作とテスト
- PPU/DMA/Renderer
- PPU-2/DMA
- PPU-3
- KeyPad
- Sound
週一でアップデートしたとして今年中には終わらないか…