Arquitetura do Super Nintendo

Uma análise prática por Rodrigo Copetti

Traduzido por Walper

This is a volunteer translation of the original article. If you find any mistakes, please help improve it. Thanks!

Se você usa ferramentas de acessibilidade ou navegadores antigos, mude para a edição ‘clássica’.




Imagens de suporte

Modelo

Image
O Super Nintendo (na Europa) ou Super Famicom (no Japão).
Lançado em 21/11/1990 no Japão e 11/04/1992 na Europa.
Image
O Super Nintendo.
Lançado em 13/08/1991 na América.

Placa-mãe

Image
Placa-mãe
Revisão 'SNS-RGB-CPU-01'.
Revisões anteriores tinham o Subsistema de Som conectado como uma placa-filha, as mais recentes unificaram ambos as PPUs.
Image
Placa-mãe com partes importantes rotuladas

Diagrama

Image
Diagrama de arquitetura principal
Os barramentos "A" e "B" são barramentos de endereço, o barramento de dados segue as trilhas do barramento "B" e possui 8 bits de largura.

Uma breve introdução

Parece que a Nintendo conseguiu trazer a próxima geração de gráficos e sons sem usar componentes caros disponíveis no mercado. Entretanto, há um porém: o novo console também foi projetado com a expansibilidade em mente. Num mundo onde as CPUs estão evoluindo mais rápido que a velocidade da luz, a Nintendo acabou dependendo dos cartuchos de jogos para fazer seu console brilhar.


CPU

A escolha do processador do Super Nintendo é peculiar. Ao contrário de seu concorrente que incluía um 68000 completo, o chip do SNES não é uma mudança radical de seu antecessor. Recapitulando, o NES usava uma CPU 6502 modificada, um ingrediente admirado dos computadores do final dos anos 70 e início dos anos 80. Agora, para pavimentar o caminho para a nova década (os anos 90), a Nintendo optou por uma solução mais conservadora (e mais barata): o 65C816, uma extensão de 16 bits do 6502.

Modernizando o 6502

A CPU 65C816 tem sua origem da Western Design Center, especialmente de Bill Mensch, um ex-membro da equipe 6502 da MOS e, antes disso, parte da equipe 6800 da Motorola. Em 1978, um ano após deixar a MOS, Mensch fundou a Western Design Center (WDC), uma empresa de semicondutores que envia clones do MOS 6502 com melhorias atraentes (ou seja, projeto CMOS, instruções extras, correções de circuito, novos modos de endereçamento, etc.).

Um dia, a Apple procurou a WDC para projetar uma variante retrocompatível do 6502 que pudesse processar quantidades maiores de dados. Esse projeto tornou-se o 65C816 que, após alguns contratempos durante a fase de desenvolvimento, a Apple finalmente o usou em uma nova máquina chamada Apple IIGS.

Enquanto isso, a Nintendo estava desfrutando de um bom relacionamento com a Ricoh e seu conjunto de chips sob-medida para o NES. Não encontrei o documento exato que conecte a Ricoh com a WDC, mas o que posso confirmar é que, em algum momento, a WDC concordou em licenciar seus projetos do 65C816 com a Ricoh [1]. Consequentemente, a Ricoh adaptou o projeto aos novos requisitos do Super Nintendo e o nomeou de Ricoh 5A22, fornecido exclusivamente à Nintendo.

A nova CPU

Como já apresentado, o processador principal deste console é o Ricoh 5A22, uma CPU de 16 bits.

Ao contrário do Apple IIGS, que desfrutava de retrocompatibilidade com o software Apple II, o Super Nintendo não é compatível com os jogos do NES (embora, ao olhar para a escolha do processador, haja uma leve possibilidade de que o SNES tenha sido originalmente planejado para ser compatível com jogos do NES, quem sabe).

Continuando, a CPU emprega uma velocidade de clock variável que chega até 3,58 MHz durante as operações de registro e até 1,79 MHz ao acessar os barramentos mais lentos (ou seja, a porta serial/controles).

Em resumo, o 5A22 possui as seguintes características:

Adições da Ricoh

O 65C816 foi uma CPU aceitável de propósitos gerais para sua década (os anos 80). No entanto, a Nintendo planejou seu console para durar durante toda a década de 90. Assim, a Ricoh teve que elevar o nível de seu jogo, se me permite o trocadilho.

