terça-feira, 13 de novembro de 2012

Disassembly das ROMs

Einar Saukas está analisando os dump das ROMs de TK90X e TK95 e as diferenças entre elas estão sendo desvendadas.


A primeira ROM parece ter sido a 9128B como a minha, que está na foto acima (clique aqui para baixar o dump)  O seu disassembly revela:

04aa 112a3a ld de,$3a2a ; $3a2a possui mensagem "Ligue o gravador,
                        ;digite ENTER"
04ad 211e00 ld hl,$001e ; $3a2a+$001e possui mensagem "Conecte grabador,

                        ;digite ENTER"
04b0 1806   jr $04b8
04b2 119113 ld de,$1391 ; $1391 possui mensagens de erro em portugues
04b5 21dc24 ld hl,$24dc ; $1391+$24dc possui msg. de erro em espanhol
04b8 dbfe   in a,($fe)
04ba 17     rla
04bb d0     ret nc      ; bit 7 da porta de entrada $FE seleciona

                        ;portugues (0) ou espanhol (1)
04bc 19     add hl,de
04bd eb     ex de,hl    ; calcula soma, se for espanhol
04be c9     ret

A porta 254 ($fe ou #FE), empregada para ler o teclado e EAR do gravador, foi aproveitada pela Microdigital para definir o idioma das mensagens. Se o bit 7 for 0 seleciona-se o português e se for 1, o espanhol. Ficou claro o porquê do diodo D1 da placa do TK90X, que trazia incompatibilidade: se presente, o idioma seria português e se ausente, seria espanhol.

A segunda versão é a do Leonardo Suárez (clique aqui pra baixar o dump), cuja foto é:
Uma coisa que me chamou a atenção é o uso de uma EPROM de 32 KB ao invés de 16 KB. Será que há 2 ROMs gravadas nela? Talvez uma com mensagens em português e outra em espanhol? O disassembly feito por Einar mostra:

04aa 112a3a ld de,$3a2a ; $3a2a possui mensagem "Ligue o gravador, 
                        ;digite ENTER"
04ad 211e00 ld hl,$001e ; $3a2a+$001e possui mensagem "Conecte grabador, 
                        ;digite ENTER"
04b0 1806   jr $04b8
04b2 119113 ld de,$1391 ; $1391 possui mensagens de erro em portugues
04b5 21dc24 ld hl,$24dc ; $1391+$24dc possui msg. de erro em espanhol
04b8 dbbf   in a,($bf)
04ba 17     rla
04bb 00     nop         ; valor 00(nop) para espanhol ou C9(ret) para 
                        ;portugues
04bc 19     add hl,de
04bd eb     ex de,hl    ; calcula soma, se for espanhol
04be c9     ret

A diferença é que ao invés de ler a porta 254, é feita a leitura da porta 191 ($bf) inexistente, e o valor é ignorado. O que determina o idioma é o byte em $04bb (1211) que, no caso da ROM do Leonardo é 0, que produz mensagens em espanhol (o TK90X dele é uruguaio).

Já o TK95 tem um disassembly muito semelhante à listagem acima, exceto que o byte em 1211 é 201 ($c9) que produz mensagens em português.

A área da ROM a partir de $04aa não é usada no ZX Spectrum, pois segundo Logan e O'Hara, é ocupada por uma rotina do ZX-81 que não foi removida quando o monitor BASIC foi reescrito.

Nenhum comentário:

Postar um comentário

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