TK128

Em 8 de fevereiro de 2010.


Quando entrei para a lista TK90X em 2007, uma das primeiras coisas que eu ouvi foi sobre o projeto "TK128" do Jorge Braga. Pelas fotos que ele divulgou era uma interface que se propunha a transformar o TK numa versão de Spectrum 128. Nessa época eu ainda não tinha um 128 e logicamente me interessei pelo projeto, mas por motivos que desconheço, o Braga não foi adiante e a história acabou morrendo com o tempo.

Anos mais tarde consegui meu primeiro +2, objeto de desejo desde 1986, e finalmente pude ver na práticas as reais diferenças entre o modelo 48kb e o 128k:
- Um ótimo teclado
- 128kb de memória
- Chip de Som AY
- Midi e porta serial
- Saída para teclado auxiliar
- Saída de Monitor
- Gravador K7

Bom, Midi, Porta serial e teclado auxiliar são completamente dispensáveis. Gravador K7 pode ser usado externamente sem problema algum. Saida de monitor pode ser adaptada com alguma facilidade. Então o que realmente é o 128? Memória e chip de som, que alias, bem ou mal uma interface de som AY pode ser ligada externamente e existe aos montes por ai. Resta então o verdadeiro problema. Os 128kb de memória.

Coincidentemente um tempinho atras alguém da lista passou um link do site hw.speccy.cz onde entre outras coisas havia um antigo projeto do Pavel "Zilogator" Cimbal. Para quem não lembra do nome, ele é também o autor da DivIDE original, mas o projeto em questão tratava-se de um gerenciador de memória, 128kb, compatível com o esquema de bankswitching do Spectrum 128. Depois de estudar por várias horas o esquema, cheguei a conclusão que com algum esforço ele poderia ser usado também no nosso TK90X/95. Digo "algum esforço" porque como sabemos existem várias diferenças entre os TKs nacionais e o Spectrum original, então tive que rearranjar vários sinais para que a coisa ficasse compatível.

Peço licença agora ao Braga para usar o antigo nome do projeto dele e apresento a minha versão do TK128. A minha proposta é bem mais simples que o protótipo original e resume-se somente ao gerenciamento de memória. Apesar de simples a proposta se mostrou completamente compatível com o Spectrum 128 original inclusive os jogos. Depois do TK convertido para TK128 basta acrescentar externamente uma interface AY para você ter toda a beleza e glória de um verdadeiro Spectrum 128. ;) A transformação tem dificuldade MUITO elevada e não deve ser tentada pelos iniciantes. Até mesmo o pessoal mais experiente vai acabar "apanhando" um pouco para botar o bicho pra funcionar. Pretendo fazer um tutorial mais completo com várias fotos para facilitar, mas por enquanto farei apenas a explicação básica do que deve ser feito para que os mais apressados possam já indo se divertir em casa com esse mod.

1 - Instalando os primeiros 64kb da memória "alta"

Componentes necessários:
2 chips de memória 4464 ou equivalente (64kb x 4 bits)
2 soquetes 18 pinos


Curiosamente dobraremos os 32kb originais do TK economizando quatro CIs! No Spectrum original são 8 CIs de memória de 32kx1 bit e numa decisão da Microdigital por aqui fizeram com 4 CIs de 16kx4 bits, mas necessitando de mais dois TTLs para o refresh. Imagino que fizeram assim talvez por uma facilidade maior de conseguir os chips por aqui.

Primeiramente retire os quatro chips de memória 4416. Eles estão nas posições u21 a u24. Lembrando que a retirada de CIs é uma tarefa que exige experiencia. A placa do TK tem trilhas muito finas e podem ser facilmente danificadas.

Coloque soquetes nas posições u22 e u24 e encaixe dois CIs de memória 4464 conforme a foto abaixo. Atente para o lado correto para o encaixe. O semi-circulo dos chips devem ficar para o mesmo lado de todos os outros CIs da placa. Na minha placa já existiam os soquetes. Não é necessário soldar os quatro soquetes no lugar, já que somente dois espaços serão utilizados.


