sábado, 2 de julio de 2016

La Resolución de la Pantalla del ZX81

El ZX81 presenta en modo texto una resolución de 32 columnas x 24 filas, si bien las dos últimas filas para la introducción de comandos y mensajes del sistema, y no está disponible para las instrucciones PRINT y PLOT.

EL ZX81 base de 1 kB tiene la RAM ubicada desde las dirección 4000h (16384)  hasta la 43FFh (17407), ubicándose la RAMTOP en la dirección 4400h (17408). Esos 1024 bytes no están disponibles par el usuario en su totalidad, sino que hay que deducir el espacio necesario para las variables del sistema (125 bytes), las pilas, las áreas de variables del usuario, etc…

El espacio disponible para la pantalla varía según la RAM disponible en el ZX81. Para micros con menos de 3,25 kB, la memoria de pantalla utiliza 25 bytes (HALT) + 1 byte por cada carácter a mostrar en la pantalla, incluyendo los espacios en blanco. Si el ZX81 tiene más de 3,25 kB de RAM la memoria de pantalla ocupa la totalidad del modo texto, es decir:

32 x 24 = 768 bytes + 25 (HALT) = 793 bytes

En un ZX81 de 1 kB la memoria de pantalla ocupará un mínimo de 25 bytes, que es lo que ocupa una pantalla vacía.

La memoria de la pantalla está apuntada por la variable del sistema DFILE. Su ubicación puede obtenerse por la instrucción:

PRINT PEEK 16396 + 256 * PEEK 16397 (DFILE)

Un ZX81 sin programas, ubica la variable DFILE en la dirección 16509, que es justamente el área de memoria reservada para los programas en BASIC.

Después del área de memoria de pantalla se encuentra el área de variables de usuario apuntada por la variable del sistema VARS. Por lo tanto, para saber la memoria ocupada por la memoria de pantalla en un ZX81 de 1 kB, simplemente habrá que restar la dirección de la variable VARS a la variable DFILE. La ubicación de la variable VARS se obtiene por la instrucción:

PRINT PEEK 16400 + 256 * PEEK 16401 (VARS)

En resumen, en un ZX81 de 1 kB, la memoria disponible para los programas es poco más de 650 bytes, deduciendo las necesidades de la variables del sistema (125 bytes), las pilas, el área de variables y lo mínimo requerido por la memoria de pantalla (25 bytes).

En la siguiente tabla se muestra la dirección apuntada por la variable del sistema en un ZX81 sin ningún programa en la memoria.


Variable del Sistema RAM 1 kB RAM 16 kB
DFILE 16509 16509
VARS 17302 16534
ELINE 17303 16535


Puede calcularse que la diferencia entre DFILE y VARS es de 793 bytes en el caso de 16 kB (17302 - 16509), y de 25 kB en la versión de 1 kB (16534 – 16509).

En la siguiente pantalla se muestra el espacio ocupado por la memoria de pantalla (35 bytes), calculada por diferencia entre las variables DFILE y VARS. El ordenador es de 1 kB de RAM y son 25 bytes + 10 bytes de los caracteres mostrados, incluidos los espacios a la izquierda del segundo mensaje de “ZX81”. Nótese que hay un fila en blanco entre ambos mensajes “ZX81”.




A continuación, se muestra el resultado de un programa que al ejecutarse ocupa toda la memoria de pantalla mediante diferencia entre VARS y DFILE: 32 columnas x 22 filas (704 bytes) + 2 filas inferiores (64 bytes) + 25 bytes (HALT).