terça-feira, 13 de novembro de 2012

ROM e Porta 254 (parte 1)

Nas investigações sobre as ROMs do TK90X/95 promovidas por mim e Einar Saukas, com a ajuda de vários amigos, verificamos que o bit 7 da porta de entrada 254 pode interferir na seleção do idioma entre português e espanhol. O TK90X com a ROM mais antiga faz uso deste valor para esta finalidade e, nos computadores brasileiros, o diodo D1 serve para manter o bit 7 em nível lógico 0 (idioma português).

Einar pediu para que os usuários do TK testassem a porta 65534, para descobrir o comportamento da referida porta de entrada. A escolha do endereço 65534 ao invés de 254, é porque o valor lido não terá a interferência do teclado. Eu fiz um programa que faz este teste em diferentes combinações de atributos de cores da tela, que está disponível para fita ou disco Beta neste diretório.

No emulador Fuse, conforme esperado para o ZX Spectrum, o resultado é sempre 191 (todos os bits em nível lógico 1, exceto o bit 6). Porém no meu TK90X, com o diodo D1 removido, não foi o que pude observar:


Ocorrem oscilações de valores porque o ULA contamina o barramento de dados. No TK90X os bits 0 a 4 têm valores definidos em 1, por causa dos sinais do U10 (74LS365) ligados ao teclado. O bit 6 será também 1 pois, por estar ligado ao transistor Q7 que apenas conduz se houver um sinal C.A. no EAR, fica obrigado a estar em nível lógico alto (+ 5V) pelo resistor R74.

Esquema do TK90X, fonte: DataCassete
Não consta o diodo D1 no esquema elaborado pelo Jorge Braga, mas seu papel é o de ligar o bit 7 da porta 254 em nível 0. Como no meu caso este diodo foi removido, o bit 7 fica oscilando. Outro bit que oscila, dependendo do cor do fundo (PAPER) da tela, é o 5 que não está ligado a nada.

Na hora que o ULA acessa a RAM de vídeo para pegar os atributos de cores, este byte permanece no barramento e acaba afetando na leitura da porta 254. Portanto o bit 5 e, no caso de não haver o D1, o bit 7 também, reflete o último valor da RAM lido pelo ULA.

São possíveis casos em que não ocorre oscilação nenhuma (FLASH 1, PAPER>3):



que ocorre oscilação apenas no bit 7 (FLASH 0, PAPER>3):


que ocorre oscilação apenas no bit 5 (FLASH 1  e PAPER<4):


e que ocorre oscilação em ambos os bits 5 e 7 (FLASH 0 e PAPER<4):


O programa que faz o teste é simples, escrito apenas em BASIC:

10 FOR i=0 TO 255: DIM b$(640)
20 FOR n=1 TO 640 STEP 4: LET b$(n TO n+3)=STR$ IN 65534: NEXT  n
40 POKE 23693,i: BORDER INT (i/8-8*INT (i/64)): POKE 23624,i: CLS : PRINT AT 2,0;b$
60 NEXT i: GO TO 10

Nenhum comentário:

Postar um comentário

Seu comentário é bem vindo, mas peço que use este espaço adequadamente.