La historia de la Atari 7800 es cuanto menos curiosa, producto de la falta de cultura corporativa interna en en Atari y resultado de una guerra interna en Atari entre la división de ordenadores y la de consolas dentro la misma compañia se encontro en medio de un cambio de propietarios que decidieron desestimarla hasta que no fue demasiado tarde.

General Computer Corporation

En 1981 Atari llevo a los juzgados una empresa llamada General Computer Corporation por la realización de modificaciones en los arcades de la propia Atari, especialmente del del Missile Command que transformaron en una versión modificada a la que llamaron Super Missile Command.  Cuando GCC acepto dejar de hacer modificaciones para sus recreativas en Atari les contrataron para realizar juegos para la VCS y fueron un equipo de desarrollo bastante prolifico que incluso llegaron a realizar la mitad de los juegos de Atari para la 5200, pero son especialmente conocidos por ser los diseñadores de la 7800.

El diseño de la 7800 empezó en 1982 cuando la gente de GCC recibió una 5200 para realizar juegos para ella y prometerle a Atari que podían realizar una consola con las siguientes premisas:

  • Consola con la misma capacidad visual que la 5200 y en algunos casos superior
  • Compatible hacía atrás con la VCS/2600
  • Mucho más barata que la 5200

Atari veía como la 5200 no vendía lo esperado y estaban desesperados por el hecho que la consola al heredar la arquitectura de sus ordenadores de 8 bits no los podían abaratar más al menos a corto plazo. Atari veía como la demanda por la VCS/2600 estaba en las nubes y que la falta de software y de compatibilidad hacia atrás con la VCS original era un problema. Atari habia empezado el proyecto que se convirtió en la 5200 realmente como una consola compatible hacia atrás con la VCS pero las capacidades de los ordenadores de 8 bits, la incompatibilidad entre el TIA y el CTIA/GTIA de los Atari 8 bits hacía que la otra parte del subsistema gráfico, el ANTIC, se tuviese que re-diseñar de nuevo y los ingenieros que habían trabajado en dichos chips como Joe Decuir, Jay Miner… ya no estaban en Atari por lo que al final decidieron aprovechar la por aquel entonces cara tecnología de los ordenadores de 8 bits de Atari para hacer el nuevo sistema.

La solución de GCC fue crear un nuevo procesador gráfico al que llamaron Maria, dado que decidieron mantener el hardware original de la VCS/2600 para la compatibilidad hacía atrás y por tanto el TIA original se mantenía excepto por algunos cambios puntuales, no dejaba de ser un juego de palabras acerca del licor Tia Maria. Pero Maria al contrario del ANTIC no esta pensado para funcionar de manera complementaría a un TIA/GTIA/CTIA/STIA/tu TIA correspondiente sino que es un chip gráfico en si mismo cuyo diseño esta pensado para una cosa realmente: Ahorrar memoria y con ello chips en la placa ya que uno de los problemas de sobreprecio de la 5200  cuando fue lanzada en 1982 venia por la cantidad de memoria que le era necesaría para generar sus gráficos, así como su complejo sistema compuesto por 2 chips en conjunto ANTIC+GTIA.

Vista general de las entrañas de la 7800

Hagamos un repaso rápido a la organización del hardware de la 7800, el cual tiene algunos elementos de la VCS/2600 y otros completamente nuevos que la convierten en una consola una generación por encima, es decir, al nivel de la 5200.

e542e67fce0024f02979cfe91b4ff859

El 6507 ha sido sustituido por un 6502C que le permite direccionar 16 bits (64KB). No olvidemos que el 6507 es un 6502 con 3 pins menos de direccionamiento, por lo que la CPU es completamente compatible hacía atrás. La unica diferencia con el 6502 estandar es la capacidad por parte de otros dispositivos el acceso a la RAM principal por parte del 6502C en cualquier momento, esta capacidad será explotada por MARIA para acceder a la RAM principal para leer las DL necesarias en cada momento que el programa lo requiera. El 6502C funciona a 1.79 Mhz como en la 5200 pero en modo VCS/2600 rebaja su velocidad a los 1.19 Mhz.