Como consequência, a primeira atualização aparente foi a adição de unidades de multiplicação e divisão de 16 bits, que fornece à CPU a capacidade de realizar essas operações por hardware (o 65C816 não inclui nenhuma instrução dedicada para este tipo de operações aritméticas).

Acesso rápido à memória

A segunda adição foi duas DMA exclusivas (Direct Memory Access) que habilita a transferência de dados sem a intervenção da CPU (resultando velocidades maiores). Para que esse projeto funcione, as regiões de memória são referenciadas usando dois barramentos de endereços diferentes [6]:

Quando uma DMA é configurada, a origem deve vir de um barramento diferente do destino.

Além disso, as duas DMA não são idênticas e fornecem funcionalidades muito distintas [7]:

Por fim, o sistema fornece oito canais para configurar as transferências do DMA, permitindo enviar até oito transferências independentes de uma só vez.

Falha de segmentação

Este console também apresenta uma “anomalia” chamada Barramento Aberto: se houver uma instrução tentando ler de um endereço não mapeado/inválido, o último valor lido é fornecido em seu lugar (a CPU armazena esse valor em um registrador chamado Registro de Dados da Memória ou MDR, do inglês Memory Data Register) e a execução continua em um estado imprevisível.

Para comparação, o 68000 usa uma tabela de vetores para lidar com exceções, então a execução será redirecionada sempre que uma falha for detectada.


Gráficos

Depois de tudo o que foi dito até agora, deixe-me dizer que o subsistema gráfico deste console é um verdadeiro trabalho de engenharia. Com uma CPU tão limitada, alguém poderia imaginar que o SNES nunca poderia competir com seu concorrente, o Motorola 68000 com seus “32 bits”. No entanto, os engenheiros da Nintendo e da Ricoh conseguiram encontrar truques inteligentes que tiram proveito da forma como os monitores CRT se comportam, expandindo assim as capacidades do console sem exigir componentes caros de última geração.

De qualquer forma, antes de aprofundarmos, recomendo fortemente que você leia primeiro artigo sobre o NES, pois ele apresenta conceitos úteis que serão revisitados aqui.

Projeto

Como qualquer outro console de sua geração, o Super Nintendo desenha gráficos usando tiles 2D (8 x 8 píxeis). O NES originalmente realizava isso agrupando a “Unidade de Processamento de Imagem” (PPU, do inglês * Picture Processing Unit*) que projetava a imagem em sincronia com uma tela CRT. O Super Nintendo segue o mesmo caminho, mas agora implementa técnicas mais sofisticadas para obter resultados mais ricos.

O chipset

O Super Nintendo possui dois chips PPU diferentes que constituem o subsistema gráfico, os quais combinados são conhecidos como Super PPU ou “S-PPU”. Ambos os pacotes PPU são projetados para servir diferentes funcionalidades [8]:

Essa separação, do ponto de vista da programação, é redundante, dado que ambos os chips são virtualmente tratados como um só.

Modalidades de exibição

O sistema produz uma resolução padrão de 256 x 224 píxeis a ~60 Hz (NTSC) [9]. A versão europeia PAL produz uma resolução de 256 x 240 píxeis a ~50 Hz em vez disso (para atender à especificação PAL). Seja como for, a maioria dos jogos não utiliza os píxeis extras e exibe faixas pretas em cima e embaixo da tela.

Aqui está a parte complicada: as TVs tradicionais têm uma proporção de aspecto de 4:3. No entanto, se fizermos as contas, a resolução de saída do Super Nintendo tem a proporção de aspecto de 8:7. Consequentemente, após projetarr a imagem na TV, ela parecerá esticada horizontalmente, como se fosse um quadro de 292 x 224 píxeis (no caso da versão NTSC) [10]. Em outras palavras, poderíamos dizer que os píxeis no Super Nintendo têm uma proporção de aspecto de 8:7 em vez de serem “perfeitamente quadrados”.

Image
Quadro renderizado com a resolução de 256 x 224 píxeis. É assim o quadro que o console envia para a TV.
Image
Quadro esticado como visto na TV (com uma resolução aparente de 292 x 224 píxeis).
Kirby’s Dream Land 3 (1997).

Alguns jogos, como “The Legend of Zelda: A Link to the Past”, considera esse fator, de modo que as formas são explicitamente projetadas achatadas, o que parece correto após serem esticadas pela TV. Isso, no entanto, é um caso excepcional, já que a maioria dos jogos não toma medidas extras para lidar com esse fator.

