Uma dúvida recorrente parece ser como gravar um programa BASIC / um loader de BASIC para uma rotina código máquina. Para tal o mais simples é escrever algo como:
10 CLEAR 49999 : LOAD "" CODE : RANDOMIZE USR 50000
Ou para ter um ecrã de carregamento:
10 CLEAR 49999 : LOAD "" SCREEN$ : LOAD "" CODE : RANDOMIZE USR 50000
e gravar com com arranque automático na linha 10:
SAVE "prog" LINE 10
Para criar um TAP, convém que seja um emulador que suporte isso, como por exemplo, o Retro Virtual Machine 2. Ou pode escrever em texto, e usar um utilitário como o bas2tap, que já falamos num artigo anterior:
bastap loader.bas loader.tap
Mas vejamos o programa BASIC:
CLEAR 49999
Coloca todo o espaço temporário e stacks microprocessador e BASIC abaixo desse endereço. Na prática garante que os endereços para a frente não são usados. Não se recomenda um valor abaixo de 24500.
LOAD "" SCREEN$
Carrega um ecrã em formato ZX Spectrum gravado com SAVE "" SCREEN$ ou gerado num PC.
LOAD "" CODE
Carregar o bloco de código máquina.
RANDOMIZE USR 50000
Saltar para o endereço de execução.
Note-se que em alguns assemblers, o loader BASIC pode ser gerado automaticamente.
Por exemplo, no pasmo:
pasmo --tapbas prog.asm prog.tap
ou:
pasmo --tzxbas prog.asm prog.tzx
Estes dois modos criam um loader simples, similar ao primeiro exemplo, sem o RANDOMIZE USR.
Para colocar o RANDOMIZE USR, é necessário colocar no fim do assembly, uma directiva, por exemplo no pasmo:
END 50000
Ver também: ZXBASIC manual - chapter 26 - Using machine code
Sem comentários:
Enviar um comentário