En el caso de la RAM tenemos unos 4KB de memoria RAM en el sistema que solo se pueden aprovechar en el modo 7800, en el modo VCS se le corta el acceso a la CPU enviando la señal al pin HALT y forzando el uso de los 128 bytes de RAM dentro del 6532. En realidad el pin HALT esta siempre activo y solo se desactiva insertando un cartucho de la 7800 momento en el que la CPU tiene acceso completo a la RAM, el mapa de memoria del sistema es el siguiente:

Dirección Asignado a: bytes
0000 – 001F TIA 32
0020 – 003F MARIA 32
0040 – 00FF Bloque de RAM 0 192
0100 – 011F TIA (espejo de 0000-001F) 32
0120 – 013f MARIA (espejo de 0020-003F) 32
0140 – 01FF Bloque de RAM 1 192
0200 – 021F TIA (espejo de 0000-001F) 32
0220 – 023F MARIA 32
0280 – 02FF RIOT (Puerrtos de E/S) 128
0300 – 031F TIA (espejo de 0000-001F) 32
0320 – 033F MARIA (espejo de 0020-003F) 32
0480 – 04FF RIOT/6532 RAM (solo 2600) 128
0580 – 05FF RIOT/6532 RAM (Espejo de 0480-04FF) 128
1800 – 27FF RAM 4096
2040 – 20FF Bloque de RAM 0 (Espejo 0000-001F) 192
2140 – 21FF Bloque de RAM 1 (Espejo 0140-01FF) 192
2800 – 2FFF RAM (Espejo de 1800-27FF) 4096
3000 – 37FF RAM (Espejo de 1800-27FF) 4096
3800 – 3FFF RAM (Espejo de 1800-27FF) 4096
4000 – FFFF Cartucho ¿49152? 32768
F000 – FFFF ROM de la BIOS 4096

El sistema se diseño para ser lanzado en 1983 y su versión preliminar tenia solo 2KB de RAM (modelo 3600) pero fue aumentado a 4KB en su moelo definitivo que fue terminado en el primer trimestre de 1984. Aunque el sistema esta pensado para asignarle a la RAM unos 16KB en total.

En cuando al cartucho, sigue la clásica asignación de 32KB para los cartuchos como todos los sistemas de la época con un 6502 que no utilicen un sistema de multi-bancos. El direccionamiento nos dice que al menos unos 48KB de la RAM pueden ser asignados al cartucho pero esos 16KB de más no se utilizan en el mapa de memoria por el simple hecho que en primer lugar no están asignados y tampoco se encuentran fisicamente en el cartucho que se lleva la mitad del direccionamiento, pero luego veréis que esto tiene una trampa cuanto menos muy curiosa.

La 7800 utiliza dos procesadores heredados de la VCS 2600, el primero de ellos es el TIA pero en modo 7800 solo lo utiliza como chip de sonido y la calidad es tan mala respecto a la 5200 que a los diseñadores de la consola se les ocurrió añadir una serie de pins adicionales al cartucho para comunicar el 6502C con un chip de Audio adicional en cartucho (normalmente el POKEY de la 5200) y de ahí a la salida de audio. Podríamos decir que la 7800 fue la primera consola del mercado en tener chips de expansión en sus cartuchos. En cuanto al RIOT/6532 en modo 7800 se utiliza solo para E/S, su RAM interna de 128 bytes solo se utiliza en el modo VCS y no esta disponible en modo 7800.

El único procesador nuevo es el MARIA, se trata del chip gráfico de la consola y su particularidad es que genera los gráficos de una manera única en comparación con otros sistemas de la época.

#3 Graficos en la 7800

La 7800 tiene un procesador gráfico llamado MARIA con una capacidad por si mismo muy superior a los sistemas basados y derivados en el TMS9918A/TMS9928A pero que se vio altamente limitado por el hardware que lo rodeaba, provocando que el chip de GCC no alcanzará todo su potencial en el hardware de la 7800.

MARIA dispone de unos 512 bytes de memoria llamados Line RAM pero que se podrían llamar Scanline Búffer (SB). Para construir dicho SB se crea una lista de instrucciones pre-definidas en lo que llamamo una Lista de Pantalla/Display List (DL). Mientras la creación del SB ocurre el 6502C es suspendido de su acceso al espacio de memoria mientras MARIA busca los datos necesarios para generar la DL. La unidad DMA será la encargada de buscar la información para la la linea de escaneo siguiente a mostrar mientras que MARIA leerá el SB en la Line RAM interna para generar la señal de video.

