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 :
- Diferentes tipos de unidades de desenvolvimento com a capacidade de serem controladas por um depurador (debugger) de uma máquina hospedeira (geralmente rodando MS-DOS).
- Cartuchos graváveis (também conhecidos como Flashcarts). Não para pirataria, mas para permitir que desenvolvedores testem seu código em unidades comerciais.
- Montadores (assemblers) do 65816 e do SPC700.
- Manuais de desenvolvimento que explicam, de uma perspectiva de baixo nível, como este console funciona. Eles também podem incluir diretrizes e normas que os desenvolvedores devem seguir para obter a aprovação de seus jogos pela Nintendo (obrigatória para distribuição).
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.) .
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.

Exemplo de placas de cartuchos projetadas com diferentes configurações .
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 , e eles funcionam assim:
- Com o modelo LoROM, os dados da ROM estão disponíveis em blocos de 32 KB com 128 bancos para escolher . A SRAM, por outro lado, cabe em dois bancos, mas pode ser acessada através de 15 bancos onde os dados da ROM também podem ser encontrados.
- Isso significa que o jogo/programa pode precisar realizar uma comutação significativa de bancos durante a execução. Por outro lado, metade dos bancos também são mapeados para parte da WRAM (o que significa que tanto a ROM, SRAM e WRAM podem ser acessadas sem comutação de bancos).
- Com o modelo HiROM, o espaço da ROM ocupa bancos inteiros, o que significa que os dados estão disponíveis em blocos de 64 KB com 64 bancos para escolher. Isso requer menos comutação de bancos, mas não permite ler ROM, WRAM e SRAM dentro do mesmo banco.
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 .
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 .
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.

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 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).