#1 CPU MOS 6502 a 1.79 Mhz.

#2 Mapa de memoria.

Al ser la CPU un 6502 los ordenadores de Atari podían tener hasta 64KB de memoria direccionable entre la RAM del sistema y la ROM del mismo (la cual puede venir en forma de cartucho o incluirse dentro del mismo).  La serie 800 inicial solo podía alcanzar hasta los 48KB dejando 16KB para ROM, a partir de la gama XL/XE el mapa de memoria cambio por la renovación del sistema operativo.  El sistema tenía la particularidad de cargar el DOS o no (el cual se cargaba si el sistema necesitaba manejar disquettes).

atari-mule

Siendo el mapa de memoria para los modelos iniciales el siguiente:

1-1_atari_memory_arrangement

¿Donde esta la memoria de video? Cuando lleguemos al ANTIC lo entenderéis bien, pero digamos que el ANTIC tiene acceso a todo el espacio de la memoria en este caso. En el caso de los modelos XE y XL el mapa de memoria cambio y se permitió memoria extendida:

extendedmemory1

Dichos modelos podían cargar hasta 128KB de RAM pero no hacen cambio de banco sino que de los cuatro sub-bancos de 16KB de la memoria principal se reemplazaban por el banco 1. En cuanto al Banco 3 en este caso se utilizaba para los datos del slot de cartuchos en este caso o quedaban libres para programas si el juego era en disco o en casette. Como curiosidad la consola Atari 5200 que se basaba en el hardware de la serie 400/800 tenia unos 8KB con un mapa de memoria distinto y algunos registros reservados al sistema cambiados lo que junto a un diferente puerto para cartuchos hacía que ambos sistemas no fuesen compatibles.

#3 CTIA/GTIA

El CTIA/GTIA es el adaptador de pantalla de los ordenadores de 8 bits de Atari, se trata de una versión mejorada del TIA de la VCS 2600 que fue creado para paliar los problemas del coste de la memoria pars un búfer de imagen. El funcionamiento del TIA era sencillo, en la etapa de HBlank el 6507 (un 6502 con direccionamiento de 13 bits) llenaba una serie de registros del TIA que marcaban como pintar la siguiente linea de escaneo, el VCS no sabía nada de modos bitmap ni de patrones/sprite por lo que los gráficos en la VCS 2600 eran así:

496455-pac_man__1981___atari__3

frogger

