viernes, 2 de septiembre de 2016

Resolución de Pantalla en el ZX Spectrum (II)

Sincronismo de Línea u Horizontal

La señal PAL estándar está compuesta por un período de sincronismo de línea u horizontal (12us) y un período activo o de información de la señal (52us), sumando en total 64us. El período de sincronismo horizontal, también denominado “blanking”, consta de un pórtico anterior o “front porch” (1,5us), una señal de sincronismo horizontal HSync (4,7us) y un pórtico posterior o “back porch” (5,6us); sumando en total 12us.

En el ZX Spectrum las señales de “front porch” (2,29us) y “blanking” (13,7us) son ligeramente más largas que el estándar. Incluso, la señal de “front porch” presenta ligeras diferencias entre las diferentes versiones de la ULA. Esta diferencia con el estándar tiene el efecto de desplazar la pantalla ligeramente hacia la izquierda.

PAL Timing Estándar = Blanking (12us) + Señal Activa (52us) = Timing Horizontal (64us)
PAL Timing ZX Spectrum = Blanking (13,7us) + Señal Activa (50,3us) = Timing Horizontal (64us)




La señal de pórtico anterior o “front porch” no es utilizada por los TVs por lo que podría omitirse, pero su presencia y diferente timing en las diferentes versiones de ULA, provoca un sincronismo horizontal más tardío con el efecto de desplazamiento explicado anteriormente. La señal de pórtico posterior o “back porch” incluye dos componentes; la señal de “burst” que proporciona información para modular el color y el valor de referencia para el negro. Este valor de referencia se establece en términos de voltaje.

Igualmente, existe el período de sincronismo de campo o vertical (VSync), del cual no se dan detalles en este texto, pero el no reconocimiento del pulso VSync generado por el ZX Spectrum es la causa por la que algunos modelos de TV digitales y LCD no muestren imagen.

Atributos

Recordando de una sección anterior, la resolución del ZX Spectrum es de 256 x 196 píxeles. Si cada píxel ocupa 1 bit, la resolución del ZX Spectrum es de 256 x 192 = 49152 bits o 6144 bytes (1 byte = 8 bits). Para presentar los 8 colores del Spectrum se hubiera necesitado 3 bits por pixel, por lo que las necesidades de memoria hubieran sido 256 x 192 x 3 / 8 = 18432 bytes, es decir 18 kB de los 48 kB disponibles, y no asumible por el modelo de 16 kB.

Para resolver este problema, los ingenieros de Sinclair plantearon la matriz de colores siguiendo la matriz de 32 x 24 caracteres de texto que vamos a denominar “celdas de color”. Este problema no se había planteado anteriormente ya que su predecesor ZX81 no tiene color. Cada una de estas celdas ocupa 1 byte, por lo que la memoria de atributos ocuparía 32 x 24 = 768 bytes. Uno de los efectos más conocidos de este diseño es el “colour clash” o choque de atributos, debido a que los colores se presentan a nivel de carácter y no de pixel.

El ZX Spectrum usa una paleta de color RGB (Red – Green – Blue) de 3 bits, por lo que cada celda de color presenta los atributos de color del texto (3 bits) y el fondo (3 bits). Adicionalmente, tiene dos modos que se presentan o activos o pasivos; estos son el brillo (1 bit) y el flash (1 bit). En total se obtienen los 8 bits o 1 byte que ocupa cada celda de color, con el significado que se muestra en la siguiente figura:



Memoria de Pantalla

En resumen, el espacio necesario para almacenar la pantalla completa en el ZX Spectrum será: 6144 bytes (pixeles) + 768 bytes (atributos) = 6912 bytes
  • Direcciones del mapa de la pantalla: 16384 (4000h) a 22527 (57FFh)
  • Direcciones del mapa de atributos: 22528 (5800h) a 23295 (5AFFh) 






viernes, 19 de agosto de 2016

Resolución de Pantalla en el ZX Spectrum (I)

Introducción

Posiblemente, la descripción que hace Chris Smith sobre el sistema de video del ZX Spectrum en su libro “The ZX Spectrum ULA: How to Design a Microcomputer” (ZX Design and Media, 2010), sea la mejor y más completa que uno puede encontrar. Sin embargo, esta descripción puede llegar a ser demasiado técnica para algunos usuarios medios o principiantes, como el autor de este blog. Para ellos va dirigida esta explicación, si bien me ha apoyado en muchas descripciones del libro de Chris Smith.

También me he apoyado en el documento “La señal de Video: PAL Color” de Francisco José García Martínez, publicado por la Universidad Politécnica de Valencia.

Este texto está enfocado en el estándar PAL, pero el libro de Chris Smith cubre también el sistema NTSC.


El Sistema PAL

El sistema PAL fue desarrollado por un ingeniero de los laboratorios de Telefunken en el año 1963 en un intento de mejorar la calidad del sistema NTSC. El sistema PAL presenta una relación de aspecto de 4:3, 625 líneas y una frecuencia de 50 Hz. De esas 625 líneas, solo 575 son de imagen, quedando el resto para el sincronismo vertical, teletexto, líneas de inserción de prueba de calidad de la señal, etc.

