A interface de drive da Cheyenne Advanced Systems (CAS) vem com uma ROM do ZX Spectrum para contornar a incompatibilidade com a do TK90X. Depois do disassembly da ROM da CAS ter ficado completo, fica possível entender a causa.
Mas, antes, eu preciso ter um meio de emular a interface CAS, pois não a possuo. Para isso, utilizei o emulador SpecEmu rodando no Linux com a ajuda do Wine. Este emulador já possui suporte para a CBI-95, então o que fiz foi substituir o arquivo 'CBI-24.BIN' pelo arquivo da ROM da CAS (na verdade usei link simbólico para simplificar). Ao iniciar a emulação, aparece por um breve momento o logotipo acima. Logo na sequência a tela é corrompida e o teclado deixa de responder.
Depois de um longo tempo o TK emulado reseta e aparece o menu inicial, porém não há como entrar os comandos do BASIC.
Para descobrir a causa, lancei mão do debugger do SpecEmu e fui acompanhando a execução da inicialização do DOS até chegar na sub-rotina que trava a emulação. Acabei na sub-rotina da ROM do TK90X no endereço 24, normalmente acessada pela instrução RST 24 (ou RST #16). O fato de ser uma sub-rotina tipo restart (RST) significa que é bastante acessada e, de fato, é a GET-CHAR que é responsável por analisar os caracteres de uma linha BASIC. No ZX Spectrum esta rotina é:
Voltando à cauda da incompatibilidade, o problema foi a escolha dos endereços 15611 a 15614 para inserir uma modificação. Se esta faixa não é usada no Spectrum, as interfaces Beta 48 empregam a área de 15360 a 15615 para fazer a interface do DOS com o BASIC (por exemplo, no uso de USR 15360 e USR 15363). A interface de drive cuida para que a ROM da Beta seja visível nessa área, mesmo que não haja operações do DOS. Sendo assim, quando se acessa a RST 24, esta sub-rotina não encontra a ROM do TK90X em 15611, mas entra no meio de uma sub-rotina da DOS (INIVARS). Como a GET-CHAR é empregada para analisar os caracteres do BASIC, seu mal funcionamento impede que o computador opere.
Uma vez que foi desvendada a causa da incompatibilidade, resta apontar uma forma de a contornar. Deixarei isto para uma próxima postagem.
Depois de um longo tempo o TK emulado reseta e aparece o menu inicial, porém não há como entrar os comandos do BASIC.
Para descobrir a causa, lancei mão do debugger do SpecEmu e fui acompanhando a execução da inicialização do DOS até chegar na sub-rotina que trava a emulação. Acabei na sub-rotina da ROM do TK90X no endereço 24, normalmente acessada pela instrução RST 24 (ou RST #16). O fato de ser uma sub-rotina tipo restart (RST) significa que é bastante acessada e, de fato, é a GET-CHAR que é responsável por analisar os caracteres de uma linha BASIC. No ZX Spectrum esta rotina é:
24 LD HL,(23645)
27 LD A,(HL)
28 CALL 125 ; 125/#7D - SKIP_OVER
31 RET NC
A Microdigital modificou na sua ROM da seguinte forma:
24 LD HL,(23645)
27 LD A,(HL)
28 CALL 15611
31 RET NC
Pode-se notar que a sub-rotina em 125 foi substituída por uma em 15611, que contém:
15611 CP 2
15613 CCF
15614 JP 37
Foi inserido o par de instruções CP 2/CCF para que fosse possível introduzir mais duas novas palavras-chaves do BASIC (UDG e TRACE). Depois é dado um salto para o endereço 37 que, por fim, volta ao endereço da sub-rotina 125 e prossegue como no Spectrum:
37 RET NC
38 JR 125
Enfim, foi uma modificação meio feia em cima do código da Sinclair, fica muito difícil tentar convencer que o monitor BASIC não foi totalmente "chupado" do original britânico (mas havia a Reserva de Mercado e aí...).Voltando à cauda da incompatibilidade, o problema foi a escolha dos endereços 15611 a 15614 para inserir uma modificação. Se esta faixa não é usada no Spectrum, as interfaces Beta 48 empregam a área de 15360 a 15615 para fazer a interface do DOS com o BASIC (por exemplo, no uso de USR 15360 e USR 15363). A interface de drive cuida para que a ROM da Beta seja visível nessa área, mesmo que não haja operações do DOS. Sendo assim, quando se acessa a RST 24, esta sub-rotina não encontra a ROM do TK90X em 15611, mas entra no meio de uma sub-rotina da DOS (INIVARS). Como a GET-CHAR é empregada para analisar os caracteres do BASIC, seu mal funcionamento impede que o computador opere.
Uma vez que foi desvendada a causa da incompatibilidade, resta apontar uma forma de a contornar. Deixarei isto para uma próxima postagem.
Nenhum comentário:
Postar um comentário
Seu comentário é bem vindo, mas peço que use este espaço adequadamente.