Recreando el videojuego español más antiguo

Cuando pensamos en el primer videojuego realizado en España enseguida nos viene a la cabeza «La pulga» de Paco Suárez y Paco Portalo, que marcó el inicio de la edad de oro del software español allá por 1983. O puede que incluso conozcas la historia de «El paracaidista», la primera recreativa desarrollada en nuestro país cuyo prototipo data de 1979. Sin embargo, es lógico pensar que pudieran existir juegos aún más antiguos que no tuvieron difusión pública, realizados por aficionados o en universidades u otros centros de estudio. Y ese es precisamente el caso del Ping Pong que se programó en la Universidad Politécnica de Madrid nada menos que en 1977, y que nos hemos propuesto recrear y poner en marcha casi cincuenta años después.
La historia la saca a la luz a finales del 2023 el ingeniero de software Manuel Llaca en su página dedicada a investigar la historia de la informática «Parcela Digital«. Según cuenta en el fantástico artículo «Historia del Ping-Pong de 1977: Primer videojuego hecho en España creado en la Universidad Politécnica de Madrid» fue el propio Paco Portalo quien le habla de un libro sobre microprocesadores editado por la UPM que él mismo había utilizado durante sus años de estudiante, y en el que se describía en detalle un videojuego similar al Pong de Atari utilizando un procesador 8080 de Intel. El libro en cuestión, titulado «Microprocesadores II» y firmado por el catedrático Elías Muñoz Merino, era el segundo volumen editado tras un seminario celebrado en la Escuela Técnica Superior de Ingenieros de Telecomunicación de la UPM en marzo de 1977, y describía en profundidad los principales microprocesadores de aquella época como el 8080 de Intel o el 6800 de Motorola.
El capítulo XV, titulado «Juego de ping pong en el 8080», está firmado por Rafael Martínez Jiménez y Juan Miguel Santos Suárez, que aparecen acreditados como becarios de la Cátedra de Electrónica II-III de la ETSIT. En él se describe tanto el hardware como el código completo de un juego estilo Pong que utiliza un osciloscopio como pantalla y un par de potenciómetros para mover las raquetas. Podemos decir entonces que este sería el videojuego español más antiguo documentado hasta la fecha. En aquella época aún no se habían popularizado los ordenadores personales, con lo que estos estudiantes no solo tuvieron que programar el juego sino también ¡construir el ordenador donde ejecutarlo!
Tras conocer toda la investigación de Manuel Llaca empezamos a comentar en la asociación la posibilidad de intentar reconstruir el circuito y ejecutar el juego tal y como había sido concebido. Lo primero era, por tanto, tener acceso al libro donde estaba todo documentado. La fortuna quiso que en esos momentos hubiera un ejemplar a la venta en una conocida página de compra-venta de objetos de segunda mano, y además en un magnífico estado de conservación.

El capítulo XV describe casi en su totalidad los componentes electrónicos utilizados y está repleto de diagramas de flujo documentando las subrutinas del juego. Al final del capítulo se encuentra el código completo en ensamblador. Como una imagen vale más que mil palabras, aquí dejamos el capítulo escaneado donde podréis encontrar todos los detalles del juego. Nuestra objetivo sería recrear el circuito electrónico con la máxima fidelidad posible (ya que preveíamos que algunos componentes podrían no ser fáciles de encontrar ahora) y respetar al 100% el código del juego. No queríamos cambiar ni un solo byte del programa.
La arquitectura general del sistema consta de una CPU, una memoria ROM donde estará grabado el código del programa, una memoria RAM para almacenar las variables del juego y un subsistema de entrada y salida. La salida está compuesta por un par de conversores digital-analógico conectados a los dos canales de un osciloscopio de pantalla CRT configurado en modo X-Y. En este modo, el haz de electrones se concentra en un punto que podemos mover por la pantalla dependiendo de los voltajes recibidos por cada uno de los dos canales a modo de coordenadas (X,Y). Si movemos el haz lo suficientemente rápido podremos dibujar todos los elementos del juego en la pantalla aprovechando la persistencia del fósforo que la recubre (el mismo funcionamiento de la consola Vectrex, por ejemplo).
La entrada a su vez consta de dos potenciómetros que servirán para mover las raquetas arriba y abajo, variando el voltaje de entrada al girar los mandos. Este voltaje es leído por un único conversor analógico-digital, por lo que tendremos que ir alternando la lectura entre uno y otro mando usando un multiplexor analógico como veremos más adelante (probablemente estos conversores no fueran tan comunes o económicos en aquella época y se decidió usar uno nada más, y nosotros hemos respetado esa decisión de diseño).

Según el libro íbamos a necesitar estos componentes para realizar el circuito:

El «cerebro de la bestia» es un Intel 8080 que suele venir acompañado de otros dos chips auxiliares:
- El Intel 8224 es un generador de reloj que nos proporciona las dos señales de reloj necesarias para hacer funcionar el 8080. A partir de un cristal de 18MHz este chip divide por 9 la frecuencia para sacar dos señales de 2MHz. Esta señal debe tener una amplitud de 12V, con lo que necesitamos una fuente que nos proporcione este voltaje, además de los +5V y -5V requeridos también por el 8080. El 8224 además se encarga de generar la señal de RESET, por lo que conectaremos ahí un pulsador que nos permita resetear todo el sistema.
- El Intel 8228 por su parte se encarga de gestionar el bus de datos y nos proporciona las señales necesarias para manejar el acceso a la memoria (MEMR, MEMW) y a los dispositivos de entrada y salida (I/OR, I/OW).
Como curiosidad podemos decir que el 8080 junto con el 8224 y el 8228 serían equivalentes a un Z80, que integra todas las funciones de estos tres chips en uno y sólo necesita un voltaje de alimentación en lugar de los tres distintos que requiere el 8080 (¡gracias, Federico Faggin!) No tuvimos dificultad en encontrar estos tres chips en las tiendas habituales por internet.

