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 em fita cassete!
A coisa ficava um pouquinho melhor com uma Multiface 1, pois era possível interromper qualquer jogo no meio da execução e examinar seu código de máquina. Com o programa Genie a coisa ficava mais fácil (menos difĩcil?) pois era possível ter uma listagem disassembly. Outras aquisições interessantes seriam uma interface de drive e uma impressora. Foi mais ou menos assim a minha trajetória de hacker do TK90X. Quando digo hack, não se trata de piratear, pois nunca comercializei jogos. Eu refiro-me a entender o funcionamento dos programas e modificá-los (exemplos: vidas infinitas, adaptação para rodar em disquete, ...).
Agora temos computadores baratos, ordens de grandezas mais velozes, com mais memória e com periféricos que tornam tudo mais cômodo. Assim é muito mais fácil programas e hackear num emulador rodando num PC moderno. O que eu tenho usado hoje é um PC com Linux e o emulador de ZX Spectrum Fuse. Pretendo apresentar o debugger do Fuse que é uma excelente ferramenta, pois faz tudo que a M1 fazia e muito mais.
Apresentando o debugger
A funcionalidade do debugger é plena apenas com a interface GTK, pois com a interface SDL parece-se mais com uma M1. Assim, falarei apenas sobre a interface GTK, cuja janela é apresentada na figura acima. Ela se abre quando se escolhe o item do menu: Machine > Debugger... . Neste momento a emulação é interrompida e o Spectrum virtual mantém-se congelado.
Esta janela contém informações sobre o estado atual: os valores contidos nos registradores do Z80 e nas flags, o estado das interrupções (IM e IFF) e o valor do último byte escrito nos periféricos presentes (na figura: ULA, AY e 128Mem). Na coluna à direita, há o mapeamento da memória em porções de 8KB, com dado adicional se é gravável (W?) e se sofre contenção pelo ULA (C?). Nas colunas seguintes há: a listagem disassembly do código de máquina em execução, o conteúdo da pilha de máquina (apontada por SP) e os tempos em que ocorrerão certos eventos que afetam a execução.
Do lado esquerdo, abaixo das colunas dos registradores Z80 e do mapa de memória, há uma área com lista dos breakpoints, assunto que abordarei em postagem futura. Logo abaixo há uma linha em que o usuário pode digitar um comando do debugger e pressionar a tecla Enter ou o botão Evaluate para executar (vide adiante)
Por fim, na parte mais baixa da janela há 4 botões:
Por fim, na parte mais baixa da janela há 4 botões:
- Single step: executa uma única instrução do Z80;
- Continue: reinicia a emulação sem fechar a janela do debugger, a qual não é atualizada;
- Break: interrompe a emulação depois de um Continue;
- Close: fecha a janela do debugger e retoma a emulação.
Os comandos providenciam possibilidades que tornam o debugger bem mais útil. Nesta postagem irei apresentar somente 2 tipos de comandos.
base: define a base numérica em que os valores são mostrados na janela, pode ser base 10 (decimal) ou base 16 (hexadecimal).
disassemble or di: o comando di [endereço] define o endereço a partir do qual será feito o disassembly exibido na janela.
Na linha de comandos qualquer valor numérico pode ser expresso como número decimal, (sem prefixo) ou hexadecimal (com prefixo 0x ou $). Além disto, podem ser construídas expressões com as operações aritméticas (+, -, *, /), operadores de igualdade (==) e de desigualdade (!=) e operadores bit a bit AND (&), OR (|) e XOR (^) e operadores lógicos AND (&&) e OR (||). Os seguintes exemplos são válidos:
- base 10 ou base 0xa
- base 16 ou base $10
- di 128*256+31
- di 0x7fff ou di 32767
Eu tinha feito um programinha minusculo em basic pra ler e inserir codigos na memoria...Eu carregava o binario do jogo, alterava o que eu queria, salvava e pronto :) Traduzi alguns jogos pra Logic Software (da Regina Taquetti, la no edficio massom, na sete de setembro) incluindo o Jack the Nipper II :o)
ResponderExcluirA proposito, isso foi a mais ou menos 25 anos atras :)
ResponderExcluirRealmente era uma época heroica para quem se aventurava a hackear programas. Perto disso, mexer num programa do TK90X hoje é mamão com açúcar.
Excluir