1

Como criar um emulador de NES - Arquitetura do NES

Antes de começar a programar um emulador, precisamos entender como o NES funciona internamente.

Quando comecei a estudar emulação, percebi que um emulador não é apenas um programa que abre uma ROM e executa um jogo. Na verdade, ele precisa reproduzir o comportamento do hardware original da forma mais fiel possível.

Por isso, antes de escrever qualquer linha de código, precisamos conhecer os principais componentes do console e entender como eles se comunicam.

https://miro.medium.com/v2/resize:fit:720/format:webp/0*jSXmYdQThpXwSwaW.png

Uma forma simples de visualizar o console é a seguinte:

CPU → RAM → PPU → Tela

Mas na prática existem vários componentes trabalhando juntos.

O NES possui:

  • CPU (processador)
  • RAM (memória)
  • PPU (processador gráfico)
  • APU (processador de áudio)
  • Controles
  • Cartucho (ROM)

Todos eles trocam informações constantemente para que o jogo funcione corretamente.

Como os componentes se comunicam

O cartucho contém o jogo. A CPU lê instruções armazenadas nele e executa o código.

Durante a execução, a CPU utiliza a RAM para armazenar dados temporários, como posição dos personagens, pontuação, vidas e outras informações necessárias naquele momento.

Quando precisa atualizar a tela, a CPU envia dados para a PPU, que é responsável por gerar os gráficos.

Da mesma forma, quando um som precisa ser reproduzido, a CPU se comunica com a APU.

Tudo isso acontece dezenas de vezes por segundo.

CPU: o cérebro do console

https://miro.medium.com/v2/resize:fit:720/format:webp/0*Uc1kPwPCHJipZa6Y.jpg

A CPU do NES é uma versão modificada do MOS 6502 chamada Ricoh 2A03.

Ela é responsável por executar todas as instruções do jogo.

Imagine que a CPU seja o gerente de uma empresa.

Ela não desenha gráficos, não produz sons e não armazena grandes quantidades de dados, mas coordena todos os componentes para que trabalhem juntos.

Enquanto o jogo está rodando, a CPU executa continuamente o seguinte ciclo:

  • Busca uma instrução.
  • Interpreta a instrução.
  • Executa a ação.
  • Busca a próxima instrução.

Esse processo acontece milhares de vezes por segundo.

RAM: memória temporária

https://miro.medium.com/v2/resize:fit:720/format:webp/0*SYuo0InSFeiEMGuV.png

A RAM funciona como uma área de trabalho temporária.

Ela armazena informações que podem mudar durante a execução do jogo.

Por exemplo:

Posição do jogador.
Posição dos inimigos.
Pontuação.
Estado atual do jogo.
Quando o console é desligado, essas informações são perdidas.

Por isso a RAM é chamada de memória volátil.

PPU: responsável pelos gráficos

https://miro.medium.com/v2/resize:fit:720/format:webp/0*D59HJSOj3XOeQZR3.png

A PPU (Picture Processing Unit) é o chip responsável pelos gráficos.

Muitas pessoas imaginam que a CPU desenha tudo na tela, mas isso não acontece.

A CPU apenas envia informações.

Quem realmente monta a imagem exibida na televisão é a PPU.

Ela trabalha com conceitos como:

  • Tiles
  • Sprites
  • Paletas de cores
  • Backgrounds

Esses elementos são combinados para formar cada quadro exibido na tela.

Cartucho e ROM

https://miro.medium.com/v2/resize:fit:640/format:webp/1*MnBiitm5KvxNXnMEnE4AVw.png

O cartucho contém a ROM do jogo.

A ROM é uma memória somente leitura que armazena:

Código do jogo.
Gráficos.
Sons.
Mapas.
Dados diversos.
Quando carregamos uma ROM em um emulador, estamos carregando uma cópia digital desses dados.

Como tudo funciona junto

Imagine que o jogador aperte o botão para mover o personagem para a direita.

O processo acontece mais ou menos assim:

1 - O controle envia o comando.
2 - A CPU lê o estado do controle.
3 - A CPU atualiza a posição do personagem na RAM.
4 - A CPU informa à PPU que a tela precisa ser atualizada.
5 - A PPU gera um novo quadro.
6 - A imagem aparece na televisão.

Todo esse processo acontece aproximadamente 60 vezes por segundo.

Conclusão

Agora que entendemos a arquitetura básica do NES, já temos uma visão geral de como o console funciona internamente.

Nos próximos capítulos vamos explorar cada componente individualmente e entender como reproduzir seu comportamento dentro de um emulador.

Carregando publicação patrocinada...