Para los chips de memoria si que tuvimos que buscar componentes equivalentes a los que se especificaban en el libro:
- La RAM utilizada eran dos chips Intel 8111-2 de memoria estática de 256×4 bits, que no pudimos encontrar. En su lugar hemos usado sendas AMD AM93L422PC con la misma configuración y capacidad total. Al ser memorias de 4 bits, cada dato de 8 bits se almacena mitad en un chip y mitad en el otro.
- La ROM descrita era una Intel 8708 de 1 kilobyte de capacidad. En nuestro caso hemos utilizado una EEPROM más moderna Atmel AT28C64 de 8 kilobytes por la facilidad para reprogramarla con las herramientas de las que ya disponíamos.
Como se aprecia en el diagrama, el bit 13 del bus de direcciones es el que determina si accedemos a los 8 kilobytes de la ROM (0x0000-0x1FFF) o los 256 bytes de la RAM (0x2000-0x20FF).

En la sección de entrada y salida es donde más libertad hemos tenido a la hora de elegir los componentes, ya que el libro no especifica ningún modelo concreto para los conversores A/D y D/A:
- El Intel 8205 es un simple decodificador 1 a 8 que nos sirve para seleccionar uno de las cuatro acciones que podemos realizar sobre los dispositivos de E/S: escribir en la salida X, escribir en la salida Y, escribir en el conversor analógico-digital de los mandos (para seleccionar el mando de entrada y comenzar la conversión) y leer el resultado de la conversión. Después de localizar uno de estos chips en eBay resultó que no funcionaba correctamente, así que lo sustituimos por un simple 74LS138 que es idéntico a nivel funcional y de pineado.
- Los registros de 8 bits 74100 sirven para mantener el último valor escrito o leído de los dispositivos de E/S. Afortunadamente pudimos encontrar los tres que necesitábamos y no tuvimos que buscar una alternativa más moderna.
- El 74126 es un buffer tri-estado conectado a la salida del conversor analógico-digital que lee los valores reportados por los mandos, y sirve para volcar ese dato en el bus en el momento que lo queremos leer y a su vez mantenerse en alta impedancia cuando no lo estamos utilizando. Usamos dos de estos chips ya que cada uno maneja 4 bits únicamente.

La posición (X,Y) del haz de electrones debe ser convertida de valores numéricos de 8 bits a voltajes que sirvan de entrada al osciloscopio. Para ello no hemos usado un chip específico sino una escalera de resistencias o red R-2R, que constituye una de las maneras más sencillas de construir un conversor digital-analógico ya que solo usa resistencias de un mismo valor. Hay que tener en cuenta que el programa usa enteros con signo para guardar las posiciones de pantalla, con lo que (0,0) corresponde al centro de la pantalla y (-128, -128) a la esquina inferior izquierda, por ejemplo. Sin embargo al osciloscopio solo llegan voltajes positivos, y tener 0 voltios en ambas entradas sitúa el haz en la esquina inferior izquierda, no en el centro de la pantalla. Para lograr esa conversión entre valores con signo (-127..+128) a valores sin signo (0..255) simplemente negamos el bit más significativo antes de la escalera de resistencias.
Para la lectura de los mandos no se da ninguna indicación más allá de usar un único conversor analógico-digital y un multiplexor analógico para conmutar entre un mando y el otro. Para realizar estas funciones elegimos el conversor A/D de 8 bits ADC0802LCN y el multiplexor 74HC4051 que permite manejar hasta 8 entradas distintas. La lógica para manejar ambos chips la tuvimos que deducir directamente estudiando el código del programa, para ver qué instrucciones se usaban tanto para seleccionar el mando que se va a leer como para iniciar la conversión analógica-digital:
MVI A, 21H ó 22H para seleccionar el mando 1 o 2
OUT 2
MVI A, 01H ó 02H para iniciar la conversión A/D
OUT 2
IN 0 para leer el valor del mando seleccionado
Con toda la información del libro y los datasheets de los componentes, comenzamos a diseñar el esquema de conexiones usando Kicad. El resultado fue este diagrama:

Poco a poco fuimos montando los componentes sobre una placa de prototipado, probando cada una de las partes y no pinchando un nuevo chip hasta asegurarnos que todos los anteriores funcionaban bien. Con todo en su sitio, la maraña de cables tenía esta pinta:


Y tras muchas horas de depuración… ¡funciona!
Con el circuito validado era hora de pasar todo ese lío de cables a una placa perforada con la idea de poder mostrarlo en la Retro Parla 2025. Con paciencia, soldador y mucho cable AWG30 la placa definitiva fue tomando forma.



Para los mandos modificamos ligeramente esta réplica de los paddles de la Atari 2600 y los imprimimos en 3D, conectándolos a la placa mediante un conector DB9. En el interior colocamos un potenciómetro de 100K ohmios.


La placa a su vez la montamos sobre una base de madera donde también va atornillada la fuente de alimentación y los interruptores que nos permiten conectar y desconectar las tres tensiones por separado (-5V, +5V, +12V). Esto viene a raíz de leer en la Wikipedia que el 8080 necesita recibir las tensiones en un orden determinado al encenderlo: primero -5V, luego +5V y finalmente +12V, siendo la secuencia de apagado la inversa.


El conjunto ya está listo para la Retro Parla del 15 y 16 de marzo, y si el osciloscopio no nos da ningún susto (50 añitos tiene ya) estará disponible para que puedan jugar y probarlo todos los que se acerquen a la feria.

Comentarios recientes