Organizando o conteúdo

Image
Arquitetura de memória da S-PPU.

Por motivos de custos e desempenho, os dados gráficos são distribuídos em três regiões de memória:

Construindo o quadro (frame)

Vamos agora ver como um quadro é renderizado no console e posteriormente exibido na TV. Para fins de demonstração, Super Mario World é usado como exemplo.

Tiles

Image
Alguns Tiles de 16x16 encontrado na VRAM.

Assim como seu antecessor, o S-PPU usa tiles para construir gráficos sofisticados. Embora haja melhorias significativas em comparação ao PPU original:

  • Os cartuchos de jogos não estão mais conectados a PPU, portanto, os tiles terão que ser copiados para a VRAM primeiro (assim como no Mega Drive da Sega). É aí que a unidade DMA se torna muito útil.
  • Os Tiles não estão mais restritos a sua dimensão (8x8 píxeis), a partir de agora eles também podem ter tamanho de 16x16 píxeis.
  • Quando os tiles são armazenados na memória, eles são comprimidos dependendo de quantas cores por píxel precisam ser usadas. A unidade de tamanho é bpp (bits por píxel). O valor mínimo é de 2 bpp (onde cada píxel ocupa apenas dois bits na memória e tem apenas 4 cores disponíveis) enquanto o máximo é 8 bpp, que codifica até 256 cores (com o custo de consumir um byte inteiro).

Plano de fundo

Image
Camada de plano de fundo 1 (BG1).
Image
Camada de plano de fundo 2 (BG2).
Image
Camada de plano de fundo 3 (BG3).
Mapas de plano de fundo na VRAM.
Image
Camada de plano de fundo renderizada (BG1).
Image
Camada de plano de fundo renderizada (BG2).
Image
Camada de plano de fundo renderizada (BG3).
Image
Camadas de plano de fundo renderizadas combinadas.
Camadas de plano de fundo renderizadas após aplicação de seleção e transparência.

O Super Nintendo pode gerar até quatro planos de fundo diferentes. Usando tiles de 8x8 ou 16x16, os blocos são feitos de 32x32 píxeis (tiles de 2x2). Dito isso, o tamanho de cada camada de fundo pode ser de até 1024x1024 píxeis de tamanho (32x32 tiles). A região na VRAM onde essas camadas são configuradas é chamada de Tilemap e é estruturada como uma tabela (valores contínuos na memória).

Cada entrada no Tilemap contém os seguintes atributos:

  • Valores de flip vertical e horizontal.
  • Prioridade (0 ou 1).
  • Referência da paleta na CRAM.
  • Referência de tile.

Como sempre, esses planos são roláveis, embora o número de recursos disponíveis (cor, número de camadas, região de rolagem independente e tamanho de seleção) dependerá do modo de plano de fundo ativado no S-PPU, o que nos leva à próxima seção…

Modos

A S-PPU fornece muitas operações para planos de fundo, mas elas não podem ser escolhidas arbitrariamente. Em vez disso, existem oito modos de plano de fundo para escolher, cada um fornecendo um conjunto diferente de recursos [11]:

  • Modo 0: 4 camadas com 4 cores cada.
    • A paleta de cores é particularmente sem graça, já que este modo é o único que permite o maior número de camadas.
  • Modo 1: 2 camadas com 16 cores cada + 1 camada com 4 cores.
    • Uma camada pode ser dividida em primeiro plano e plano de fundo.
    • Este é o modo mais comum usado.
  • Modo 2: 2 camadas com 16 cores cada.
    • Este modo tem um efeito extra: as camadas podem ter cada uma de suas colunas roladas independentemente (semelhante aos efeitos do Game Boy, mas rolados verticalmente).
  • Modo 3: 1 camada de plano de fundo com 128 cores + 1 plano de fundo com 16 cores.
    • As cores podem ser definidas como valores RGB em vez de usar as referências da CGRAM.
  • Modo 4: Modo 2 e 3 combinados (rolagem de coluna + mapeamento de cores RGB).
    • A primeira camada possui 128 cores e a segunda possui apenas 4.
  • Modo 5: 1 camada com 16 cores + 1 camada com 4 cores.
    • A área selecionada terá uma resolução de 512 x 224 píxeis, é espremido horizontalmente para caber na tela (o quadro de saída ainda é de 256 x 224 píxel!). Isso vem com o custo de renderizar tiles de 16x8 píxeis como um de 8x8, e de 16x16 píxeis como um de 8x16.
    • Além disso, a resolução vertical também pode ser expandida ativando entrelaçamento (atingindo 512 x 448 píxeis que é agora proporcional à dimensão de saída). Em troca, o mesmo efeito de espremer afetará também os tiles verticalmente. Isso é útil para os casos em que a tela precisa exibir quantidades extras de informações (ou seja, durante o modo multijogador/tela dividida).
  • Modo 6: combinação do Modo 2 e 5 (alta resolução + rolagem de colunas), mas apenas uma camada com 32 cores é permitida.

