Manual de Basic Spectrum 48k.

Capítulo 25

Las variables del sistema

Los octetos de la memoria cuyas direcciones están comprendidas entre 23552 y 23733 se han reservado para usos específicos del sistema. Es posible examinarlas (PEEK) para averiguar varios detalles acerca del mismo y, algunas de ellas, se pueden también alterar (POKE). Las hemos listado aquí, junto con sus usos.

Se las ha llamado variables del sistema y poseen nombres, pero no deben ser confundidas con las variables que usa el BASIC. El ordenador no identifica sus nombres como pertenecientes a las variables de sistema, por lo que aquí las exponemos únicamente como mnemotecnias para los "humanos".

Las abreviaturas de la columna 1 tienen los siguientes significados:

X Las variables no deben ser alteradas (POKE) pues, de lo contrario el sistema resultará quebrantado.

N Las alteraciones de la variable no producirán efectos perjudiciales.

El numero asignado en la columna 1 es el de los octetos que contiene la variable. Cuando hay dos octetos (bytes), el primero es el menos significativo al contrario de lo que se podría esperar. De este modo, para variar el valor v de los dos octetos de una variable ubicada en la dirección n, usamos las sentencias:

POKE n, v - 256 * INT (v / 256)
POKE n + 1, INT (v / 256)

y para inspeccionar (PEEK) un valor, se usa la expresión

PEEK n + 256 * PEEK (n + 1)


Notas Dirección Nombre Contenido
N8 23552 KSTATE Se usa para leer del teclado.
N1 23560 LAST K Almacena el valor de la tecla pulsada últimamente.
1 23561 REPDEL Tiempo (en 1 / 50 de segundo - o en 1 / 60 en Norteamérica) que debe presionarse la tecla para que se repita. Su valor parte de 35, pero es posible alterarlo (POKE) con otros valores.
1 23562 REPPER Retardo (en 1 / 50 de segundo - o en 1 / 60 de segundo en Norteamérica) entre repeticiones sucesivas de una tecla mantenida oprimida: inicialmente vale 5.
N2 23563 DEFADD Dirección del argumento de una función definida por el usuario, si es que se está valorando alguna; en otro caso vale 0.
N1 23565 K DATA Almacena el segundo octeto del control del color introducido por el teclado.
N2 23566 TVDATA Almacena octetos de color, controles AT y TAB que van a la televisión.
X38 23568 STRMS Direcciones de canales de comunicación de entrada y salida.
2 23606 CHARS Dirección del conjunto de caracteres menos 256 (que comienza por un espacio y lleva el signo de copyright). Se encuentra normalmente en la ROM, pero es posible disponer una RAM para hacer que la función CHARS se dirija a la misma.
1 23608 RASP Duración del zumbador de alarma.
1 23609 PIP Duración del chasquido del teclado.
1 23610 ERR NR El código de informe menos 1. Se inicializa a 255 (para -1) por lo que si se examina la posición 23610 (PEEK 23610) se obtiene 255.
X1 23611 FLAGS Varios indicadores para control del sistema BASIC.
X1 23612 TV FLAG Indicadores asociados con la televisión.
X2 23613 ERR SP Dirección del elemento de la pila de la máquina que es usado como retorno de error.
N2 23615 LIST SP Dirección de la posición de retorno tras un listado automático.
N1 23617 MODE Especifica el cursor K, L, C, E o G.
2 23618 NEWPPC Línea a la que hay que saltar.
1 23620 NSPPC Número de sentencia en una línea a la que hay que saltar. Si se ejerce la función POKE primeramente a NEWPPC, y luego a NSPPC, se fuerza un salto a una sentencia especificada en una línea.
2 23621 PPC Número de línea de la sentencia en curso.
1 23623 SUBPPC Número dentro de la línea de la sentencia en curso.
1 23624 BORDCR Color del contorno *8; contiene también los atributos que se suelen usar para la mitad inferior de la pantalla.
2 23625 E PPC Número de la línea en curso (con el cursor del programa).
X2 23627 VARS Dirección de las variables.
N2 23629 DEST Dirección de la variable en la asignación.
X2 23631 CHANS Dirección del canal de datos.
X2 23633 CURCHL Dirección de la información que se destina en ese momento para entrada y salida.
X2 23635 PROG Dirección del programa BASIC.
X2 23637 NXTLIN Dirección de la siguiente línea del programa.
X2 23639 DATADD Dirección de la terminación del último elemento de datos.
X2 23641 E LINE Dirección del comando que se está escribiendo en el teclado.
2 23643 K CUR Dirección del cursor.
X2 23645 CH ADD Dirección del siguiente carácter a interpretar: el carácter que sigue al argumento de PEEK, o al de NEWLINE al final de una sentencia POKE.
2 23647 X PTR Dirección del carácter que sigue al signo  ? .
Dirección del espacio eventual de trabajo.
X2 23651 STKBOT Dirección del fondo de la pila de cálculo.
X2 23653 STKEND Dirección del comienzo del espacio de reserva.
N1 23655 BREG Registro b del calculador.
N2 23656 MEM Dirección de la zona utilizada para la memoria del calculador. (Normalmente MEMBOT, pero no siempre).
1 23658 FLAGS2 Más indicadores.
X1 23659 DF SZ Número de líneas (incluida una en blanco) de la mitad inferior de la pantalla.
2 23660 S TOP El número de la línea superior del programa en los listados automáticos.
2 23662 OLDPPC Número de línea a la que salta la sentencia CONTINUE.
1 23664 OSPCC Número dentro de la línea de la sentencia a la que salta la instrucción CONTINUE.
N1 23665 FLAGX Indicadores varios.
N2 23666 STRLEN Longitud del destino tipo de cadena en la asignación.
N2 23668 T ADDR Dirección del siguiente elemento en la tabla sintática (muy difícilmente útil).
2 23670 SEED El origen para RND, es la variable que se fija mediante la función RANDOMIZE.
3 23672 FRAMES 3 octetos (el menos significativo en primer lugar) del contador de cuadros. Se incrementa cada 20 ms. Véase el capítulo 18.
2 23675 UDG Dirección del primer gráfico definido por el usuario. Se la puede cambiar, por ejemplo, para ahorrar espacio a costa de tener menos gráficos definidos por el usuario.
1 23677 COORDS Coordenada x del último punto trazado.
1 23678 Coordenada y del último punto trazado.
1 23679 P POSN Número de 33 columnas de la posición de la impresora.
1 23680 PR CC Octeto menos significativo correspondiente a la dirección de la siguiente posición a imprimir en la función PRINT (en la memoria temporal de la impresora).
1 23681 No se usa.
2 23682 ECHO E Número de las 33 columnas y número de las 24 líneas (en la mitad inferior) del final de la memoria temporal de entrada.
2 23684 DF CC Dirección de la posición de PRINT en el fichero de la presentación visual.
2 23686 DFCCL Igual que DFCC, pero para la mitad inferior de la pantalla.
X1 23688 S POSN Número de las 33 columnas de la posición de PRINT.
X1 23689 Número de las 24 líneas de la posición de PRINT.
X2 23690 SPOSNL Igual que S POSN, pero para la mitad inferior.
1 23692 SCR CT Contaje de los desplazamientos hacia arriba ("scroll"): es siempre una unidad más que el número de desplazamientos que se van a hacer antes de terminar en un scroll? Si se cambia este valor con un número mayor que 1 (digamos 255), la pantalla continuará "enrollándose" sin necesidad de nuevas instrucciones.
1 23693 ATTR P Colores permanentes en curso, etc. (tal y como los fijaron las sentencias para el color).
1 23694 MASK P Se usa para los colores transparentes, etc. Cualquier bit que sea 1 indica que el bit correspondiente de los atributos no se toma de ATTR P, sino de lo que ya está en pantalla.
N1 23695 ATTR T Colores en uso temporal, etc. (tal como los fijaron los elementos de color).
N1 23696 MASK T Igual que MASK P, pero temporal.
1 23697 P FLAG Más indicadores.
N30 23698 MEMBOT Zona de memoria destinada al calculador; se usa para almacenar números que no pueden ser guardados convenientemente en la pila del calculador.
2 23728 No se usa.
2 23730 RAMTOP Dirección del último octeto del BASIC en la zona del sistema.
2 23732 P-RAMT Dirección del último octeto de la RAM física.

Este programa proporciona los primeros 22 octetos de la zona de variables:

10 FOR n = 0 TO 21
20 PRINT PEEK (PEEK 16400 + 256 * PEEK 16401 + n)
30 NEXT n

Trate de encajar la variable de control n con las descripciones anteriores. A continuación, sustitúyase la línea 20 por

20 PRINT PEEK (16509 + n)

Esto último proporciona los primeros 22 octetos de la zona del programa. Compáreselo con el propio programa.

Manual de Basic Spectrum 48k.