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)