sábado, 22 de junho de 2013

RECLAIM

Experimente digitar o seguinte programa no seu TK90X:


Pode ser que a listagem não fique clara na imagem, portanto estou repetindo abaixo: 

  10 FOR n=50000 TO 50009: READ a: POKE n,a: NEXT n
  20 RAND USR 50000
  30 DATA 237,91,83,92,42,75,92,195,229,25

Rode com RUN e veja o resultado. Surgirá uma mensagem de erro do BASIC e, na tentativa de ver a listagem do programa, parece que desapareceu misteriosamente!

Calma, obviamente não é uma mágica, o programa acima faz uso de uma das rotinas RECLAIM da ROM do TK90X. Esta rotina serve para apagar dados da memória e, no caso, apagou o programa BASIC por completo. Existem dois pontos de entrada (entry points) desta rotina. RECLAIM-1 (em 6629 ou #19E5) apaga dados a partir do endereço apontado pelo registrador HL até o endereço DE-1 (inclusive). RECLAIM-2 (em 6632 ou #19E8) apaga BC bytes a partir do endereço apontado por HL. 

A listagem assembly explica o que fez o código de máquina: 

    ORG 50000     ; Início do programa, pode ser em qualquer endereço.
    INCLUDE 'Header_Basic.asm'  ; Inclui rótulos, vide link.
    LD DE,(PROG)  ; Aponta para início do programa BASIC.
    LD HL,(VARS)  ; Aponta para início das variáveis BASIC, uma posição

                  ;depois do último byte do BASIC.
    JP RECLAIM_1  ; Executa rotina RECLAIM-1.

Nenhum comentário:

Postar um comentário

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