12 pontos por GN⁺ 2025-02-14 | 3 comentários | Compartilhar no WhatsApp
  • Game Bub é um dispositivo portátil open source de emulação retrô baseado em FPGA, com suporte a jogos de "Game Boy, Game Boy Color e Game Boy Advance"
  • É possível usar cartuchos físicos, além de rodar jogos emulados por meio de arquivos ROM armazenados em cartão microSD
  • Não existia antes um emulador FPGA open source capaz de reproduzir cartuchos reais dessa forma, e um dos principais objetivos era fazer tudo por conta própria e entender todos os componentes
  • Por isso, o autor projetou a própria PCB, escreveu o firmware, criou emuladores de Game Boy e Game Boy Advance para FPGA (usando Chisel HDL) e também desenhou a case impressa em 3D
  • Suporta Game Link Cable, permitindo multiplayer nos modos GB e GBA
  • Inclui recursos como saída HDMI (com dock), motor de vibração, relógio em tempo real e foi projetado para permitir expansão via futuras atualizações de software
  • É baseado em uma PCB de 6 camadas com Xilinx XC7A100T FPGA e vem em um enclosure personalizado impresso em 3D

Objetivos do projeto

  • Criar um dispositivo portátil com FPGA, bateria recarregável e operação independente
  • Minimizar custo e complexidade, usando componentes comerciais sempre que possível
  • Rodar jogos de Game Boy / Game Boy Color / Game Boy Advance
  • Suportar cartuchos físicos e arquivos ROM em cartão microSD
  • Oferecer uma UI intuitiva e overlay durante o jogo
  • Integrar display, alto-falantes e saída para fone de ouvido
  • Suportar saída HDMI
  • Considerar possibilidades de expansão futura (suporte a outros sistemas, Wi‑Fi etc.)
  • Desenvolver diretamente os cores de emulação em FPGA, além de projetar também o hardware e os drivers, para permitir compreensão completa do sistema

Visão sobre jogos retrô baseados em FPGA

  • A afirmação de que "jogos baseados em FPGA são mais precisos do que emulação por software" é marketing exagerado
  • FPGA também é um emulador e só funciona com a precisão com que foi programado
  • Emuladores de software também podem alcançar altíssima precisão e têm excelente acessibilidade
  • A maior vantagem dos emuladores baseados em FPGA é a facilidade de conexão com hardware físico (cartuchos, cabo link etc.)

Visão geral do design de hardware

  • Estrutura FPGA + microcontrolador (MCU): a FPGA cuida da emulação principal, enquanto o MCU trata da UI, carregamento de ROM, gerenciamento de energia etc.
  • Suporte a Wi‑Fi e Bluetooth: uso de módulo ESP32-S3 (porém sem suporte a Bluetooth Classic)
  • Display: LCD de 3,5 polegadas com 320x480 (permite ampliar a tela do jogo em 2x)
  • Bateria e gerenciamento de energia: bateria de íons de lítio, IC de carga TI BQ2407x e medidor de bateria MAX17048 para verificar o estado de energia
  • Áudio: uso do codec de áudio TLV320DAC3101 com suporte a saída estéreo e controle digital de volume
  • Dispositivos de entrada: botões com clique usados no GBA SP para oferecer boa sensação de uso
  • Memória: 32MB de SDRAM para armazenar ROMs emuladas
  • Cartucho e porta link: permite conectar cartuchos reais diretamente e inclui detecção de alternância entre GBA/GBC
  • Outros recursos: IMU (sensor de movimento), relógio em tempo real (RTC) e motor de vibração

Design e testes da PCB

  • A PCB foi projetada com KiCad
  • A FPGA (Artix-7) usa encapsulamento BGA e foi implementada em uma PCB de 6 camadas
  • Nos testes do primeiro protótipo, a maior parte das funções operou normalmente, embora alguns problemas de gerenciamento de energia tenham sido encontrados
  • Após testes iniciais com MicroPython, o firmware do MCU foi escrito em Rust

