quinta-feira, 9 de agosto de 2012

Adaptação de jogos de fita para Beta 48 (parte 9)

O método mais seguro para quebrar as proteções de jogos salvos em fitas é analisar o carregamento desde o início, incluindo um exaustivo disassembly do código de máquina. Entretanto por vezes é vantajoso economizar esforços com alguns truques. Esta postagem estará apresentando o uso do breakpoint baseado em evento de fita cassete, disponível no emulador Fuse.

Tomando como exemplo o jogo Kliatba Noci, adaptado anteriormente, um breakpoint é incluído no debugger do emulador ao digitar o comando: 
br event tape:stop

que irá interromper a emulação logo depois do fim de um bloco de dados da fita.

Janela de debugger do Fuse

Feito isto, basta sair do debugger e carregar o jogo da fita virtual (arquivo 'KLIANOCI.TZX'). Após cada carregamento de dados da fita, a emulação é interrompida e a janela do debugger é aberta. O que se deseja é a interrupção após o último bloco ter sido carregado da fita. Para poder acompanhar melhor o processo de carga, recomenda-se abrir a janela do tape browser ativando a opção Media > Tape > Browse do menu.


Depois de carregado o último bloco, abre-se a seguinte janela:


O campo contendo o disassembly exibe o final do trecho de rotina de carregamento da fita, que é encerrada por uma instrução RET em 65182. Portanto a saída desta sub-rotina dar-se-á no endereço contido na pilha do Z80 que é 64789 (vide coluna à direita do disassembly); este é o endereço a fazer novo disassembly  com o comando:
di 64789

O que se encontra é simplesmente:
64789   JP 24000

Voltando à janela do debugger acima, o valor do ponteiro de pilha (registrador SP) é 23998. Este valor, aliado ao fato da instrução JP 24000 acima, indica que todo o código de máquina situa-se a partir deste endereço. Portanto bastaria salvar toda a RAM a partir deste endereço no disco para poder rodar na Beta. Entretanto há um complicador a mais que é o reduzido espaço de RAM deixado, que impediria o correto funcionamento do DOS. Não é motivo de preocupação, pois basta comprimir com Lerm Code Compressor, como foi explicado anteriormente. Bastaria salvar a tela e o carregador BASIC e, pronto, a adaptação estaria pronta.

Entretanto na adaptação que eu fiz, fui um pouco além. Depois do endereço 24000 há mais alguns decodificadores que podem ser quebrados utilizando breakpoints, como já foi mostrado. O interesse em quebrar os decodificadores é que possibilita a aplicação de POKEs no próprio carregador do disco, sem a necessidade da Multiface 1. Para maiores detalhes de como foi feita a adaptação, veja como baixar o arquivo ZIP nesta postagem.

Nenhum comentário:

Postar um comentário

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