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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Daiki Matsunaga
December 10, 2017
Programming
160
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GAMEBOYエミュレータ
Daiki Matsunaga
December 10, 2017
More Decks by Daiki Matsunaga
See All by Daiki Matsunaga
8日で作るオレオレRISC-V CPU
matsud224
3
2.3k
Satyrographos Package Indexの宣伝
matsud224
0
230
Prolog
matsud224
1
180
オレオレ言語 soramame の紹介
matsud224
0
130
Other Decks in Programming
See All in Programming
Claspは野良GASの夢をみるか
takter00
0
210
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
200
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
150
AIで効率化できた業務・日常
ochtum
0
140
はてなアカウント基盤 State of the Union
cockscomb
0
390
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
170
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
13
6.2k
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
130
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.5k
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
280
さぁV100、メモリをお食べ・・・
nilpe
0
150
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
160
Featured
See All Featured
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
850
Visualization
eitanlees
152
17k
Designing for humans not robots
tammielis
254
26k
GraphQLとの向き合い方2022年版
quramy
50
15k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
180
Deep Space Network (abreviated)
tonyrice
0
210
Java REST API Framework Comparison - PWX 2021
mraible
34
9.4k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
How to build a perfect <img>
jonoalderson
1
5.7k
Accessibility Awareness
sabderemane
1
140
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
950
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