- Game Bubは、オープンソースのFPGAベースのレトロエミュレーション携帯機で、"Game Boy, Game Boy Color, Game Boy Advance" のゲームに対応
- 物理的なゲームカートリッジを使用でき、microSDカードに保存されたROMファイルによるエミュレートゲームの実行も可能
- このように実カートリッジを再生できる既存のオープンソースFPGAエミュレータは存在せず、主な目標の1つは、すべての作業を自分で行い、すべての構成要素を理解できるようにすること
- そのため、自らPCBを設計し、ファームウェアを作成し、FPGA向けのGame BoyおよびGame Boy Advanceエミュレータ(Chisel HDL使用)を実装し、3Dプリントケースも設計
- Game Link Cableに対応し、GBおよびGBAモードでマルチプレイも可能
- HDMI出力(ドック使用時)、振動モーター、リアルタイムクロックなどの機能を含み、将来のソフトウェアアップデートで拡張できるよう設計
- Xilinx XC7A100T FPGAを搭載した6層PCBをベースに、カスタム3Dプリント製エンクロージャに収められている
プロジェクトの目標
- 独立した充電式バッテリー駆動のFPGA携帯機を作ること
- コストと複雑さを最小限に抑え、可能な限り市販部品を使用
- Game Boy / Game Boy Color / Game Boy Advance のゲームを実行可能
- 物理カートリッジおよびmicroSDカード上のROMファイルに対応
- 直感的なUIとゲーム内オーバーレイを提供
- ディスプレイ、スピーカー、ヘッドホン出力を統合
- HDMI出力に対応
- 将来的な拡張性を考慮(ほかのシステム対応、Wi‑Fiなど)
- FPGAエミュレータコアを自ら開発し、ハードウェアやドライバも自ら設計することで、システム全体を完全に理解できるようにする
FPGAベースのレトロゲーミングに対する見解
- 「FPGAベースのゲーミングはソフトウェアエミュレーションより正確だ」という主張は誇張されたマーケティングである
- FPGAもまたエミュレータであり、プログラムされた範囲でしか正確に動作しない
- ソフトウェアエミュレータも非常に高い精度を持ち得て、アクセス性にも優れる
- FPGAベースのエミュレータの最大の利点は、物理ハードウェア(カートリッジ、リンクケーブルなど)と容易に接続できる点にある
ハードウェア設計の概要
- FPGA + マイクロコントローラ(MCU)構成: FPGAが中核のエミュレーションを担当し、MCUがUI処理、ROM読み込み、電源管理などを担当
- Wi‑FiおよびBluetooth対応: ESP32-S3モジュールを使用(ただしBluetooth Classicには非対応)
- ディスプレイ: 3.5インチ 320x480 LCD(ゲーム画面を2倍拡大可能)
- バッテリーおよび電源管理: リチウムイオンバッテリー、TI BQ2407x充電ICを使用し、電源状態確認用にMAX17048燃料ゲージICも搭載
- オーディオ: TLV320DAC3101オーディオコーデックを使用し、ステレオ出力とデジタル音量調整に対応
- 入力デバイス: GBA SPで使われたクリック感のあるボタンを採用し、良好な操作感を提供
- メモリ: 32MB SDRAMを使用してエミュレートされたROMを保存
- カートリッジおよびリンクポート: 実カートリッジを直接接続でき、GBA/GBC切り替え検出機能も搭載
- その他の機能: IMU(モーションセンサー)、リアルタイムクロック(RTC)、振動モーターを搭載
PCB設計とテスト
- KiCadを使用してPCBを設計
- FPGA(Artix-7)はBGAパッケージを採用し、6層PCBとして設計
- 初回プロトタイプのテストではほとんどの機能が正常に動作し、一部の電源管理上の問題が見つかった
- MicroPythonで初期テストを行った後、RustでMCUファームウェアを実装
GUIとファームウェア開発
- Slint UIフレームワークを用いて、RustベースのGUIを実装
- LCD更新速度を最適化し、MCUではなくFPGAが直接ディスプレイを駆動するよう設計
- microSDをUSB Mass Storageとして認識できるよう、TinyUSBによるデータ転送機能を追加
Game Boy Advance対応の追加
- ARM7TDMI CPUを実装(3段パイプライン構成)
- PPU、DMA、タイマー、オーディオなど、GBAのハードウェア構成要素をFPGA上で直接実装
- 物理カートリッジ対応のため、GBAの特殊なバスプロトコルを解析し、FPGA上で再現
- リンクケーブルを使ったGBA-GBAマルチプレイおよびGameCube接続に対応
第2世代ハードウェア改訂版
- 基板とエンクロージャを新たに設計し、より薄く人間工学的なデザインを採用
- ボタン位置を調整し、GBA SPに近い操作感を提供
- HDMIポートを取り除き、USB-Cベースの専用ドックを設計してHDMI出力とコントローラ対応を追加
- LCDカバーガラスをカスタム製作し、より高級感のあるデザインを実現
ドック設計とHDMI出力
- USB-Cポート経由でカスタムHDMI信号を出力する方式でドックを設計
- Raspberry Pi Pico WベースのMCUを使用し、無線コントローラ対応を実現可能
- ドック側でUSBハブ機能を提供し、有線コントローラも接続可能
今後の計画と拡張可能性
- ドックの完成およびBluetoothコントローラ対応の実装
- Game Boy Advanceエミュレータの精度をさらに改善し、mGBAテスト通過を目標
- 無線リンクケーブルエミュレーション(Wi‑FiベースのGBA Wireless Adapter実装)の研究
- Game BoyのIR通信、Boktaiの太陽センサー、Game Boy Cameraなどの追加機能対応を検討
製作希望リスト(量産可能な場合)
- 720x480解像度のカスタムLCDパネル(GBAを3倍拡大可能)
- 射出成形エンクロージャと高品質ボタン
- カスタムバッテリーパック(内部空間効率を最適化)
- BGAベースのSRAMおよびSDRAMの採用(より小型のPCB設計が可能)
オープンソースと参考資料
- プロジェクトのソースコードおよび回路図: GitHub
- Game BoyおよびGBAハードウェア文書: Pan Docs, GBATEK
- オープンソースツール: KiCad, FreeCAD, Chisel, Verilator, Slint など
まとめ
- Game Bubは単なるレトロゲーム機ではなく、FPGAベースのエミュレーションの可能性を広げる挑戦的なプロジェクトである
- 今後もさまざまな拡張機能を追加しつつ、オープンソースコミュニティとともに発展していく計画
3件のコメント
家内制手工業のような形でFPGA製のものを知る人同士だけで取引したりもしていましたが、オープンソースのものもあったんですね。面白いです
FPGAでCPUまで直接実装したんですね! コード行数が気になって調べてみたら……Verilogみたいなものではなく、ScalaでFPGAコーディングができるみたいです。思ったよりシンプルで驚きました。
https://github.com/elipsitz/gamebub/…
オタクの中のオタクはやっぱり海外オタクだというけれど……(笑)
Hacker Newsのコメント
本当に素晴らしいプロジェクト。ブログ記事も非常に丁寧に書かれていて良かった。GameCubeと接続できるのか気になったが、すでにブログで触れられていた
素晴らしいプロジェクトと記事をありがとう。こういうものが大好き
Analogue Pocketを持っているが、FPGAを使っているという事実自体は自分にとってあまり大きな意味を持たない。ソフトウェアエミュレーションと比べて本当に大きな違いがあるのか気になる
部品実装済みPCBの総コストがいくらなのか気になる。たぶん60〜70くらいだと思う
オープンソースハードウェアは好きだが、部品が生産終了になったらどうなるのか考えてしまう
ディスプレイコントローラのMISO問題は悪名高い。数年前に初めて遭遇した。チップセレクト線にトライステートバッファを使うか、バスを分離するのが推奨される
ハードウェアの経験がないので的外れな考えかもしれないが、NES、SNES、Genesisのような古いシステムは比較的単純。特許にも有効期限がある。SoCによってシステムをほぼ完璧にエミュレートするハードウェアの再実装がなぜ存在しないのか気になる。FPGAプロジェクトがそれに最も近いように見えるが、FPGAは40年前のCPU設計や1kbのRAMに比べると高価だ
素晴らしいプロジェクト。UIがRustとSlintで構築されているのが本当にいい。自分が取り組んでいるGUIフレームワークだ
素晴らしい。縦レイアウトを選んだ理由が説明されていたか分からない。既存のFPGA界隈ではみんなGBCスタイルだ。単なる個人的な好みなのか、それとも別の理由があるのか気になる
素晴らしい記事。ゲーム用ハンドヘルドには関心がないが、ディスプレイ、筐体、バッテリー駆動、接続性に関する現在の設計判断にはいつも興味がある。Pico Wの統合は良い。ここ数年で過小評価されている開発要素の1つだ。共有してくれてありがとう