sexta-feira, 25 de novembro de 2011

MSXASM e DISASM - Ferramentas nativas para desenvolvimento em Assembly no MSX

Olá, programadores Assembly.

Acabo de desenvolver um programa nativo do MSX em BASIC. Chama-se MSXASM e serve para programar rotinas em Assembly do Zilog Z80, que é o processador das máquinas MSX. Uma desvantagem do MSXASM é que ele não aceita nem exibe os mnemônicos Assembly, mas apenas os códigos hexadecimais referentes às operações elementares do Z80, bytes de dados e caracteres. Ou seja, o MSXASM é mais indicado para programadores fodões como eu, que sabem de cor todos (ou alguns) códigos hexadecimais para as instruções Assembly. Além deste, outro programa nativo que criei em 2009, chamado DISASM, também será apresentado mais à diante.





MSXASM


O MSXASM permite além editar o código Assembly direto na memória RAM do MSX. Sendo assim, é possível alterar variáveis de ambiente do sistema bastando selecionar o endereço de memória e empurrando um byte lá. Além disso, é possível executar a rotina em Assembly diretamente do editor, bastando invocar o comando e digitar o endereço de entrada da rotina. Mas cuidado, toda rotina Assembly do MSX invocada do interpretador precisa terminar sempre com uma instrução RET (return), cujo código hexadecimal é o &HC9. Caso contrário, a rotina não retornará o controle para o editor e erros inesperados podem ocorrer, sendo o mais comum que o MSX reinicie (embora geralmente a memória RAM editada continue com o programa lá intacto).



Importante lembrar que o editor aceita as notações comuns do BASIC-MSX para se referir aos sistemas de numeração: &H indica número hexadecimal, &B indica binário, &O indica octal, e sem nenhum símbolo significa inteiro. No screenshot à seguir, um exemplo de mais uma função do programa: o "dump" de memória, que "despeja" o conteúdo da memória em formato de caracteres ASCII à partir do endereço especificado:



Além de editar e executar os programas Assembly, é possível também salvar um trecho da memória no disco (que estiver no drive A:). Desta forma, pode-se executar as rotinas independentemente do editor. Outra função é a de mostrar uma lista dos arquivos em disco, como na imagem abaixo:



O MSXASM possui também um recurso que permite escrever uma pequena nota com até 255 caracteres, e então acessá-la a qualquer momento para relembrar endereços importantes ou outros detalhes sobre a rotina:





Confira outras funções do programa na lista de comandos a seguir. Para acessar um comando basta digitar a letra correspondente na linha de comando e pressionar a tecla Enter.

Comandos do MSXASM

N : Ir para o próximo endereço de memória
P : Ir para o endereço anterior de memória
G : Ir para o endereço especificado
A : Adicionar um byte no endereço atualmente selecionado
E : Executar código Assembly a partir do endereço especificado
C : Limpa a memória RAM (preenche com bytes de valor zero) no segmento especificado
S : Salvar em disco a região de memória especificada
F : Lista os arquivos em disco
D : Despeja na tela em formato de caracteres ASCII os bytes à partir do endereço especificado
W : Escrever uma nota
R : Ler a nota escrita anteriormente
H : Ver a lista de comandos e informações sobre o programa
Q : Encerrar programa







DISASM


Um outro programa que fiz em 2009 chama-se DISASM e tem algumas características semelhantes ao MSXASM. No entanto, o DISASM é capaz de exibir código Assembly com a maioria dos mnemônicos correspondentes às instruções do Z80. É na verdade um assembler + disassembler. Confira os comandos do DISASM à seguir, após os screenshots:





Comandos do DISASM:

D : Despeja na tela os bytes na memória à partir do endereço atual
L : "Desassembla" o código Assembly da memória à partir do endereço atual
M : Insere na memória à partir do endereço atual os bytes especificados
Q: Encerrar o programa





MSXASM & DISASM


Os dois programas, MSXASM e DISASM estão disponíveis para download no formato .DSK, que nada mais é do que um arquivo de imagem de disquete do MSX. É possível abrir este tipo de arquivo e rodar os programas dele usando um emulador como o BlueMSX ou o OpenMSX. O disco contém um executável que roda no momento em que o MSX dá o boot no disquete. Este executável contém 2 atalhos para inicializar ambos os programas.




Clique no link a seguir para baixar MSXASM e DISASM num único disquete (.DSK, 720kb):

http://www.4shared.com/file/V65XeFLI/MSXASM.html




Quaisquer dúvidas ou sugestões basta me enviar um e-mail!