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.
Foi útil para eu descobrir alguns erros no disassembler do meu emulador. Valeu!
ResponderExcluirQue bom que o programa foi útil. Agradeço o seu comentário.
Excluir