Eletrônica
Incompatibilidades da porta 254
Apesar do TK90X ser um clone muito próximo do ZX Spectrum, capaz de rodar grande parte dos programas do original britânico, sofre algumas incompatibilidades em hardware e em software.
Um dos problemas foi encontrado no OTLA, um projeto que permite carregamento de programas a velocidades muito altas em computadores clássicos. O carregamento rápido simplesmente não funciona no TK90X. Fabio Belavenuto resolveu investigar a fundo e chegou à conclusão que se devia à diferença de comportamento da porta 254.
O que se conhece por porta 254 é o endereço de entrada/saída destinado à comunicar-se com o ULA do TK90X. No modo de entrada serve para ler o teclado e o estado do sinal EAR oriundo do gravador cassete. As funções de cada bit desta porta são:
Bit | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|
Função como entrada (leitura) | não usado | EAR | não usado | teclado |
Função como saída (escrita) | não usado | não usado | não usado | som | MIC | cor da borda |
|
Conectores EAR e MIC na parte traseira do TK90X. Foto: Leonardo Suárez. |
Uma das incompatibilidades conhecidas é a entrada EAR no bit
D6. No ZX Spectrum este bit tem o mesmo valor que o último enviado para a saída MIC (bit D3), que é normalmente 0. No TK90X o circuito de entrada EAR é seguido por um amplificador com um transistor em configuração emissor comum que, na ausência de um sinal de áudio, não conduz e deixa o bit D6 estável no valor 1. Por isso programas que assumem este bit como sendo 0 simplesmente não funcionam. Existem soluções de hardware propostas para contornar este problema ou, alternativamente, modificar os próprios programas, como fiz com o jogo
Samurai Warrior.
|
Menu do jogo que não funciona devido à porta 254 incompatível |
A outra incompatibilidade conhecida está relacionada com o bit
D7 que, no TK90X, tem valor 0 devido ao famoso diodo
D1 que o liga ao pino 10 do ULA. No Spectrum o valor deste bit é 1. Para aumentar o grau de compatibilidade deve-se remover este diodo, providência esta que já vem tomada de fábrica para o TK95.
A terceira incompatibilidade foi descoberta recentemente, durante as investigações feitas por Fabio Belavenuto sobre
OTLA, que não funciona no TK90X. O carregamento era interrompido assim que certas cores de PAPER eram colocados no vídeo. O Fabio descobriu que o carregamento rápido não funcionava por causa do bit
D5 estar flutuante, isto é, não conectado à nada.
A princípio isto parece não afetar nada, pois os resistores
pull-up do barramento de dados obrigam qualquer bit flutuante a assumir valor 1. Entretanto o ULA está sempre varrendo a região da RAM com dados de vídeo, para criar a imagem de TV em tempo real e, em certas condições, acaba deixando um sinal residual no barramento. Este sinal acaba "contaminando" o bit D5 flutuante. Os outros bits estão conectados e não sofrem do problema, a não ser que o diodo D1 não esteja na placa do TK90X, que deixaria o bit D7 flutuando.
A porta 254 pode pegar um resíduo de sinal deixado pelo ULA, quando este leu um valor de atributos situados nos endereços 22528 a 23295 (#5800 a #5AFF). Os atributos são valores de cores associados a cada conjunto de 8×8 pixels, com os seguintes nomes: INK, PAPER, BRIGHT e FLASH. Todos estes atributos são armazenados dentro de um byte, com a seguinte estrutura:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|
Atributo | FLASH | BRIGHT | PAPER | INK |
Se o bit mais significativo do PAPER (D5) for 0, o ULA pode acabar escrevendo este valor quando é feita leitura da porta 254. As cores de PAPER com esse bit em nível baixo são preto, azul, vermelho e magenta. Caso o diodo D1 esteja ausente, o bit D7 também pode ser afetado se o FLASH for 0.
Para saber qual o comportamento da porta 254 de seu computador, basta digitar e rodar o seguinte programa BASIC.
10 LET b=128: PRINT AT 10,0;
20 LET i=IN 254
30 IF i>=b THEN PRINT 1;: LET i=i-b: GOTO 50
40 PRINT 0;
50 LET b=INT(b/2): IF b THEN GOTO 30
60 GOTO 10
Na tela aparecem os 8 bits que são lidos da porta 254. No emulador após digitar o programa e rodar com
LIST 10: GOTO 10, aparece na tela:
Os bits D0 a D4 permanecem 1 a não ser que uma tecla seja pressionada. O bit D6 fica estável em 0 e os bits D5 e D7 em 1. Este comportamento independe do valor de atributos da tela.
No meu TK90X, observei que o valor do D6 é 1, como já era esperado. Os valores de D5 e D7 dependem dos atributos presentes no vídeo, pois no meu equipamento já havia removido o diodo da placa. Se ambos os bits estão em 1 (FLASH 1 e PAPER>=4) para todos os atributos da tela, a leitura da porta 254 se mantém estável, com todos os bits igual a 1.
Porém quando FLASH for 0, o bit D7 lido oscila e de vez em quando aparece valor 0. Coisa semelhante ocorre quando PAPER<4, mas nesse caso é o bit D5 que oscila.
Agora fica possível entender o motivo do OTLA não funcionar. Este programa considera não somente o bit D6 (EAR) da porta 254, mas do byte inteiro. Com isto, qualquer oscilação acaba perturbando a leitura.
Convido os leitores a digitarem e rodarem o pequeno programa acima, para relatar os resultados aqui nos comentários.
loading...
-
Autor Do Sidewize E Um Truque Para Sincronização
Os leitores do Cantinho do TK90X podem estar preocupados com a falta de postagens, mas acreditem, estou bastante envolvido com o hobby. Para dar uma dica do que tenho feito, mostro este link. Mas o assunto que me fez escrever hoje é outro. Eu estava...
-
Mais Investigações Sobre O "efeito Rodland"
Fiz mais algumas investigações sobre o bug detectado na ULA clonada. Na tela acima, observa-se uma linha vertical clara logo à direita da fadinha ruiva (fica mais visível sob ampliação). Deixando todos os atributos em branco e preto (PAPER 7 e...
-
Descoberto Segundo Bug Na Explorer
Wesley Camargo (autor desta mod) alertou da incompatibilidade da Explorer dele com os programas Sokoban e New Wave. No equipamento dele, um bug descoberto anteriormente já teria sido consertado. O Sokoban nem rodava, resultando em reset, e o demo...
-
Rom E Porta 254 (parte 2)
Após investigação sobre a ROM original do TK90X, ficou claro que o bit 7 da porta de entrada 254 define qual idioma - português ou espanhol - seria exibido nas mensagens. Resolvi fazer um teste nos emuladores de que disponho, usando a imagem...
-
The Fury (martech)
Estive trabalhando na adaptação do jogo The Fury para TK90X da Martech, para funcionar na interface de drive Beta 48. Eu achava que ia ser fácil, pois o programa não era protegido, porém a incompatibilidade da porta 254 novamente fez estragos. Após...
Eletrônica