Como você pode ver, os programadores agora têm a opção de priorizar o número de cores, camadas, efeitos ou resolução da área selecionada.

Sprites

Image
Camada de sprite renderizada.

Uma área da memória chamada Object Attribute Memory (OAM) armazena uma tabela com referências de até 128 sprites com as seguintes propriedades [12]:

  • Tamanho: a PPU pode combinar até 16 pequenos tiles na forma de um quadrante de 4x4 tiles para construir um sprite.
  • Referências do tile: o valor aponta para os tiles usados para desenhar o sprite.
  • Posição na tela. Somente os sprites posicionados na área visível serão renderizados.
  • Prioridade: como várias camadas se sobrepõem uma nas outras, o gráfico com a maior prioridade será exibido, isso também é determinado pelo modo de plano de fundo em uso.
  • Slot da paleta de cores, permitindo escolher 9 slots da CGRAM.
  • Flip X/Y.

A S-PPU pode desenhar até 32 sprites por linha de varredura, ultrapassar isso fará com que o S-PPU descarte os sprites com menor prioridade.

Resultado

Image
Tada!

A S-PPU desenha cada varredura na tela dinamicamente, processando primeiro a parte respectiva de cada camada e depois as mesclando.

Uma das principais restrições dos jogos do NES era o fato de só poderem atualizar seus gráficos durante o V-Blank. O momento em que o feixe do CRT estava retornando ao ponto de partida fornecia um intervalo de tempo razoável para reorganizar alguns tiles sem quebrar a imagem.

Bem, agora, graças às novas capacidades do SNES, essa limitação ganhou um significado diferente.

Veja bem, como as novas unidades de DMA/HDMA agora permitem que os programadores realizem transferências de memória sem esperar pelo V-Scan [13], os jogos agora podem atualizar tiles, cores e registradores sem esperar que todo o quadro seja desenhado. Na verdade, podemos ir, além disso: como agora é possível mudar as configurações da S-PPU durante o meio do quadro, isso significa que é possível ativar diferentes modos de plano de fundo em diferentes estágios do mesmo quadro, abrindo a porta para novos projetos originais de jogos!

Aquela funcionalidade

Para ser sincero, eu ainda não mencionei a funcionalidade mais importante deste console…

Image
Camada de plano de fundo renderizada.
Image
Mapa de plano de fundo alocado.
Image
Quadro renderizado na tela.
O primeiro quarto das linhas de varredura usa outro modo para simular a distância, o Modo 7 começa no segundo quarto (isso é possível graças ao HDMA).
F-Zero (1990).

Apresentando o Modo 7, mais um modo de plano de fundo, mas desta vez, com uma forma completamente diferente de trabalhar. Embora possa renderizar apenas uma única camada de fundo de 8 bpp, ele fornece a capacidade exclusiva de aplicar as seguintes transformações afins nesse plano [14]:

  • Translação.
  • Escala.
  • Rotação.
  • Reflexão.
  • Cisalhamento.

A S-PPU é controlada com uma matriz de rotação para alterar os parâmetros desse modo. Não entrarei em álgebra linear aqui, mas dependendo do efeito desejado, a CPU terá que executar algumas funções trigonométricas (seno e cosseno) para preencher as entradas dessas tabelas adequadamente. Isso é realmente caro para a 65C816, mesmo com o uso de precisão de ponto fixo. Por esse motivo, com a 5A22, a Ricoh adicionou registradores de multiplicação e divisão para aliviar alguns ciclos.

A propósito, observe que a lista de transformações não menciona a perspectiva, que é o que você vê no jogo de exemplo (F-Zero). Isso é alcançado alterando a matriz de rotação em cada chamada do HDMA, criando um efeito pseudo-3D no processo. Isso deve dar uma ideia de quão prático é a S-PPU!

