El 6845 es coprocesador de video que unificaba en un solo chip el generador de video y el adaptador de pantalla y que sirvio como base para los modos gráficos de las primeras generaciones del PC y del Amstrad CPC.

6845-pinout

El procesador es un generador de carácteres pero con una enorme versatilidad, funciona igual que el generador de video del Apple II pero con la diferencia que almacena el búfer de imagen no repartido por toda la memoria sino de manera lineal y puede estar conectado a parte de la memoria del sistema o tener su propia memoria asignada. En el PC y el Amstrad CPC se comunicaban con la memoria principal aunque hubieron tarjetas gráficas para diversos sistemas en las que se comunicaba con memoria local asignada, pero curiosamente su origen era como procesador acompañante del 6809 por lo que paradojicamente hubiese tenido más sentido si se le hubiese colocado con el 6502 en vez de la serie 80×86 y el Z80.

crt6845ramaccess

El acceso a la memoria del 6845 va en consonancia del 6809 que tenia una velocidad de reloj que era el 50% del Z80 y el 8086, los cuales utilizaban cuatro ciclos de reloj en total para acceder a la memoria por lo que en el PC y el Amstrad CPC el 6845 accede a memoria en los tiempos muertos de la CPU y otros componentes.

Pero el 6845 tenía una particularidad en comparación con otros generadores de video de la época crt6845

El hecho que podemos ajustar la resolución de pantalla pero no solo la resolución de pantalla sino que tocando ciertos registros podemos ajustar la forma en la que el 6845 envia la señal a la pantalla (siempre dentro de sus limitaciones), la lista de registros es la siguiente:

6845registers

Podemos seleccionar cuantos carácteres son una linea de escaneo en total y cuantos de estos se muestran, a partir de que ciclo el 6845 empezará a escribir, la resolución vertial en carácteres y cual de la misma se representa. Si renderizamos en modo progresivo o entrelazado… Lo que permite una versatilidad total a la hora de escoger la resolución de pantalla aunque las resoluciones estándar son 160×200, 320×200 y 640×200 y la mayoría de los sistemas no tocaron nunca esas resoluciones para sus ordenadores y eso hizo que se estandarizaran. Eso si, lo único que no podían tocar era el tamaño de un patrón/caracter… 8×8 pixeles. Que se pueda utilizar una resolución con una profundidad de color u otra dependerá de la memoria disponible, de la misma manera que pueda con una serie de colores u otros dependerá directamente de la referencia a la paleta utilizada y es aquí donde empiezan a diferir el Amstrad CPC y el IBM PC.

look_ma_its_brown

Esta paleta es una paleta de 16 colores del CGA en modo compuesto, su bitcode es el siguiente:

cgapalette

En el Amstrad CPC pese a que el mismo generador de pantalla la paleta de colores era distinta ya que tenía un total de 27 colores pero solo podía utilizar 16 simultaneamente pero podía trabajar con dos paletas distintas al mismo tiempo, una para el primer plano y otro para el fondo.

cr3h5jh

El 6845 trabaja a nivel de linea con dos paletas distintas, la primera paleta es para el fondo y la segunda paleta para el primer plano, el color de primer plano siempre tendrá prefencia pero al contrario de lo que ocurre con el GTIA de los ordenadores de 8 bits de Atari era posible cambiar el valor del color al vuelo y esto ocurre tanto en el PC como en el Amstrad CPC pero las referencia a paleta son diferentes por lo que los colores entre el CGA y el Amstrad CPC se ven distintos.

Urian… Estas mintiendo… Los gráficos CGA se ven de la siguiente manera:

eyecga

Vale, lo acepto… Me he olvidado en mencionar una cosa en concreto y es que el modo de 16 colores solo es posible en el IBM haciendo uso de una resolución de 160×200 pixeles dejando solo 4 colores para los 320×240 y 16 colores para 160×200 que es una resolución demasiado baja para videojuegos, siiendo la ideal la de 320×200 pero solo tenemos 4 colores disponibles y las paletas de cuatro colores del CGA son horribles.

¿Como lo hacemos para tener una resolución de 320×200 y 16 colores? el primer IBM PC solo tenía unos 16KB asignados para la memoria de video y el tamaño no aumentaría hasta el PC AT y la llegada del adaptador EGA, bien… una de las ventajas del 6845 es que permite cambiar el valor de los colores pixel por pixel por lo que haciendo el truco de colocar 1 color en un pixel, nada en el medio y un color en otro pixel lo que acaba ocurriendo es que se genera un color que es la combinación de los dos colores colindantes y tenemos cuatro colores de base y combinando la horrible paleta de azules y violetas acabamos teniendo la paleta de 16 colores que hemos visto antes para generar los colores. Ahora bien, no olvidemos que el PC no era un ordenador para juegos porque ese no era el mercado de IBM en esos momentos por lo que no buscaban un buen adaptador gráfico para estos y fueron a por el 6845 porque era el más compatible con el CP/M que era el SO que inicialmente querían antes de decantarse por el MS-DOS.

