quinta-feira, 14 de maio de 2020

Onde carregar programas de código máquina (V)

Continuando o artigo de Onde carregar programas de código máquina (IV), de carregar BASIC com variáveis, dado carregarmos as variáveis de BASIC, podemos explorar comportamentos do BASIC para "esconder" melhor o que pretendemos fazer.

Podemos alterar o loader depois de gravado, para a variável de sistema ERR_SP ($5C3D), apontar para a rotina a ser executada, por exemplo, para a zona de variáveis. (pode-se fazer POKEs antes do SAVE "" CODE )

Desta forma, ou o BASIC não tem o RANDOMIZE USR, ou até nem temos as linhas BASIC, e simplesmente fazemos o SAVE "xxx" CODE. Simplesmente, em vez de o computador apresentar "0 OK" no "fim" do SAVE "xxx" CODE (i.e. a seguir de fazermos o LOAD "" CODE ), salta para a rotina código máquina.

Por exemplo, colocando o código em linha REM:

               ORG   $5CD0
               DW     ROUTINE            ; Pointer used by ERR_SP when loading
ROUTINE:
               XXXXX

e para gravar:

Explicação: POKE ERR_SP,$D0 : POKE ERR_SP+1,$5C

POKE 23613,208 : POKE 23614,92 : SAVE "prog" CODE 16384,49000

(ou gravar a partir de 23552 para gravar sem imagem).

No fim do LOAD "" CODE, em vez de mostrar OK, salta para o endereço código máquina $5CD0.

Sem comentários:

Enviar um comentário