A CPU do NES é um Ricoh 2A03 , que por sua vez é baseado na popular CPU 8 bits MOS Technology 6502 e roda com um clock de 1.79 MHz ( ou 1.66 MHz em sistemas PAL).
Um pouco de contexto
O mercado de CPUs no final dos anos 70 e início dos anos 80 era bastante diversificado. Se uma empresa quisesse construir um microcomputador com preços acessíveis, as seguintes opções estavam disponíveis:
- O Intel 8080: uma CPU popular em destaque no Altair, o primeiro computador "pessoal" (PC). Tem um barramento de dados de 8 bits e um barramento de endereçamento de 16 bits.
- O Zilog Z80: uma atualização "não oficial" do 8080, aprimorada com mais instruções, registradores e componentes internos. Foi vendido por um preço menor e ainda podia rodar programas escritos para o 8080 . A Amstrad e a Sinclair (entre outros) escolheram esta CPU.
- O Motorola 6800: outra CPU de 8 bits projetada pela Motorola, contém um conjunto de instruções completamente diferente. Muitos kits DIY de computador, sintetizadores e computadores tudo-em-um incluíam o 6800.
Como se essas opções não fossem o suficiente, outra empresa chamada MOS apareceu no mercado e ofereceu uma versão reformulada do 6800: o 6502. Apesar de ser incompatível com código escrito para os outros, o novo chip era muito, mas muito mais barato de produzir , e era só questão de tempo até as fabricantes de computadores mais famosas (Commodore, Apple, Atari, Acorn, entre outras) escolherem o 6502 para comandar suas máquinas.
De volta ao Japão, a Nintendo precisava de algo barato, porém familiar para desenvolverem, então eles escolheram o 6502. A Ricoh, sua fornecedora de CPUs, produziu com sucesso uma CPU compatível com o 6502.
O enigma de licenciamento da Ricoh
Como a Ricoh conseguiu clonar o 6502 não é claro até hoje. Se esperaria que a MOS tivesse licenciado o projeto do chip para Ricoh, mas há muitas contradições nisso:
- Ambas as versões da Ricoh e da MOS apresentam o mesmo layout, mas a versão da Ricoh contém barramentos cortados (desabilitando certas funções) . Vou entrar em mais detalhes depois.
- Nenhum documento que afirme explicitamente que a MOS licenciou o 6502 para a Ricoh foi encontrado até agora.
- Um artigo publicado em 2008 no site Nikkei Trendy afirma que a Ricoh conseguiu a licença com a Rockwell, uma fabricante de chips autorizada . Embora seja discutível se uma propriedade intelectual teria sido repassada de segunda mão a terceiros com aprovação da MOS.
- Essa não seria a primeira vez que a Nintendo conseguiu contornar direitos de propriedade intelectual, já que o caso Ikegami Tsushinki v. Nintendo no Japão determinou que a Nintendo não possuia direitos autorais sob o código da versão original de Donkey Kong .
Funções removidas
O Ricoh 2A03 omite o modo BCD (Binary-Coded Decimal), originalmente incluso no 6502 . O modo codifica cada dígito decimal de um número como um binário de 4 bits separado. O 6502 usa "palavras" de 8 bits, o que significa que cada palavra armazena dois dígitos decimais.
Como um exemplo para os curiosos, o número decimal 42 é representado como:
0010 1010em binário.0100 0010em BCD.
Poderíamos continuar falando sobre o assunto, mas para resumir: BCD é útil para aplicativos que exigem tratamento de cada casa decimal separadamente (por exemplo, um relógio digital). No entanto, isso exige mais armazenamento, pois cada palavra de 8 bits só consegue representar até o número decimal 99, enquanto o binário tradicional consegue até o 255.
De qualquer forma, a Ricoh deliberadamente omitiu o modo BCD de seu chip cortando as linhas de controle que o ativam. Presumivelmente, isso foi feito para evitar o pagamento de royalties para a MOS, já que o BCD foi patenteado por eles (e a legislação que permite direitos autorais sobre os layouts de circuitos integrados nos Estados Unidos só seria promulgada em 1984 ).
Memória
Ambos os Ricoh 2A03 e MOS 6502 possuem um barramento de dados de 8 bits e um ** barramento de endereçamento de 16 bits, que lhes permite acessar até 64 KB de memória**. Então, como a Nintendo preencheu esse espaço de memória?
Por um lado, a placa-mãe contém um chip fornecendo 2 KB de RAM Estática (SRAM) . A Nintendo chama esta área de "Work Ram" (WRAM) e ela pode ser usada para armazenar:
- Variáveis para controlar o estado do jogo e/ou para buscar informações.
- A "pilha" (stack), que salva temporariamente os valores de registradores enquanto a CPU está executando sub-rotinas.
- Uma "área de buffer" para que a CPU possa copiar grandes quantidades de dados entre dois locais.
Por outro lado, os componentes do sistema são mapeados na memória , o que significa que eles são acessados usando endereços de memória, assim, eles ocupam parte do espaço de endereçamento da CPU. O espaço de memória da CPU é preenchido com endereços apontando para o cartucho do jogo, WRAM, a PPU, a APU e dois controles (não se preocupe com cada componente, eles são explicados ao longo desse artigo).
Cartucho/dados do jogo
Caso não saiba, jogos do NES são distribuídos na forma de cartuchos e os barramentos do cartucho se conectam diretamente à CPU.
A Nintendo conectou as linhas do cartucho de uma forma que apenas 49120 Bytes (~ 49,97 KB) dos dados do cartucho podem ser acessados . Agora, o que quero dizer com "dados do cartucho"? Bem, qualquer chip conectado a esses barramentos, por exemplo:
- Uma ROM de Programa onde o programa do jogo é armazenado. Isso não inclui os dados de gráficos, como você verá mais tarde na seção "Gráficos". Naturalmente, e ao contrário dos outros chips, este é obrigatório.
- Chips de RAM para estender a WRAM.
- Um Chip de RAM com uma bateria de lítio para armazenar o progresso do jogo.
O fato de existirem diferentes combinações se deve ao fato que a CPU não se importa com o tipo de componente que está sendo lido, ela só vê os endereços de memória. Então, cabe ao desenvolvedor de jogos escolher (ou criar) um layout viável para adequar seu jogo.

