El Texas Instruments TMS9918A / 9929
Valoración de usuario: / 4
PeorMejor 
Sábado, 11 de Octubre de 2008 03:44

Es un circuito integrado monolítico de 40 pines (igual en tamaño al Z80A o a la ULA). Entre sus características, destaca el uso 4K o 16K de RAM (VRAM), que controla internamente. Puede mostrar imágenes de una resolución de hasta 256x192 píxeles y hasta 16 colores. Esta imagen aparece rodeada por un borde que también puede tomar uno de los 16 colores disponibles.

English version is in progress. In the meanwhile, please use this Google automated translation version. It may be a little odd to read, but at least, you will get an idea of what's going on, if you can't read spanish.

Dispone de 7 registros de sólo escritura a través de los cuales se puede programar dónde comienzan en la memoria de video, cada una de las estructuras que conforman una imagen en el chip. Para los programadores de videojuegos, diríamos que la memoria de pantalla está estructurada en "tiles", y de hecho su modo de texto no es más que un modo en el que los diferentes "tiles" forman los caracteres del código ASCII. Cuenta además con un único registro de sólo lectura donde se devuelve el estado de las colisiones, si ha habido interrupción, etc.

Cuenta con un controlador de sprites, que puede mostrar hasta 32 sprites de 8x8 píxeles, o de 16x16 píxeles, con detección de colisión,zoom y prioridades. Los sprites pueden pintarse en cualquier posición de pixel, sin intervención del procesador.

Dispone de 4 modos de pantalla:

  • Modo 0 (Texto): 40X24 caracteres, monocromático. Los caracteres son de 6x8. No se soportan sprites.
  • Modo 1 (SCREEN 1): 32X24 caracteres (256X192 píxeles). Se soportan sprites.
  • Modo 2 (SCREEN 2): 32X24 caracteres (256X192 píxeles), El modo gráfico más sobresaliente de este chip. Se soportan dos colores simultáneos en cada bloque de 8x1 píxeles. Se soportan sprites.
  • Modo 3 (Multicolor): 64X48 píxeles, Píxeles muy grandes, aunque cada uno puede tener un color diferente. Los sprites sin embargo, continúan siendo de la misma resolución que en los otros modos.

El chip cuenta con una salida de interrupción, que puede activarse o inhibirse. Si se activa, la interrupción se produce, como en el caso de la ULA, 50 veces por segundo (60 veces por segundo en el TMS9918A) y coincidiendo con el retrazo vertical. A diferencia de la ULA, la rutina de interrupciones debe reconocer la solicitud de interrupción para que el TMS vuelva a producir otra, en otro caso, la línea de interrupción queda a nivel bajo. El reconocimiento de interrupción se realiza leyendo el registro de estado del TMS.

En su implementación más popular, el MSX, la interrupción del TMS está cableada al procesador. Los programas, y las rutinas de la BIOS del MSX se comunican con este chip mediante dos puertos: 98h y 99h.

Puerto 99h, sólo escritura: a través de este puerto se programan los registros del TMS9929. Estos registros definen el modo de pantalla en el que se va a trabajar, la cantidad de memoria instalada, si se aplica o no zoom a los sprites y el tamaño de éstos, se definen también donde comienza cada uno de los bloques de estructuras de datos que manejará el TMS posteriormente para generar la pantalla de video, el color del borde, etc. Este puerto también se usa para asignar un valor al contador de direcciones de VRAM: dicho contador es el que después se usará para leer o escribir en una posición concreta de la VRAM.

Puerto 99h, sólo lectura: leyendo este puerto siempre obtendremos el valor del registro de estado. Este registro guarda, entre otras cosas, el estado de la última interrupción y el flag de colisión, que indica si dos sprites colisionaron en el último frame dibujado. Se usa también para resetear el flip-flop interno del TMS que controla qué dato se está escribiendo en el chip.

Puerto 98h, lectura/escritura: leyendo de este puerto, se lee la posición de VRAM apuntada por el contador de direcciones VRAM. Escribiendo en él, se actualiza el valor de la posición de VRAM con el nuevo valor suministrado. En cualquiera de los dos casos, el contador se incrementa automáticamente. Esto permite usar las instrucciones de bloques de E/S del Z80A para acceder de forma rápida a la memoria de video. Por ejemplo, lo que en el Spectrum sería copiar un bloque de 32 bytes de memoria principal al principio de la memoria de video...

LD HL,Bloque
LD DE,16384
LD BC,32
LDIR

...en el MSX, se traduce en utilizar la instrucción OTIR para el mismo propósito (en este ejemplo se supone que previamente se ha establecido la dirección en VRAM adonde se va a copiar el bloque):

LD HL,Bloque
LD B,32
LD C,98h
OTIR

Dada la popularidad de este chip, existen muchas webs con tutoriales, código fuente de ejemplo de uso de sus características. Explicar todas ellas va mucho más allá del alcance de este artículo. En la sección de enlaces, al final del artículo, encontrará punteros de información útiles, entre otros, el datasheet completo de este circuito integrado en la página web del autor.

 

Add your comment

Your name:
Your email:
Título:
Comment:
  The word for verification. Lowercase letters only with no spaces.
Word verification:
ZX Projects, Powered by Joomla! and designed by SiteGround web hosting