Detecção de RAM 48/128 no Bubble Bobble
Eletrônica

Detecção de RAM 48/128 no Bubble Bobble


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

- Dica Tv Electronia 20nt Chassis 11ak30
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         ...

- Dica Tvs Panasonic Tx-32pk25f Chassis Euro-4h
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           ...

- Dica Tvs Panasonic Tx-25xd3e Chassis Euro 2m
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       ...

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

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



Eletrônica








.