Agora precisamos redirecionar alguns sinais e mataremos a parte do circuito de refresh que não será mais usada. O 74LS157 montado na posição u6 tem dois conjuntos de portas que estão vagas conforme o esquema do TK90X desenhado pelo Braga. Aproveitaremos essas portas para as novas memórias. Compare as mudanças nas duas imagens abaixo.


Conforme mostram as imagens, você precisa desligar o pino 8 vindo de u26 (74LS00) e a linha A6 do Z80 ligado diretamente no pino 14 das memórias. Desligue também o sinal /CAS0 saindo de u25 (74LS00). Feito isso ligue a linha A7 vindo do Z80 no pino 2 do 74LS157 em u6 e a linha A6 também do Z80 no pino 3 deste mesmo CI. A saída desse 157, pino 4 você liga em qualquer das duas memórias memórias, no pino 14.

Na outra porta vaga desse 157 (u6) irá o A14 vindo da CPU no pino 11 e o 5v (VCC) no pino 10. A saída, pino 9, irá em qualquer uma das duas memórias no pino 10. Agora é preciso ligar o /CAS que originalmente tinha sido dividido em dois (/CAS0 e /CAS1) em u25. Acompanhando o esquema, o /CAS sai o pino 8 do CI 27 (74LS32). Ligue-o diretamente no pino 16 de qualquer uma das duas memórias.

Não tenho ainda as fotos de todo esse processo, mas eu fiz cortando as trilhas da placa mãe e fazendo wiring com fio bem fino, que o pessoal chama de "fio de desbloqueio" por ser muito usado em video games. É um fio rígido, encapado, bitola 32.

Note que você não precisa retirar o 74LS00 da posição u26 nem o 74LS74 da posição u5. Eles podem ficar na placa, mas não estarão mais sendo usados. Parte dos CIs u25 e u28 também perderam a função e podem ser aproveitados para alguma outra tarefa no futuro.

Confira atentamente todas as ligações e ligue o TK. Ele deverá bootar normalmente mostrando a tela inicial com o padrão de cores. Digite agora o comando "CLEAR 65535" e o TK deve responder com "Executado". Se der "Ramtop inválido" ou o TK travar na inicialização teve algum galho na montagem e tudo precisa ser revisado novamente.

Se tudo correu bem, parabéns, seu TK é o mesmo de sempre, só que agora com 4 CIs a menos. Na verdade ele já está com 32kb a mais, mas não existe ainda a parte eletrônica para acessar a memória extra.

2 - Instalando os outros 64kb

Componentes necessários:
8 chips de memória 4164 ou equivalente (64kb x 1 bit)
8 soquetes 16 pinos


Com os primeiros 64kb funcionando, passamos agora para a segunda parte. Retire os 8 CIs da memória de video (4116 ou 4516) das posições u13 a u20 e solde soquetes. ATENÇÃO: não coloque os chips novos ainda!

Os chips antigos utilizam as voltagens +5V, +12V e -5V, enquanto que os novos somente a +5V. É Necessário desligar todas as voltagens primeiro e ligar corretamente o 5V.

Fiz um pequeno diagrama mostrando as diferenças entre os dois chips e as ligações que são necessárias. Os pinos que não foram nomeados são idênticos nos dois chips e não precisam ser modificados. Note também que fiz o desenho invertido, na mesma posição que o chip fica na placa, para facilitar.


Desligue a linha de -5V retirando da placa o diodo D21, o resistor R67 e o capacitor C50. Para a linha de 12V na minha placa não estavam marcados os nomes dos componentes, mas devemos desligar o diodo abaixo do capacitor eletrolítico C49 e o resistor de 150R em montagem "aranha" por cima o resistor original R66. Não retire o capacitor C49 nem o resistor R66! Só citei-os como referência para encontrarmos os componentes certos. Atente para o fato que na antiga linha do 5V que se tornará a nova linha A7, existem capacitores de desacoplamento que precisão ser desligados. São os C29 e C22. Com isso desligamos o -5V e o +12V. Ligue o TK ainda sem os CIs e confira as voltagens no soquete. O TK não vai funcionar, é somente para termos certeza que o +12v e o -5v foram desligados.

