quinta-feira, 9 de fevereiro de 2023

DisassemBASIC (programa)

Na realidade, o All Opcodes é um subproduto de um projeto maior, o DisassemBASIC.

No portal Z80.info encontrei este documento bem detalhado de Christian Dinu, que descreve um algoritmo para decodificar as instruções do Z80 CPU. Eu já vi algo semelhante no livro do Toni Baker, mas achei a apresentação de Dinu bem mais fácil de entender. Fiquei motivado a escrever um programa disassembler para o TK90X, usando a própria linguagem BASIC desse computador. Será que o projeto seria viável? Essa era a minha dúvida.

Foi o projeto mais complexo que me envolvi, então resolvi não partir diretamente do BASIC. Optei por escrever um rascunho numa linguagem estruturada que lembra o Pascal. Acredito que foi isso que me permitiu concluir o projeto com poucos percalços. Em seguida, fui convertendo manualmente a listagem pseudo-pascal em Sinclair BASIC. O utilitário zmakebas me ajudou nessa etapa, pois converte um arquivo texto do PC em imagem .tap que pode ser carregado num emulador. Outra vantagem do utilitário é a possibilidade de usar rótulos para comandos GOTO/GOSUB, simplificando tremendamente a programação (na minha opinião, dar conta dos números das linhas é demasiado confuso).

Depois de erros e correções, cheguei a um programa de 169 linhas BASIC ocupando um pouco mais de 6 KB de memória. Ao rodá-lo, pude constatar que funciona. Na tela abaixo, uma amostra do disassembly da ROM do TK90X. 

Funciona! Claro que, como um bom programa em BASIC, sua velocidade não é o ponto forte. Mesmo assim, sinto que não é tão lento quanto eu esperava a princípio;  na verdade, parece ser perfeitamente utilizável.

Aqui é que entre o All Opcodes: como teste para o disassembler. Funciona perfeitamente, como se pode ver nas telas abaixo.

As instruções não oficiais são também perfeitamente reconhecidas. Comparei a saída do DisassemBASIC com o documento de Sean Youg, "The Undocumented Z80 Documented" e, salvo algum engano de minha parte, as instruções conferem.

Não recomendo o uso regular do DisassemBASIC para fazer disassembly, com certeza existem outros melhores. Reconheço ainda que o programa pode ser otimizado, seja em velocidade ou em tamanho. Entretanto, o intuito principal aqui foi o de aprendizado e de experimentação. Nesse sentido, acho que os objetivos foram plenamente atingidos. Para baixar o arquivo zip do DisassemBASIC, clique neste link para o Google Drive.

Nenhum comentário:

Postar um comentário

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