Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GAMEBOYエミュレータ

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

 GAMEBOYエミュレータ

Avatar for Daiki Matsunaga

Daiki Matsunaga

December 10, 2017
Tweet

More Decks by Daiki Matsunaga

Other Decks in Programming

Transcript

  1. 2/19 エミュレータ • ハードウェアの動作を模倣するソフトウェアのこと • GAMEBOY のエミュレータを作った – PC 上で

    GAMEBOY のソフトを遊べる – C 言語で書いた – SDL( マルチメディアライブラリ ) を使った
  2. 4/19 CPU • CPU がないことにはどうにもならないので最初に実装 • シャープ LR35902 というカスタム CPU

    – 8bit CPU – Clock Speed: 4.194304MHz – Intel8080 や Z80 に近い命令セット – GBA は ARM7 と LR35902 、 DS は ARM9 と ARM7 • 命令を取り出し巨大 switch 文で命令によって分岐・実行、 それを繰り返す – 割り込みチェックやクロック数のカウントも
  3. 6/19 カートリッジ • ROM (ゲームのデータ) – 吸出し機を使うか、フリーの ROM を入手してくる •

    RAM (セーブデータ) – エミュレータでは、ファイルに書き出す • MBC (メモリバンクコントローラ) – カートリッジメモリへのアクセスを制御する – 数種類あり、扱える最大メモリ容量やリアルタイムクロック対 応、振動パック対応等の違いがある – カートリッジ側の回路だがこれもエミュレーションしないといけ ない
  4. 7/19 メモリ • メモリがないことにはどうにもならない • 16bit アドレス空間 (64KB) に内蔵メモリ ,

    カートリッジ側メモリ ,I/O レジスタ等をマッピング – メモリアクセスのための関数を用意し、アドレスによってアクセ ス先を変える。 – I/O レジスタへのアクセスならデバイスのエミュレーションを行 う。 • ドラクエの ROM は 2MB もある! – MBC により、アクセスする範囲を選択 ( バンク切り替え )
  5. 8/19 カートリッジ ROM 16bit メモリ空間 VRAM カートリッジ RAM WRAM OAM

    I/O レジスタ スタック領域 MBC が制御 0000 FFFF 0000
  6. 9/19 LCD • LCD がないと動いているのか分からない • モノクロ(4階調) • 背景・ウィンドウ・スプライトが順に重なる •

    VRAM 上に 8 x 8dot のタイルデータ • VRAM 上のマップデータを見ながら、タイルを敷き詰める • OAM にはスプライトの位置や向きの情報 • 60fps になるよう時間調整 – CPU の速度調節になる
  7. 13/19 サウンド • GB 音源は、矩形波 2ch と波形メモリ 1ch とノイズ 1ch

    • 主な機能 – 波の周波数 , 長さ , 音量 , デューティ比の変更 – 音量増減 ( エンベロープ ) – 周波数増減 ( スイープ ) – ノイズ : 線形帰還シフトレジスタによる擬似乱数 • 様々なバリエーションの音が出せる • ニコニコ大百科『 GB 音源』が詳しい
  8. 18/19 感想 • 資料を読んでひたすら実装する、体力勝負。 • プログラム自体は単純( GB 自体がそれほど複雑なハード でない。 CPU

    も遅いので普通に書いても 60fps 出る。) • バグ取りに苦労した。特に CPU にバグが残っているうちは 大変。 • CPU とメモリ周りの実装は量が多い割に結果が目に見えな いので辛い。 • タイトル画面が出ると嬉しい。音が鳴ると嬉しい。 • 低レイヤも面白い。
  9. 19/19 参考資料 • Pan Docs (http://gbdev.gg8.se/wiki/articles/Pan_Docs) • いまさら聞けないゲームボーイ (Internet Archive)

    • Gameboy Programming Manual Ver 1.1 • Gameboy™ CPU Manual • ソースコードは Github で公開しています – https://github.com/matsud224/gb_emu