Se estiver ok, desligue o TK e solde uma linha de 5V no pino 8, onde originalmente existia os 12V. Ligue novamente o TK e confira as voltagens. No momento precisamos de 5V nos pinos 8 e 9 e o pino 1 desconectado. O pino 9 (A7) receberá posteriormente uma conexão vinda do circuito de bankswitching mas por enquanto ela fica em +5V para os testes.

Com essa segunda conferência realizada com sucesso, desligue o TK e instale as novas memórias, os oito chips 4164. Atente para o lado correto. O semi-circulo dos chips devem ficar para o mesmo lado de todos os outros CIs da placa. O TK deverá iniciar normalmente com a tela mostrando os padrões coloridos. Novamente digite o comando "CLEAR 65535" onde o TK deverá responder com um "Executado". Se o TK não bootar, reconfira as voltagens das memórias e as ligações. Preste atenção também para se não houve nenhuma inversão de chip.

Se tudo correu bem, parabéns, você já tem os 128kb de memória instalado, faltando apenas a parte eletronica para o bankswitching.

3 - O circuito do mapeamento

Componentes necessários:
1 chip de lógica programável GAL20V8 (necessita gravação deste arquivo)
1 74LS174
2 resistores 3K3
1 soquete 16 pinos
1 soquete 24 pinos "estreito"
2 soquetes 40 pinos TORNEADOS
1 barra de pinos "simples" reta 1x40 180o
1 barra de pinos torneada cilindrica 1x40 180o (veja explicação e foto abaixo)


Ok, nesse ponto o TK está com 128kb, mas ele não sabe ainda! É necessário a confecção de um pequeno circuito para que ele possa fazer o chaveamento da memória.

Depois de algum estudo decidi que a melhor montagem seria sobre o conector do Z80, porque quase todos os sinais estão presentes ali, faltando alguns poucos que eu soldaria com fios depois. Eu roteei uma pequena placa que encaixa no lugar do Z80, portanto é o caso de você retirar o Z80, colocar o CI na plaquinha e esta no soquete. Vai ficar claro no decorrer da descrição desta etapa.

Você pode pegar a placa neste link. Ela já está espelhada pronta para a impressão. Pelo tamanho reduzido eu fiz a minha usando o método de transferência térmica e consegui um resultado perfeito.


Siga o diagrama acima para a montagem. Solde primeiramente os "jumpers" indicados na imagem em vermelho. Eu usei pequenos pedaços de fio rigido.

Solde então os 3 soquetes. Veja que no caso do soquete maior, de 40 pinos, ele entra por cima dos jumpers. Em seguida solde os dois resistores.

Com um estilete (faca Olfa) corte um pedaço da barra de pinos reta com 5 pinos e mais dois pedaços com 2 pinos. Solde-os na placa nos furos J1, J2 e J3.

Neste momento a placa estará completamente montada, faltando só o encaixe para soquete original do TK. Para melhorar o contato elétrico e evitar qualquer tipo de problema eu troquei o soquete original do TK por um torneado de boa qualidade e usei uma barra de pinos também torneada para fazer o encaixe. Veja na foto abaixo como a barra de pinos torneada que necessitamos se parece.


Divida a bara de pinos ao meio, 20 pinos de cada lado e solde-a na nossa plaquinha. Veja que o lado mais curto da barra é a que vai na placa e o lado comprido fica pra encaixar perfeitamente no soquete torneado que já está no TK. Preste bastante atenção, porque todos os terminais tem q ser soldados pino a pino no soquete dessa plaquinha. Essa é a parte mais dificil, porque algumas trilhas passam entre os pinos e a solda pode facilmente tocar em duas trilhas muito próximas. Após a soldagem gaste 5 minutos com um multímetro procurando por possíveis curtos.

Veja as fotos de como ficou a minha placa completamente montada.


Com a placa montada e revisada, retire o Z80 do TK e encaixe na nossa placa observando a posição correta do encaixe do CI. Agora coloque a placa no TK como se fosse o Z80, alinhando perfeitamente os pinos no soquete. Perceba que o Z80 deve continuar alinhado para o mesmo lado que estava anteriormente quando foi retirado do TK.

