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)