Desenvolvimento de GUI e firmware

  • GUI em Rust implementada com o framework de UI Slint
  • A velocidade de atualização do LCD foi otimizada, e o sistema foi projetado para que a FPGA dirija o display diretamente, e não o MCU
  • Foi adicionada uma função de transferência de dados com TinyUSB para que o microSD pudesse ser reconhecido como USB Mass Storage

Adição de suporte a Game Boy Advance

  • Implementação da CPU ARM7TDMI (estrutura de pipeline em 3 estágios)
  • Componentes de hardware do GBA, como PPU, DMA, timers e áudio, foram implementados diretamente na FPGA
  • Para suportar cartuchos físicos, foi feita a análise do protocolo especial de barramento do GBA e sua reprodução na FPGA
  • Suporte a multiplayer GBA-GBA via cabo link e conexão com GameCube

Segunda revisão de hardware

  • A placa e o enclosure foram reprojetados, aplicando um design mais fino e ergonômico
  • A posição dos botões foi ajustada para oferecer uma sensação semelhante à do GBA SP
  • A porta HDMI foi removida, e foi criado um dock personalizado baseado em USB-C para adicionar saída HDMI e suporte a controle
  • Um vidro de cobertura do LCD foi produzido sob medida para dar um acabamento mais sofisticado

Projeto do dock e saída HDMI

  • O dock foi projetado para emitir um sinal HDMI personalizado por meio da porta USB-C
  • Usa um MCU baseado em Raspberry Pi Pico W para possibilitar suporte a controles sem fio
  • O dock oferece função de hub USB, permitindo também conectar controles com fio

Planos futuros e possibilidades de expansão

  • Concluir o dock e implementar suporte a controles Bluetooth
  • Melhorar ainda mais a precisão do emulador de Game Boy Advance com a meta de passar nos testes do mGBA
  • Pesquisar emulação sem fio de cabo link (implementação do GBA Wireless Adapter baseada em Wi‑Fi)
  • Avaliar suporte a recursos adicionais como comunicação IR do Game Boy, sensor solar de Boktai e Game Boy Camera

Lista de desejos para fabricação (caso produção em massa seja possível)

  • Painel LCD personalizado com resolução 720x480 (permitindo ampliação 3x do GBA)
  • Enclosure com moldagem por injeção e botões de alta qualidade
  • Pacote de bateria personalizado (otimização da eficiência do espaço interno)
  • Uso de SRAM e SDRAM baseadas em BGA (permitindo um design de PCB menor)

Open source e materiais de referência

  • Código-fonte e esquemáticos do projeto: GitHub
  • Documentação de hardware do Game Boy e GBA: Pan Docs, GBATEK
  • Ferramentas open source: KiCad, FreeCAD, Chisel, Verilator, Slint etc.

Resumo

  • O Game Bub não é apenas um videogame retrô simples, mas sim um projeto desafiador que amplia as possibilidades da emulação baseada em FPGA
  • A ideia é continuar evoluindo junto com a comunidade open source, adicionando diversas funcionalidades de expansão no futuro

3 comentários

 
blurblah 2025-02-17

Já existiam alguns feitos artesanalmente com FPGA, negociados só entre quem conhecia, mas não sabia que também havia versões open source. Bem interessante.

 
botplaysdice 2025-02-15

Então eles implementaram até a CPU diretamente em FPGA! Fiquei curioso sobre o número de linhas de código e fui procurar... pelo visto dá para programar FPGA em Scala, não em algo como Verilog. Me surpreendeu como é mais simples do que eu imaginava.

https://github.com/elipsitz/gamebub/…

