jueves, 5 de enero de 2017

Regreso al pasado: CGA: Menos resolución para mejorar los gráficos


Hubo un tiempo en que tu sargento te pedía que saltaras 2m a la pata coja con un grillete de 10Kg y, por absurdo que parezca, los desarrolladores de videojuegos lo conseguían. Los juegos no podían mostrar grandes gráficos programando tal y como se aprendía a programar cualquier programa de gestión. Tenías que ser más listo e ir más allá de lo obvio y aparecieron los gráficos CGA.

Para el que no lo sepa, CGA es un estándar gráfico de 1981 que permitía mostrar hasta 16 colores en modo texto y 4 en modo gráfico. Esto era porque el modo texto en lugar de píxeles, representaba caracteres, por lo que la resolución de 80x25 (terminal típico) x 16 colores posibles, ocupaba poca memoria. En cambio el modo gráfico típico de 320x200 con 4 colores ya se comía la mitad de la memoria de un PC de la época y existía un modo de 640x200.

La paleta por defecto tenía unos colores característicos. Marcó el estilo de la época.


Como comprenderéis, mostrar gráficos buenos con esos recursos era algo muy complicado y en cambio había juegos bastante vistosos para la época. La forma en que lo consiguieron fue estudiando el modo en que interactuaba el PC con el monitor, sabiendo cómo funcionaba un monitor CRT y la señal que recibía.

Podría extenderme con el tema hablando de cómo aprovechaban el tiempo de retraso en el dibujado de las líneas para realizar más cálculos o las formas de aprovechar el espacio de color YUV para comprimir la señal, pero lo que quiero explicaros hoy es menos aburrido para vosotros e igualmente fascinante para mí.

Como mencioné antes, tenía unos modos gráficos muy limitados en cuanto a colores. La forma de solucionarlo fue a las bravas. La mayoría de los desarrolladores se conformaban con lo que había. O bien no conocían esta posibilidad, o bien no les merecía la pena la inversión con las escasas ventas de la época.

Esto es un ejemplo de tramado. Cuanto más pequeños, más parece ser violeta.
Para los rellenos de grandes zonas se usaba el tramado, que en televisores normales se creaba un color aproximado y daba la impresión de ser un color más en la paleta. El tramado no es más que ir metiendo un píxel de otro color por medio de vez en cuando. El que haya usado Windows 3.11 o inferior con pocos colores recordará algunas decoraciones de ventanas que dolían a la vista y que usaban este sistema. En televisores normales el mismo color se veía mejor. Básicamente es hacer un tablerito de ajedrez y aprovechar que el brillo de un píxel invadía a los que le rodeaban para que se mezclasen los colores un poco. Eso del brillo invasor de píxeles es también la razón por la que los juegos no nos parecían (tan) pixelados en los tiempos de la MD/SNES y sí en los emuladores. Era casi como un antialiasing "natural".

Aparte de ese truquito, también se aprovechaba lo que decía del dibujado de líneas para ir cambiando la paleta de colores. Esto ya ponía de manifiesto que querían sacarle el máximo jugo posible, pero en este caso había una limitación y era la frecuencia del procesador. Hacía falta una sincronización perfecta con la pantalla y eso sólo ocurría con un 8088 a 4,77MHz. Sí, hablamos de MHz. Eran lentitos entonces nuestros ordenadores.

California Games con el truco CGA para el IBM 8088. ¡Qué diferencia!
 En cambio, el modo que siempre me llamó la atención y el que propició esta entrada, fue el 160x100 a 16 colores. ¿Pero qué? Sí, sí. Ya dije que el modo gráfico se quedaba con 4 colores y, como mucho, 7 con el truco de la frecuencia. La razón por la que esto es posible es que no es un modo gráfico. Era el modo texto 80x25 a 16 colores tuneado un poquito. No se pintaban píxeles, sino caracteres. La forma de hacer que parecieran píxeles fue hacer que en lugar de medir 8 píxeles de alto cada carácter, hacer que midiese 2. Así cuadruplicaban las líneas a pintar. ¡Estaban recortando los caracteres! Se hacía lo propio para pintar el doble de columnas y ya teníamos la resolución adecuada, algo baja en comparación, pero muy colorida.

Si os fijáis en la bola, los colores se "mezclan" por el cambio de paleta.

La forma de pintar píxeles era un tanto compleja, pues había que usar dos caracteres concretos, el 221 y el 222, que eran los que siguiendo ese modo, mostraba dos píxeles superiores del carácter y esos permitían pintar uno con el color de frente (letra) y el color de fondo. También se podía usar el espacio para que los dos píxeles fueran el color de fondo, etc. Ya tenías que pintar los píxeles de dos en dos y era algo relativamente tedioso que requería pensar el juego de otro modo, pero nada preocupante.

Aquí se ve el resultado, el resultado sin recortar los caracteres y lo que se ve de cada carácter.

Como algo anecdótico, se consiguieron mostrar hasta 1024 colores en pantalla con CGA y todos los trucos habidos y por haber sobre la pantalla. El resultado era espectacular, pero esto es un logo tardío que surgió como reto, no como algo jugable en realidad. Podéis verlo a continuación:

1024 colores en CGA. ¡Sorprendente!
He usado más fuentes, pero si estáis interesados en saber cómo funcionan los trucos para televisores CRT aprovechando los modos YUV y demás, os dejo este enlace. Si por el contrario queréis disfrutar con cómo aprovechaban esta técnica diferentes juegos, preferiréis visitar este otro enlace.