Recentemente refiz a adaptação de Rodland, mas uma coisa estava me incomodando. As telas de apresentação e de interlúdio desapareciam rapidamente.
A tela acima (aliás, uma das fadinhas parece ser estrábica?) nunca é vista no TK90X com TKMEM-128. Só mostra brevemente a primeira tela da sequência, para logo depois ser apagada.
Como no emulador funciona bem, suspeitei tratar-se de alguma incompatibilidade. Carreguei o programa no Fuse e esperei que o teclado fosse acessado (através da porta 254). Após examinar o disassembly, encontrei o seguinte trecho no banco de RAM 3:
O problema situa-se na instrução
Este é um caso em que o programador não descartou os 3 bits mais significativos da porta 254, para ler o teclado. Estes 3 bits não tem o mesmo valor entre TK90X, TK95 e Spectrum. A solução é reescrever a rotina como na listagem que se segue:
A instrução
Para fazer a alteração acima, basta fazer POKEs em 5 bytes no banco de RAM 3. Mas não é necessário faze-lo, pois já fiz uma versão (2.1) com carregador BASIC modificado. Os arquivos Hobeta encontram-se neste link, outros arquivos podem ser encontrados neste subdiretório.
A tela acima (aliás, uma das fadinhas parece ser estrábica?) nunca é vista no TK90X com TKMEM-128. Só mostra brevemente a primeira tela da sequência, para logo depois ser apagada.
Como no emulador funciona bem, suspeitei tratar-se de alguma incompatibilidade. Carreguei o programa no Fuse e esperei que o teclado fosse acessado (através da porta 254). Após examinar o disassembly, encontrei o seguinte trecho no banco de RAM 3:
62844 LD HL,250
62847 LD C,0
62849 HALT
62850 DEC HL
62851 LD A,L
62852 OR H
62853 RET Z
62854 XOR A
62855 IN A,(254)
62857 XOR 191
62859 JP Z,62849
62862 LD C,255
62864 RET
O problema situa-se na instrução
XOR 191
, onde o flag Zero só é ativado se A contiver valor 191 (%10111111) que, no Spectrum, significa que nenhuma tecla foi pressionada. Neste caso, a instrução seguinte JP Z,62849
irá voltar ao laço em 62849. Se uma tecla for pressionada, o registrador C recebe o valor 255 (deve ser um tipo de flag) e encerra a sub-rotina. Este é um caso em que o programador não descartou os 3 bits mais significativos da porta 254, para ler o teclado. Estes 3 bits não tem o mesmo valor entre TK90X, TK95 e Spectrum. A solução é reescrever a rotina como na listagem que se segue:
62857 OR %11100000
62859 INC A
62860 JR Z,62849
A instrução
OR %11100000
descarta os bits mencionados, INC A
terá resultado 0 somente se nenhuma tecla for pressionada e, nesta situação, JR Z,62849
irá retornar ao laço.Para fazer a alteração acima, basta fazer POKEs em 5 bytes no banco de RAM 3. Mas não é necessário faze-lo, pois já fiz uma versão (2.1) com carregador BASIC modificado. Os arquivos Hobeta encontram-se neste link, outros arquivos podem ser encontrados neste subdiretório.
Nenhum comentário:
Postar um comentário
Seu comentário é bem vindo, mas peço que use este espaço adequadamente.