Contudo revisado, re-revisado e tri-revisado, ligue o TK e este deve iniciar normalmente, mas ele continua sem saber que existe os 128kb de memória. No momento estamos testando somente a conexão elétrica da plaquinha. Se tudo está funcionando OK, desligue o TK e passe para o próximo passo. Se travou, revise atentamente as soldas entre o soquete e a barra de pinos. De uma boa revisada também nas outras trilhas da placa, porque com a minha inexperiência em rotear placas, acabei tendo que fazer trilhas muito próximas.

4 - Ligando o mapeamento

Estamos quase lá, mas agora vem a parte realmente complicada da coisa.

Vamos novamente voltar a memória superior. Desligue as ligações dos pinos 9, 10 e 11 do 74LS157 (u6). Elas foram feitas no primeiro passo somente para que o TK continuasse a funcionar normalmente e agora não são mais necessárias. Com isso estamos liberando novamente o que eu chamei de "ponto B" que é a linha A7 das memórias superiores. Esse Ponto B será agora ligado na nossa plaquinha, no conector J1, pino 3, chamado de "FRAMA7" (Fast RAM A7). Basta soldar um pequeno pedaço de fio entre o pino 3 do conector da plaquinha e o pino 10 de qualquer uma das duas 4464. Veja abaixo a primeira imagem com essas mudanças.


Note nas imagens que também precisamos cortar a linha A15 vindo da CPU para o 74LS00, u25, pino 13. Corte também a linha A15 indo pra ULA, pino 38. Agora solde um fio entre esse pino 38 ao pino 13 do u25, fazendo a conexão elétrica entre eles novamente. Isso que eu chamei de "Ponto C" deve ser ligado na plaquinha, no conector J1 pino 1 "NEWA15" (nova linha A15).

Repassando novamente essa parte, a linha A15 da CPU deverá ficar SOMENTE no conector do barramento, pino 1 lado dos componentes, no diodo D9 do conector do teclado e no pino 13 do 74LS32 (U3). A linha "NEWA15" substituirá o A15 nos pino 13 de u25 e no pino 38 da ULA. Revise muito bem essa parte para ter certeza que todas as conexões estão corretas e as linhas A15 e NEWA15 não estão em curto.

No passo 2 nós deixamos o pino 9 das memórias de video ligados no +5V. Corte agora essa conexão. Existem pelo menos duas trilhas que estão levando a voltagem até lá, então com um multimetro, tenha certeza que o 5V não está mais no pino 9 após os cortes. Na plaquinha, ligue o pino 2 de J1 "VRAMA7" (Video RAM A7) no pino 9 de qualquer dessas memórias de video.

As duas ultimas conexões são moleza: o pino 5 de J1 "VSEL" (Seleção da RAM de video) vai ligado na ULA no pino 13 (/RAS). Já o pino 4 de J1 "FSEL" (Seleção da Fast RAM) vai no pino 1 do 74LS157 u6.

Feito isso, reconfira as últimas ligações e ligue o TK. Este deverá iniciar normalmente.

OK, tudo ligado, mas como REALMENTE testar? Eu procurei em vários lugares por algum programa que testasse completamente a memória do Spectrum 128, e o único que eu achei foi uma ROM de teste de um cartucho para a Interface 2. Para facilitar as coisas eu gravei uma Eprom com o programinha (baixe aqui) numa 27C128. Basta retirar a ROM do TK original, espetar essa e ligar. São testados todas as memórias e o circuito de mapeamento e após alguns poucos segundos o resultado aparece na tela.