Finalmente, devido ao alto número de cálculos necessários, o mapa de memória é alterado para otimizar o pipeline das duas PPUs, o primeiro processa o Tilemap (onde os tiles são referenciados) enquanto o segundo busca o Tileset (onde os tiles são armazenados).

Causas das quedas de quadros

Um outro tópico, você já se perguntou o que causa a lentidão dos jogos? Quando a interrupção V-Blank é chamada para permitir a atualização gráfica, às vezes o jogo ainda está executando um código pesado e pula a janela V-Blank, os gráficos não podem ser atualizados até a próxima chamada V-Blank e, como o quadro não foi atualizado, isso se manifesta como uma queda na taxa de quadros.

Isso também pode acontecer de forma oposta, um processamento extensivo durante um V-Blank não permitirá que o PPU produza o sinal de vídeo (pois o barramento está bloqueado). Assim, linhas pretas durante uma varredura serão exibidas, embora isso seja pouco perceptível, já que os quadros são atualizados 50 ou 60 vezes por segundo.

Uma saída de vídeo conveniente

Todos os avanços mencionados serão inúteis, a menos que o console envie a imagem para a TV através de um meio que ambos possam entender. Com o Super Nintendo, a empresa estreou algum tipo de conexões universais, mas proprietária, chamada de Multi Out, que pode transportar vários tipos de sinais simultaneamente, incluindo vídeo composto, S-Video e RGB [15].

Junto ao console, a Nintendo incluiu um cabo “Multi Out para video composto”, já que essa era praticamente a forma comum de entrada de sinal nas TVs naquela época. Na Europa, no entanto, a porta SCART também era muito popular, já que muitos decodificadores e videocassetes dependiam dela. Uma grande coisa sobre o SCART é que ele também pode transportar muitos tipos de sinais, isso permite que o equipamento AV use o tipo de sinal mais adequado sem encontrar problemas de compatibilidade. Infelizmente, a Nintendo nunca lançou um cabo SCART oficial que aproveitasse os pinos RGB expostos no Super Nintendo.

No entanto, a Nintendo alterou o esquema de pinos de seus consoles PAL para cumprir o protocolo SCART e, ao fazer isso, substituiu o pino “sincronização de video composto” por um de 12 volts (que informa à TV para definir a proporção de 4:3). Então, mesmo que o Multi Out seja “universal”, os cabos RGB resultantes, se houver, são específicos por região.

Penso que os benefícios reais do Multi Out começaram a se tornar evidentes durante os tempos atuais, pois permitiu que os usuários aproveitassem o sinal RGB com suas modernas televisões sem alterar os componentes internos do console. Embora, ao contrário do vídeo composto e do S-Video, o RGB exige um sinal extra de “sincronização”. Para isso, o cabo pode ser conectado para capturar o sinal de sincronização do vídeo composto ou do S-Video; ou para melhores resultados, use uma linha de sincronização dedicada chamada “sincronização de vídeo composto”. Mas, como mencionado no parágrafo anterior, apenas os consoles NTSC tinham essa última opção.


Áudio

Assim como as habilidades gráficas, o departamento de áudio deste console passou por uma grande reformulação. Eu diria que ele até mesmo oferece as técnicas de síntese mais avançadas de sua geração.

Arquitetura

Algumas empresas se associaram à Yamaha, enquanto outras desenvolveram uma solução interna. Bem, a Nintendo se associou à Sony (o conglomerado de eletrônicos e criadores do Walkman) para fornecer a eles um sintetizador sofisticado. Assim, a Sony lhes deu dois processadores: um DSP que pode sequenciar e mixar amostras; e uma CPU que comanda esse DSP.

Portanto, o subsistema de áudio resultante do console é composto por:

Este bloco funciona em paralelo com a CPU principal. Quando o console é ligado, o SPC700 inicializa uma ROM interna de 64 bytes que o prepara para receber comandos da CPU principal [17]. Depois disso, ele fica inativo.

Canais usados para melodia.
Os tambores foram escolhidos para fins de demonstração.
Todos os canais de áudio.
StarFox (1993).

Para o S-SMP começar a realizar um trabalho útil, ele precisa carregar um programa conhecido como driver de som. Este último instrui o chip como manipular os dados de áudio brutos que a CPU principal envia para a PSRAM e também como comandar o S-DSP.