#3.1 Listas de Pantalla (DL)

 La lista de pantalla simplemente dice lo que se ha de dibujar en cada lina de escaneo/raster. Puede contener hasta unos 128 «Headers», el tamaño de cada uno es de unos 4 bytes y pueden estar almacenada en la RAM principal y haber sido generada por el 6502C o encontrarse pre-definidas en la ROM.
  • Byte 0: Parte baja de la dirección de memoria donde se encuentran los datos gráficos almacenados (cartucho).
  • Byte 1 (5 bits): El tamaño en pixeles en horizontal que ocupar en el esceneo de linea, puede ir de 1 a 32.
  • Byte 1 (3 bits): Paleta de colores utilizada, en modo 7800 hay unas 8 paletas en total.
  • Byte 2: Parte alta de la dirección de memoria donde se encuentran los datos gráficos almacenados (cartucho).
  • Byte 3: Posición en el escaneo de linea en el que se situa el pixel más a la izquierda del objeto.
Varias cosas a considerar.
Primero, El DMA de MARIA se parara en seco si en el Byte 1 la informacion es todo ceros y le devolverá el control al 6502C durante esa linea de escaneo. Si esto ocurre entonces MARIA generara una señal de pantalla en el siguiente escaneo de linea de un solo color especificado en los registros como color de fondo. No obstante en la siguiente linea de escaneo operará de manera normal.
Segundo, el tema del color es cuanto menos es espectacular en la 7800 en comparación con otros sistemas de la época y es una pena que no se aprovechara porque en vez de tener una paleta por pantalla, el sistema tiene una paleta por objeto en la linea de escaneo y la cosa se hace más interesante si tenemos en cuenta que tenemos hasta 16 colores 15 colores por paleta+color transparente que nos marca que se debe dibujar el color de fondo. Bueno, en realidad unos 16*16 colores en total, 256 porque son 16 colores con 16 niveles de luminancia.
post-9364-0-80184800-1350701972
El segundo punto es que si el SB tiene un tamaño de 512 bytes debería ser posible mostrar hasta unos 512 pixeles en pantalla por linea de escaneo pero en la 7800 no se puede hacer eso. La velocidad de reloj de MARIA es de unos 7.16 Mhz y bajo esa velocidad puede alcanzar una resolucion de 320×192 pixeles, pero es que incluso a esa velocidad no puede mostrar toda su capacidad entera por dos cuellos de botella que son los siguientes:
  • El 6502C no es lo suficientemente rápido generando una lista de pantalla de 512 pixeles.
  • La unidad DMA dentro de MARIA no es lo suficientemente rápida ya que necesita unos 4 ciclos por acceso a memoria.
Esto hace que los únicos modos gráficos disponibles en la 7800 sean:

 

  • 160 pixeles por linea, 1 bit por pixel (2 colores).
  • 160 pixeles por linea, 2 bits por pixel (4 colores)
  • 160 pixeles por linea, 2 bits por pixel (16 colores)
  • 320 pixeles por linea, 2 bits por pixel (4 colores)
  • 320 pixeles por linea, 1 bit por pixel (2 colores).
Recordad que una lista de pantalla pese a su nombre no hace referencia a la pantalla entera sino solo a una linea de escaneo.

 

#3.2 Lista de listas de pantalla (DLL)

Una lista de listas de pantalla (DLL) puede estar generada por la misma CPU o encontrarse previamente en la ROM del cartucho. Estas se encuentran en la RAM del sistema. Podemos tener varias DLL componiendo una escena. Cada una de ellas contiene son unos 3 bytes organizados de la siguiente manera:

  • Bit 0 (Byte 0): Aqui podemos marcar si se produce una Display List Interrupt devolviendole el control al 6502C y parando de lleno el renderizado de la escena para cambiar ciertas condiciones o en su defecto la siguiente lista de pantalla continua con las mismas condiciones que la anterior. Obviamente cuando este bit es activado MARIA para por completo su trabajo y deja de dibujar en pantalla.
  • Bit 1 (Byte 0): Maria interpreta los bloques de 4KB impares de la memoria como si no existiesen, va conmutado con el bit 2 de este mismo byte.
  • Bit 2 (Byte 0): Maria interpreta los bloques de 2KB impares de la memoria como si no existiesen, va conmutado con el bit 1 de este mismo byte.
  • Bit 3 (Byte 0): No se utiliza
  • Bit 4-7 (Byte 0): Nos indica la cantidad de listas de pantalla asociadas al DLL (hasta un total de 2^4 que son 16) cada vez que MARIA ejecuta una lista de pantalla decrementa en uno el valor hasta llegar a 0 y entonces termina la la DLL.
  • Byte 1: Parte Superior de la dirección de memoria donde se encuentran las lista de listas de pantalla.
  • Byte 2: Parte Superior de la dirección de memoria donde se encuentran las lista de listas de pantalla.

