Antes de correr/criar um programa código máquina, é necessário definir onde o colocar em RAM. Enquanto no BASIC, tal é feito de uma forma transparente para o programador, em C/M é necessário escolher uma área de memória que não interfira com outros dados.
Por exemplo, não colocar o programa em cima de variáveis do sistema, do BASIC ou do stack. De outra forma, o computador pode crashar. Para tal, é conveniente conhecer o mapeamento da RAM no Spectrum.
Por exemplo, não colocar o programa em cima de variáveis do sistema, do BASIC ou do stack. De outra forma, o computador pode crashar. Para tal, é conveniente conhecer o mapeamento da RAM no Spectrum.
A variável do sistema PROG aponta para o início da área de memória que o BASIC é armazenado, o que num Spectrum sem uma interface 1, é normalmente PROG = $5CCB (23755).
Apenas como guias de referência, num Spectrum normal, aquando do arranque:
CHANS $5CB6 Address of channel data
PROG $5CCB Address of BASIC program
VARS $5CCB Address of variables
E-LINE $5CCC Address of command being typed in
WORKSP $5CCE Address of temporary work space
STKBOT $5CCE Address of bottom of calculator stack
STKEND $5CCE Address of start of spare space
RAMTOP $FF57 Address of last byte of BASIC system area
UDG $FF58 Address of first user defined graphic
P-RAMT $FFFF Address of last byte of physical RAM
Para modificar o RAMTOP, e as variáveis associadas, incluindo o SP, existe a instrução CLEAR do BASIC. Um valor seguro mínimo, fica entre 23900 a 24500, para um loader mínimo de BASIC.
Havendo um programa maior de BASIC, terá de ser tomado em conta o BASIC + variáveis.
Supondo que fazemos um CLEAR 25000, podemos então carregar / assemblar / fazer LOAD""CODE / invocar um programa em código máquina a partir de 25001. Note-se como o CLEAR 25000 afecta as variáveis de sistema acima mencionadas:
RAMTOP $61A8 Address of last byte of BASIC system area ($61A8 = 25000)
Caso se usem UDGs, e não se modifique a sua localização, é melhor não mudar o stack para colocar C/M a partir de $FF58 até $FFFF (65368 até 65535).
Outro espaço onde se pode colocar código máquina, é no buffer de impressora. Este espaço de 256 bytes pode ser usado para loader de C/M de tape, ou para variáveis do programa C/M.
Note-se que outra estratégia, é usar partes do ecrã para rotinas temporárias, escondendo o código com atributos de COLOR e PAPER idênticos (desde que evidentemente não se faça scroll ou se limpe o ecrã).
De salientar, que como falado em artigos anteriores, aconselha-se a colocar a partir de 32786 ($8000), rotinas que necessitam de timings precisos, como loaders de tape, música ou rotinas de interrupts.
Your Spectrum: system variables (I)
Your Spectrum: system variable (II)
Sem comentários:
Enviar um comentário