sexta-feira, 3 de fevereiro de 2023

All Opcodes (programa)

Criei um programa BASIC para TK90X que gera todas combinações possíveis de opcodes para o Z80.

No debugger do emulador Fuse da figura acima, pode-se ver na coluna central o disassembly do código gerado, começando com a instrução NOP (opcode 00). Como o Z80 é um microprocessador CISC, os opcodes podem ter tamanhos variados, de 1 a 4 bytes. Por causa disso, tive que fazer um programa para os produzir. Para facilitar a organização, os opcodes foram agrupados em blocos, iniciando com as instruções sem prefixo.

Em seguida, vem as instruções com prefixo CB (vide acima), que são de rotação, deslocamento e manipulação de bits. O terceiro bloco são das instruções de prefixo ED que, em sua grande parte, nada fazem e na figura abaixo, são representadas como NOPD.

A seguir, vem as instruções de prefixos DD e FD que envolvem registradores IX e IY, respectivamente.

Por fim, vem as de prefixo duplo DDCB e FDCB que, em grande parte, não são documentadas oficialmente pela Zilog.

Qual a utilidade disso? Uma seria testar se um programa disassembler consegue decodificar todos os opcodes, em especial as não reconhecidas oficialmente. Outra seria para estudar a linguagem assembly Z80. Só não recomendo tentar rodar esse código, os resultados seriam imprevisíveis. :-)

O arquivo zip contendo o programa BASIC e outras informações encontra-se neste link para o Google Drive.

2 comentários:

  1. Foi útil para eu descobrir alguns erros no disassembler do meu emulador. Valeu!

    ResponderExcluir
    Respostas
    1. Que bom que o programa foi útil. Agradeço o seu comentário.

      Excluir

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