Há tempos eu vinha ensaiando mergulhar nos estudos de FPGA. Comecei essa jornada mais profundamente há alguns meses e, hoje, já colho alguns frutos.

O primeiro desafio foi compreender o quanto uma implementação em software difere de outra sintetizada em hardware. A tendência inicial é escrever muito para implementar pouco. Aos poucos, porém, a familiaridade e as inúmeras experimentações dão lugar a técnicas de otimização que tornam o código mais enxuto, consomem menos recursos e produzem soluções mais determinísticas. Esse aprendizado, somado às experiências acumuladas ao longo do caminho, permitiu-me criar minha própria versão de um core para o Atari 2600!

Minha afilhada, Raica, conhecendo os jogos do Atari!

São quatro projetos em um: A2600NanoSAN (core do Atari implementado em um FPGA Gowin GW2AR), FPGABuddy + PlaymoDump (o primeiro é a interface de usuário e controle do core FPGA enquanto o segundo é o leitor de cartuchos Atari, ambos implementados em microcontroladores RP2040) e, por fim, o FPGASticks (interface de ultra-baixa latênca para entrada de joysticks e paddles originais do Atari, implementado em um microcontrolador ATmega328P).


O A2600NanoSAN é uma implementação personalizada do core do Atari 2600 VCS. Ele é baseado no core A2600Nano, que é um porte dos componentes do core FPGA MiSTer Atari 2600.
Ele é projetado para a seguinte configuração de hardware:

PlacaFPGASaída de VídeoSuporte / Observações
Tang Nano 20kGW2ARHDMIDispositivos conectados ao FPGA via SPI:
MCU: FPGABuddy (Controle – Master)
MCU: FPGASticks (DB9 para SPI – Slave)

Esta versão personalizada do core A2600Nano introduz três características principais:

  • Suporte a Cartuchos Físicos e/ou SD: Capacidade de receber ROMS enviados via SPI, através do módulo spi_loader_san.v.
  • Controles Legados: Capacidade para receber dois joysticks ou até quatro paddles analógicos, com latência ultrabaixa através do módulo personalizado db9_to_spi_san.v.
  • Tela de Abertura: Uma ROM interna personalizada que atua como tela de abertura enquanto aguarda o streaming de alguma ROM de jogo.


O FPGABuddy é um firmware para o microcontrolador Raspberry Pi Pico (RP2040) que atua como companion (coprocessador) para o core de Atari 2600 executado na FPGA.

  • O RP2040 gerencia o cartão SD (FAT32), processa um banco de dados de ROMs local e renderiza a interface em um display LCD 20×4 I2C. Concorrentemente, nos estados de seleção e configuração, ele também envia a interface ao OSD (On-Screen Display) gráfico interno da FPGA (128×64 pixels).
  • É esse dispositivo que faz a injeção física das ROMs diretamente na memória da FPGA via barramento SPI0, seja a fonte um cartão SD ou um cartucho.
  • A interface também oferece um Menu de Configurações Rápidas durante a gameplay para alterar parâmetros do jogo e da FPGA em tempo real.


O firmware PlaymoDump roda em num RP2040 dedicado. Ele faz a leitura dos endereços de todos os bancos do cartucho inserido e envia o dump da ROM para o FPGABuddy, que por sua vez verifica e faz a injeção da ROM na memória do FPGA. Ainda é um projeto privado, mas em breve estará em um artigo especial.


O firmware FPGASticks (DB9-para-SPI) roda em num terceiro microcontrolador (ATmega328P). Ele se comunica com o módulo que criei dentro do core FPGA (o db9_to_spi_san.v). Também é um projeto privado, que será detalhado em um artigo separado.


Os projetos resultaram na placa principal, a A2600BeniBoard e na placa de leitura, a PlaymoDump.

Abaixo, temos um preview da A2600BeniBorad:

Para saber mais, seguem os links:

https://github.com/sandrobenigno/A2600NanoSAN

https://github.com/sandrobenigno/FPGABuddy

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *