AMSTRAD sinclair ZX Spectrum +3 Manual Del Usario página 221

Tabla de contenido

Publicidad

La orden
CLEAR 65267
reserva un espacio de 100 bytes a partir de la dirección 65268.
Para introducir el programa de código de máquina, podríamos usar un programa de BA­
SIC de este estilo:
10 LET a=65268
20 READ
n:
POKE
a.n
30 LET a=a+1: GO TO 20
40 DATA 1,99,0,201
[Este programa se detiene y emite el mensaje 'E DATOS AGOTADOS' cuando termina
de escribir en la memoria los cuatro bytes especificados.]
Para ejecutar el programa de código de máquina se utiliza la función USR (pero ahora
con argumento numérico; en concreto, la dirección inicial del programa). El resultado de
USR es el valor que queda en el par de registros BC al retornar del programa en código
de máquina, de manera que si escribimos
PRINT USR 65268
obtendremos la respuesta 99.
La dirección de retorno a BASIC es 'apilada' de la manera usual, así que el retorno se
lleva a cabo mediante una instrucción ret del Z80. No debemos usar los registros IY e I
en rutinas de código de máquina que vayan a utilizar el mecanismo de interrupciones de
BASIC. Si el programa tiene que servir también para modelos anteriores de Spectrum (in­
cluido el +2), tampoco debemos cargar I con valores comprendidos entre 40h y 7Fh (aun­
que no vayamos a usar nunca 1M 2). Los valores entre COhy FFh para I también deberían
ser eludidos si se va a insertar la memoria compartida (RAM 4 o RAM 7) entre COOOh
y FFFFh. Esto se debe a una interacción entre el controlador de video y el mecanismo
de refresco del Z80, que puede ocasionar la caída del sistema, la corrupción de la pantalla
u otros efectos indeseables. Por tanto, sólo debemos dirigir las interrupciones 1M 2 hacia
direcciones comprendidas entre 8000h y BFFFh, a menos que estemos muy seguros de la
estructura del mapa de memoria o solamente vayamos a usar el programa en el
+3,
donde
este problema no existe.
En la documentación de modelos anteriores se decía que la variable de sistema que está
en 5CBOh (23728) no se utilizaba. En el
+3
esta variable es un vector de salto para inte­
rrupciones no enmascarables (NMI). Si se produce una NMI, el sistema comprueba el va­
lor de estos bytes; si es O, no hace nada; si es distinto de cero, salta a la posición especifica­
da por esta variable. No debe producirse ninguna NMI mientras el sistema de disco esté
activo.
Sección 26. Utilización del código de máquina
211

Publicidad

Tabla de contenido
loading

Tabla de contenido