Graficos en consolas antiguas (IV): Colecovision

Toca habla de la Colecovision.

800px-ColecoVision

Cuando se lanzo la Colecovision en 1982 lo que había disponible en el mercado doméstico (sin contar los caros ordenadores) eran la Intellivision y la Atari VCS 2600, la diferencia resulto brutal al ser un salto generacional y esto es lo que puso nerviosa a Atari que acabo por estrellarse por lanzar con prisas la 5200 sin esperarse a acabar lo que sería la 7800. Desgraciadamente por el crash de 1983 la Colecovision desapareció de forma fugaz del mercado.

En esta entrada voy a hablar de su procesador gráfico que es el TMS9918A, el cual es muy importante en la historia de los videojuegos.

TMS9918A_02

¿Que tiene de especial este chip?

  • Fue el procesador gráfico del MSX de primera generación, de la Colecovision así como de una enorme cantidad de máquinas recreativas de principios de los 80.
  • Es el antecesor directo del procesador gráfico de: NES, SNES, Sega Master System, Genesis/MegaDrive Sega Game Gear, NEC PC-Engine/TurboGrafx y SNK Neo-Geo. Se puede decir que los procesadores de dichas consolas son versiones modificadas del TMS9918A.

El chip fue creado para el TI/99 de Texas Instruments, un ordenador lanzado en 1979 que acabo siendo un fiasco comercial y eso llevo a TI a licenciar su chip a terceros (como hacen Nvidia y AMD hoy en día) lo que hizo que terminara en una gran cantidas de sistemas.

Pero lo que nos interesa es la forma en la que el TMS9918A funcionaba, sus carácteristicas eran las siguientes:

  • Al contrario de la 5200 en el que habían dos chips (ANTIC y GTIA), el TMS9918A unificaba todo el sistema gráfico en un mismo procesador.
  • Bus de 8 bits con la CPU, esto permitia enviar comandos al TMS9918a desde la CPU, por lo que este no tenía que acceder a la memoria principal para recibir las listas de instrucciones de dibujado, aunque sobre esto voy a entrar más adelante en esta misma entrada.
  • 4 o 16KB de memoria local/VRAM. Lo que significa que para realizar operaciones gráficas el TMS 9918A solo necesitaba acceder a la RAM del sistema para cargar una nueva colección de patrones/sprites.
  • Al contrario de lo que ocurría con el ANTIC, el TMS9918A puede escribir en memoria por lo que es un Raster Output (ROP), esto es algo que comentare en detalle más adelante en la entrada.
  • Los tiempos del VSYNC, VBlank y Overscan no tienen que ser controlados por la CPU sino que el TMS9918A tiene mecanismos para el control de los mismos.
  • Capacidad para conectar entre si varios chips (utilizado en máquinas recreativas).

El TMS9918A tiene cuatro modos distintos:

  • Mode 0 (Text0): Resolución 24 filas por 40 columnas de caracteres en monocromo, dichos caracteres son letras que son cargadas desde la ROM de carácteres del sistema. Cada uno de los caracteres tiene un tamaño de 6 pixeles en horizontal. Durante el uso de este modo no se acceden a las areas de memoria de los patrones/sprites.
  • Mode 1 (Gráfico 1): Resolución de 24 filas por 40 columnas caracteres/patrones/sprites. Cada fila puede cargar hasta 8 carácteres,  Se utilizan solo dos colores. Cada 8 caracteres/patrones/sprites en la colección de caracteres/patrones/sprites tiene dos colores.
  • Mode 2 (Gráfico 2):  A simple vista parece no tener ninguna diferencia respecto al Modo 1 pero su ventaja es que permite jugar con tres tipos de colecciones/sprites en vez de una sola. Utilizado en juegos y escenas que combinaban texto y gráficos.
  • Mode 3 (Multicolor): Resolución de 64×48 caracteres/patrones/sprites, cada carácter/patrón/sprite es de 4×4 pixeles en vez de los habituales 8×8. Apenás se llego a utilizar.

Una vez explicadas las carácteristicas generales, vamos a ver el funcionamiento del chip.

La primera diferencia respecto al ANTIC de Atari era que mientras el chip de Atari cargaba listas de pantalla desde la RAM del sistema que después almacenaba en su memoria interna, el TMS9918A recibía datos directamente desde la CPU a través de un bus de 8 bits que conectaba ambos procesadores por lo que no recibía ni leía listas de pantalla en memoria. Lo que hacía escribir en una serie de registros del procesador, de la misma manera que el GTIA/TIA de Atari, pero las similitudes terminan ahí ya que en el caso del TMS9918A no sirven para dar valores a los elementos en pantalla. El TMS9918A determinan la forma en la que va a operar el chip y como esta distribuida la VRAM, dichos registros le dicen al procesador cosas como:

  • En que posición de la RAM principal se encuentra la colección de sprites/patrones a cargar.
  • Cual es el orden en que estos sprites/patrones se dibujarán en pantalla.
  • Donde se encuentra la paleta de colores.
  • Modo gráfico, tamaño de los sprites/patrones

En la entrada de la Intellivision hemos visto como la consola podía cargar patrones/sprites y en el de la 5200 como se podían crear listas de pantalla este podía realizar accesos a la memoria durante el Horizontal Blanking. Pues bien, el TMS9918A podía hacer ambas cosas y esto permite cargar una enorme cantidad de sprites/patrones distintos en la escena.

TMS9918A

Una imagen generada por el TMS9918A estaba compuesta por un fondo (backdrop plane, el cual es de un) y 32 de 8×8 pixeles sprites/patrones distintos. El fondo era de una resolución mucho más alta que la resolución para permitir escenas compuestas por multiples pantallas, por desgracia el scroll/desplazamiento de pantalla era brusco dado que se hacía por patrones/sprites y tenia que procesar el scroll/desplazamiento de pantalla a través de la CPU.

Cuando se producía el VSync y el VBlank en pantalla se cambiaba el orden en que la colección de patrones/sprites era dibujada en pantalla o simplemente se cargaba una nueva colección en memoria por el cambio de escena. No obstante por escaneo de línea solo podía dibujar hasta 4 sprites/patrones distintos a la hora de generar la escena por limitaciones en el ancho de banda.

Los Sprites/Patrones tenían preferencia sobre el fondo a la hora de dibujarse en pantalla. En las consolas con cartucho que utilizaron el TMS9918A y derivados del mismo, el bus de lectura/escritura hacía la VRAM se podía utilizar para leer la información gráfica de los cartuchos y volcarla directamente en la VRAM sin tener que pasar por la RAM del sistema. Esto significaba que los artistas podían crear patrones/pixeles que eran almacenados en la memoria del cartucho y podían ser volcados a la VRAM del TMS9918A cuando era necesario sin que estos tuvieran que pasar por la RAM del sistema.

Gracias a todo esto el TMS9918A podía presentar gráficos como estos:

Colecovision1

Colecovision2

No se tiene que confundir el TMS9918A con sus derivados, los cuales eran de especificaciones muy superiores y de los cuales empezaré a hablar en la siguiente entrada.

Anuncios