Como você pode ver, o subsistema de som foi um grande avanço em comparação com a geração anterior, mas também foi desafiador programá-lo. A documentação que a Nintendo forneceu era notável por incluir explicações incompreensíveis e ignorar recursos importantes, então coube aos programadores conduzir suas próprias pesquisas.

Como consequência, foram encontrados muitos drivers de som diferentes no mercado [18], e alguns deles acabaram apresentando recursos surpreendentes.

Controle de tom

O dobramento de tom (Pitch bending) permite produzir notas diferentes utilizando a mesma amostra. O S-SMP incluía um recurso de dobrador de tom útil para alterar o tom de foma suave. Dê uma olhada neste canal extraído de Mother 2/Earthbound, ambos os exemplos vêm da trilha sonora original, no entanto, o primeiro tem o controle de tom desativado.

Sem modulação de tom.
Com modulação de tom habilitada.

Evolução do NES

Para demonstrar a evolução dos sons do NES para o Super NES, aqui estão duas partituras musicais, uma de um jogo do NES e outra de sua sequência no Super NES. Ambas usaram a mesma composição:

Mother (1989).
Mother 2/Earthbound (1994).

Uso avançado

Canais usados para melodia.
Os tambores foram escolhidos para fins de demonstração.
Todos os canais de áudio.
Kirby’s Dream Land 3 (1997).

Aqui está uma composição mais rica em instrumentos que tira grande proveito do dobramento de tom, eco e envelope.

Essa combinação de técnicas permitiu que a música utilizasse no total apenas cinco canais de som, deixando os outros três canais para efeitos sonoros.

Confusão estéreo

Os controles de volume do DSP são organizados em blocos com valores de 8 bits com sinal [19], o que significa que o volume pode ser configurado com valores negativos. Mas espere, se “0” significa mudo, o que um número como “-1” faz? Bem, ele inverterá o sinal.

Isso é particularmente usado para criar um efeito de ambiente (surrounding) diferenciado, que é realizado configurando os canais estéreos para saírem fora de fase (um canal envia o sinal normal e o outro envia o mesmo sinal, mas invertido).

Infelizmente, o abuso dessa funcionalidade resulta em resultados muito desagradáveis (por exemplo, a sensação de que a música está vindo de dentro da sua cabeça), então você notará que a maioria dos emuladores de SNES simplesmente ignora essa configuração.

Além disso, o estéreo fora de fase é cancelado em dispositivos mono, então esses jogos tiveram que incluir um seletor estéreo/mono para evitar silenciar sua própria trilha sonora.


Jogos

Para ser franco, o programa principal é escrito em linguagem de montagem (assembly) do 65816 e o driver de música é escrito em linguagem de montagem do SPC700. Receio que você não encontrará nenhuma das comodidades disponíveis em equipamentos do século XXI.

No entanto, foram distribuídas algumas ferramentas pela Nintendo, pela Intelligent Systems e pela Ricoh para facilitar a vida dos programadores, incluindo [20]:

Curiosamente, vários estúdios de jogos como Argonaut Software, Accolade, SN Systems e outros também desenvolveram seus próprios equipamentos internos que forneceram mais capacidades do que as ofertadas oficialmente (ou seja, editor de memória, leitor de disco flexível, kit de desenvolvimento como uma placa-filha ISA, etc.) [21].

Configuração do Cartucho

Quando se trata de acessar o cartucho, as coisas ficam muito mais confusas em comparação com o modelo de mapeamento relativamente mais simples do NES. Ainda assim, acho interessante, especialmente para entender como ele poderia ser expandido.

O 65C816 usa um barramento de endereço de 24 bits, o que permite acessar até 16 MB de dados. No entanto, devido à forma como o console é projetado, parte do espaço de endereçamento é consumido por componentes mapeados em memória. Além disso, o 65C816 possui apenas 16 linhas de endereço que são combinadas com um registrador interno para formar um endereço de 24 bits. Isso é análogo a abrigar um mapeador interno e exigir comutação de bancos para acessar dados extras além dos limites do barramento de endereço. Se você ler outros artigos da mesma geração, encontrará essa metodologia um tanto familiar.

Image
Exemplo de placas de cartuchos projetadas com diferentes configurações [22].
De cima pra baixo: LoROM (ROM dupla com SRAM alimentada por bateria), LoROM (ROM simples com SRAM alimentada por bateria) e LoROM (ROM simples)