Hum, problemas na paginação. :(
Depois de dois dias eu encontrei o problema: eram os capacitores de desacoplamento que eu não havia retirado. Já comentei sobre eles no passo 2, não esqueça de retirar os capacitore C22 e C29.

Agora sim! Todas as memórias funcionando perfeitamente.


Bom, o que está faltando pra ser um verdadeiro Spectrum 128? Ah, sim... A ROM!

Grave uma 27C256 com a ROM do 128. Eu fiz uma gracinha na minha mudando apenas as mensagens iniciais e coloquei neste arquivo já pronto para gravar. Não existe NENHUMA diferença dessa pra ROM original a não ser o texto da tela.

Após gravada, coloque a rom no TK, mas levante o pino 27 que deverá ficar fora do soquete. Este pino deverá ser ligado na plaquinha, pino 12 do CI 74LS174. Veja abaixo as fotos do meu TK completamente transformado em TK128.


Abaixo imagens dos primeiros testes.


Certo, mas cade os jogos? Tá ai em baixo...


Todos os jogos que aparecem nas imagens acima são versões 128k. Testei também alguns 48k como Maniac Miner e Trap Door só para ter certeza da compatibilidade. Não pude terstar muitos jogos porque a IDS2001 simplesmente deixou de funcionar. É uma pena, mas posso afirmar com 100% de certeza que a incompatibilidade está no ROM do 128, porque simplesmente retirando a EPROM e colocando a ROM antiga do TK a IDS funciona normalmente, mas não é possivel carregar os jogos de 128 porque com a ausência da ROM eles dão erro de sintaxe e outros problemas malucos quando carregam o bloco em Basic. Imagino que não teria problema com a Beta 128, mas ai já é outra história a ser contada.

Como também não funcionou com a DivIDE, na falta de coisa melhor todos os testes foram feitos com o TK ligado na placa de som carregando os jogos pela porta do K7.

Ok, tudo bem, mas e aqueles dois jumpers que tem na placa?

O jumper J3, o "UNRAIN" serve para corrigir um pequeno bug da ULA que inclusive está presente também na ULA do TK. É um pouco dificil de explicar sem entrar em termos técnicos, mas o problema ocorre quando o Z80 faz um ciclo de refresh nos endereços entre 4000h e 7FFFh. Como esse intervalo de endereços é a memória de vídeo que também é acessada pela ULA e o barramento é separado apenas por resistores, digamos que a ULA e o Z80 "brigam" pelo controle. Para ilustrar, digite o seguinte programa abaixo:

 5 CLEAR 32760
10 POKE 32768, 243
20 POKE 32769, 62
30 POKE 32770, 64
40 POKE 32771, 237
50 POKE 32772, 71
60 POKE 32773, 251
70 POKE 32774, 201
80 RANDOMIZE USR 32768

O programa acima disassemblado seria
8000 f3        di      
8001 3e40      ld      a,40h
8003 ed47      ld      i,a
8005 fb        ei      
8006 c9        ret    

O programa seta o Vetor de Interrupção do Z80 para o intervalo a partir de 4000h, permitindo que o bug seja claramente visto. No momento que você der um "RUN", a tela fica cheia de "lixo" ou como eles chamam lá fora, RAIN (chuva) ou SNOW (neve).


O "UNRAIN" serve justamente para corrigir esse bug, e quando o jumper está fechado, não deixa que os ciclos de refresh do Z80 aconteçam no espaço da memória de video. Desligue o TK, feche o jumper e digite e rode o programa novamente.

Viu? Não tem mais "rain".


O outro jumper, marcado como J2 é o "FASTIO" é, segundo a escassa documentação que consegui, serve para acelerar a transferência de setores quando usado com uma IDE. Como não é o nosso caso, todo o resto funciona e eu não tenho como testar, assumo que esteja funcionando. Fiz testes com esse jumper aberto e fechado e para o funcionamento "normal" do TK128 não fez nenhuma diferença aparente.

Concluindo, como pode ser observado, este mod apesar de simples é bem difícil de ser feito. É o caso de fazer com atenção, sem pressa e com um bom tempo livre. Se você quer um clone de Spectrum 128 completamente funcional, não desista!

Aproveito para dizer que tentei inúmeros contatos com o Zilogator para pedir permissão para a publicação do esquema desse gerenciador de memória, mas não obtive resposta. Deixo avisado que a qualquer momento poderei tirar este artigo do ar caso ele venha a negar o meu pedido algum dia.

Abaixo, minha homenagem ao projeto original do Braga, as fotos que ele divulgou do protótipo na época.




Atualizado em 31 de maio de 2010:

O amigo Marcus Garrett me emprestou a Beta 128 para os testes. Baixei algumas imagens TRD em sites russos e rodaram sem nenhum problema no TK128. Abaixo algumas fotos dos testes.


Dúvidas ou sugestões, utilize o espaço abaixo.


Voltar - Home


Comente



COMENTÁRIOS DESABILITADOS NO MOMENTO! RETORNAM EM BREVE
É expressamente proibido a reprodução total ou parcial deste texto sem a minha devida autorização por escrito.