Incompatibilidade do Roland
Eletrônica

Incompatibilidade do Roland


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...

- Outra Rotina De Detecção De Ram 48/128k
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...

- Ad Astra E Interface 2
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...

- Detecção De Ram 48/128
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;...

- Thundercats V. 2 Para Basic 128
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...

- 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








.