Dito isso, quando se trata de projetar cartuchos, há diversas maneiras de conectar eletricamente os pinos de endereço entre a ROM e a CPU. Cada uma se aproveita da comutação de bancos de uma maneira diferente. Existem dois modelos fundamentais que permitem acessar até 4 MB de ROM e 64 KB de SRAM [23], e eles funcionam assim:

Em ambos os casos, grande parte do espaço da ROM é espelhada em toda a área restante do espaço de endereçamento da CPU, mas aqui está a parte interessante: uma metade do espaço pode ser lida a ~2,68 MHz enquanto a outra pode atingir 3,58 MHz.. Isso só ocorrerá se o chip de ROM suportar a velocidade mais alta e o sinal FastROM da CPU estiver habilitado [25].

Algo que ainda não mencionei é que os cartuchos que contém SRAM também precisam ter um chip MAD-1 (ou similar) para realizar a decodificação de endereço. Isso é especialmente necessário para selecionar corretamente os pinos que escolhem entre chips de ROM e de SRAM [26].

Além da convenção

Agora, se os programadores precisarem de mais espaço, é aí que entra em jogo os modelos derivados da LoROM e HiROM. Por exemplo, duas variações comumente referidas como ExHiROM e ExLoROM expandem o espaço de endereçamento da ROM, reduzindo a área espelhada. Ambas podem acessar cerca de 7,9 MB de ROM.

Image
Star Fox (1993) usa o chip Super FX GSU para renderizar superfícies 3D (a S-PPU apenas enxerga a camada de plano de fundo feita de tiles erráticas).

Alternativamente, e o mais importante, a LoROM e a HiROM também podem ser adaptadas para abrigar chips de aprimoramento no cartucho. Esses são processadores adicionais que expandem as capacidades do console. Para citar alguns exemplos de novas configurações:

  • O modelo MMC permite a troca de bancos pelo chip local de aprimoramento. Isso foi usado por componentes como S-DD1 ou o SPC7110, ambos descompressores de hardware de *tiles.
  • O modelo Super Accelerator System foi projetado para o muito aclamado SA-1, uma CPU secundária baseada no 65C816 que opera a 10,74 MHz e possui funcionalidades extras. Ele se baseia no modelo MMC com circuitos para componentes mapeados em memória.
  • Duas configurações extras, uma baseada em LoROM e outra em HiROM, abrem caminho para a série de chips DSP. Estes são os mesmos derivados da CPU NEC µPD77C25, mas executando um programa diferente. Eles fornecem cálculos de vetores e matrizes [27] e diferentes jogos os usam para calcular transformações afins, descomprimir gráficos e calcular o caminho mais curtos.
  • O modelo SFX tem como alvo o popular chip Super FX GSU. Esta configuração mapeia até 8 MB de ROM, onde 2 MB são compartilhados entre a CPU principal e o Super FX. O restante do espaço de endereço também inclui RAM de backup e SRAM. O Super FX é um processador proprietário feito pela Argonaut que se especializa em renderização de superfícies 3D e transformações afins 2D, os resultados são então transmitidos como tiles para que a S-PPU possa exibi-los. Um punhado de jogos notáveis o usou para desenhar modelos 3D e/ou estender o Modo 7 para sprites (já que o Modo 7 só pode transformar fundos).

É difícil ignorar o impacto que essa engenharia teve nos jogos durante os anos 90, muitos dos quais conseguiram superar as expectativas destes consoles sem exigir módulos de expansão e afins. Pode-se dizer que isso dificultou os planos da Nintendo de lançar um sucessor do SNES (o que pode explicar por que jogos em estágio de desenvolvimento avançado como Star Fox 2 foram cancelados).


Anti-pirataria / Trava de região

Como o Super Nintendo, a Nintendo mais uma vez se tornou a única autoridade na distribuição dos jogos. Assim, em uma tentativa de fazer cumprir as regras da empresa, os engenheiros desenvolveram três camadas diferentes para proteger os cartuchos contra distribuição por terceiros (e, consequentemente, evitar a violação dos direitos autorais).

Em primeiro lugar, o formato dos cartuchos é diferente entre as regiões, para que eles não encaixem com consoles de regiões diferentes. De qualquer forma, qualquer pessoa poderia facilmente contornar isso usando um adaptador de terceiros.

