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







domingo, 22 de mayo de 2016

Macronics Systems (1979-1983)

Ron Bissell, Ken MacDonald y John Kwok fundaron Macronics Systems Ltd. en el año 1979 con el objetivo de diseñar una alternativa barata a los ordenadores semi-profesionales a los que tenían acceso en la Administración Regional Sanitaria de West Midlands donde trabajaban. John Kwok se separaría poco más tarde.

Este ordenador barato nunca saldría a la luz ya que coincidió con el lanzamiento del Sinclair ZX80 con un diseño muy parecido al que tenían pensado, por lo que dejaron de lado el diseño y se enfocaron en el software para el ZX80. Más tarde, también lanzarían hardware como una unidad de floppy para el ZX81 (F.I.Z.), que posteriormente extenderían al ZX Spectrum.




Ron Bissell era el desarrollador técnico y Ken MacDonald era el gestor y financiero. 

La primera incursión de Ron en la programación para ordenadores Sinclair fue una rutina que mapeaba la memoria de pantalla del ZX80. Esta rutina se vendía en un listado y no en soporte magnético, como la mayoría de los programas en esa época. Sin embargo, su siguiente programa "Active-Display Program" o "Amazing Active Display" fue su gran aportación al ZX80, y posterior ZX81. En varios artículos (ref. 3), se atribuye esta rutina a Ken MacDonald, pero él mismo (ref. 2), como en la propia entrevista a Ron (ref. 1) se deja bien claro que el programador de la rutina fue Ron Bissell.

Esta rutina escrita en código máquina rompía el paradigma de que la pantalla del ZX80 se mantenía estática hasta que se pulsara una tecla. Al mismo tiempo, el Dr. Ian Logan sacó una rutina similar publicada en el artículo Auto-Display-Changing (Sync Magazine, Volume 1, Nº 3, May/Jun 1981). La rutina de Macronics se vendía aparte para que pudiera ser incorporada por otros programadores en sus desarrollos con pantalla "flicker-free", como puede verse en el siguiente anuncio que se veía en publicaciones como Sync Magazine.


Sync Magazine Vol 1, nº 1, Ene/Feb 1981 (pag. 19)


Macronics desarrolló entre 1980 y 1983 programas para los ordenadores ZX80, ZX81 y ZX Spectrum. Algunos de los primeros títulos para el ZX80 ya necesitaban de ampliaciones de memoria, en particular aquellos que necesitaban de más gráficos.



Sync Magazine Vol 1, nº 4, Jul/Ago 1981 (pag. 21)


La mayoría de los cuales no se han preservado, pero títulos como City Patrol (ZX81, 1982), las versiones de Planetoids (ZX81, 1981), Space Invaders (ZX81, 1981) y Breakout (ZX81, 1981); y alguno más para el ZX Spectrum como Alien Insects (1983) pueden encontrarse en las webs especializadas.

Su rutina "Active-Display" es la precursora de los Pseudo HI-RES del ZX81, que posteriormente fue utilizada o versionada por otros programadores. En esta entrada hay más información sobre este modo de video del ZX81.

Desde mediados de 1982, es difícil encontrar publicidad alguna sobre Macronics. Concretamente, el último anuncio que he encontrado es en la revista Sinclair User en Julio de 1982. Coincidiendo con el lanzamiento del ZX Spectrum, pareciera que Macronics hubiera perdido cuota de mercado y/o ventaja tecnológica con respecto a otros desarrolladores. La entrevista a Ken MacDonald en la revista Home Computing Weekly, en el numero del 6 de diciembre de 1983, es la última reseña que he encontrado. En el mismo artículo ya se hace eco de los juegos Alien Insects y Ant Attack para ZX Spectrum, y se anuncia el lanzamiento de Orb of Orion, juego del cual no se encuentran referencias en World of Spectrum.



Referencias
(1) Revista Your Computer (Junio 1982). Entrevista a Ron Bissell.
(2) Revista Home Computing Weekly nº 40 (6-12 Dic, 1983). Entrevista a Ken MacDonald.
(3) Revista Sinclair User nº 1 (Abril 1982). Software Overview (pag. 51)



martes, 17 de mayo de 2016

Modo Pseudo HI-RES en el ZX81

La pantalla estándar del ZX81 tiene 24 filas de 32 caracteres cada una. Cada caracter es una cuadrícula de 8 x 8 pixeles, y ocupa 1 byte. Sin embargo, el usuario no puede seleccionar estos pixeles de manera aislada, solamente los caracteres predefinidos.


El ZX81 está limitado por hardware y solo puede soportar 128 códigos de caracteres, frente a los 256 que presentaría un modo “True HIRES”, resultante de todas las combinaciones que darían 8 bits. Por contra, el ZX81 utiliza los bits 0 a 5 para formar los códigos de 64 caracteres (0 a 63), más el CHR$ 118. El bit 7 es utilizado para indicar los inversos de todos estos (128 a 191). El valor del bit 6 es utilizado por la ULA durante el volcado en pantalla del archivo de display, y por lo tanto no participa de la codificación del juego de caracteres.



