Homebrew de Atari 2600: fazendo jogos para um console de 1977

O Atari 2600 é um dos consoles mais antigos para os quais ainda se fazem jogos, e talvez o mais esquisito deles. Não tem frame buffer, não tem tiles, quase não tem memória, e o chip gráfico não sabe nada sobre a imagem inteira, só sobre a linha que está desenhando naquele instante. Mesmo assim, todo ano aparecem jogos novos para ele, escritos por gente que se diverte com o desafio de fazê-lo funcionar. Este guia explica como o console funciona, por que programá-lo não se parece com nenhuma outra máquina, quais ferramentas os desenvolvedores usam hoje e como jogar os homebrews da FredyGames, incluindo para que servem todas aquelas chaves no console.

Um console de 1977

A Atari lançou o Video Computer System, ou VCS, em 1977. Ele passou a se chamar Atari 2600 em 1982 e continuou à venda, em vários redesenhos, por bem mais de uma década. No Brasil, o Atari também marcou época e ficou na memória de muita gente. Ele foi projetado numa época em que memória era caríssima, e os engenheiros deixaram a lista de peças tão curta quanto podiam. Três chips fazem quase todo o trabalho:

  • A CPU é um MOS 6507, versão reduzida do 6502 que também equipou o NES e muitos computadores pessoais. Roda a cerca de 1,19 MHz e só enxerga 8 KB de memória, dos quais o cartucho fica com uma janela de 4 KB.
  • O chip RIOT fornece toda a RAM do console, 128 bytes, além de um temporizador e das entradas dos joysticks e das chaves do console.
  • A TIA (Television Interface Adaptor) gera a imagem e o som.

Para ter uma ideia do que são 128 bytes: este parágrafo é bem maior que isso. Toda variável de um jogo de 2600, do placar à posição de cada inimigo, precisa caber nesse espaço, junto com a pilha do processador.

Correndo atrás do feixe

Na maioria dos consoles, o jogo monta uma imagem na memória e o hardware de vídeo a envia para a televisão. O 2600 não consegue fazer isso, porque não há memória nem de longe suficiente para guardar uma imagem. Em vez disso, a TIA desenha o que os seus registradores indicam no exato momento em que o feixe de elétrons da TV passa por cada ponto da tela. Se o programa quer que a próxima linha seja diferente, precisa mudar esses registradores enquanto o feixe está a caminho. Em inglês isso se chama racing the beam, "correr atrás do feixe", expressão que também deu título a um livro de 2009 de Nick Montfort e Ian Bogost sobre o console.

O tempo é apertado. O processador tem 76 ciclos por linha, e a maioria das instruções leva de dois a seis ciclos, então só cabem algumas dezenas de instruções por linha. Um quadro NTSC tem 262 linhas: algumas de sincronismo vertical, cerca de 37 de apagamento vertical antes da imagem, 192 linhas visíveis e cerca de 30 de overscan depois. A lógica do jogo, ler o joystick, mover inimigos, checar colisões, precisa caber nos intervalos de cima e de baixo, porque a parte visível é gasta alimentando a TIA.

O que a TIA consegue desenhar é igualmente limitado:

  • Um playfield, um padrão de baixa resolução com 40 blocos na largura da tela, em geral com a metade direita espelhando ou repetindo a esquerda. Paredes, labirintos e cenários saem dele.
  • Dois players, sprites de apenas oito pixels de largura, que podem ser esticados ou copiados ao longo da linha.
  • Dois mísseis e uma bola, blocos simples de cor que podem ser alargados um pouco.

A lista acaba aí. Todo o resto que aparece num jogo de 2600, uma fileira de inimigos, um placar, uma tela de título caprichada, é o programador reaproveitando esses poucos objetos, trocando forma, cor e posição linha a linha. Jogos com muitos objetos costumam piscar, desenhando parte deles num quadro e o resto no seguinte.

Kernels: o coração de todo jogo

