domingo, 10 de julio de 2016

Software de Test para ZX81

En mi búsqueda de programas de testeo para el ZX81, equivalentes a los que hay para el ZX Spectrum, he encontrado algunas alternativas que muestro a continuación:

Test
Año
Versión
Comentarios
chiptest
-
-
Chequea direcciones 32768 a 49151, solo en RAM packs modificados
ramtest
1982
1 kB / 16 kB
Publicado en libro "The Explorers Guide to the ZX81". La versión para 1k tarda 30 seg, y la versión de 16k necesita 12 min.
ramtest2
2015
-
Por defecto 20 iteracciones. Se puede modificar. Con expansión de 16kb, son 30 minutos con 3 iteracciones y 7 minutos con 1 iteracción. (nota 1)
ZX80RAM3
2013
3
Programado por Louis Seidelman para el ZX80, pero sirve igualmente para ZX81, incluyendo la expansión de memoria. Para grabar en una EPROM 2716, 2532 o 68764 compatible con la ROM de ZX80/ZX81. Ocupa 2 kB.

Nota 1: Usuario TMAOne en foro Sinclair ZX World enlace

De todas ellas, la más interesante es ZX80RAM3, pero debe ser grabada en una ROM que sustituya a la original del ZX81. Permite el chequeo de varias configuraciones de RAM, desde 1 kB hasta las 16 kB, incluyendo los módulos de expansión que eran el objetivo original del programador. Aqui, se pueden encontrar los ficheros BIN y ASM, así como la explicación. Está en checo.






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).