sexta-feira, 24 de fevereiro de 2012

Bug na Explorer III

Conforme mencionei em postagem passada, a minha interface Explorer não fornece valor do registrador do PSG AY-3-8912 na porta 65533, como ocorre no ZX Spectrum 128. Isto traz uma incompatibilidade que não é percebida na maioria dos programas, mas me deparei com o demo "The Last 48" que simplesmente fica travado na tela abaixo.


Achei a parte do programa que trava quando não há um valor esperado na porta 65533. A listagem assembly é a seguinte:

41294   LD A,8        ; Seleciona registrador 8 do PSG.
        LD BC,65533   ; BC aponta a porta 65533.
        OUT (C),A
        IN A,(C)      ; Lê conteúdo do registrador 8 e verifica se é
        CP 14         ;igual a 14.
        CALL Z,41898  ; Se for, chama sub-rotina em 41898.
41308   POP BC        ; Recupera todos os registradores.
...     ...
41320   POP IY
41322   JP 56         ; Endereço da rotina de interrupção mascarável
                      ;em 56/#38.


O que se pode ver acima é que IN faz a leitura da porta 65533 e somente se a leitura resultar no valor 14, chama uma sub-rotina. Na minha Explorer, isto nunca ocorrerá e o programa fica esperando para sempre. A propósito, testei em dois emuladores e, se a PSG estiver ausente (portanto a porta não fornece o valor), o demo trava da mesma forma.

Pedi na postagem anterior para que alguém me ajudasse a testar as suas interfaces e relatasse o resultado. Somente uma pessoa fez isso (obrigado, José Roberto) e me disse que nem a interface antiga, nem a nova acusaram leitura na porta 65533. Num outro teste, ele relatou que nem faz leitura da porta 49149.

Eu não esperava tal resultado, pois pelo esquema da Explorer II, era para acusar leitura na porta 65533. Porém depois foi descoberto que na Explorer III há um erro na descodficação que faz com que a porta 49149 seja lida no lugar. O Daniel (Danjovic) prontamente criou uma correção para Explorer III, disponível na lista TK90X, que envolve em mexer um pouco na placa de circuito impresso. Não tenho como testar esta correção pois a minha interface está coberta de Durepóxi (um dia ainda faço outra interface para mim). Ainda assim, na minha modesta opinião, considero melhor a solução adotada na interface Melodik (o esquema elétrico pode ser encontrado no site ZX Magazín).

Concluindo, creio que a maioria das Explorer produzidas tenham que ser modificadas, se o usuário quiser obter maior compatibilidade. Talvez a origem de certos travamentos misteriosos em programas venham daí.

Nenhum comentário:

Postar um comentário

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