NES Emulator for Gameboy Color


img
GB で NES の曲鳴らすだけなら CPU エミュレーションできるのでは?と思い立つ。
→ NSF Player か出来る。
→ ついでに NES のゲーム本編もどうにか動かしてみたい。
→ PPU エミュレーションを書く。

ということでサブプロジェクトとして出来たポンコツ NES エミュレータです。
音が鳴るのは実証済みなので、本編がなんとなく動くだけのブツです。





■ NES Emulator for Gameboy Color

・GBNES 本体 gbnes_20251019.zip (2025.10.19版)

これは GB で NES のゲームを遊ぶためのものではなく、極大の負荷がかかるプログラムを弄って少しでも軽く動かそうという趣旨の実験作品です。
技術的デモンストレーション、あるいは盆栽のようなものです。
「使用頻度の低い機能への対応を省略して軽くする」とか「例外処理をカットして実行速度を稼ぐ」とか「命令の出現頻度を考慮して順番を並べ替える」などの
工夫を行い、NES としての再現性に難があったとしても、結果として 1 秒間 800 万サイクルのうち 4 サイクルが縮まれば大成功という世界です。

音は鳴りません(NSF Playerで実証済みなので)。

プログラム RO Mが 16KB でキャラクター ROM が 8KB のものしか動きません。いわゆるマッパー 0 (NROM-128) のものです。
スクロールしたりメモリーコントローラを積んでいるようなものも不可です。
ゲームは初期の小規模なものしか動作しないと思われます。

変換方法は以下の通り。

img

あるいはコマンドラインから下のように入力します。

img

成功すると、上の例の場合「balls.gbc」というファイルが出来上がります。
エミュレータや GBC 実機で動きます。モノクロ GB は対応していません。

添付の RGBFIX は RGBDS contributors による Open Source Software です。
Released under the MIT license


操作も一応可能で、1P 側のみ入力を取得しています。
GB だと全画面見えないのでパッドのセレクトボタン+上下左右で画面をスクロールできます。


■ ギャラリー

sample フォルダに入っている balls.nes および balls.gbc は筆者が作った NES プログラムです。
操作などは無く、単に見るだけのプログラムです。
どちらも同じように動きますが、当然 GB の方が圧倒的に遅いです。

img img

スプライトは NES は 64 個持てますが GB は 40 個なので、画面内にあるスプライトのみ表示することで対応しています。
vblank は GB の 6 回に 1 回の割合で発生させています。本当は NES の CPU サイクルをカウントして発生させたいのですが
CPU サイクルをカウントするのも相当な負荷がかかるので諦めました。

NES には有志の手で様々な CPU の実行テストプログラムが公開されています。
そのうちのひとつ、nestest.nes を実行してみた結果が以下。

img img

こちらも当初バグで NG だらけだったのですが、修正してすべて OK になりました。
V フラグの動作などをずっと勘違いしていました。



■ NES

あまりに不具合が多すぎて、高速化を頑張る以前の問題が山積みです。
市販のゲームなどはまともに動くものの方が少ないでしょう。
エミュレーション的には NSF Player の方が正式版で、こちらの NES エミュレータはかなり簡略化したバージョンになります。
速度を稼ぐために簡略化したのですが、五十歩百歩だったかも。


▲ TOP