12 Punkte von GN⁺ 2025-02-14 | 3 Kommentare | Auf WhatsApp teilen
  • 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

 
blurblah 2025-02-17

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.

 
botplaysdice 2025-02-15

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

 
GN⁺ 2025-02-14
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.

    • Einer der Vorteile der Kompatibilität mit echten Cartridges ist, dass man sich nicht um Memory Mapper kümmern muss. Ich kenne die verschiedenen Mapper des NES, bin mir aber nicht sicher, ob GB-Cartridges auf dieselbe Weise funktionieren. Spezialhardware wie Kamera, Rumble oder sogar eine Nähmaschine dürfte mit Original-Cartridges ohne besondere Unterstützung funktionieren.
    • Falls ROM-Loading unterstützt wird, frage ich mich, ob auf dem FPGA dann alle Mapper emuliert werden müssen.
  • Danke für das tolle Projekt und den geschriebenen Artikel. Ich mag solche Dinge.

    • Als ich zuvor die Kommentare gesehen habe, war ich enttäuscht, dass es viele Reaktionen wie „Warum gibt es so etwas?“ gab. Die meisten davon haben nicht einmal 1 % eines so mutigen Projekts versucht. Dieses Projekt ist cool und eine unterhaltsame Lernerfahrung.
    • Ich habe es bei der Tipp-Hotline von Hack-A-Day eingereicht, also könnte in den nächsten Tagen ein Artikel dazu erscheinen.
  • 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 kenne den Unterschied zwischen den beiden Ansätzen, verstehe aber nicht, warum Software-Emulation nicht genauso gut sein soll wie FPGA-Emulation. Software wirkt auf mich flexibler.
  • Ich frage mich, wie hoch die Gesamtkosten für die bestückte PCB sind. Vermutlich etwa 60–70.

    • Danke für den Blogpost und den Schreibaufwand; es wäre gut, das im Repository aufzunehmen.
    • Ich versuche gerade ein ähnliches Design und plane, RP2350B und ESP32-C61 als Systemcontroller zu verwenden. Es wäre gut, einen Chip und ein Pad-Layout mit Legacy-BT-Unterstützung zu haben.
    • Eine weitere Option wäre, einen USB-Port hinzuzufügen, um etwa einen 8bitdo USB Wireless Adapter zu unterstützen. Legacy-BT-Support könnte sich als Zusatzaufwand herausstellen, der das Projekt entgleisen lässt. Man könnte auch die SPI-Verbindung intern herausführen, damit Leute ihren gewünschten Controller selbst hacken können.
  • Ich mag Open-Source-Hardware, frage mich aber, was passiert, wenn Komponenten abgekündigt werden.

    • Maintainer können zwar die Stückliste aktualisieren, aber wegen Kompatibilitätsproblemen können mehrere Alternativteile nötig sein. Wenn man gerade Teile kauft und dann nicht mehr alles verfügbar ist, was macht man dann? Eine Möglichkeit wäre, dass der Maintainer Bauteil-Kits verkauft. Allerdings könnte es dabei Probleme im Zusammenhang mit dem IP-Recht geben.
  • 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.

    • Auch Probleme mit Power-Domains treten häufig auf. Bei den meisten Geräten bestehen die IOs aus Vdd, ESD-Diode, IO-Pin, ESD-Diode und Ground. Wenn Vdd einen resistiven Pfad nach Ground hat, entstehen Probleme. Das passiert, wenn im Power-Management-IC ein Entladewiderstand am Ausgang oder ein Transistor Strom nach Ground zulässt. In diesem Fall hat der IO-Pin effektiv eine Diode parallel zu Ground. Wenn man nicht aufpasst, fließt der maximale Strom, den der Treiber liefern kann, durch die Diode.
  • 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.