sábado, octubre 14, 2006

Colores en el ZX Spectrum

Amigos,

Muchos amigos me han preguntado ¿por qué los juegos de ZX Spectrum se ven con dos colores? ¿Por qué los personajes son transparentes? o ¿Por qué se mezclan los colores?

La respuesta: ahorro!!!

Ejemplo: Personaje de Yie ar Kung Fu es transparente y toma los colores del fondo.



A continuación, trataré de explicar el display del ZX Spectrum:

El ZX Spectrum usa un método conocido como "memory-mapped display file". Esto significa que la pantalla está mapeada a direcciones de memoria, por ejemplo: si se escribe un valor en la dirección 16384 (ej: POKE 16984,255) se va a ver un cambio inmediato en la pantalla.

La pantalla del ZX Spectrum está formada por 256x192 pixeles.

En un sistema monocromo un pixel puede tener dos valores 0 ó 1, por lo tanto se necesita sólo un bit para representarlo, entonces se necesita: 256x192x1bit= 6144 bytes de memoria visual.

Si queremos usar 16 colores se necesitan 4 bits para representar todas la combinaciones, entonces se necesitan 256x192x4bit= 24576 bytes.

Los 24K eran demasiada memoria y encarecían demasiado el ZX Spectrum... lo que hicieron entonces fue diseñar un sistema simple y económico que permitiera desplegar múltiples colores en un pixel sin tener que usar mucha memoria...

El método fue: dividir la pantalla en caracteres. Cada caracter correspondía a una matriz de 8x8 pixeles. Una pantalla tenía 24 filas y 32 columnas, es decir, 768 caracteres.

Cada caracter podía tener los siguientes atributos:

  • INK: color si un pixel estaba a uno (3 bits)
  • PAPER: color si un pixel estaba a 0 (3 bits)
  • BRIGHT: indica si se debía aplicar brillo (1 bit)
  • FLASH: indica si el caracter está parpadeando (1 bit).
    ================
    Total= 8 bits por caracter

Nota: El flash intercambia el INK y el PAPER de un caracter constantemente.

Es decir los colores de 8x8 pixeles (64 pixeles) podían tener sólo 1 INK, 1 PAPER, BRIGHT o FLASH común a todos ellos.

Con esto la memoria necesaria para almacenar la pantalla completa era: 6144 bytes (pixeles) + 768 bytes (atributos) = 6912 bytes!!! Sólo un 12% más que un sistema monocromo.

Dado que los pixeles no podían tener colores en forma individual, cuando un personaje de un juego se movía hacia un objeto de otro color se producía un "choque de colores" tan característico en los juegos del ZX Spectrum.


Ejemplo: personaje de 3 Weeks in Paradise cambia el color de la planta.


Para evitar esto muchos desarrolladores decidieron hacer juegos con dos colores. Un ejemplo clásico de buen gusto es la técnica Filmation de Ultimate (hoy RARE) que utiliza sólo dos colores para la porción de pantalla donde se produce la acción:





Para los que le interese:

  • Direcciones de los pixeles: 16384 a 22527
  • Direcciones de los atributos: 22528 a 23295


Cabe destacar que otros sistemas usaban otras técnicas, tales como el uso de sprites para ahorrar en memoria visual. El ZX Spectrum no soporta sprites en hardware.

A continuacion la patente que se presentó por el display del ZX Spectrum, donde se indica el ahorro de memoria para un display en colores y alta resolución:


Más información sobre esta patente aquí.

Este post fue publicado originalmente en Atarichile.

Saludos

JF

1 comentario:

Anónimo dijo...

Parece que hace mucho tiempo que este blog permanece inactivo.

Tal como indica el artículo, si la Spectrum quisiera representar sus 16 colores individualmente (que en realidad son 15), necesitaría 6144 bytes de memoria, es decir, 24k.

La Spectrum inicialmente tenía una memoria de 16k. Hasta ahí es comprensible los ahorros de memoria que impedían mostrar colores con libertad. Pero luego esta se expandio hasta 48k. Con esa memoria la Spectrum podría representar los colores normalmente sin incurrir en gastos ni encarecer el producto.
Despues Sinclair lanzó su siguiente modelo el cual ostentaba una memoria interna mucho mayor: 128k, una cifra nada despreciable.

No entiendo por qué la Spectrum todavía aplicaba el mismo sistema gráfico despues de tales aumentos de memoria.
Yo no se demasiado sobre informátcia, pero si a nivel técnico fuese posible, habría quedado bien que la Spectrum (de 48k en adelante) incluyese distintos modos de vídeo; de esa forma se podrían mostrar los colores sin ninguna restricción y así evitar ese acabado visual tan tosco del que padecía la máquina. Esa mezcla de colores hacía difícil diferenciar cuáles objetos formaban parte del fondo y cuáles otros eran los personajes/ENEMIGOS, etc...

Una duda que siempre tengo presente.