Los registros necesarios para dibujar es escaneo de linea eran camabiados por el 6507 durante el periodo de HBlank de cada linea de escaneo pero en esta entrada no voy a hablar de la VCS 2600 sino de los ordenadores de Atari de 8 bits, los cuales tuvieron de entrada unas versiones mejoradas del TIA llamada CTIA primero (paleta de 128 colores y luego GTIA (paleta de 256 colores) y que rompieron por completo la compatibilidad al añadir una serie de registros adicionales aprovechando que los 1.79 Mhz de velocidad del 6502 como CPU de los ordenadores de 8 bits de Atari permitían el poder escribir más registros durante el periodo de HBlank que el 6507 y sus 1.19 Mhz por lo que la variedad de colores en la escena aumentaba, los registros a la hora de dibujar la escena con el CTIA/GTIA eran los siguientes:

  • Un registro de color para el color de fondo.
  • Cuatro registros de color para el campo, estos se utilizaban como segundo plano y podían cambiar de linea en linea pero obviamente no se cambiaba el color de las lineas previamente dibujadas.
  • Cuatro registros de color para cada uno de los cuatro jugadores y sus «misiles», estos activan los registros de detección de colisiones en el CTIA/GTIA.
  • Un registro que marca en que posición se encuentran cada uno de los cuatro jugadores en la linea, y los misiles, estos ocho registros se combinan con otro registro que marca la posición sobre la linea en la que se encuentran cada uno de los jugadores.
  • Registros de un bit de solo lectura que marcan cuando se ha producido una colisión entre los jugadores y sus «misiles» correspondientes, son solo de lectura y el código no tiene control sobre los mismos y se activan cuando los «jugadores» y los «misiles» chocan entre si.

    Jugador 0/Misil 0 Jugador 1/Misil 1 Jugador 2/Misil 2 Jugador 3/Misil 3
    Jugador 0/Misil 0 no_sign 240px-symbol_ok-svg 240px-symbol_ok-svg 240px-symbol_ok-svg
    Jugador 1/Misil 1 240px-symbol_ok-svg no_sign 240px-symbol_ok-svg 240px-symbol_ok-svg
    Jugador 2/Misil 2 240px-symbol_ok-svg 240px-symbol_ok-svg no_sign 240px-symbol_ok-svg
    Jugador 3/Misil 3 240px-symbol_ok-svg 240px-symbol_ok-svg 240px-symbol_ok-svg no_sign

Esto significa que por linea de escaneo la informacion que se ha de transmitir al CTIA/GTIA es:

  • 1 byte de color para el fondo base
  • 4 bytes de color para el fondo de segundo plano
  • 4 bytes de color para los jugadores y los misiles.
  • 4 bytes de color para la posición de los cuatro jugadores.
  • 4 bytes para marcar la posición respecto al pixel 0 donde se encuentra el primer pixel de cada jugador, si hay coincidencia activa los bits de los registros del detector de colisiones.
  • 4 bytes para marcar la posición respecto al pixel 0 donde se encuentra el primer pixel de cada misil, si hay coincidencia activa los bits de los registros del detector de colisiones.
  • 4 bytes para marcar la longitud en pixeles que ocupa cada jugador.
  • 4 bytes para marcar la longitud en pixeles que ocupa cada misil.

Esto son 1+(4*7 bytes por linea)= 29 bytes en total, lo cual es un ahorro de memoria importante si tenemos en cuenta la paleta de colores de GTIA.

post-45-1223328337

Por lo que tenemos una paleta de unos 256 colores en total, por el momento quedaos con eso que cuando lleguemos al GTIA vais a ver todo el potencial.

La velocidad del CTIA/GTIA no era más alta que el TIA, unos 3.58 Mhz pero en la explicación seguimos sin tener un elemento que le de a los ordenadores de 8 bits de Atari el hecho de hacer gráficos como estos:

frogger_two_ca_3

pacman_2

Fijaos como en el caso de los dos ejemplos de los ordenadores de 8 bits hay soporte de patrones/sprites por el hecho de haber soporte de texto para empezar, ya explique en la entrada del Apple II eso por lo que tiene que haber un generador de video en el hardware pero con un generador de video en el hardware aparte del CTIA/GTIA el concepto cambia por completo respecto al del VCS 2600 pero su naturaleza es completamente distinta a la de los otros generadores de video de la época y se merece ser explicado en detalle porque en la era de los 16 bits su funcionamiento será adoptado tanto en el Atari ST como en el Amiga y su influencia continua incluso hoy en día.

#4 ANTIC: El primer procesador de comandos grafico

Un procesador de comandos gráfico es un procesador que lo que hace es leer una lista de pantalla que son unas instrucciones y envía ese flujo de instrucciones a otro procesado, en el caso que nos ocupa la lista de pantalla puede estar incluida en el código del programa o generarse de manera dinámica con cada fotograma pero el ANTIC no entiende la escena como si hubiese un búfer de imagen por el medio, esto es debido a que los primeros ordenadores de Atari que salieron en 1979, el Atari 400, disponían de solo 4KB de RAM para todo el sistema, de ahí además de que fuera con cartuvhos y que fuese casi una consola.

atari-400

Pero el ANTIC no era un generador de pantalla, pero hacía el mismo trabajo que el VCS 2600 durante el periodo de HBlank, escribir los registros del CTIA/GTIA con tal de generar la siguiente linea, en principio su funcionamiento no sería necesario y pasa a serlo menos cuando sabemos que el ANTIC accede a la RAM en el periodo de HBlank y para por completo al 6502 debido a eso. ¿Entonces cual es la gracia del ANTIC? Son varias, en primer lugar la lista de pantalla del ANTIC (la cual ocupa 1KB) se puede mantener de un fotograma a otro si necesitamos que la imagen en un momento dado sea estática pero la otra ventaja es que el ANTIC en algunos modos solo necesita acceder a la memoria durante el periodo de HBlank dejando que durante el dibujado del fotograma el 6502 pueda acceder directamente a la memoria pero es que el ANTIC no solo puede acceder a la memoria directamente sino que tiene la suficiente velocidad como para cambiar los valores del CTIA/GTIA al vuelo, por lo que si hay la suficiente memoria en el sistema (recordemos que puede haber hasta 64KB) entonces los ordenadores de 8 bits de Atari pueden dibujar la escena como si fuese un búfer de imagen teniendo como único limite unos 3.7 millones de pixeles por segundo, que es precisamente la velocidad de reloj del ANTIC y el CTIA/GTIA, pero que además al igual que el TMS9918A le da la máquina de Atari la capacidad de poder mostrar patrones/sprites sin que haya un búfer de imagen por el medio y ahorrarse el coste de la memoria por lo que estamos ante una versatilidad enorme donde se pueden combinar diferentes formas de dibujado  durante la escena.

El modo patrón/sprite funciona de manera muy similar al del TMS9918A pero con la diferencia de que no tenemos regiones de memoria separadas y los patrones se almacenan en la memoria principal o en la ROM si el juego va con cartuchos,  en este caso en un 1KB de memoria donde se almacen unas 128 formas de 64 bits cada una, cada forma representa un patrón de 8×8 donde el 0 marca transparente (color de fondo) y el 1 marca el color asociado en el registro del GTIA para ese patrón en concreto. Inicialmente los juegos de los ordenadores de 8 bits de Atari utilizaban el dibujado por patrones/sprites pero a medida que la memoria de la gama de ordenadores fue aumentado se fue utilizando el modo bitmap, en todo caso la versatilidad del ANTIC es tal que permite hacer cosas como esta:

Vale, se ve muy cutre pero para un sistema de 8 bits es impresionante si lo miramos con perspectiva y más si tenemos en cuenta que Atari no cambio el hardware gráfico de sus ordenadores de 8 bits desde… ¡1979! En todo caso esa versatilidad no supone potencia visual como se puede ver en el siguiente video pero en la era de 16 bits la versatiliad del ANTIC se heredo en el Blitter de la propia Atari para el Atari ST y el Agnus del Commodore Amiga y esos casos se combino con la potencia para otorgar una nueva generación de gráficos.

Con esto termino la entrada sobre los ordenadores de 8 bits de Atari, dado que muchos de los conceptos ya los he tocado en las otras entradas he decidido acortarlo lo máximo posible.

#5 El VBXE

Si habéis llegado aquí por segunda vez veréis que esta sección antes no estaba. ¿Que es el VXBE? No es hardware oficial de Atari sino que es un invento de un polaco llamado Tomasz Piórek que se instala sobre el hardware de la serie XE de Atari y para mi es algo que merece la pena hablar de ello porque para ser el trabajo de una sola persona es digno de mención.

vbxe4

El VBXE cambia el ANTIC por un procesador gráfico completamente nuevo que hereda las capacidades del ANTIC pero añade las capacidades de un Blitter y memoria local (para no interferir con el 6502). Un Blitter no es un procesador gráfico pero se hizo muy popular en los ordenadores de 16 bits al formar parte del subsistema gráfico.

Es una operación de gráficos por ordenador en la cual varios bitmaps se combinan en uno solo utilizando un raster operator.

La operacíón implica al menos dos bitmaps, uno de origen y otro de destinacion, posiblemente un tercero que a menudo es llamado “mascara” y algunas veces un cuarto utilizado para crear un stencil. Los pixeles de cada uno son combinados de acuerdo con la operación de rasterizado (ROP) y el resultado se escribe en la destinación

Un mapa de bits es una estructura de datos espacio de memoria que representa un mapa (x,y) en el que cada posición contiene un valor, con esto se puede crear un patrón/sprite en dicho espacio y almacenarlo. En la definición nos hablan de dos mapas de bits, uno de ellos es el mapa de bit origen y el otro es el mapa de bit resultado que se obtiene tras realizar sobre este una serie de operaciones sobre el mismo, dichas operaciones se realizan al vuelo y el resultado se escribe en otro espacio de la misma memoria o en otra memoria. Sí tuvieramos que realizar esto con el 6502 nos encontraríamos con que las operaciones de traslado y manipulación tendriamos que hacerlas byte por byte por lo que se gastaría un enorme cantidad de ciclos de reloj. Así que para realizar todo el proceso arriba explicado lo mejor es una máquina de estado que lee el patron/sprite/bitmap de una posición de origen, lo procesa según como se encuentre configurado en ese momento y escriba el resultado en otro espacio de memoria. Ahora imaginad que el espacio de memoria destino es un mapa de bits que representa la pantalla sobre la que dibujamos y habréis entendido todo el proceso.

En el caso concreto del VBXE el Blitter funciona a unas 8 veces la velocidad de reloj  del sistema por lo que para poder sostener el ritmo tiene que tener su propia memoria sino la RAM del sistema sería un cuello de botella. Gracias a esto el VXBE puede utilizar un búfer de imagen completo y copiar los patrones/sprites varias veces para componerlo. Es decir, si se que la escena esta compuesta por 4o disparos al mismo tiempo solo me hace falta copiar los 40 disparos en el búfer de imagen, de esta manera este se construye más rapidamente, a través de copiar los elementos repetidos. El VBXE esta pensado para reemplazar al ANTIC pero no reemplaza al GTIA y su mayor velocidad le permite cambiar al vuelo los registros del GTIA de una manera mucho más rapida que el ANTIC, pero lo mejor es ver las capacidades de este en un video.

Obviamente esto es trampa por el hecho que por la época de los ordenadores de 8 bits no era posible un ordenador con estas capacidades por lo que es una artificialidad y el soporte por parte de los juegos es nulo. En todo caso no deja de ser una curiosidad interesante.

La siguiente entrada será la última de esta entrada durante un tiempo, la de los ordenadores de Commodore de 8 bits. Dejare el Atari ST y el Commodore Amiga para más adelante para centrarme en la actualidad tras terminar esta serie.