sábado, 26 de maio de 2012

Disassembly do UniLoader

Em postagem anterior apresentei um vídeo que gravei, com o esquema de carregamento de fita e proteção UniLoader para o jogo do TK90X intitulado Ikari Warriors, da Elite Systems. Este esquema tem o diferencial de apresentar intermitência de borda multicolorida, ao invés dos tradicionais vermelho/ciano e azul/amarelo.

Desta vez fiz uma análise completa do UniLoader, que foi empregado em vários jogos como pode se ver nesta listagem do World of Spectrum.

A descrição pormenorizada da estrutura da fita e do carregamento é dada pelo documento IkariLoading.txt e a listagem disassembly, por IKARLoad.txt. Desta vez estou experimentando compartilhar arquivos através do Google Drive, se alguém tiver problemas para os visualizar, peço que me avise. Ainda estarei utilizando o 4 Shared também.

A rotina de carregamento é bem parecida com a da ROM do TK90X com poucas modificações, entre elas a que controla a cor da borda da tela exibida. O trecho a seguir mostra o acréscimo de código para alternar as cores em sequência:

      LdEdSample:
65435    4        inc b           ; Count each pass.
65436    c8       ret z           ; Return carry reset & zero set if 'time-up'.
65437    3e 7f    ld a,#7f        ; Read EAR and bottom left row of keyboard
65439    db fe    in a,(254)      ;(SPACE key).
65441    1f       rra             ; Shift byte to right.
65442    a9       xor c           ; Test the byte against the 'last edge-type'.
65443    e6 20    and #20   
65445    28 f4    jr z,LdEdSample ; Jump back if it has not changed.
65447    79       ld a,c          ; Change the 'last edge-type'.
65448    2f       cpl   
65449    4f       ld c,a   
; The following lines are different from ROM routine.
65450    f5       push af         ; Save registers prior to be used.
65451    e5       push hl   
65452    21 ff ff ld hl,BColor    ; HL points to border color variable.
65455    34       inc (hl)        ; Increment border color counter.
65456    7e       ld a,(hl)       ; Take value from variable, but keep
65457    e6 07    and #07         ;only the 3 least significant bits (color
65459    f6 08    or  #08         ;value) and set bit 3 (MIC off).
65461    d3 fe    out (254),a     ; Send this value to ULA port.
65463    e1       pop hl          ; Restore registers.
65464    f1       pop af
; End of lines that differ from ROM routine.
65465    37       scf             ; Signal the successful search.
65466    c9       ret             ; End of subroutine.


Agora só falta eu tentar simular o mesmo comportamento para carregar o jogo a partir de disco Beta 48.

Nenhum comentário:

Postar um comentário

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