¿Como lo hacía entonces el Amstrad CPC para mostrar esos colores? Pues porque el 6845 elegido no era la versión estandar sino el 6845 donde R viene de RGB ya que la salida a la TV era una salida RGB.

img_8525

Pero dejemos eso para la entrada del Amstrad CPC.

La evolución del 6845: El modo EGA

De cara a su PC-AT IBM hizo un clon propietario del 6845 cambiando por completo las instrucciones y rompiendo la compatibilidad hacía atrás por completo.

egatable

El primer cambio que realizo fue el byte de atributo que dejo de definir el pixel de manera directa a hacer referencia a una tabla, el problema es que dicha tabla estaba compuesta solo por unos 64 colores en vez de 256 colores.

ega_palette

Y pese a la gran cantidad de colores como mucho podía mostrar unos 16 colores en pantalla con las siguientes resoluciones:

  • 320×200
  • 640×200
  • 640×350

Los 640×350 solo eran posibles si se utilizaba un monitor propietario de IBM sino la resolución eran 640×200 como mucho… es decir… Un CGA glorificado en este caso pero aquí tenemos que entrar en algo que es cuanto menos curioso…

Aquí tenemos dos conectores distintos… No, no os estoy tomando el pelo. El de la izquierda es el RGBi y el de la derecha es el RGB-DB9, parecen VGAs pero son de 9 pines y la diferencia esta en… Bueno, como se utilizan los pines en modo CGA en este tipo de conectores, en el modo CGA solo se utilizan 4 pines por (R,G,B, Intensidad) por lo que cuando le decimos a un conector VGA que es compatible hacía atrás con el EGA que muestra gráficos CGA nos muestra esos gráficos tan horrendos que hemos visto antes en el CGA porque le estamos diciendo a la gráfica que interprete la salida como si fuese una salida RGBi.

ega-vs-cga

El EGA no obstante no fue un producto muy popular por el hecho de no poder mostrar más de 200 lineas y 16 colores en una pantalla estándar , por aquel entonces ya habían tarjetas basadas en el CGA capaces de reproducir la resolución más alta con 16 colores gracias a tener 64KB de memoria por lo que IBM tuvo que crear un nuevo estandar y un nuevo tipo de conectar que esta vez si que se haría estandar con el tiempo aunque con algunas reticiencias.

El MCGA, el VGA y el SVGA

La evolución del EGA que no se estandarizo por el intento de IBM se hacerlo todo propietario fue el MCGA que mostraba gráficos a 320×240 con 256 colores en el IBM PS/2 y de 640×480 con 16 colores, el formato en su versión no propietaria se convirtió en el conocido VGA que evoluciono a SVGA creando el estandar de composición de gráficos en pantalla que todos conocemos y que se ha seguido utilizando hasta la llegada de las conexiones DVI primero y las HDMI después.

vga_connector_pnr0052

El conector de 15 pines del VGA se mantuvo como estandar gráfico del PC durante mucho tiempo y las siguientes estandares han sido versiones del VGA es que el VGA a su misma vez fue una mejora del EGA donde para empezar se permitió la capacidad de poder reproducir hasta 8 bits de color en pantalla, esto se hizo tomando la tabla RGBrgb del formato EGA y expandiendola para llegar a ocupar los 256 registros del byte de atributo que servían para direccionar. Es por esto que cuando en muchos juegos antiguos cuando escogiamos EGA en un una pantalla EGA se simplificaban los colores pero no ocurría el error de color del CGA.

ega-vs-vga

Esto es porque en el caso del EGA si os habéis fijado en su paleta son colores con diferentes valores de intensidad, la paleta VGA de 256 colores es la siguiente:

91593

En modo EGA lo que hace es eliminar dos de los bits que definen el color y acaban por tener una versión más simplificada del colorido.

¿Y porque solo 320×240 o 640×480 con 16 colores? Las primeras tarjetas VGA salieron solo con 256KB pero a medida que el precio de la memoria fue bajando se hicieron posible más resoluciones posibles y con ello el estandar se fue expandiendo.

41resoln

Los estandares derivados del VGA acabaron por dominar el mercado de los ordenadores y no solo aumento la resolución sino la precisión de color a través de aumentar el byte de atributo a varios bytes de atributo para acceder a paletas de colores cada vez más grandes y permitir gráficos cada vez mejores, fue en ese punto donde el PC se volvio inalcanzable para sus rivales y se convirtió en el rey de la fiesta de cara a juegos al no tener ningún rival a la altura a nivel visual de las versiones avanzadas del VGA y cuando llegaron los gráficos en 3D el único estandar que había eran los derivados del VGA.