Haciendo juegos en una Atari 2600, parte 1

Cristina Ramos
5 min readApr 6, 2018

--

Es 1980, acabáis de volver de Galerías Preciados con una máquina que promete permitiros jugar en casa a todos esos juegos de los arcades, con casetes intercambiables y ¡en color! Enchufáis el aparato a vuestra televisión mientras en la radio suena Morir de amor de Miguel Bosé.

La Atari 2600 fue diseñada cuando las únicas referencias de videojuegos en el mercado eran: Pong, Tank y Gun Fight. ¡Imaginad cómo sería intentar diseñar una consola cuando no sabías ni cómo iban a ser los juegos del futuro!

Recreativa original de Pong

En Atari tenían que diseñar una consola lo más barata posible, con los recursos de la década de los 70. Veamos: La elección de la CPU era obvia, el 6507, que era la versión “low-cost” del 6502, una CPU barata y muy versátil, su direccionamiento de 13-bit (8 KB), más que suficiente.

Las tripas de la Atari 2600

Lo siguiente más importante, la generación de vídeo. De ello se encarga el chip propietario TIA. Debido a las limitaciones de memoria, no tiene memoria de vídeo alguna. Para dibujar una imagen completa lo que hace es ir línea a línea de la pantalla leyendo los datos que la CPU le va mandando.

¿Y qué información puede enviar la CPU? pues básicamente:

  • Un color de fondo.
  • El aspecto del escenario, limitado a unos pocos bloques (playfield).
  • Dos sprites (players).
  • Dos misiles (proyectiles).
  • Una pelota.

Parece una marcianada, pero tenéis que tener en cuenta que nació como una consola para poder jugar a variaciones del Pong y Tank, punto.

Pong en Atari 2600

El TIA además gestiona las colisiones entre estos objetos, realiza la lectura analógica del joystick y se encarga de reproducir el sonido a través de dos canales, los cuales permiten modificar su volumen, tono y frecuencia. ¡Todo un lujo multimedia!

¿Qué nos falta? ¡La memoria! Para ello optaron por el 6532, un chip multifunción barato con 128 bytes de static RAM. Debería ser más que suficiente…

Tras leer sobre todas estas limitaciones, juegos como el Pitfall merecen un aplauso por como pudieron conseguir semejantes gráficos y jugabilidad a pesar de ellas ¿No os parece?

Pitfall de Atari 2600

La forma peculiar en la que dibujamos la pantalla permite que con algo de imaginación podamos conseguir efectos curiosos. Por ejemplo, si pintamos línea a línea el fondo, es muy fácil hacer un atardecer con multitud de colores.

Commando Raid

Con unos pocos pixeles y bloques, podíamos transportarnos a aventuras en otros tiempos y planetas, explorar lugares misteriosos, vivir aventuras… Igual que cuando leíamos una novela, la imaginación se encargaba de completar lo que la consola no era capaz de dibujar.

Con un poco de imaginación esta escena cobra vida en nuestras cabezas…
Si esta imagen os da dolor de cabeza, no os preocupéis, es normal

Así que de primeras, el cambio de paradigma de trabajar dibujando una pantalla entera a tener que ir preparando y dibujando línea a línea será uno de los retos a los que nos enfrentemos a la hora de hacer juegos en la 2600. No os preocupéis, lo iremos viendo con más detalle…

El otro reto es que disponemos de solo 128 bytes de memoria y una ROM de 4K (juegos posteriores utilizaron el famoso sistema de bank switching para ampliar este límite, pero nosotros no haremos “trampas”).

Supongo que ya os estaréis preguntando “bueno entonces ¿Cómo programo un juego?”.

Por desgracia en esta época no existían cosas como Unity o GameMaker.

Para escribir un juego necesitabas aprender… ¡¡¡ENSAMBLADOR!!!

¿Y qué es eso del ensamblador? Pues en realidad es algo simple, se trata de un lenguaje con una colección de instrucciones que la CPU en cuestión puede ejecutar, nosotros escribimos la lista de órdenes, el compilador genera el código máquina, ejecutamos el programa y ¡listo!

La gran pega que tenía el ensamblador era que cada CPU al tener su propio set de instrucciones y forma de trabajar requería que el programador tuviese que aprender y rehacer el programa para cada una… Un jaleo. Por eso nacieron lenguajes como C, que se abstraen del hardware.

Pero nosotros estamos en 1980, programando para la Atari 2600, por lo que no nos importan otras CPU que no sean la 6502.

Así que vamos a investigar lo que podemos hacer con ella…

Si os fijáis, el bus de datos de esta CPU es de 8 pines, lo que viene a ser 8 bits.

Tenemos una consola de 8 bits, ¡Qué retro!

Esto significa que cada ciclo de la CPU podemos leer o escribir un número de 8 bits.

El bus de direcciones es solo de escritura y sirve para que la CPU pueda indicar con quién se está comunicando. En el siguiente ciclo la CPU volverá a leer del bus de datos, que contendrá la “respuesta” que le han dejado

Simple, ¿Verdad?

Nuestra CPU tiene registros, que son celdas de memoria. El 6502 tiene tres de uso general llamados:

  • A (de Acumulador).
  • X.
  • Y.

Son algo así como tres variables de 8 bits que puedes usar en tu programa.

Además tenemos un stack pointer (puntero de pila). Esto es una lista de valores que se van apilando/almacenando en nuestra RAM. Imagina dejar un montón de cajas de pizza en la encimera, para ir cogiéndolas después.

Se ha hecho un poco tarde, lo dejo por hoy, pero no os preocupéis, lo siguiente será ver con más detalle el ensamblador, la generación de imágenes en pantalla y empezar a hacer… ¡Un videojuego!

--

--

Cristina Ramos

Game developer, amateur boxer, cosplayer, adventure lover and part time assassin.