- Game Bub ist ein Open-Source-Handheld auf FPGA-Basis für Retro-Emulation und unterstützt Spiele für Game Boy, Game Boy Color und Game Boy Advance
- Es können physische Spielmodule verwendet werden, und emulierte Spiele lassen sich auch über auf einer microSD-Karte gespeicherte ROM-Dateien ausführen
- Zuvor gab es keinen bestehenden Open-Source-FPGA-Emulator, der echte Module abspielen konnte; eines der Hauptziele war es, alles selbst umzusetzen und alle Komponenten vollständig verstehen zu können
- Daher wurden das PCB selbst entworfen, die Firmware geschrieben, Game-Boy- und Game-Boy-Advance-Emulatoren für das FPGA (mit Chisel HDL) entwickelt und auch das 3D-gedruckte Gehäuse gestaltet
- Unterstützung für das Game Link Cable ermöglicht auch Multiplayer im GB- und GBA-Modus
- Enthält Funktionen wie HDMI-Ausgabe (über Dock), Vibrationsmotor und Echtzeituhr und ist so ausgelegt, dass es künftig per Software-Update erweitert werden kann
- Es basiert auf einem 6-Lagen-PCB mit Xilinx XC7A100T FPGA und ist in einem maßgefertigten 3D-gedruckten Gehäuse untergebracht
Projektziele
- Entwicklung eines eigenständigen FPGA-Handhelds mit wiederaufladbarem Akku
- Kosten und Komplexität minimieren und möglichst viele Standardbauteile verwenden
- Ausführung von Game Boy / Game Boy Color / Game Boy Advance-Spielen
- Unterstützung für physische Module und ROM-Dateien auf microSD-Karte
- Intuitive UI und In-Game-Overlay bereitstellen
- Display, Lautsprecher und Kopfhörerausgang integrieren
- HDMI-Ausgabe unterstützen
- Zukünftige Erweiterbarkeit berücksichtigen (Unterstützung weiterer Systeme, Wi‑Fi usw.)
- Eigene FPGA-Emulator-Cores entwickeln und auch Hardware sowie Treiber selbst entwerfen, um das System vollständig verstehen zu können
Sicht auf FPGA-basiertes Retro-Gaming
- Die Behauptung, „FPGA-basiertes Gaming sei genauer als Software-Emulation“, ist überzogenes Marketing
- Auch ein FPGA ist ein Emulator und arbeitet nur so exakt, wie er programmiert wurde
- Software-Emulatoren können ebenfalls eine sehr hohe Genauigkeit erreichen und sind sehr zugänglich
- Der größte Vorteil FPGA-basierter Emulatoren ist die einfache Anbindung an physische Hardware (Module, Link-Kabel usw.)
Überblick über das Hardware-Design
- FPGA + Mikrocontroller(MCU)-Architektur: Das FPGA übernimmt die Kernemulation, während die MCU UI-Verarbeitung, ROM-Laden, Stromverwaltung usw. ausführt
- Wi‑Fi- und Bluetooth-Unterstützung: Verwendung eines ESP32-S3-Moduls (Bluetooth Classic wird allerdings nicht unterstützt)
- Display: 3,5-Zoll-320x480-LCD (Spielbild kann auf die doppelte Größe skaliert werden)
- Akku und Stromverwaltung: Lithium-Ionen-Akku, TI-BQ2407x-Lade-IC und MAX17048-Fuel-Gauge-IC zur Erkennung des Ladezustands
- Audio: TLV320DAC3101-Audio-Codec für Stereo-Ausgabe und digitale Lautstärkeregelung
- Eingabegeräte: Klickende Tasten wie beim GBA SP für ein gutes Bediengefühl
- Speicher: 32 MB SDRAM zur Speicherung emulierter ROMs
- Modul- und Link-Port: Echte Module können direkt angeschlossen werden; inklusive Erkennung für den Wechsel zwischen GBA und GBC
- Weitere Funktionen: IMU (Bewegungssensor), Echtzeituhr (RTC) und Vibrationsmotor
PCB-Design und Tests
- Das PCB wurde mit KiCad entworfen
- Das FPGA (Artix-7) verwendet ein BGA-Package, daher wurde ein 6-Lagen-PCB entworfen
- Beim Test des ersten Prototyps funktionierten die meisten Funktionen korrekt, allerdings wurden einige Probleme bei der Stromverwaltung festgestellt
- Erste Tests wurden mit MicroPython durchgeführt, danach wurde die MCU-Firmware in Rust geschrieben
GUI- und Firmware-Entwicklung
- Rust-basierte GUI mit dem Slint-UI-Framework umgesetzt
- Die Aktualisierungsgeschwindigkeit des LCD wurde optimiert, und das System wurde so ausgelegt, dass das FPGA statt der MCU das Display direkt ansteuert
- Über TinyUSB wurde eine Datenübertragungsfunktion ergänzt, damit die microSD als USB Mass Storage erkannt werden kann
Hinzugefügte Unterstützung für Game Boy Advance
- Implementierung der ARM7TDMI-CPU (3-stufige Pipeline)
- GBA-Hardwarekomponenten wie PPU, DMA, Timer und Audio wurden direkt im FPGA implementiert
- Für die Unterstützung physischer Module wurde das spezielle Busprotokoll des GBA analysiert und im FPGA nachgebildet
- Unterstützung für GBA-GBA-Multiplayer und Verbindung mit dem GameCube über das Link-Kabel
Zweite Hardware-Revision
- Platine und Gehäuse wurden neu entworfen und mit einem dünneren, ergonomischeren Design versehen
- Die Position der Tasten wurde angepasst, um ein Bediengefühl ähnlich dem GBA SP zu bieten
- Der HDMI-Port wurde entfernt, stattdessen wurde ein maßgeschneidertes USB-C-Dock entwickelt, das HDMI-Ausgabe und Controller-Unterstützung ergänzt
- Das LCD-Deckglas wurde speziell angefertigt, um ein hochwertigeres Design zu erreichen
Dock-Design und HDMI-Ausgabe
- Das Dock wurde so entworfen, dass es über den USB-C-Port ein maßgeschneidertes HDMI-Signal ausgibt
- Mit einer MCU auf Basis des Raspberry Pi Pico W ist Unterstützung für drahtlose Controller möglich
- Das Dock bietet eine USB-Hub-Funktion, sodass auch kabelgebundene Controller angeschlossen werden können
Zukunftspläne und Erweiterbarkeit
- Fertigstellung des Docks und Implementierung der Unterstützung für Bluetooth-Controller
- Weitere Verbesserung der Genauigkeit des Game-Boy-Advance-Emulators mit dem Ziel, mGBA-Tests zu bestehen
- Forschung an drahtloser Link-Kabel-Emulation (Implementierung des GBA Wireless Adapter auf Wi‑Fi-Basis)
- Prüfung zusätzlicher Funktionen wie Game-Boy-IR-Kommunikation, Boktai-Sonnensensor und Unterstützung für die Game Boy Camera
Wunschliste für die Fertigung (bei möglicher Massenproduktion)
- Maßgeschneidertes LCD-Panel mit 720x480 Auflösung (3-fache Skalierung für GBA möglich)
- Spritzgussgehäuse und hochwertige Tasten
- Maßgeschneiderter Akkupack (optimierte Nutzung des Innenraums)
- Verwendung von SRAM und SDRAM auf BGA-Basis (ermöglicht ein kleineres PCB-Design)
Open Source und Referenzmaterialien
- Projektquellcode und Schaltpläne: GitHub
- Hardware-Dokumentation für Game Boy und GBA: Pan Docs, GBATEK
- Open-Source-Tools: KiCad, FreeCAD, Chisel, Verilator, Slint usw.
Zusammenfassung
- Game Bub ist nicht nur eine einfache Retro-Spielkonsole, sondern ein anspruchsvolles Projekt, das die Möglichkeiten FPGA-basierter Emulation erweitert
- Künftig sollen verschiedene Erweiterungsfunktionen hinzukommen, und das Projekt soll sich gemeinsam mit der Open-Source-Community weiterentwickeln
3 Kommentare
Solche Dinge wurden oft in Heimarbeit mit FPGA gebaut und dann nur unter Eingeweihten gehandelt, aber offenbar gab es auch Open-Source-Versionen. Ziemlich interessant.
Sie haben also sogar die CPU direkt in FPGA implementiert! Ich war neugierig, wie viele Codezeilen das sind, und habe nachgeschaut ... Anscheinend kann man FPGA nicht nur mit Verilog programmieren, sondern auch mit Scala. War überrascht, wie viel einfacher es ist, als ich gedacht hatte.
https://github.com/elipsitz/gamebub/…
Wie man so schön sagt: Die Besten unter den Nerds sind die westlichen Nerds ... haha
Hacker-News-Kommentare
Wirklich ein großartiges Projekt. Toll, dass der Blogpost so gründlich geschrieben ist. Ich habe mich gefragt, ob es sich mit dem GameCube verbinden lässt, aber das wurde im Blog bereits erwähnt.
Danke für das tolle Projekt und den geschriebenen Artikel. Ich mag solche Dinge.
Ich habe einen Analogue Pocket, aber die Tatsache, dass er FPGA verwendet, bedeutet mir nicht viel. Ich frage mich, ob es im Vergleich zu Software-Emulation wirklich einen großen Unterschied gibt.
Ich frage mich, wie hoch die Gesamtkosten für die bestückte PCB sind. Vermutlich etwa 60–70.
Ich mag Open-Source-Hardware, frage mich aber, was passiert, wenn Komponenten abgekündigt werden.
Das MISO-Problem bei Display-Controllern ist berüchtigt. Ich bin vor ein paar Jahren zum ersten Mal darauf gestoßen. Empfohlen wird, Tri-State-Buffer auf der Chip-Select-Leitung zu verwenden oder den Bus zu trennen.
Vielleicht ist das ein dummer Gedanke, weil ich keine Hardware-Erfahrung habe, aber alte Systeme wie NES, SNES und Genesis sind relativ einfach. Patente laufen auch ab. Ich frage mich, warum es keine hardwareseitige Neuentwicklung gibt, die diese Systeme über ein SoC nahezu perfekt emuliert. FPGA-Projekte scheinen dem am nächsten zu kommen, aber FPGAs sind teuer verglichen mit einem 40 Jahre alten CPU-Design und 1 KB RAM.
Tolles Projekt. Es ist wirklich cool, dass die UI mit Rust und Slint gebaut wurde. Das ist das GUI-Framework, an dem ich arbeite.
Fantastisch. Ich weiß nicht, ob erklärt wurde, warum das vertikale Layout gewählt wurde. Im bestehenden FPGA-Bereich ist sonst alles im GBC-Stil. Ich frage mich, ob das einfach persönlicher Geschmack ist oder ob es einen anderen Grund gibt.
Ausgezeichneter Artikel. Ich interessiere mich nicht für Gaming-Handhelds, aber ich finde die aktuellen Designentscheidungen bei Display, Gehäuse, Batterieversorgung und Konnektivität immer interessant. Die Integration von Pico W ist gut. Das ist eines der in den letzten Jahren unterschätzten Entwicklungsfelder. Danke fürs Teilen.