Eletrônica
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.
loading...
-
Poke Inusitado No Panic Dizzy
Encontrei este POKE quando estava examinando o carregamento de fita do jogo Panic Dizzy. Logo no início da rotina em código de máquina encontrei uma instrução que colocava o valor 255 no endereço 65408. Prosseguindo no disassembly do próprio...
-
Dica: Voltar Ao Basic Sem Perder Código De Máquina
Há ocasiões em que, como hacker do TK90X, desejamos poder voltar ao BASIC a partir de um programa em código de máquina. Por exemplo, quando queremos salvar um bloco de bytes em fita cassete ou em disco Beta 48. Entretanto grande parte dos programas...
-
Adaptação De Jogos De Fita Para Beta 48 (parte 8)
Hoje eu fiz a adaptação de Rogue Trooper para o Beta 48 e, como venho elaborando uma série mostrando como se faz isto, aproveito para apresentar mais uma técnica. Deste vez abordarei como usar visualizador de memória do emulador Fuse. Apesar de mostrar...
-
Adaptação De Jogos De Fita Para Beta 48 (parte 7)
Continuando a adaptação do Sanxion 128k, um decodificador foi quebrado e a listagem da rotina de carregamento da fita tornou-se disponível. Fazendo um disassembly desta rotina que começa em 64896, há várias operações envolvendo principalmente...
-
Debugger Do Fuse (parte 1)
Lá nos idos dos anos 1980-90 hackear um jogo do TK90X significava carregar (da fita cassete!) programas tipo monitor/debugger e ficar copiando listagens disassembly a mão, num caderno. Depois criar os hacks e digitar num assembler para salvar... novamente...
Eletrônica