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:
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.
loading...
Eu publiquei nesta postagem, uma rotina que faz a detecção no TK90X da configuração com ou sem a TKMEM-128 (128 ou 48K de RAM). Modifiquei-a e consegui fazer com que ficasse menor ainda (25 bytes). Esta rotina testa se ocorre chaveamento entre...
Depois que o meu joystick passou a funcionar, comecei a testá-lo na entrada existente no TK90X. Quando tentei jogar Ad Astra, percebi que o controle não funcionava como deveria. No menu acima, as opções 5 e 6 corresponderiam às duas entradas disponíveis...
Conforme tinha prometido na postagem sobre incompatibilidade do Bubble Bobble, eu vou mostrar a rotina de detecção de tamanho de RAM 48/128K que elaborei na ocasião. A ideia era fazer uma rotina que não altere o conteúdo da RAM a ser testada;...
Mal acabei de lançar uma adaptação do Thundercats para Beta e TKMEM-128 e estou com a versão 2. A versão anterior tinha um problema: não consegue carregar a partir do BASIC 128, portanto tinha que dar um 'USR 0' antes. Na versão 2 não...
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...