Diseñado por Texas Instruments originalmente para su comercialmente fracasado ordenador, el TI-99/4A, el TMS9918A y sus derivados, son sin duda uno de los chips más utilizados para ordenadores y consolas de 8 pertenecientes a la segunda generación. Su importancia radica no solo en la variedad de sistemas que lo utilizaron, sino que el diseño de los chips gráficos de muchas consolas de 8 y 16 bits posteriores, usan chips gráficos que son versiones potenciadas del VDP de TI.
El TMS9918A, uno de los chips gráficos más usados de la historia
El caso del TMS9918A es casi idéntico al del AY-3-8910, pero como procesador gráfico. Diseñado originalmente para un sistema que fracaso comercialmente, termino siendo el encargado de generar gráficos en multitud de sistemas lanzados durante los primeros años de la década de los 80, algunos de ellos bastante conocidos y de marcas importantes en la historia de los videojuegos.
También conocido como VDP (Video Display Processor) no deja de ser una versión unificada en un solo chip y potenciada de lo que eran las terminales de texto que generan la pantalla a partir de un mapa de caracteres, pero su mayor particularidad es tener un gestor de sprites integrado. ¿Y qué es un sprite? Pues un patrón gráfico que no es fijo, ya por el hecho que tenga alguna animación o se desplace libremente por la pantalla.
Así pues, los patrones dinámicos que en la Atari 800 reciben el nombre de jugadores y misiles, en el TMS9918A reciben el nombre de sprites, un nombre que se ha quedado en la historia para los caracteres dinámicos en pantalla.
¿En qué sistemas se utilizó?
Los primeros obviamente fueron la gama de ordenadores TI-99/4 de Texas Instruments, que no solo fueron un sonoro fracaso, sino que el TMS9918A era originalmente un chip accesorio al TMS9900, uno de los mayores fracasos de la historia de los microprocesadores, el cual, merece un capítulo aparte.
Sin embargo, el chip fue usado en multitud de sistemas domésticos, siendo la combinación más popular la que estaba formada por una CPU Zilog Z80A a 3.58 MHz, un generador de sonidos programable AY-3-8910 y el TMS9918A como chip gráfico. Una combinación que se vio en los siguientes sistemas:
La familia de ordenadores MSX de primera generación lanzada en 1983 en Japón. La cual se vio influenciada por dos sistemas anteriores con la misma configuración, Spectravideo SVI-318 y SVI-328
SEGA SG-1000 y SEGA SC-3000, es decir, la primera consola y el primer ordenador de SEGA respectivamente, sí, SEGA tuvo un ordenador por aquel entonces.
La consola Colecovision, que hizo temblar a Atari y la forzó a sacar la malograda Atari 5200.
Sin embargo, no eran compatibles entre sí, ya que no todos tenían la misma cantidad de memoria RAM, tampoco el mismo mapa de memoria y el almacenamiento entre ellos no era común. Por lo que no compartían catálogo.
Diferencias frente al ANTIC+GTIA
Pese a ser contemporáneo al hardware de Atari, el TMS9918A es menos avanzado, pero tiene una resolución mayor dado su Dot Clock a 5.37 MHz, lo que le permite tener una resolución de 256 píxeles en horizontal frente a los 160 píxeles de la Atari 800 que tiene un Dot Clock de 3.58 MHz
En cuanto al color, el TMS9918 puede mostrar 16 colores en pantalla, de una paleta fija de 16 colores, aunque su mayor desventaja es que la CPU solo se puede acceder a la DRAM del VDP de Texas Instruments en el periodo VBlank, lo que impide el cambio de valores al vuelo. Es más, no existe un mecanismo DMA que le permita a la CPU acceder a la DRAM del TMS9918 y el VDP tampoco lo tiene para acceder a la del sistema. Esto se debe a que el VDP de TI se diseñó con un mecanismo de acceso y refresco a su propia memoria DRAM, la cual obviamente es la de Texas Instruments. Qué es donde estaba el negocio de este chip realmente cuando se lo vendían a terceros.
Otra de las diferencias importante es que no soporta scroll suave por hardware. Por lo que si el nivel se compone de varias pantallas se desplazará bruscamente carácter por carácter (8 líneas píxeles en horizontal u 8 líneas píxeles en vertical) en vez de hacerlo píxel por píxel. No obstante, algunos juegos, optan por hacer un fundido entre una pantalla y la siguiente para darle tiempo a la CPU a reorganizar el tilemap (mapa de caracteres) y los sprites. Tampoco tenemos un mecanismo de colisiones automatizado.
Comunicación con la CPU
Sí, sabemos que os estamos hablando de lo malo primero, pero antes de meternos de lleno en las capacidades del TMS9918 hemos de entender cómo se comunicaba la CPU con la DRAM de este chip. ¿Por qué es importante? Pues por el hecho que el VDP de Texas Instruments no leía de la memoria RAM del sistema para componer la imagen, lo hacía de su propia memoria y como ya hemos dicho, no existía mecanismo DMA.
Durante el periodo VBlank, es cuando la CPU puede enviar la información de cómo se compone la pantalla en cada fotograma. Sin embargo, el envío se ha de hacer a través del propio VDP, activando ciertos pines de control en concreto y mandando la información a través de un puerto especial de 8 pines, lo que se traduce en que para enviar un dato de 8 bits son necesarios 3 envíos a memoria. Esto significa que para enviar 1 byte en un Z80 o un 8080 se requieren 12 ciclos de reloj de la CPU.
¿Y por qué ocurre esto? Pues por el hecho que el bus de direcciones y el de datos para escritura se encuentran conmutados y usan los mismos pines, primero se envía la primera parte de la dirección (que es de 14 bits, ya que el VDP soporta hasta 16 KB de memoria), luego la parte baja para luego mandar el dato y para terminar el dato mismo. Pensad que sin contar los sprites.
Color y preferencia en el TMS9918A
Para entender cómo funciona el TMS9918A hemos de entender que dibuja la escena teniendo en cuento varios planos, pero siempre dibujará aquel que tenga más preferencia, y el nivel de la misma para cada objeto viene predefinido y no puede ser cambiado por el desarrollador.
- La capa de menos importancia es el fondo, en la cual se dibuja toda la pantalla de un único color, el cual es elegido entre los 16 colores de paleta fija del VDP.
- La segunda capa es el tilemap, lo que sería el escenario del juego. Es el clásico mapa de caracteres formado por patrones que ya hemos visto en otros sistemas.
- La tercera capa son los sprites, patrones gráficos con animación o movimiento de un frame a otro. El TMS9918A podía dibujar hasta 32 de ellos en pantalla. La información de todos ellos se encuentra en una lista en la DRAM del VDP y el primero de la lista de sprites tiene prioridad sobre el segundo, y así sucesivamente.
No obstante, los patrones de bits son monocolor, es decir, 1 bit por píxel. Por lo que el color que codifican cuando el píxel está activo viene codificado en la Color Table si pertenece al Tilemap o en el cuarto byte de la tabla de atributos si es un sprite. En cambio, si es 0 el valor del píxel será el que le correspondería a la capa siguiente.
Modos gráficos en el TMS9918A
El TMS9918 tiene varios modos gráficos de funcionamiento, en realidad son varios subsistemas gráficos con sus características técnicas, cada uno de ellos en un mismo chip que comparten la misma memoria y registros. Todos ellos, excepto el modo texto, soportan sprites.
Modo texto
El primero de ellos es el modo texto, el cual era de 40 columnas, pero el tamaño de los caracteres era de 6 píxeles de ancho por 8 píxeles de alto. Al final la resolución era de 240 x 192 píxeles y no era muy cómodo de usar, por ese motivo de cara a trabajar con texto otras soluciones eran mucho mejores en la época. En cuanto a la representación de color, solo puede mostrar dos colores al mismo tiempo, el activo asignado a los caracteres y el de fondo.
En realidad este modo no usaba sprites y si os fijáis veréis que el mapa de caracteres es en realidad un tilemap, pero formado por patrones de bits de un tamaño distinto. Lo normal en los modos de 40 columnas es que cada carácter fuese de 7 píxeles (280 en horizontal) u de 8 píxeles (320 en horizontal), pero el Dot Clock del TMS9918A permitía como mucho 256 píxeles activos por línea de escaneo.
Este modo se usó sobre todo en ordenadores, por ejemplo, y tal y como veis en la pantalla de arriba en el intérprete BASIC de los ordenadores bajo el estándar MSX. No obstante, por aquellos tiempos las aventuras de texto eran muy famosas y este modo es el que permitía reproducirlas en cualquier ordenador con el TMS9918A
Gráficos I
En este modo la CPU envía dos tablas, la primera se la llama Tilemap que es el mapa de caracteres de 32 x 24 patrones de 8 x 8 píxeles fijo que sirve para dibujar el fondo. En el caso de que exista conflicto a la hora de dibujar un patrón u otro, los sprites son los que tienen más preferencia, seguido del Tilemap y luego el color de fondo que será el valor de la paleta de 16 colores que se encuentre almacenado en el registro correspondiente.
Para componer el tilemap de la escena se usa una lista de 256 patrones de 8 x 8 píxeles con 1 bit por píxel. Por lo que solo puede mostrar 2 colores por patrón en pantalla. Cada una de las 768 posiciones en pantalla de la pantalla apuntan al patrón correspondiente de la lista, la cual es de 256 patrones diferentes.
Luego está la Color Table, donde tenemos 32 bytes donde cada uno de ellos contiene codificado el color activo de 8 patrones consecutivos en el tilemap.
Modo bitmap
El segundo de los modos menos populares del TMS9918 es el modo «bitmap». En el que no se manejan caracteres, sino que se crean bloques de 4 x 4 píxeles con un color en común. Al final la escenas terminan siendo de 64 x 48 bloques. Por lo que como búfer de imagen no se puede decir que tuviera mucha definición.
La pantalla de arriba es de un juego de la Colecovision de pintar para los niños basado en los Pitufos, en él podemos ver cómo el fondo no está formado por patrones, sino por bloques de varios píxeles de un solo color. En primer plano se encuentran los personajes de la Pitufina y Gargamel formados por varios patrones, seguramente generados por el gestor de sprites. Realmente no se trata de un modo gráfico muy usado.
¿El motivo de tan baja resolución? El hecho de que la interfaz entre la CPU y el TMS9918A sea tan lenta que no les permitía a las CPU de la época escribir los valores de color lo suficientemente rápido durante el periodo VBlank. En todo caso, un búfer de imagen completo a 256 x 192 píxeles con 16 colores (4 bits) hubiese requerido 24 KB de memoria cuando el límite del VDP era de 16 KB.
Gráficos II
El TMS9918 original carecía de este modo, el cual le da una mayor variación cromática al tilemap. En realidad se trata de una variante del Gráficos I donde en vez de codificar 2 colores (activo y fondo) por cada patrón al completo, pues permite codificar esos dos colores por línea del patrón. Un ejemplo claro donde esto se ve es en la conversación a la Colecovision del Donkey Kong de Nintendo
Sprites en el TMS9918A
Llegamos a la parte más interesante del TMS9918, los sprites o patrones móviles en pantalla. Hemos de partir del hecho que soporta hasta 32 patrones dinámicos o sprites por pantalla completa, pero solo 4 por línea. Sin embargo, dado que la CPU no tiene acceso a la DRAM del procesador de vídeo durante el VSync, tampoco la tiene durante los periodos HBlank y es por ello que esta es una tabla más que se ha de montar durante el periodo VBlank, pero es diferente al Tilemap.
Cada sprite tiene una tabla de 4 bytes donde el primero indica la posición vertical del sprite, es decir, la línea de escaneo donde se empezará a dibujar. El segundo, la posición horizontal inicial medida en píxeles, y el tercero, el patrón correspondiente en el índice de 256 caracteres en memoria. En cuanto al cuarto byte, este se divide de la siguiente manera:
- Los bits 0 a 3 marcan el color del sprite de entre los 16 colores posibles.
- Los bits 4, 5 y 6 no se usan.
- El bit 7 si se encuentra activo, desplaza el patrón 32 píxeles a la izquierda respecto a la posición asignada en el segundo byte.
La tabla es llamada Sprite Attribute Table y a partir del TMS9918A se convirtió en el modelo estándar para representar los sprites en pantalla para multitud de sistemas.
Variantes del TMS9918A
No nos centraremos en el V9938 y tampoco en el V9958 de Yamaha, pese a ser los sucesores del TMS9918A por el hecho de pertenecer al hardware de los MSX2 lanzados en 1985 en Japón, por lo que los veremos cuando hablemos de dicha familia de ordenadores. No obstante del TMS9918A hubo dos variantes o mejor dicho, una versión mejorada que vino en dos versiones distintas, una para NTSC que es el TMS9928A y la otra para PAL, que fue el TMS9929A.
Las especificaciones y el funcionamiento eran los mismos que el VDP original, la diferencia es que el TMS9918A integra una salida de vídeo compuesto que unifica en una misma señal toda la información de crominancia y luminancia. El TMS9928A y el TMS9929A la separan, lo que permite usar salidas de vídeo basadas en componentes como, por ejemplo, una salida RGB.
El único handicap de ello es que esto requiere la construcción de la circuitería para la salida de vídeo, incluso si al final el sistema usará vídeo compuesto. No obstante, ducha versatilidad fue bien acogida, sobre todo por el hecho que muchos modelos del MSX de primera generación y la propia Colecovision usaron estas dos variantes y no el modelo original.