PCB do CartuchoLogo após os primeiros testes com meu multicart do atari descobri que havia alguns jogos que ocupavam 8kB e 16kB de memória. Aparentemente esses jogos não poderiam rodar no videogame pois o máximo que o processador (6507) consegue acessar é 4kB. Seria necessário um circuito de bankswitch para controlar os bancos de memória.

Pois bem, entre os jogos de 8KB e 16KB estão os melhores já lançados para Atari como Hero, Dukes of Hazzard e Smurfs. Precisava encontrar uma solução para testar esses jogos. Procurei um pouco (em 2003) e encontrei aquele que hoje é considerado o melhor documento sobre cartuchos de Atari 2600, o Sizes.txt do Kevin Horton. Nesse documento estão listados quase todos os cartuchos lançados e protótipos com seus respectivos sistemas de Bankswitch e mais outros dados. No inicio do texto existe uma descrição de cada sistema e algumas dicas de implementação.

Com essas informações consegui projetar um novo cartucho de testes, desta vez com capacidade não só para jogos normais de 2kB e 4kB mas também para 8KB e 16kB (F8 e F6 respectivamente). Isso já cobre quase 75% dos jogos existentes para o console.

Antes de falar do meu cartucho vamos dar uma relembrada do funcionamento dos dois principais sistemas de bankswitch:

Sistema F8: Neste caso a memória do cartucho é dividida em dois bancos de 4kB cada. Um circuito extra no cartucho monitora os endereços e caso ocorra um acesso ao ponto 1FF8 ou 1FF9 ocorre uma troca do banco de memória. O mapeamento fica:
1FF8 -> Banco 0
1FF9 -> Banco 1


Sistema F6: Parecido com o sistema acima, mas com dois pontos extras em 1FF6 e1FF7. Assim a memória é dividida em 4 bancos de 4kB:
1FF6 – Banco 0
1FF7 – Banco 1
1FF8 – Banco 2
1FF9 – Banco 4


Então, existem várias formas de se fazer essa brincadeira. A mais comum é usando portas lógicas (74LS) e Flip-Flops como esses F6 e F8. Já vi uma implementação F8 num cartucho Zaxxon da Dactar muito parecido com esse F8. Também usava 3 CI´s (um 74LS30 para armadilha de endereços, um inversor 74LS04 e um flip-flop 74LS74). Aparentemente era um cartucho bem antigo, pois nunca mais vi outro igual.

Depois alguém aqui no Brasil descobriu uma forma mais barata de fazer isso com apenas dois CI´s 74LS10. Eu tirei o esquema desse circuito, mas não sei onde coloquei. No momento não tenho nenhum cartucho destes e não posso fornecer mais detalhes. Essa foi a implementação mais comum do F8, muito usada pela Dactar, Atarimania e outros fabricantes. Nunca vi um cartucho F6 nacional, apenas importado e com chip´s bolha na placa.

Cartucho F8 no AtariVoltando a meu cartucho... Não queria implementar um circuito com mais de 2 CI´s por isso pensei que a melhor solução seria uma PLD pequena. Já existiam placas dessas à venda lá fora. Pensei até em comprar uma, mas iria perder a diversão de projetar e montar a minha versão.

Como eu não consegui uma PLD pequena e um gravador tive que tentar uma abordagem mais estranha criando a minha própria PLD. Ou melhor, uma implementação baseada na teoria das PLD´s.

Assim nasceu a EPROM PLD. Uma EPROM comum programada para se comportar como um circuito de bankswitch F8 ou F6. Através de realimentação de endereços consegui emular os Flip-Flops necessários para chavear os bancos.

Seguem os esquemas para F8 e F6:
Esquema Atari cartucho F6

Atari esquema cartucho F8


Baseado no circuito clássico para F8 e no mapeamento de memória do Atari calculei os dados necessários para cada endereço da memória, que ficou assim:

Para F8 (27C128):
0000 a 0FFF = 02

1000 a 1FFF = 00 -> 1FF8 = 00 1FF9 = 01
2000 a 2FFF = 03
3000 a 3FFF = 01 -> 3FF8 = 00 3FF9 = 01

Para F6 (27C256):
0000 a 0FFF = 04

1000 a 1FFF = 00 -> 1FF6= 00 1FF7 = 01 1FF8 = 02 1FF9 = 03
2000 a 2FFF = 05
3000 a 3FFF = 01 -> 3FF6= 00 3FF7 = 01 3FF8 = 02 3FF9 = 03
4000 a 4FFF = 06
5000 a 5FFF = 02 -> 5FF6= 00 5FF7 = 01 5FF8 = 02 5FF9 = 03
6000 a 6FFF = 07
7000 a 7FFF = 03 -> 5FF6= 00 5FF7 = 01 5FF8 = 02 5FF9 = 03

Pelo mapa vemos que abaixo dos endereços 0FFF o sistema do videogame não acessa o cartucho então não é necessário monitorar a troca de bancos. Nos hot sposts a memória coloca em sua saída 0 ou 1 de acordo com o banco e o mantém assim. Este efeito é conseguido ligando a saída ao endereço MSB da própria memória chaveadora, emulando um Flip-flop.

No caso do circuito F6 duas das saídas são usadas para chaveamento de bancos. Pelo esquema dá pra ver que a memória dobrou. Cada Flip-Flop emulado necessita do dobro de memória. Aproveitei e coloquei a famosa inversão do endereço A12 que no Atari é usado como Chip Select do cartucho.

O único problema dessa maluquice é a escolha das memórias. Os tempos de acesso influenciam muito no funcionamento. Com duas memórias EPROM de 150ns o circuito não funcionou de jeito nenhum. Os melhores resultados eu consegui com uma Flash de BIOS recuperada de uma placa mãe velha (90ns) e uma EPROM de 100ns. Os jogos de 16kB são os mais sensíveis. Alguns não funcionaram e outros funcionaram parcialmente.

Em 2005 apresentei esse conceito em minha antiga página e recebi comentários de pessoas que testaram com memórias mais rápidas e não houve problemas. Posso afirmar então que a EPROM PLD funciona.

A última vez que liguei esse cartucho foi em 2005/2006. Abandonei o projeto por falta de memórias mais rápidas. Qualquer hora vou ver se consigo umas de 70ns ou mesmo de 50ns que hoje são comuns em modens ADSL e DVD players para guardar o firmware.

Nota:
Percebi que muitos chegaram até o blog procurando pelo esquema do Atari. Ele pode ser encontrado no site AtariAge nas versões PAL e NTSC. Vale lembrar que o console fabricado no Brasil pela Polyvox é o NTSC com uma placa de Transcoder NTSC para PAL-M.

Atualização 16/03/2015: Fiz um programinha pra gerar os arquivos .bin das memórias e subi para o GitHub.