Cada DLL puede almacenar información gráfica de 1 hasta 16 lineas de escaneo. La resolución total en pantalla es de unas 192 lineas de escaneo en la 7800, pero MARIA puede alcanzar resoluciones de 224 lineas e incluso 240 lineas a 60hz. El motivo por el cual se utiliza dicha resolución de pantalla es por los cuellos de botella previamente especificados que son la CPU y la unidad DMA integrada en MARIA de la 7800.

#4 El puerto de expansión, la rivalidad dentro de la propia Atari y los sucesores de la 7800.

En la época Time Warner, Atari queria que el proyecto 3600/7800 no fuese solo para una consola de videojuegos sino también para un eventual ordenador de 8 bits de bajo coste que reemplazará por completo a la más cara de fabricar seríe A8 (Atari 400 y Atari 800) realizandose eso a espaldas de la división de ordenadores. Las primeras versiones de la 7800 tenian que tener como periférico un teclado que en combinación con un nunca acabado catucho que tenía que tener un interprete+editor BASIC+RAM tenía que convertir el 7800 en un ordenador. El teclado de la 7800 se conectaba por el puerto para el Joystick del segundo jugador y contenía en su interior un chip POKEY así como una serie de interfaces tipicas de un ordenador de Atari de la época, hubiese hecho a la la 7800 compatible con los periféricos de la seria Atari 8 bits aunque como es obvió por diferencias con el hardware de la propia 7800 no compatible en cuanto a software.

7800kb-front7800kbrear

Este fue el motivo por el cual la división de ordenadores movió viento y marea con tal de que Atari abandonase las consolas de videojuegos. En el periodo de la renuncia de Ray Kassar hasta la compra de Atari por parte de la familia Tramiel la 7800 fue presentada al mercado, en el CES de Verano de 1984 se anuncio que la consola iba a aparecer a finales de ese mismo año a un precio de $140. Cuando los Tramiel compraron Atari dejaron pudrirse en el almacen la consola y se centraron en lanzar la Atari 2600 Jr. La cual después de éxito que tuvo en el mercado hizo que Atari decidiese lanzar la 7800 pero como dice la famosa cita de Alan Kay…

keynote-gallery-51

La cantidad de juegos desarrollados para la 7800 no llego ni a los 20, por si fuera poco la propia Atari le hacía la competencia a este sistema lanzando un aún más caro Atari XEGS que no era más que un Atari 8 bits en forma de consola. ¡Justo al mismo tiempo que la 7800!

atari-xe

Por si fuera poco hubieron peleas entre GCC y la Atari de los Tramiel por las regalias por el uso de la tecnología. Los Tramiel intentaron abaratar las regalias a pagar a GCC e incluso conseguir el uso de MARIA para futuros proyectos pero en Atari se vieron obligados a retrasar dichos planes por las malas relaciones entre la gente de GCC y los Tramiel. ¿Cuales eran esos planes? Los de una consola de 16 bits que utilizara el MARIA como procesador gráfico pero rompiese la compatibilidad hacía atrás con la VCS/2600 y utilizara un 68K como CPU.

Mucha gente especula con que Mirai es una Neo-Geo de Atari, en realidad no hay que ser muy inteligente para ver que Mirai es un anagrama de MARIA. Dicha consola no fue lanzada sino que internamente evoluciono a lo que luego fue la Atari Panther para ser cancelada también y terminar como Atari Jaguar. Atari no llego jamás a buenos terminos con GCC para que mejorasen MARIA de cara a Mirai y decidieron no lanzar el proyecto, de haberlo hecho entonces Sega no hubiese rascado nada en el mercado de las consolas de videojuegos y Atari hubiese tenido un regreso triunfal al mercado o al menos hubiese ocupado la posición de Sega en la batalla de los 16 bits contra Nintendo.