O mesmo PCB com as partes importantes rotuladas. O significado do chip de "Bloqueio" é explicado na seção "Anti-pirataria".
Por exemplo, no "Super Mario Bros." da Nintendo foi usado um layout chamado NES-NROM-256 que consistia em 32 KB de ROM de programa e 8 KB de "Character ROM" para gráficos (veremos mais sobre isso na seção "Gráficos") . O layout NES-NROM-256 também estava preparado para suportar até 3 KB de WRAM extra, embora o jogo não faça uso disso.
Indo além das capacidades existentes
Uma das grandes limitações dos barramentos de endereço de 16 bits (que afetam os consoles de terceira e quarta geração) é o seu espaço de endereço compacto. Hoje em dia, computadores de 32 bits podem endereçar até 4 GB de memória (e máquinas de 64 bits desfrutam generosamente de até 16 exabytes), portanto isso já não é mais motivo de preocupação. Porém, naquele tempo o NES só tinha um espaço de endereçamento de 64 KB, além de que boa parte dele era consumida por hardware mapeado em memória (algo que os competidores evitaram).
Então, quer dizer que os desenvolvedores de jogos só podiam desenvolver jogos de até 49,97 KB? Não mesmo! Se a história nos ensinou alguma coisa, é que há sempre uma solução inteligente para um problema desafiador; e este problema foi resolvido com um Mapper (Mapeador).

Representação simplificada de como um mapper estende as capacidades de endereçamento da CPU. Com a inclusão de um mapper, a CPU pode acessar bancos extras (grupos de endereços) de uma ROM de Programa maior. Embora o jogo/programa tenha a nova tarefa de alternar manualmente entre bancos sempre que necessário.

A mesma configuração, mas sem um mapper instalado. Embora mais simples e barata, a CPU só pode acessar um número finito de bancos.
Um mapper é um chip extra incluído no cartucho que fica entre os chips de memória e as linhas de endereçamento do console. Seu principal trabalho é aumentar o espaço de endereçamento para que os desenvolvedores possam usufruir de chips com maior capacidade de armazenamento. Isso é feito pela troca de banco: Endereços de memória são agrupados em bancos, e o mapper fornece interruptores (controlados através de endereços de memória) para alternar entre os bancos. Apesar disso, a CPU ainda vê a mesma quantidade de memória, então é o jogo que foi programado com a presença de um mapper que fica responsável pela troca de banco. Devido ao seu custo-benefício, os mappers foram amplamente utilizados nas tecnologias dos anos 80 até o início dos anos 90.

A mesma imagem com partes importantes rotuladas. A princípio, pensei que a WRAM extra fosse usada para armazenar saves, mas depois percebi que não há saves neste jogo (e também não há bateria). Na realidade, esse chip de RAM é utilizado para armazenar um nível descompactado.
Voltando ao NES, um exemplo famoso é o "Super Mario Bros. 3" que foi distribuído com o mapper "MMC3" (feito pela Nintendo) em seu cartucho. Para fins de comparação, o chip MMC3 fornecia até 512 KB de espaço para a ROM de programa, até 256 KB para a Character Memory e até 8 KB de WRAM adicionais . Agora fica claro por que "Super Mario Bros. 3" difere significativamente de qualidade em comparação com o primeiro lançamento da série.
Em resumo, embora este console possa parecer limitado ao examinar suas características internas, a Nintendo se certificou de que ele pudesse se adaptar à medida que a tecnologia evoluía. Por outro lado, ao mesmo tempo que esta técnica ajudou a manter os custos do console baixos, ela também transferiu parte do custo para o cartucho do jogo. Portanto, a qualidade do jogo e os custos com cartuchos eram duas preocupações para os desenvolvedores de jogos ponderarem.

