Esta postagem mostra uma aplicação prática de uso do debugger do emulador Fuse.
Para examinar o conteúdo de um programa BASIC faz-se necessário interromper sua execução, mas nem sempre isto é possível, especialmente quando ele foi salvo com autoexecução ativada (comando SAVE "nome" LINE linha_inicio).
Para examinar o conteúdo de um programa BASIC faz-se necessário interromper sua execução, mas nem sempre isto é possível, especialmente quando ele foi salvo com autoexecução ativada (comando SAVE "nome" LINE linha_inicio).
Existem várias maneiras de se fazer isto, como usar o comando MERGE "" com a RAM limpa. Entretanto o MERGE não é infalível, pois o TK90X trava se houver um número de linha ilegal. Um jeito interessante é usar o comando Z (BLOAD) do utilitário STK (pode ser encontrado no World of Spectrum). Aliás o STK foi produzido por um brasileiro e é um excelente utilitário, merece uma postagem própria. Apesar de tudo isso, a proposta desta postagem é apenas mostrar como fazer algo equivalente com o debugger.
Antes de qualquer coisa, entre no debugger (no menu: Machine > Debugger...). Crie um breakpoint (endereço em que a emulação é interrompida quando executada) no endereço 2053, digitando o comando br 2053. Saia do debugger e carregue o programa desejado com o comando LOAD ""; a emulação é interrompida logo em seguida à carga e abre-se a tela do debugger.
Digite então o comando set 23619 128 e saia do debugger. Magicamente retorna-se à linha de edição do BASIC e o programa se torna disponível para ser listado e editado.
Eu vou explicar melhor. O endereço 2053 na ROM fica imediatamente após um programa ser carregado da fita, antes de voltar para ao interpretador BASIC. O comando set do debugger do Fuse é igual ao POKE do BASIC do TK90X e, neste caso, altera a variável de sistema LNJMP/NEWPPC desviar a execução para uma linha acima de 32768, que não deve existir em nenhum programa real (números de linhas legais compreendem valores entre 1 a 9999).
Acredito que esta dica pode ser usada em qualquer emulador com funcionalidade de debugger, mas não posso dizer com propriedade, pois só uso o Fuse.
Acredito que esta dica pode ser usada em qualquer emulador com funcionalidade de debugger, mas não posso dizer com propriedade, pois só uso o Fuse.
Nenhum comentário:
Postar um comentário
Seu comentário é bem vindo, mas peço que use este espaço adequadamente.