El ordenador ZX Spectrum original produce una salida de vídeo con gráficos en color de un bit por píxel y en formato de mapa de bits . Se genera una señal de vídeo compuesta a través de un modulador de RF y fue diseñado para su uso con los televisores contemporáneos de los años 80.
El tamaño de la imagen del framebuffer es de 256 × 192 píxeles , con una paleta de 15 colores no modificables, donde toda la paleta de colores está extremadamente saturada . La resolución de la salida de color es 64 veces menor que la resolución del mapa de bits de píxeles. [1] [2] La resolución de color extremadamente baja se utilizó para conservar la memoria, totalizando solo 768 bytes para los atributos de color. El color se almacena separado del mapa de bits de píxeles , como una cuadrícula de 32 × 24 celdas, utilizando un byte por cada una de las celdas de caracteres . Una celda de carácter se compone de 8 × 8 píxeles. En la práctica, esto significa que cualquier celda de carácter solo puede usar dos colores seleccionados para colorear los 64 píxeles contenidos. [3]
Dado que la máquina fue diseñada para su uso con un televisor estándar, el área de 256 × 192 píxeles está rodeada por un borde ancho que llena el espacio restante del área visible de la pantalla de TV PAL de baja resolución estándar de 384 × 288. Por lo general, el área del borde asume un solo color, pero utilizando trucos de software, es posible mostrar algunos gráficos de baja resolución allí. [4]
El ZX Spectrum carecía de hardware dedicado para el desplazamiento y los sprites , o de un blitter de hardware dedicado . Para facilitar la visualización de gráficos en color, el ZX Spectrum original emplea 16 KiB de RAM gráfica discreta . La latencia de la RAM gráfica es de 150 ns; el ancho de banda máximo es de 2,1875 MB/s (calculado como 224 × 5/8 bytes por 64 μs). [5]
El ZX Spectrum original no se ajusta estrictamente a la frecuencia de cuadro estándar PAL de 50 Hz. El ZX Spectrum genera una línea de video en exactamente 224 ciclos de reloj de CPU , donde la frecuencia de reloj de la CPU es igual a 3,5 MHz. Esto coincide exactamente con el tiempo de línea estándar PAL de 64 μs. Sin embargo, el ZX Spectrum produce solo 312 líneas para formar un cuadro de visualización , mientras que el estándar PAL recomienda 312,5 líneas. Como consecuencia, la frecuencia de cuadro del ZX Spectrum es de aproximadamente 50,08 cuadros por segundo. [6]
Esta discrepancia no era conocida por muchos programadores, que asumían una velocidad de cuadros de 50 cuadros por segundo. [ cita requerida ] Como resultado, algunos programas, incluido el intérprete BASIC incorporado , tenían el tiempo corriendo ligeramente demasiado rápido. Los modelos ZX Spectrum posteriores tienen una velocidad de cuadros ligeramente diferente y la velocidad de reloj de la CPU, lo que hace que algunos programas más antiguos se ejecuten ligeramente demasiado lentos si utilizan sincronización vertical, o demasiado rápidos si dependen de la velocidad de reloj de la CPU. [6]
Al comienzo de cada cuadro de visualización, la señal de interrupción enmascarable se envía a la CPU Z80 del ZX Spectrum , lo que permite a los programas detectar y medir fácilmente el paso del tiempo. También permite que los programas sincronicen perfectamente la salida de gráficos con la visualización de cuadros de video. Es exactamente el mismo mecanismo que la sincronización vertical de una computadora moderna, que se puede emplear para evitar el tearing de la pantalla .
La memoria RAM de gráficos discretos de 16 KiB es directamente accesible para la CPU en las direcciones 16384 a 32767. El mapa de bits de píxeles principal se almacena al principio de la RAM de gráficos, mientras que la matriz de atributos sigue inmediatamente detrás. [10]
El circuito controlador de video está integrado en el circuito integrado ULA de Ferranti, que es un dispositivo semipersonalizado y consta de aproximadamente 480 celdas configurables (según el modelo). Las celdas del ULA se configuraron de fábrica de diversas maneras para producir el ULA para ZX Spectrum, donde una celda tiene la funcionalidad de aproximadamente dos puertas NAND. [11]
El acceso de la CPU a la RAM de gráficos se denomina acceso contencioso, porque el controlador de video tiene una prioridad más alta que la CPU. En un acceso a la RAM de gráficos, la CPU suele sufrir una pequeña demora mientras espera que el controlador de video complete la lectura de datos. [12]
Las direcciones en la memoria DRAM de video están intercaladas, lo que produce un sistema de coordenadas inusual para el mapa de bits de píxeles. Si las coordenadas de un píxel son (x, y), y los bits del eje de coordenadas x están etiquetados como x7, x6, x5, x4, x3, x2, x1, x0, y los bits del eje de coordenadas y están etiquetados como y7, y6, y5, y4, y3, y2, y1, y0, entonces el píxel se almacena en un byte con el patrón de bits de dirección 0, 1, 0, y7, y6, y2, y1, y0, y5, y4, y3, x7, x6, x5, x4, x3. [13]
El patrón de bits de dirección contiene dos transposiciones de patrón de bits más de las necesarias. El patrón de bits más rápido y más simple habría sido 0, 1, 0, x7, x6, x5, x4, x3, y7, y6, y5, y4, y3, y2, y1, y0, lo que hace que las direcciones de píxeles aumenten en la columna primero. Desafortunadamente, los diseñadores del ZX Spectrum estaban trabajando bajo una presión de tiempo extrema y no se dieron cuenta de esta simple mejora. [11]
Mientras que el modelo ZX Spectrum 48K original tiene 32 KiB de RAM principal, el modelo 16K tiene solo 16 KiB de RAM gráfica. Esta es la razón por la que la matriz de atributos de color se diseñó para que cupiera en solo 768 bytes. Los atributos de color podrían haber tenido fácilmente una resolución doble o cuádruple en el eje vertical, pero eso habría reducido el espacio de memoria libre restante para programas en uno o dos kilobytes más, especialmente en el modelo de 16 KiB.
Para facilitar la visualización de gráficos en color, el ZX Spectrum original emplea 16 KiB de RAM de gráficos discretos , a diferencia de las arquitecturas de RAM de gráficos compartidas de la mayoría de las otras microcomputadoras, incluida la Commodore 64. [ cita requerida ] La resolución del mapa de bits de píxeles es similar a la de otras microcomputadoras contemporáneas, donde la popular Commodore 64 usa comúnmente la resolución de 160 × 200 a dos bits por píxel. [ 14 ]
El sistema de celdas de color, llamado "los atributos", generó muchas críticas porque complicaba significativamente la programación de aplicaciones de color. [ cita requerida ] Aún así, el sistema de atributos de color tenía capacidades suficientes para soportar las aplicaciones y juegos comunes de la época, e incluso las capacidades de color muy limitadas fueron bien recibidas por los usuarios. [ cita requerida ]
Las computadoras ZX Spectrum (y compatibles) utilizan una variación de la filosofía de paleta RGBI de 4 bits (también utilizada en CGA , Thomson MO5 , Sharp MZ-800 , Mattel Aquarius , etc.), lo que da como resultado 8 colores básicos con variaciones de brillo. [15] En los modelos 128, +2 y +3, el ULA emite señales de nivel TTL rojo, verde, azul y sincronismo que son utilizadas por el codificador de video TEA2000 para la generación de señales de video compuesto . [16] [17] [18] [19]
Cada uno de los colores de la paleta de 3 bits tiene una variante básica y una variante brillante . [15] La mitad brillante de la paleta se genera utilizando el nivel de voltaje máximo de la pantalla de video para la señal de luminancia. La mitad básica de la paleta se genera simplemente reduciendo el voltaje de la señal de luminancia. [20]
Ambos colores de una celda de carácter deben compartir su propiedad de brillo, ya que solo hay un único bit de brillo para toda la celda. Además de esa limitación, se puede seleccionar libremente cualquier combinación de colores de la paleta como los dos colores de una celda de carácter. En la siguiente tabla, todos los colores "brillantes" se muestran en la columna de la derecha.
En la codificación ZX Spectrum, los componentes de color están en orden GRB (verde, rojo, azul), en lugar del orden RGB más común. El orden GRB tiene la ventaja de que los números de color se ordenan según la luminancia creciente , por lo que si se visualiza en una pantalla en blanco y negro, la secuencia ordenada forma un gradiente de negro a blanco.
Todas las propiedades de color de una celda se almacenan en la memoria como un byte llamado atributo . Contando desde el bit menos significativo al más significativo, un byte de atributo dedica tres bits para el color de los píxeles con valor 1, tres bits para el color de los píxeles con valor 0, un bit para el indicador de brillo y un bit para el efecto de parpadeo. El efecto de parpadeo hace que los colores de primer plano y de fondo que se muestran se alternen cada 0,64 segundos. [21]
La mayoría de los emuladores actuales de ZX Spectrum muestran colores inexactos y posiblemente sobresaturados. [ cita requerida ] Esos colores se calcularon mediante aproximaciones simplistas que no tienen en cuenta muchas sutilezas de la conversión del espacio de color PAL a sRGB. De manera similar, en el sitio web de ZX Art el uso de colores inexactos es muy común. [ cita requerida ] El color sRGB teóricamente imposible #00CD00 se usa comúnmente como el color verde del ZX Spectrum (es decir, el color verde real del Spectrum es probablemente más azulado). [ cita requerida ]
Los dos colores de una celda de carácter se denominan color de primer plano y color de fondo . Para cualquier valor de n de 0 a 7, se pueden utilizar los siguientes comandos BASIC de Sinclair para establecer o modificar los colores de una celda: [15]
PAPER n
, el color de fondo de la celda de carácter; se aplica a todos los píxeles de valor 0 en la celdaINK n
, el color de primer plano de la celda de carácter; se aplica a todos los píxeles de valor 1 en la celdaBRIGHT i
, selecciona el valor del bit de brillo de la celda de carácter, donde el valor puede ser 0 o 1Además, el BORDER
comando selecciona un color para el área de la pantalla que rodea el mapa de bits de píxeles. No utiliza un indicador de brillo, por lo que solo se admiten los ocho colores básicos para el color del borde. [22]
El ZX Spectrum original tiene una resolución de pantalla de 256 × 192 píxeles. [23] [24] En todos los casos, los colores están extremadamente saturados. La información de color se superpone sobre esto como una cuadrícula de regiones de 8 × 8 píxeles conocidas como bloques de atributos . [25] [26] Todas las propiedades de color de un bloque de atributos se almacenan en la memoria como un solo byte de atributo, y cada bloque de atributo coincide con una celda de carácter. Dentro de cada bloque de atributo, solo se pueden usar dos colores de una paleta de 8 colores. Además, todo el bloque de atributos puede designarse como "brillante", lo que da como resultado un total de 15 colores posibles (el negro no tiene variación "brillante"). En muchos programas, esta limitación de solo dos colores por bloque de atributo es evidente como el efecto no deseado de choque de atributos .
Una pantalla en este modo ocupa 6144 bytes para el mapa de bits de píxeles, lo que suma un total de 6912 bytes junto con los atributos de color.
Detalles:
Al utilizar un monitor monocromático o un televisor en blanco y negro (o reducir la configuración de saturación de un televisor a color), es posible aprovechar las diferencias de intensidad en la gama de colores del Spectrum para generar una imagen en escala de grises de 15 tonos con una resolución de 256 × 192.
Detalles:
Alta tecnología y color
Varios clones de Spectrum de terceros, incluidas las máquinas Timex Sinclair , [27] [28] el Pentagon , el eLeMeNt ZX y la interfaz MB03+ Ultimate admiten un modo de pantalla llamado Hi-Color , [28] en el que los bloques de atributos tienen un tamaño de 8 × 1 píxeles en lugar de los 8 × 8 habituales. [29] [30] Una pantalla en este modo ocupa 12 KB de RAM. En el caso del Timex, este modo se activa a través del comando OUT 255,2
. [27] [28] Al menos un editor para máquinas Timex admite este modo. [31] Además, este modo de pantalla se puede generar mediante el uso del hardware DMA del sistema de disco MB-02 [32] (donde la técnica se conoce como Multitech [33] ), y también está disponible como Modo 2 (con un orden de bytes lineal) en el SAM Coupé . [34]
Detalles:
En otros modelos Spectrum, este efecto se puede replicar aprovechando el hecho de que el ULA vuelve a leer la información de atributos en cada fila de píxeles al generar la salida de vídeo; es posible escribir un nuevo valor en la ubicación de memoria relevante entre líneas sucesivas y, por lo tanto, hacer que se muestre un par de colores diferente. Sin embargo, el procesador del Spectrum no es lo suficientemente rápido como para escribir en una fila completa de bytes de atributos en una línea de exploración, por lo que solo se pueden lograr atributos de 8 × 1 en 20 columnas. [35] Esta técnica se conoce de diversas formas como Hicolour , Multicolor , FLI , BIFROST*2 "SuperColour", [36] "Rainbow Generator" o Rainbow Processor [37] . [30]
Detalles:
Una variación de este método consiste en cambiar la fila de atributos a lo largo de dos líneas de escaneo, lo que da como resultado bloques de atributos de 8 × 2 píxeles en una región más amplia de la pantalla. Este modo se conoce como Bicolor y se puede aplicar a todo el ancho de la pantalla mediante el uso del motor Nirvana+ . [38] [39]
Detalles:
Un caso especial consiste en alternar entre los dos colores disponibles por celda de atributo para 4 píxeles cada uno, lo que permite que cada región de 4 × 1 se trate como un "píxel" coloreable de forma independiente (aunque la limitación de un nivel de brillo por celda de 8 × 1 sigue vigente). Nuevamente, se puede aplicar una variante de 4 × 2 de este modo a una región más amplia de la pantalla. Y se puede lograr una variante de 4 × 4 en máquinas de 128K mediante cambios temporizados entre las dos RAM de video (en lugar de reescribir los datos de atributos), para mostrar la mitad superior de las celdas de caracteres de una pantalla y la mitad inferior de la otra.
Detalles:
ULAplus es compatible con los modos estándar de ZX Spectrum y Timex Hi-Res y Hi-Colour, y añade la capacidad de redefinir la paleta. [40] Si sólo se utiliza para modificar ligeramente los 16 colores básicos, el software ULAplus se puede visualizar en un Spectrum estándar. El uso de los 64 colores completos es incompatible, ya que activaría los atributos "flash" del Spectrum original. [41] También son posibles los modos inspirados en Amiga HAM (HAM256 y HAM8x1), que muestran hasta 256 colores en pantalla. [42] [43] [44] [45]
Detalles:
Alternando entre dos pantallas en cada interrupción de cuadro (50 Hz), es teóricamente posible simular una duplicación de la resolución de visualización vertical de 192 a 384 líneas.
Los clones de Timex y ZX Spectrum 128K implementan un área de pantalla "sombra", que se puede cambiar de lugar mediante el uso de un solo OUT
comando, y esto a menudo se utiliza para cambiar rápidamente entre dos imágenes para este propósito (aunque esto también se puede lograr con una copia de bloque estándar, aunque no en toda la pantalla).
Cuando se ve en una pantalla de televisión CRT (el estándar en ese momento), el parpadeo es menos perceptible que en un monitor moderno. Y la imagen de ejemplo está vinculada aquí ( advertencia : la imagen vinculada parpadea muy rápidamente, lo que podría causar convulsiones en personas con epilepsia fotosensible ).
De hecho, la técnica no logra una verdadera visualización entrelazada, ya que el Spectrum carece de la capacidad de sincronizarse con el hardware de visualización a un nivel tan bajo. En una pantalla de televisión CRT, el efecto es más parecido al anti-aliasing , con ciertos píxeles que aparecen a la mitad de la intensidad. [30] [47]
En los televisores LCD modernos , tarjetas de captura u otros dispositivos que convierten la señal analógica original en digital (ignorando parcialmente las señales de sincronización originales), este modo se puede interpretar como entrelazado verdadero, como se muestra en la imagen de un gato, a la derecha.
Detalles:
Los atributos (colores) de una imagen se alternan a 50 Hz en la pantalla. [48] De esta manera, la paleta aumenta a aproximadamente 36 colores. [49] Es posible cambiar de pantalla por línea de exploración y así mezclar las pantallas, pero esto consume mucho CPU y necesita tiempos exactos y constantes.
Con un software de estado sólido real, es posible simular un GigaScreen en un "toastrack" de 128K original ZX Spectrum 128K. [50]
Para las máquinas Pentagon, está disponible una modificación de hardware que combina directamente las dos áreas de pantalla alternas en la señal de video, eliminando así el parpadeo asociado con este método. La interfaz MB03+ Ultimate y la computadora eLeMeNt ZX pueden mostrar tres modos de hardware de GigaScreen sin parpadeo (mezcla de RAM de video, mezcla de cuadros de video y modo de detección automática) en resoluciones de 256 × 192 y 512 × 192.
Además, las técnicas GigaScreen y Hi-Colour pueden emplearse juntas para producir imágenes con colores aún más intensos; este formato se ha denominado DithVIDE y BZither , ambos nombres hacen referencia a los métodos de tramado empleados al convertir imágenes de color verdadero a este formato. Detalles:
La interfaz MB03+ Ultimate y la computadora eLeMeNt ZX ofrecen este modo gráfico que permite mostrar datos de imagen de la segunda RAM de video en el lugar de un color seleccionado en la RAM de video n.° 1. Esto agrega un tercer color a un atributo.
Detalles:
Tres imágenes separadas, que comprenden una capa roja, verde y azul, se muestran en la pantalla rápidamente, una tras otra, confiando en la persistencia de los efectos de la visión para fusionar las tres capas en una sola imagen coloreada. [51] El resultado es una imagen de 8 colores donde cada píxel puede colorearse independientemente. [52] [53]
Detalles:
Las máquinas posteriores compatibles con ZX Spectrum ofrecían modos de vídeo adicionales. Estos se basaban en el modo estándar de 256 × 192, pero eran incompatibles con el Spectrum original. [30] Además, las interfaces Spectra y MB03+ Ultimate amplían la pantalla del Spectrum para admitir más colores y/o modos de vídeo adicionales.
Modo de vídeo donde cada píxel puede tener uno de 16 colores. [54] Detalles:
Un modo Sam Coupé, donde cada píxel puede mostrar uno de los 16 colores de una paleta de 128 colores. [30] Detalles:
Un modo compatible con la computadora del Pentágono. [55] Detalles:
El ordenador eLeMeNt ZX y la interfaz MB03+ proporcionan resoluciones basadas en planos de 256 × 192 (LowRes), 512 × 192 (HighRes) y 512 × 384 (SuperHiRes). [56] Los gráficos HGFX se manejan a través de capas planares, pero también se puede acceder a ellos como páginas RAM "gruesas". La resolución más alta, solo para gruesos, es la "PAL" de 720 × 546 píxeles. El HGFX consta de capas-planos de bits compatibles con pantallas ZX (no lineales o lineales) para lograr hasta 256 colores tanto en modo LowRes [57] como HiRes, 16 colores en SuperHiRes y 4 colores en la resolución más alta. Ocupa sólo una parte de la memoria, similar a la memoria de la pantalla ZX, tiene sus propios buffers internos y se puede combinar con los gráficos ZX originales, en un modo llamado transparencia. [58] El HGFX proporciona una paleta de colores verdaderos de 24 bits (compatible con HiRes indeXedColour) con 256 colores indexados. Los datos de pantalla HGFX también se pueden mostrar en modos HAM (similar a Amiga) y FILL (similar a Apple2GS).
El HGFX se basa en un sistema HGFX/Q más potente, que originalmente era ampliable en un área límite a 320 × 240 o 640 × 240. [59]
Detalles:
Detalles:
Este modo muestra 128 96 píxeles de tamaño doble. Cada píxel contiene uno de los 16 colores, sin limitaciones de atributos. Los píxeles se almacenan en un búfer lineal como fragmentos de 4 bits (es decir, 2 píxeles por byte). El búfer tiene una longitud de 6144 bytes y ocupa la misma memoria que una pantalla de 256 × 192 píxeles.
Detalles:
Este modo muestra 128 × 96 píxeles de tamaño doble. Cada píxel contiene uno de los 256 colores (de 512), sin limitaciones de atributos. Los píxeles se almacenan en un búfer lineal de 8 bits. El búfer tiene una longitud de 12288 bytes y ocupa la misma memoria que las pantallas primarias (DFILE1) y de sombra (DFILE2) de 256 × 192 píxeles.
Detalles:
El Spectra tiene 31 formatos de visualización que permiten mostrar hasta 64 colores únicos simultáneamente y en una variedad de resoluciones de color, con alturas de atributos de 1, 2, 4 y 8 píxeles y anchos de 4 y 8 píxeles. [61]
Este modo se utilizaba principalmente para mostrar texto en pantalla de 64 × 24 u 85 × 24 columnas, y originalmente sólo las computadoras Timex Sinclair (donde se denominaba Hi-Res ) y algunos clones rusos [62] podían mostrarlo. También utiliza 12 KB de RAM. En el caso de Timex, este modo se activa a través del comando OUT 255,1
. [27] [28] Dos editores gráficos ("Draw 512" [63] y "Tech-Draw" [64] ) admiten este modo, [65] [66] junto con BASIC64 y algunas implementaciones CP/M . [30]
Detalles:
El Sam Coupé tiene este modo, donde cada píxel puede usar uno de los 4 colores de una paleta de 128. [30]
Detalles:
Un modo compatible con la computadora del Pentágono. [55]
Detalles:
Los píxeles se almacenan en orden lineal. Los atributos se duplican en dirección vertical, la composición del atributo es idéntica a la del modo ZX Spectrum original. HiRes indeXedColour puede elegir 32 colores de entre 16777216 colores. Se pueden mezclar dos RAM de video en los modos Color e indeXedColour a través de Keylayer.
Detalles:
Los emuladores SPEC256, [67] [68] EmuZWin [69] [70] y E.pectrum [71] tienen un modo de pantalla de 256x192 píxeles donde cada píxel puede tener uno de los 256 colores. [30] Esto se logra ampliando el tamaño de palabra del Z80 emulado de 8 bits a 64, lo que hace que haya ocho bits de datos disponibles para cada píxel; la pantalla ocupa así 48 KB de memoria. Este modo solo existe en el emulador y los gráficos del software deben modificarse para usarlo. [ cita requerida ]
La baja profundidad de bits por píxel, de tan solo un bit por píxel, ha obligado a los artistas gráficos (por ejemplo, en ZX-Art) a recurrir a diversas técnicas de tramado . El tramado funciona muy bien con los televisores CRT de la época, porque los televisores analógicos emplean una gran cantidad de desenfoque tanto en el eje horizontal como en el vertical. Como el foco del haz de electrones de los televisores CRT comunes es intencionalmente bajo, el alto desenfoque resultante produce una mezcla de colores de los píxeles vecinos. El desenfoque reduce el ruido visible no deseado que se agrega mediante el tramado en las imágenes mostradas.
Para simular fielmente la imagen de salida real de un ZX Spectrum, un emulador moderno necesita emplear un filtro de desenfoque de una potencia significativa. Los filtros bilineales simples introducen demasiado desenfoque, mientras que el filtro Lanczos extremadamente nítido es inadecuado. Por lo tanto, el filtro tiene que ser construido especialmente para simular el efecto de desenfoque en un televisor CRT común. La mayoría de los emuladores emplean filtros de muy baja calidad, lo que hace que la imagen final aparezca extremadamente nítida y pixelada. [ cita requerida ] Algunos emuladores, como FUSE, emplean filtros disponibles en un intento de reducir el efecto de pixelación. [ cita requerida ] Esos filtros producen la imagen final significativamente diferente a la salida de video real del ZX Spectrum.
Un contraste mutuo bajo de algunas combinaciones de colores de la paleta permite mejorar el efecto de tramado al reducir aún más la cantidad de ruido introducido por el tramado. La siguiente tabla demuestra este efecto: por ejemplo, el contraste de un color blanco sobre un fondo amarillo es extremadamente bajo, lo que hace que el texto blanco sea prácticamente invisible.
{{cite book}}
: CS1 maint: multiple names: authors list (link)