- Game Bub es una consola portátil de emulación retro basada en FPGA y de código abierto, compatible con juegos de "Game Boy, Game Boy Color y Game Boy Advance"
- Puede usar cartuchos físicos y también ejecutar juegos emulados mediante archivos ROM almacenados en una tarjeta microSD
- No existían emuladores FPGA de código abierto previos que pudieran reproducir cartuchos reales de esta forma, y uno de los objetivos principales fue hacer todo el trabajo directamente y entender todos los componentes
- Por eso, se diseñó la PCB, se escribió el firmware, se desarrollaron los emuladores de Game Boy y Game Boy Advance para FPGA (usando Chisel HDL) y también se diseñó una carcasa impresa en 3D
- Es compatible con el Game Link Cable, por lo que también permite multijugador en los modos GB y GBA
- Incluye funciones como salida HDMI (mediante dock), motor de vibración y reloj en tiempo real, y fue diseñada para poder ampliarse con futuras actualizaciones de software
- Está basada en una PCB de 6 capas con un FPGA Xilinx XC7A100T y viene montada en un enclosure personalizado impreso en 3D
Objetivos del proyecto
- Crear un dispositivo portátil FPGA autónomo con batería recargable
- Minimizar costo y complejidad, y usar componentes comerciales siempre que sea posible
- Capaz de ejecutar juegos de Game Boy / Game Boy Color / Game Boy Advance
- Soporte para cartuchos físicos y archivos ROM en tarjeta microSD
- Ofrecer una UI intuitiva y overlays dentro del juego
- Integrar pantalla, bocinas y salida para audífonos
- Soporte para salida HDMI
- Considerar posibilidades de expansión futura (soporte para otros sistemas, Wi‑Fi, etc.)
- Desarrollar directamente los cores de emulación en FPGA, además de diseñar el hardware y los drivers, para comprender completamente el sistema
Visión sobre el gaming retro basado en FPGA
- La afirmación de que "el gaming basado en FPGA es más preciso que la emulación por software" es marketing exagerado
- La FPGA también es un emulador, y solo funciona con la precisión con la que haya sido programada
- Los emuladores por software también pueden alcanzar una precisión muy alta y tienen gran accesibilidad
- La mayor ventaja de los emuladores basados en FPGA es que pueden conectarse fácilmente con hardware físico (cartuchos, cable link, etc.)
Resumen del diseño de hardware
- Arquitectura FPGA + microcontrolador (MCU): la FPGA se encarga de la emulación principal, mientras que el MCU maneja la UI, la carga de ROM, la administración de energía y más
- Soporte para Wi‑Fi y Bluetooth: usa un módulo ESP32-S3 (aunque Bluetooth Classic no está soportado)
- Pantalla: LCD de 3.5 pulgadas 320x480 (permite ampliar la imagen del juego al doble)
- Batería y gestión de energía: batería de ion de litio, IC de carga TI BQ2407x e IC medidor de carga MAX17048 para monitorear el estado de energía
- Audio: usa el códec de audio TLV320DAC3101 para salida estéreo y ajuste de volumen digital
- Dispositivos de entrada: adopta botones con clic tomados del GBA SP para ofrecer una buena sensación de uso
- Memoria: usa 32MB de SDRAM para almacenar las ROM emuladas
- Puerto de cartuchos y link: permite conectar cartuchos reales directamente e incluye detección de cambio entre GBA/GBC
- Otras funciones: incluye IMU (sensor de movimiento), reloj en tiempo real (RTC) y motor de vibración
Diseño y pruebas de la PCB
- La PCB fue diseñada con KiCad
- La FPGA (Artix-7) usa encapsulado BGA, por lo que se diseñó una PCB de 6 capas
- En las pruebas del primer prototipo, la mayoría de las funciones operaron correctamente, aunque se detectaron algunos problemas de gestión de energía
- Tras pruebas iniciales con MicroPython, el firmware del MCU fue escrito en Rust
Desarrollo de GUI y firmware
- La GUI basada en Rust fue implementada con el framework de UI Slint
- Se optimizó la velocidad de actualización de la LCD y se diseñó para que la FPGA, y no el MCU, controle directamente la pantalla
- Se añadió una función de transferencia de datos usando TinyUSB para que la microSD pueda reconocerse como USB Mass Storage
Incorporación de soporte para Game Boy Advance
- Implementación del CPU ARM7TDMI (estructura de pipeline de 3 etapas)
- Componentes de hardware de GBA como PPU, DMA, temporizadores y audio fueron implementados directamente en la FPGA
- Para soportar cartuchos físicos, se analizó y reprodujo en la FPGA el protocolo especial de bus de GBA
- Soporta multijugador GBA-GBA mediante cable link y conexión con GameCube
Segunda revisión de hardware
- Se rediseñaron la placa y el enclosure para aplicar un diseño más delgado y ergonómico
- Se ajustó la posición de los botones para ofrecer una sensación de uso similar a la del GBA SP
- Se eliminó el puerto HDMI y se diseñó un dock personalizado basado en USB-C para añadir salida HDMI y soporte para controles
- Se fabricó un cristal de cubierta LCD personalizado para lograr un diseño más refinado
Diseño del dock y salida HDMI
- El dock fue diseñado para emitir una señal HDMI personalizada a través del puerto USB-C
- Usa un MCU basado en Raspberry Pi Pico W para permitir soporte para controles inalámbricos
- El dock ofrece función de hub USB, por lo que también se pueden conectar controles cableados
Planes futuros y posibilidades de expansión
- Completar el dock e implementar soporte para controles Bluetooth
- Mejorar aún más la precisión del emulador de Game Boy Advance con el objetivo de pasar las pruebas de mGBA
- Investigar la emulación inalámbrica del cable link (implementación del GBA Wireless Adapter basada en Wi‑Fi)
- Evaluar soporte para funciones adicionales como comunicación IR de Game Boy, sensor solar de Boktai y Game Boy Camera
Lista de deseos para fabricación (si fuera posible la producción en masa)
- Panel LCD personalizado de resolución 720x480 (permite ampliación 3x para GBA)
- Enclosure moldeado por inyección y botones de alta calidad
- Paquete de batería personalizado (optimizado para eficiencia del espacio interno)
- Uso de SRAM y SDRAM basadas en BGA (permitiría una PCB más pequeña)
Código abierto y materiales de referencia
- Código fuente y esquemáticos del proyecto: GitHub
- Documentación de hardware de Game Boy y GBA: Pan Docs, GBATEK
- Herramientas de código abierto: KiCad, FreeCAD, Chisel, Verilator, Slint, etc.
Resumen
- Game Bub no es solo una consola retro, sino un proyecto desafiante que expande las posibilidades de la emulación basada en FPGA
- El plan es seguir agregando diversas funciones de expansión y evolucionar junto con la comunidad de código abierto
3 comentarios
Había casos en los que se fabricaban de forma casi artesanal con FPGA y solo los intercambiaban entre quienes las conocían, pero no sabía que también existía una versión de código abierto. Está interesante.
Vaya, hasta implementaron directamente el CPU en FPGA. Me dio curiosidad la cantidad de líneas de código y me puse a buscar... parece que se puede programar FPGA con Scala, no con algo como Verilog. Me sorprendió que fuera más simple de lo que esperaba.
https://github.com/elipsitz/gamebub/…
Dicen que entre los fans, los más intensos son los gringos... jaja
Comentarios de Hacker News
Es un proyecto realmente genial. Me gustó que la entrada del blog estuviera escrita de forma muy minuciosa. Me preguntaba si se podría conectar a un GameCube, pero ya lo mencionaban en el blog.
Gracias por el gran proyecto y por escribir sobre él. Me encantan este tipo de cosas.
Tengo un Analogue Pocket, pero el hecho de que use FPGA no significa mucho para mí. Me pregunto si de verdad hay una diferencia grande frente a la emulación por software.
Me pregunto cuánto cuesta en total el PCB con los componentes montados. Probablemente unas 60-70 piezas.
Me encanta el hardware de código abierto, pero me preocupa qué pasa cuando se descontinúan los componentes.
El problema de MISO en el controlador de pantalla es infamemente conocido. Lo encontré por primera vez hace unos años. Se recomienda usar un buffer tri-state en la línea de chip select o separar el bus.
Puede que sea una idea tonta porque no tengo experiencia en hardware, pero sistemas viejos como NES, SNES y Genesis son relativamente simples. Las patentes también caducan. Me pregunto por qué no existe una recreación de hardware que emule el sistema casi perfectamente mediante un SoC. Los proyectos con FPGA parecen ser lo más cercano, pero un FPGA resulta caro para diseños de CPU de hace 40 años y 1 kb de RAM.
Es un proyecto genial. Está muy bueno que la UI esté construida con Rust y Slint. Es el framework GUI en el que estoy trabajando.
Fantástico. No sé si explicó por qué eligió un layout vertical. En el espacio actual de FPGA casi todo es estilo GBC. Me pregunto si es una preferencia personal o si hubo otra razón.
Es un artículo excelente. No me interesan mucho las consolas portátiles de videojuegos, pero siempre me interesan las decisiones de diseño actuales sobre pantallas, carcasas, alimentación por batería y conectividad. La integración con Pico W está muy bien. Ha sido uno de los elementos de desarrollo más subestimados de los últimos años. Gracias por compartirlo.