Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GAMEBOYエミュレータ
Search
Daiki Matsunaga
December 10, 2017
Programming
0
130
GAMEBOYエミュレータ
Daiki Matsunaga
December 10, 2017
Tweet
Share
More Decks by Daiki Matsunaga
See All by Daiki Matsunaga
8日で作るオレオレRISC-V CPU
matsud224
3
2.2k
Satyrographos Package Indexの宣伝
matsud224
0
220
Prolog
matsud224
1
160
オレオレ言語 soramame の紹介
matsud224
0
110
Other Decks in Programming
See All in Programming
CSC307 Lecture 01
javiergs
PRO
0
690
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
7.4k
dchart: charts from deck markup
ajstarks
3
990
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
並行開発のためのコードレビュー
miyukiw
0
180
今から始めるClaude Code超入門
448jp
8
8.8k
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
220
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
180
360° Signals in Angular: Signal Forms with SignalStore & Resources @ngLondon 01/2026
manfredsteyer
PRO
0
130
高速開発のためのコード整理術
sutetotanuki
1
400
Oxlintはいいぞ
yug1224
5
1.3k
Featured
See All Featured
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
130
Information Architects: The Missing Link in Design Systems
soysaucechin
0
780
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
180
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Amusing Abliteration
ianozsvald
0
100
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
How to build a perfect <img>
jonoalderson
1
4.9k
Discover your Explorer Soul
emna__ayadi
2
1.1k
Transcript
1/19 GAMEBOY エミュレータ
2/19 エミュレータ • ハードウェアの動作を模倣するソフトウェアのこと • GAMEBOY のエミュレータを作った – PC 上で
GAMEBOY のソフトを遊べる – C 言語で書いた – SDL( マルチメディアライブラリ ) を使った
3/19 何をエミュレーションすればいい? カートリッジ カートリッジ ゲームパッド ゲームパッド シリアル通信 (通信ケーブル) シリアル通信 (通信ケーブル)
サウンド サウンド CPU CPU LCD LCD 内蔵メモリ 内蔵メモリ
4/19 CPU • CPU がないことにはどうにもならないので最初に実装 • シャープ LR35902 というカスタム CPU
– 8bit CPU – Clock Speed: 4.194304MHz – Intel8080 や Z80 に近い命令セット – GBA は ARM7 と LR35902 、 DS は ARM9 と ARM7 • 命令を取り出し巨大 switch 文で命令によって分岐・実行、 それを繰り返す – 割り込みチェックやクロック数のカウントも
5/19 カートリッジ
6/19 カートリッジ • ROM (ゲームのデータ) – 吸出し機を使うか、フリーの ROM を入手してくる •
RAM (セーブデータ) – エミュレータでは、ファイルに書き出す • MBC (メモリバンクコントローラ) – カートリッジメモリへのアクセスを制御する – 数種類あり、扱える最大メモリ容量やリアルタイムクロック対 応、振動パック対応等の違いがある – カートリッジ側の回路だがこれもエミュレーションしないといけ ない
7/19 メモリ • メモリがないことにはどうにもならない • 16bit アドレス空間 (64KB) に内蔵メモリ ,
カートリッジ側メモリ ,I/O レジスタ等をマッピング – メモリアクセスのための関数を用意し、アドレスによってアクセ ス先を変える。 – I/O レジスタへのアクセスならデバイスのエミュレーションを行 う。 • ドラクエの ROM は 2MB もある! – MBC により、アクセスする範囲を選択 ( バンク切り替え )
8/19 カートリッジ ROM 16bit メモリ空間 VRAM カートリッジ RAM WRAM OAM
I/O レジスタ スタック領域 MBC が制御 0000 FFFF 0000
9/19 LCD • LCD がないと動いているのか分からない • モノクロ(4階調) • 背景・ウィンドウ・スプライトが順に重なる •
VRAM 上に 8 x 8dot のタイルデータ • VRAM 上のマップデータを見ながら、タイルを敷き詰める • OAM にはスプライトの位置や向きの情報 • 60fps になるよう時間調整 – CPU の速度調節になる
10/19 LCD を実装した
11/19 ゲームパッド • ゲームパッドがないと START ボタンを押せない • ジョイスティックにも対応( SDL を使うと超簡単)
12/19 遊べる
13/19 サウンド • GB 音源は、矩形波 2ch と波形メモリ 1ch とノイズ 1ch
• 主な機能 – 波の周波数 , 長さ , 音量 , デューティ比の変更 – 音量増減 ( エンベロープ ) – 周波数増減 ( スイープ ) – ノイズ : 線形帰還シフトレジスタによる擬似乱数 • 様々なバリエーションの音が出せる • ニコニコ大百科『 GB 音源』が詳しい
14/19 デバッグ
15/19 シリアル通信(通信ケーブル) • 懐かしの通信ケーブル → ネットワーク対戦! • 現状 (T_T)
16/19 ゲームボーイカラー対応 • ゲームボーイ(モノクロ)からの主な変更点 – カラー LCD – 内蔵メモリ (VRAM,WRAM)
の増加 – DMAC の追加 – CPU 倍速モード – 赤外線通信
17/19 カラー対応
18/19 感想 • 資料を読んでひたすら実装する、体力勝負。 • プログラム自体は単純( GB 自体がそれほど複雑なハード でない。 CPU
も遅いので普通に書いても 60fps 出る。) • バグ取りに苦労した。特に CPU にバグが残っているうちは 大変。 • CPU とメモリ周りの実装は量が多い割に結果が目に見えな いので辛い。 • タイトル画面が出ると嬉しい。音が鳴ると嬉しい。 • 低レイヤも面白い。
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