Em segundo lugar, o console, assim como o NES, ainda incorpora o sistema de proteção 10NES para impedir a distribuição não autorizada. De qualquer forma, o chip CIC acabou sendo clonado.

Como camada final (feita especialmente para proteger contra pirataria), os jogos também incluíam uma cadeia de verificações de pirataria, como:

  1. Comparar o tamanho do SRAM (as cópias piratas normalmente incluem grandes blocos de SRAM para funcionar com qualquer tipo de jogo).
  2. Uma série de checksums no código para verificar se a comparação anterior foi removida. Essas verificações seriam dispersas em diferentes partes do jogo, tornando-as difíceis de encontrar.

Isso poderia ser anulado removendo manualmente essas rotinas, mas, naturalmente, levaria um tempo significativo para encontrar todas. Afinal, elas seriam espalhadas pelo jogo apenas para frustrar o jogador (e eventualmente fazê-los comprar uma cópia legítima). Verdade seja dita, você notará que a maioria das ROMs encontradas na internet teve todas as suas verificações de pirataria removidas.


Isso é tudo pessoal

Image
Meu SNES modificado com um cartucho americano.
Este jogo foi lançlado apenas nos EUA. Por sorte, um rapaz estava vendendo isso em Glasgow!

Contribuir

Este artigo faz parte da série Arquitetura dos Consoles. Se você o achou interessante, por favor, considere fazer uma doação. A sua contribuição será usada para financiar a compra de ferramentas e recursos que me ajudarão a melhorar a qualidade dos artigos existentes e dos que estão por vir.

Donate with PayPal
Become a Patreon

Você também pode comprar a edição eBook em inglês. Eu trato os lucros como doações.

Image

Uma lista de ferramentas desejáveis e as mais recentes aquisições para este artigo são mantidas aqui:

### Interesting hardware to get (ordered by priority)

- Any cartridge using enhancement chips (£5 - ?)

### Acquired tools used

- PAL SNES modded to play 60Hz NTSC (£40)
- NTSC game (not cheap...)

Como alternativa, você pode ajudar sugerindo alterações e/ou adicionando traduções.


Copyright and permissions

This work is licensed under a Creative Commons Attribution 4.0 International License. You may use it for your work at no cost, even for commercial purposes. But you have to respect the license and reference the article properly. Please take a look at the following guidelines and permissions:

Article information and referencing

For any referencing style, you can use the following information:

For instance, to use with BibTeX:

@misc{copetti-snes,
    url = {https://www.copetti.org/writings/consoles/super-nintendo/},
    title = {Super Nintendo Architecture - A Practical Analysis},
    author = {Rodrigo Copetti},
    year = {2019}
}

or a IEEE style citation:

[1]R. Copetti, "Super Nintendo Architecture - A Practical Analysis", Copetti.org, 2019. [Online]. Available: https://www.copetti.org/writings/consoles/super-nintendo/. [Accessed: day- month- year].
Special use in multimedia (Youtube, Twitch, etc)

I only ask that you at least state the author’s name, the title of the article and the URL of the article, using any style of choice.

You don’t have to include all the information in the same place if it’s not feasible. For instance, if you use the article’s imagery in a Youtube video, you may state either the author’s name or URL of the article at the bottom of the image, and then include the complete reference in the video description. In other words, for any resource used from this website, let your viewers know where it originates from.

This is a very nice example because the channel shows this website directly and their viewers know where to find it. In fact, I was so impressed with their content and commentary that I gave them an interview 🙂.

Appreciated additions

If this article has significantly contributed to your work, I would appreciate it if you could dedicate an acknowledgement section, just like I do with the people and communities that helped me.

This is of course optional and beyond the requirements of the CC license, but I think it’s a nice detail that makes us, the random authors on the net, feel part of something bigger.

Third-party publishing

If you are interested in publishing this article on a third-party website, please get in touch.

If you have translated an article and wish to publish it on a third-party website, I tend to be open about it, but please contact me first.


Fontes / Continuar lendo

Áudio

Processador

Jogos

Gráficos

Fotografia


Rodrigo Copetti

Rodrigo Copetti

Espero que você tenha gostado deste artigo! Se você quer saber mais sobre o autor toque aqui e se você gostaria de apoiá-lo toque aqui ao em vez disso

rsslinkedintwittergithub facebookreddit