概要
- Game Boyカートリッジ の自作に挑戦した経緯と目的の説明
- RP2040マイクロコントローラ のPIO機能活用への興味
- カートリッジの基本構造 やバスの仕組みの解説
- 初心者向け に体系的な情報整理
- レトロゲーム機 としてのGame Boyの魅力や特徴の紹介
Game Boyカートリッジ自作の記録
- Allison Parrish によるGame Boyカートリッジ自作プロジェクト
- ブートレグ(非公式)カートリッジ は昔から存在し、多数のサードパーティ製やオープンソース設計も流通
- RP2040マイクロコントローラ のPIO(Programmable I/O)機能を使いたいという動機
- 数年かけて設計し、 自作カートリッジの設計を公開
- このドキュメントは 新しい研究ではなく、既存情報の整理・解説 が目的
前提知識と参考資料
- デジタルメモリの基礎知識 (バイト、アドレス、プロセッサの役割など)が必要
- 詳細はSebastian Lagueの「Exploring How Computers Work」やAll About Circuitsの該当章が参考
- マイクロプロセッサと電子部品の通信 について基本的な理解
- 16進数・2進数 の知識
- Game Boyのハードウェア概要 はRodrigo Copettiの分析記事が有用
記法・注意事項
- 16進数は0x、2進数は0b で表記
- ピン名の前にアンダースコア (_)がある場合、アクティブロー(0Vで動作)
- 💡マーク付きの段落は技術的な補足、読み飛ばし可
- ICの動作説明は 外部から見た挙動 に限定
- DMG(初代Game Boy)SoC を中心に説明
- Game Boy Pocket, Color, Advance も基本的に同様のカートリッジインターフェース
Game Boyが特別な理由
- シンプルで理解しやすい設計、学習・解析が容易
- 携帯性・省電力性 に優れる
- コピーガード・リージョンロックなし で自作ソフト開発が容易
- 豊富な技術ドキュメント・回路図 がコミュニティにより公開
- 膨大なソフトウェアライブラリ と新作ゲームの継続的リリース
- C言語やアセンブラ、ビジュアルスクリプト 等、多様な開発ツールチェーン
- 100百万台以上の普及台数、エミュレーションやFPGA実装も容易
- 低コストかつ拡張性が高いプラットフォーム
Game Boyカートリッジの基本
- 1980~90年代はソフトとハードの境界が曖昧
- Game Boy本体には OSや書き換え可能な不揮発性メモリが存在しない
- ソフトを配布するには ROM等のICを搭載したカートリッジ(ハード)を出荷 する必要
- カートリッジ独自のハードウェア拡張 (加速度センサ、RTC等)が容易
- ハードウェアが正常動作しないと本体が起動しない というリスク
カートリッジの物理構造とバス
-
カートリッジ下部の金属端子=エッジコネクタ、Game Boy本体と接続
-
ROM IC がエッジコネクタと導通
-
32ピン構成
- 電源(5V)、GND、クロック、リセット、AIN 等のピン
- 主要27ピン は以下に分類
- フロー制御ピン :_WR(書き込み)、_RD(読み出し)、_CS(チップセレクト)
- アドレスバス :A0~A15(16ビット)
- データバス :D0~D7(8ビット)
-
読み出し動作の基本
- Game Boyが _WRをHigh、_RDをLow にし、アドレスバスに読みたいアドレスをセット
- ROM ICが該当アドレスのデータをデータバスに出力
- 起動時はアドレス0x0100から命令を読み出し
バスの仕組み
- バス=複数のハードウェアが接続されたピン群
- バスに値を書き込む=各ピンにHigh(5V)またはLow(GND)をセット
- 例:アドレス0x4567の場合、A0~A15に2進数で割り当て
- 例:データ0xABの場合、D0~D7に2進数で割り当て
- High=1、Low=0 として扱う
- バスをドライブする=その時点で電圧を出力しているコンポーネント
- パラレルバス :1ビットごとにピンがあり、同時に複数ビット転送
- シリアルバス は1本の線で順次転送、パラレルは高速だが拡張性が低い
この続きや、他の技術的詳細については新たな見出しで整理可能です。