El movimiento se consigue mediante proyecciones de instantes sucesivos, a velocidad suficiente para que el espectador tenga la impresión de movimiento continuo y no a saltos. La persistencia de la imagen en el ojo humano es diferente al barrido de la imagen por lo que se debe aplicar la técnica del entrelazado para evitar el parpadeo de imágenes. Para ello, la imagen se divide en dos campos explorando alternativamente las líneas pares y las impares. Con esto se consigue que la información que recibe el ojo es más reducida y suficiente para interpolar las imágenes sin que aparezca el parpadeo.

En el sistema PAL, cada campo tiene 312,5 líneas, o para simplificar en el texto, 312 líneas o “scanlines” por campo.


Selección de la Resolución

La imagen la forma un haz de electrones que recorre la pantalla horizontalmente, de izquierda a derecha; y cuando llega al final de la línea regresa al lado izquierdo para descender una línea, para repetir el proceso. El regreso lo hace sin generar imagen.





En el sistema PAL, el haz de electrones tarda 64 s en recorrer ese trayecto de izquierda a derecha y regresar el punto de origen de la siguiente línea o “scanline”. Una imagen PAL contiene 312 líneas, luego:

En 1 segundo:         1 / 64 s = 15625 scanlines
Actualización pantalla: 15625 / 312 = 50,08 

Es decir, en 1 segundo la pantalla se actualiza 50 veces.

La frecuencia horizontal de las scanlines en el sistema PAL es de 15,625 kHz. Asumiendo que cada píxel ocupa 1 bit, si cada línea ocupara 1000 bits, la frecuencia de trabajo para mostrar cada scaline sería de 15,625 MHz y la memoria necesaria para generar la pantalla completa ocuparía casi toda la RAM disponible en un sistema de 8 bits. Para evitar esto, los diseñadores de Sinclair redujeron el área disponible de pantalla a 256 x 192 píxeles y trabajando a una menor frecuencia (7 MHz). Este diseño lo heredó del ZX81, en donde la resolución era de caracteres de texto disponibles en ROM en una matriz de 32 x 24 celdas, debido a su poca memoria RAM (1 kB).



miércoles, 3 de agosto de 2016

¿Por qué hay tan pocos libros disponibles sobre el ZX80?

Es una pregunta que me hago, y con la respuesta lo único que puedo hacer es especular.

Del Sinclair ZX80 se vendieron unas 50.000 unidades con una distribución geográfica y una vida bastante limitadas, ya que al año su sustituto, el ZX81, estaba en el mercado.

Probablemente, ninguna de esas unidades llegaron a España de primera mano, por lo que el mercado local es muy limitado y podría decirse que el mayor número de ZX80s en nuestro país es precisamente en estos últimos años debido al auge de lo retro y el coleccionismo.

En los años 1980 y 1981 tampoco en el Reino Unido había una gran producción de libros dedicados a estos microordenadores personales; de hecho la industrial editorial especializada creció al albur del auge de estos micros, algo parecido a lo que pasó con la industria del software. Sólo un número limitado de especialistas se dedicaron a escribir sobre estos nuevos "artefactos", y sus trabajos se publicaban mayormente en pequeñas imprentas y distribuidoras. En algunos casos, escritas en la máquina de casa y fotocopiadas en las imprentas locales. Basta ver lo simple de las encuadernaciones de muchos de los títulos que salieron para el ZX80 sobre todo, y las primeras publicaciones para el ZX81 (ref. libro "Hints & Tips for Videogame Pioneers: The Birth of a New Area, A New Medium, A New Industry", Andrew Hewson, 2016).

Particularmente, sobre el ZX80 apenas hay libros disponibles y mucho menos en formato PDF. De vez en cuando sale alguno a la venta en eBay, pero sus precios suelen ser superiores a libros sobre ordenadores solo un poco más modernos que el ZX80. Hace unos meses contacté con Andrew Hewson (Hewson Consultants) a raíz de su nueva publicación referenciada en el párrafo anterior, y le pregunté si disponía de alguna copia de su "Hints & Tips" para el ZX80. La repuesta fue que solo disponía de una copia física del correspondiente para el ZX81, y es más, me pidió que si conseguía una copia del referente al ZX80 se la hiciera llegar aunque fuera escaneada. Ni que decir tiene que lo haré si alguna vez doy con el libro, algo que aún no he conseguido.

Hace poco que sigo la pista de libros sobre el ZX80 que salen a la venta en eBay, y he conseguido ganar en reñida subasta alguno. Otros he perdido porque todo tiene un límite. Mi propósito no es otro que escanearlos y ponerlos a disposición en este blog, como puede verse en la sección de descargas. Desconozco quien tiene los derechos de autor de los libros que pongo a disposición, porque por más que he rastreado en internet a las editoriales que los publicaron originariamente no doy con las empresas herederas, ni tampoco sé si siguen existiendo las originales. Si diera con ellas, por supuesto que solicitaría por escrito la correspondiente autorización. Mientras tanto, esta forma de preservación es lo único que se me ocurre hacer.

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