O código que roda durante a parte visível do quadro se chama kernel. É um laço com tempo milimetricamente calculado que, linha após linha, carrega os gráficos certos na TIA e reposiciona objetos, contando ciclos para que cada mudança aconteça no momento exato. Escrever um bom kernel é a arte central da programação de 2600. Um jogo pode ter kernels diferentes para partes diferentes da tela: um para a área de jogo, outro para o placar embaixo.

Dois jogos do site mostram o que isso significa na prática. Snakes, de Robin Sergeant, refaz o clássico jogo da cobrinha para uma máquina com 128 bytes de RAM, e o autor conta como cada segmento do corpo da cobra precisou caber num único byte. 2048 2600, de Carlos Duarte do Nascimento, espreme o quebra-cabeça inteiro, tabuleiro incluído, num cartucho de 2 KB.

Os cartuchos também podem crescer. A troca de bancos (bank switching) permite que o cartucho alterne blocos de programa na janela de 4 KB, e algumas placas acrescentam RAM extra. Ms Snake! usa um cartucho de 32 KB com RAM extra, o que abre espaço para a sua grande tela de título animada.

batari Basic ou assembly?

Há dois caminhos principais para escrever um jogo de 2600 hoje, e o nosso catálogo tem bastante dos dois.

Assembly com o DASM. A maior parte do trabalho sério no 2600 é escrita direto em assembly de 6502, o que dá ao programador controle sobre cada ciclo. O DASM, um macro assembler gratuito, é a ferramenta padrão há anos, e os arquivos de cabeçalho de referência da comunidade são feitos para ele. AStar, Spider Web e Terra7 são escritos em assembly, e como os três têm licença copyleft, as ROMs que servimos foram montadas pela FredyGames a partir do fonte dos autores com o DASM, e esse fonte fica hospedado junto de cada jogo. Cyloid, Dungeon Deck e Snakes também foram escritos em assembly de 6502.

batari Basic. Criado por Fred Quimby, conhecido na comunidade como batari, é uma linguagem parecida com BASIC que compila o jogo para assembly, que o DASM então transforma em cartucho. Ela traz kernels prontos, então dá para desenhar um playfield e mover dois sprites sem contar um único ciclo. O preço é a flexibilidade: os kernels padrão decidem como a tela pode ser, e ideias mais ambiciosas acabam exigindo assembly. O batari Basic trouxe muita gente nova para o desenvolvimento no 2600, e há jogos muito bons feitos com ele, como Berta And Butterflies, Bounstryk, Pipes 2600 e Ms Snake!.

Seja qual for o caminho, os desenvolvedores testam em emuladores. O Stella, o emulador de 2600 mais conhecido, tem um depurador detalhado que mostra a posição do feixe, a contagem de ciclos e os registradores da TIA, o que torna o trabalho com kernels bem menos sofrido do que nos primeiros tempos do hobby.

A comunidade homebrew

O homebrew de 2600 começou nos anos 1990, quando entusiastas passaram a documentar o hardware e trocar descobertas em listas de e-mail. Hoje o centro da cena é a AtariAge, cujos fóruns abrigam as discussões de desenvolvimento e que também fabrica cartuchos físicos de muitos homebrews. O AStar, por exemplo, tem uma edição em cartucho com 24 fases; a edição livre que está na FredyGames é um lançamento separado, com oito fases feitas para ela.

Essa mistura de lançamentos livres e comerciais é típica. Muitos desenvolvedores de 2600 vendem cartuchos, alguns publicam o código-fonte e outros fazem as duas coisas. A FredyGames só hospeda jogos que os autores lançaram sob licenças que permitem redistribuir, inclusive num site com anúncios; o guia sobre como verificamos as licenças explica por quê. Cursos e game jams também trazem gente nova: Dungeon Deck foi escrito em 2025 para uma disciplina de programação de Atari 2600, e Berta And Butterflies venceu um concurso de programação polonês em 2024.

Joysticks, chaves e como o nosso player os mapeia

O joystick do 2600 tem uma alavanca e um único botão. O próprio console tem uma fileira de chaves que os jogos leem como se fossem controles, e muitos homebrews dão a elas funções novas.