El bloque de la memoria de vídeo almacena como máximo 32 x 24 bytes (768 bytes + 25 bytes en instrucciones HALT = 793 bytes). A partir de ahí, el modo en el que el ZX81 codifica la memoria de vídeo es ligeramente diferente si tenemos más de 3,25 kB o menos de RAM.

El modo Pseudo HI-RES trabaja como el modo texto, pero la altura del caracter está limitada a una sola línea por lo que se obtiene una resolución de 8 x 1 pixeles en vez de los 8 x 8 pixeles. La resolución de la pantalla pasa de 256 x 192 puntos a 32 x 192 caracteres “planos”. Cada línea termina mediante un opcode RET (C9h), por lo que esta resolución ocupa un espacio en memoria de 6336 bytes (6,2 kB), obtenidos de la multiplicación de 33 (32 columnas + HALT) por 192 líneas. Por este motivo, es necesario disponer de una ampliación de 16 kB para poder disfrutar de este modo.







Este modo obtiene una resolución en base a redefinir los caracteres cambiando la tabla de caracteres a algún lugar de la ROM, por lo que no posee todas las 256 posibles combinaciones que componen un byte. En su lugar, busca en la ROM una zona con el contenido lo más aleatorio posible que le permita la mayor cantidad de combinaciones posibles. El valor del registro I dictamina en qué lugar de la ROM está la combinación que se va usar. El resultado es similar al “True” HIRES, excepto en algunas combinaciones que no puede dibujar. La denominación de “pseudo” es debido a que menos del 50% de las 256 combinaciones requeridas para el True HI-RES están disponibles en este modo, como apunta Wild Rigter en su artículo “The ZX81 Video Display System”. Esta limitación puede provocar que en algún caso pudiera haber algún pixel en una ubicación no deseada, al tener que utilizar un byte con una combinación de bits lo más cercana a la requerida por el software.

En el artículo de Paul Farrow “Flicker-Free Display Mechanism”, se sugiere que el origen de este modo fue en el código Amazing Active Display desarrollado por Ron Bissell en 1981 (Macronics) para el Sinclair ZX80. Este código podía adquirirse para poder ser usado por otros programadores. Una variante de este código fue sugerida por el Dr. Ian Logan en el artículo Auto-Display-Changing (Sync magazine, Volume 1, Number 3, May/Jun 1981), y también incluido en el libro The ZX80 Companion (Linsac).




Programa HI-RES de Macronics


Antes de su cierre en 1985, Software Farm (Julian Chappell) produjo varios juegos que usaban esta técnica: Forty Niner (1982), Rocket-Man (1984) y Z-Xtricator (1984). Si bien la técnica estaba más depurada y permitía un modo de pantalla más grande. Un algoritmo muy parecido al de Software Farm lo usó la compañía Lothlorien en 1983 en su juego Micro Mouse goes de-bugging.




Micro Mouse goes de-bugging (Lothlorien)



Z-Xtricator (Software Farm)




Rocket-Man (Software Farm)



En 1985, Steven McDonald programó Rock Crush, un referente de esta técnica basado en el juego Boulder Dash. De este juego hay versiones posteriores, incluso disponible para iPad (2011). Más información en este artículo. La rutina de este programa intercepta la presentación del video mediante una interrupción modo 2. Es el único programa identificado que realiza esta operación.

En 2003, Ales Martinik portó una versión del popular Manic Miner del ZX Spectrum al ZX81 usando una técnica de pseudo HI-RES. Para más detalles sobre esta adaptación consultar este artículo.
Programa Manic Miner (Ales Martinik)


En la web de Andreas Gustafsson se puede descargar una excelente demo que muestra las capacidades del ZX81 en este modo de video. El software There Are No Limits, publicado en 2009 está disponible en diversos formatos.



Software There Are No Limits (Andres Gustafson)


Brian Lewis publicó las versiones para ZX81 en modo Pseudo HI-RES de Invaders (2013) y Pac-Man (2014). Si bien en su web apunta a que los juegos son HI-RES, lo cierto es que los requerimientos que necesitan es solo una ampliación de 16 kB, sin necesidad de ninguna modificación. Esta modificación es necesaria para los “True” HI-RES.




Programa Pac-Man (Brian Lewis)



Programa Invaders (Brian Lewis)


En este año 2016, se cumplen 35 años del lanzamiento del ZX81. Paul Farrow ha publicado un programa de demostración (Celebration) y un juego (Against The Elements) –en perspectiva isométrica- basados en una variante del algoritmo que permite en el mismo programa usar minúsculas y mayúscula, el uso de pixeles y scroll horizontal. Todo ello en un formato ancho de pantalla.




Celebration (Paul Farrow)



Against The Elements (Paul Farrow)