12 puntos por GN⁺ 2025-02-14 | 3 comentarios | Compartir por WhatsApp
  • 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

 
blurblah 2025-02-17

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.

 
botplaysdice 2025-02-15

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

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

    • Una de las ventajas de la compatibilidad con cartuchos reales es que no hace falta preocuparse por los memory mappers. Conozco los distintos mappers del NES, pero no estoy seguro de si los cartuchos de GB funcionan de la misma manera. Hardware especial como la cámara, la vibración o la máquina de coser probablemente también funcionaría con los cartuchos originales sin soporte especial.
    • Si soporta carga de ROM, me pregunto si habría que emular todos los mappers en el FPGA.
  • Gracias por el gran proyecto y por escribir sobre él. Me encantan este tipo de cosas.

    • Me decepcionó ver tantos comentarios de "¿por qué existe esto?" cuando lo vi antes. La mayoría de la gente ni siquiera ha intentado el 1% de un proyecto tan ambicioso. Este proyecto es una experiencia de aprendizaje genial y divertida.
    • Lo envié a la línea de tips de Hack-A-Day, así que podría salir un artículo al respecto en unos días.
  • 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.

    • Conozco la diferencia entre ambos enfoques, pero no entiendo por qué la emulación por software no podría ser tan buena como la emulación en FPGA. Da la impresión de que hacerlo por software sería más flexible.
  • Me pregunto cuánto cuesta en total el PCB con los componentes montados. Probablemente unas 60-70 piezas.

    • Gracias por la entrada del blog y por escribirla; estaría bien incluirla en el repositorio.
    • Estoy intentando un diseño parecido y planeo usar un RP2350B y un ESP32-C61 como controladores del sistema. Estaría bien contar con un chip y un layout de pads que soporten BT legado.
    • Otra opción es añadir un puerto USB para soportar algo como el adaptador inalámbrico USB de 8bitdo. El soporte de BT legado podría convertirse en trabajo extra que termine arruinando el proyecto. Otra posibilidad es exponer internamente una conexión SPI para que la gente pueda hackear el controlador que quiera.
  • Me encanta el hardware de código abierto, pero me preocupa qué pasa cuando se descontinúan los componentes.

    • Quien da mantenimiento puede actualizar la lista de materiales, pero puede que se necesiten varios componentes por temas de compatibilidad. ¿Qué pasa si, mientras compras las piezas, varias ya no se consiguen? Una opción podría ser que quien mantiene el proyecto vendiera kits de componentes. Pero podría haber problemas relacionados con las leyes de propiedad intelectual.
  • 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.

    • Los problemas de dominio de energía también ocurren con frecuencia. En la mayoría de los dispositivos, la E/S está compuesta por Vdd, diodo ESD, pin de E/S, diodo ESD y tierra. Si Vdd tiene una ruta resistiva hacia tierra, aparecen problemas. Esto sucede cuando el IC de alimentación permite corriente hacia tierra mediante una resistencia de descarga de salida o un transistor. En ese caso, el pin de E/S termina teniendo un diodo en paralelo hacia tierra. Si no se tiene cuidado, la corriente máxima que puede entregar el driver fluirá a través del diodo.
  • 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.