Tecla Atari 2600 O que costuma fazer
Setas ou WASD Joystick esquerdo mover
Espaço ou V Botão do joystick esquerdo atirar, confirmar
I J K L Joystick direito segundo jogador
B Botão do joystick direito botão do segundo jogador
Enter Game Reset começar ou reiniciar a partida
Backspace Game Select escolher um modo de jogo
F1 Chave de dificuldade esquerda alterna entre B e A
F3 Chave de dificuldade direita alterna entre B e A
P — pausa (do emulador)

As chaves de dificuldade eram originalmente um handicap para cada jogador: a posição A era mais difícil, a B mais fácil. O nosso player começa com as duas em B, e cada toque em F1 ou F3 vira uma delas. Os autores de homebrew as usam de jeitos criativos:

  • Em Berta And Butterflies, F1 alterna entre o modo iniciante e o avançado na tela de título.
  • Em Spider Web, pôr qualquer uma das chaves em A deixa os insetos e o mata-moscas mais rápidos.
  • Em Bounstryk, uma chave em A entrega aquele jogador ao computador, então F3 permite jogar sozinho contra a máquina.
  • Em AStar, cada toque em F1 desfaz o último movimento, e F3 liga ou desliga o esmaecimento entre as fases.

Game Select e Game Reset eram o jeito de escolher um modo e começar uma partida antes de existirem menus. Muitos homebrews ainda os usam: em Dungeon Deck, Backspace escolhe a dificuldade na tela de título e permite fugir de uma sala durante o jogo; em 2048 2600, alterna entre um e dois jogadores. A chave de cor/preto e branco do console não está mapeada no nosso player, então os jogos que a usam para pausar são pausados com P.

Não há estados salvos para o 2600 aqui. Como no console de verdade, a partida dura enquanto você continuar jogando, e os recordes ficam guardados até você fechar a página. O nosso player roda os jogos em NTSC, o padrão de TV americano que a maioria dos homebrews usa. Para gamepads e outras dicas práticas, veja jogando jogos retrô no navegador.

Um passeio pelos nossos jogos de Atari 2600

A lista completa está na página da plataforma Atari 2600. Alguns destaques:

  • AStar é um quebra-cabeça deslizante em que Bob só para quando bate em algo, e um bloco móvel é o único jeito de fazê-lo parar onde você precisa. Cada fase tem uma meta de movimentos calculada por um programa resolvedor, e terminar todas dentro da meta é um desafio de verdade.
  • Spider Web põe você no lugar de uma aranha que defende a sua teia: atordoe os insetos com seda, coma-os para recuperar vida e fuja do mata-moscas, em vinte fases com uma música que acelera.
  • Terra7 é um shooter horizontal com uma missão clara: derrubar 250 invasores para carregar um satélite de defesa, enquanto resgata os astronautas que passam à deriva.
  • Bounstryk é um jogo de bola um contra um que junta uma bola que nunca perde velocidade com os empurrões do hóquei de mesa, para dois jogadores ou contra o computador.
  • Dungeon Deck transforma a exploração de masmorra num baralho de 45 cartas com monstros, espadas, escudos e poções. É um joguinho tenso de contas e sacrifícios.
  • Berta And Butterflies é um jogo de reflexo no espírito dos portáteis de LCD do começo dos anos 1980, com uma elefanta que pega borboletas em quatro posições.
  • 2048 2600 acrescenta um modo para dois jogadores que o quebra-cabeça original nunca teve, e Pipes 2600 pede que você monte o encanamento antes que a água chegue ao fim.

Por onde começar

Para ver o que um assembly cuidadoso consegue tirar dessa máquina, comece por Spider Web ou Terra7. Se prefere pensar, AStar e Dungeon Deck ocupam uma noite inteira. Para duas pessoas no mesmo teclado, experimente Bounstryk. E para comparar o 2600 com os consoles que vieram depois, leia homebrew de NES: por onde começar e homebrew da Sega hoje, ou volte ao básico com o que é homebrew?.

Jogos deste guia

Mais guias

Todos os guias →