Dizem que, entre os nerds, os nerds gringos são os mais dedicados... rsrs

 
GN⁺ 2025-02-14
Comentários no Hacker News
  • Projeto realmente incrível. Gostei que o post do blog foi escrito de forma muito minuciosa. Fiquei curioso se seria possível conectar a um GameCube, mas isso já tinha sido mencionado no blog

    • Uma das vantagens da compatibilidade com cartuchos reais é não precisar se preocupar com mapeadores de memória. Estou familiarizado com os vários mapeadores do NES, mas não tenho certeza se os cartuchos de GB funcionam da mesma forma. Hardware especial como câmera, vibração e até máquina de costura provavelmente funcionaria com os cartuchos originais sem suporte especial
    • Se houver suporte para carregar ROMs, fico curioso se seria necessário emular todos os mapeadores no FPGA
  • Obrigado pelo projeto incrível e por escrever sobre ele. Adoro esse tipo de coisa

    • Fiquei decepcionado ao ver muitos comentários antes no estilo "por que isso existe?". A maioria dessas pessoas nunca tentou nem 1% de um projeto ousado como este. Este projeto é incrível e uma experiência de aprendizado divertida
    • Enviei para a linha de dicas do Hack-A-Day, então talvez saia uma matéria sobre isso em alguns dias
  • Tenho um Analogue Pocket, mas para mim não faz tanta diferença o fato de ele usar FPGA. Fico curioso se realmente há uma grande diferença em comparação com emulação por software

    • Eu conheço a diferença entre as duas abordagens, mas não entendo por que a emulação por software não seria tão boa quanto a emulação em FPGA. Fazer isso em software parece mais flexível
  • Fico curioso sobre qual é o custo total de uma PCB com os componentes montados. Imagino que fique em torno de 60-70

    • Obrigado pelo post do blog e pela escrita; acho que seria bom incluir isso no repositório
    • Estou tentando um design parecido e pretendo usar RP2350B e ESP32-C61 como controladores do sistema. Seria bom ter um chip e um layout de pads com suporte a BT legado
    • Adicionar uma porta USB para suportar algo como o adaptador sem fio USB da 8bitdo também é uma opção. O suporte a BT legado pode acabar virando um trabalho extra que compromete o projeto. Outra opção é expor internamente a conexão SPI para que as pessoas possam hackear o controle que quiserem
  • Gosto de hardware open source, mas fico pensando no que acontece quando os componentes saem de linha

    • O mantenedor pode atualizar a lista de componentes, mas pode ser necessário usar várias peças por questões de compatibilidade. Fico pensando no que fazer se, no meio da compra dos componentes, todos deixarem de estar disponíveis. Uma possibilidade seria o mantenedor vender kits de componentes. Mas pode haver questões relacionadas à legislação de propriedade intelectual
  • O problema de MISO no controlador de display é notoriamente famoso. Encontrei isso pela primeira vez alguns anos atrás. Recomenda-se usar um buffer tri-state na linha de chip select ou separar o barramento

    • Problemas de domínio de energia também acontecem com frequência. Na maioria dos dispositivos, a IO é composta por Vdd, diodo ESD, pino de IO, diodo ESD e terra. Se o Vdd tiver um caminho resistivo até o terra, isso causa problemas. Isso acontece quando o IC de alimentação permite corrente para o terra por meio de um resistor de descarga de saída ou de um transistor. Nesse caso, o pino de IO passa a ter um diodo em paralelo com o terra. Se não tomar cuidado, a corrente máxima que o driver consegue fornecer pode acabar fluindo pelo diodo
  • Talvez seja uma ideia boba por eu não ter experiência com hardware, mas sistemas antigos como NES, SNES e Genesis são relativamente simples. As patentes também expiram. Fico curioso por que não existe uma recriação em hardware, via SoC, que emule esses sistemas quase perfeitamente. Projetos com FPGA parecem ser o mais próximo disso, mas FPGA é caro em comparação com designs de CPU de 40 anos atrás e 1 kb de RAM

  • Projeto incrível. É muito legal que a UI tenha sido construída com Rust e Slint. É um framework de GUI em que estou trabalhando

  • Fantástico. Não sei se explicaram por que escolheram o layout vertical. No espaço atual de FPGA, todo mundo segue o estilo do GBC. Fico curioso se foi preferência pessoal ou se houve outro motivo

  • Excelente texto. Não tenho interesse em handhelds de jogos, mas sempre me interesso pelas decisões atuais de design em display, enclosure, alimentação por bateria e conectividade. A integração com Pico W é ótima. É um dos itens de desenvolvimento mais subestimados dos últimos anos. Obrigado por compartilhar