Graças aos arquivos enviados pelos amigos da lista TK90X (obrigado, Colella e Wesley), eu acredito ter encontrado a origem da incompatibilidade do Bubble Bobble no TK90X.
Somente um dos arquivos enviados, "Bubble Bobble (1987)(Firebird).tap", funciona com TK90X e Spectrum NTSC (este último testado no emulador). Depois descobri que este arquivo pode ser encontrado no Planet Emulation.
Após fazer alguns
disassemblies no emulador, pude encontrar a rotina que faz a detecção do modelo do computador, se é 48 ou 128K. No Bubble Bobble original encontrado no
World of Spectrum:
64195 IM 1 ; Modo de interrupção padrão do Sinclair BASIC.
EI
HALT ; Aguarda 1 interrupção.
64199 LD BC,0 ; Contador de temporização.
LD HL,0 ; Zera variável de sistema FRAMES (23672-23674).
LD (23672),HL
LD (23673),HL
LD E,0 ; Contador de 256 tentativas.
64213 LD A,255
LD HL,23672 ; Aponta para LSB de FRAMES.
;
64218 INC E ; Aumenta valor de contador e se atingir limite de
JR NZ,64222 ;256 tentativas, não aumenta contador BC.
INC BC ; Aumenta contador BC.
64222 CP (HL) ; Verifica se o LSB de FRAMES atingiu valor 255.
JR NZ,64218 ; Senão, repete o loop.
;
LD A,B ; Se BC não for 1886 assume que o computador é 128K.
CP 7
JR NZ,64239
LD A,C
CP 94
JR Z,64244
64239 LD A,128 ; A=128 sinaliza 128K.
64241 JP 64059
;
64244 LD A,48 ; A=48 sinaliza 48K.
64246 RET
Foi a primeira vez que vi tal detecção ser feita com base na temporização fornecida pelas interrupções mascaráveis. A frequência desta interrupção é de 50 Hz nos Spectrum 48 e 128, mas o
clock do Z80 nos dois modelos diferem. Um
loop é executado com temporização baseada na variável de sistema FRAMES (TVCOUNT) e, dependendo do valor obtido, decide-se qual é o modelo presente.
Obviamente tal rotina não irá funcionar com computadores de 60 Hz, certamente irá acusar erroneamente que há 128K de RAM. Neste caso a música PSG AY-3-8912 (
Explorer) será tocada, porém como não há o banco de RAM 4, uma parte da memória será corrompida. Aparentemente esta alteração da memória não é um problema muito sério, pois parece que só prejudica os gráficos, mas o jogo consegue rodar.
Já no arquivo TAP, há indícios de que alguém
hackeou o trecho de detecção de capacidade de RAM:
64195 IM 1
EI
LD A,(23388) ; Verifica último byte enviado à porta 32765.
CP 0 ; Se for 0, computador é de 48K.
64203 JR Z,64244
64205-64238 NOP ; Trecho apagado.
64239 LD A,128 ; A=128, sinaliza 128K.
64241 RET
64242 NOP
; Trecho apagado.
64243 NOP
64244 LD A,48 ; A=48, sinaliza 48K.
64246 RET
Nesta versão, o programa corretamente não executa a música para Explorer, nem faz uso do banco de RAM 4. Entretanto usa a variável de sistema em 23388, que só existe para o
128 BASIC. Portanto se for rodar na
TKMEM-128 sem a ROM 128 ativada, irá se comportar como se a expansão não existisse.
loading...
Defeito--Não liga. Led vermelho aceso. Ao tentar ligar, o led passa a verde mas, no mesmo instante, o led volta para vermelho e a fonte da tv não arma.Valores ...
Defeito--Imagem a preto e branco ou com as cores alteradas com manchas como se o TRC estivesse magnetizado. Foi regravada a eeprom mas não resultou. Em ...
Defeito--Este tv estava em protecção, trazia o transístor de saída de linhas (2SD1577- LB) em curto. Depois de o substituir, o tv arrancou apresentando o seguinte ...
Graças aos arquivos enviados pelos amigos da lista TK90X (obrigado, Colella e Wesley), eu acredito ter encontrado a origem da incompatibilidade do Bubble Bobble no TK90X. Somente um dos arquivos enviados, "Bubble Bobble (1987)(Firebird).tap", funciona...
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...