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