Cuando comenzamos esta serie de notas hablamos sobre uno de los primeros ordenadores accesibles al público en general: el Altair 8800 de 1975. Dado que se trataba de un ordenador mucho más simple que los actuales, tuvimos la idea de crear una réplica, utilizando componentes electrónicos disponibles en la actualidad. Luego de algunos meses de trabajo el “clon” quedó listo y funcionando, aunque a menor velocidad: mientras que el Altair podía ejecutar unas 500 mil instrucciones por segundo, el nuestro sólo es capaz de machacar unas 60 mil. Hoy te lo mostramos, y te contamos como hicimos para recrear está maquina que se convirtió en una verdadera leyenda.
Hay pocos ordenadores de los que se pueda decir que fueron “diferentes al resto”. La enorme mayoría de los sistemas informáticos o bien representan una pequeña evolución de un sistema anterior, o simplemente son una copia -más o menos descarada- de algo que ya existe. Sin embargo, un puñado de ellos han servido para establecer un “antes y después” de ellos en la historia. El Altair 8800 fue uno de ellos.
Han transcurrido unos 35 años desde que este ordenador apareció en el mercado. Hoy día son muy pocos los que quedan, y muchos menos los que aún funcionan. Suelen aparecer de tanto en tanto en algún sitio de subastas, pero su precio –algunos miles de euros– los convierte en juguetes inaccesibles para la mayoría de nosotros. Así fue como surgió la idea de recrear esta máquina utilizando componentes electrónicos más o menos modernos, baratos y simples de conseguir, y poder sentir en carne propia la sensación de programar un ordenador directamente en binario, utilizando solamente un panel frontal compuesto por llaves y LEDs.
Lo primero que tuvimos que resolver fue la emulación del microprocesador Intel 8080 que utilizaba el Altair. Si bien no es imposible de conseguir, suelen ser caros y ya no se fabrican, por lo que se decidió utilizar en su lugar un microcontrolador (un PIC18F4550) que lo “emulase”. La idea era muy simple: el PIC debia acceder a la dirección de memoria apuntada por el PC (Program Counter o Contador de programa), leer el byte allí almacenado, determinar a que instrucción del lenguaje máquina del Intel 8080 correspondía, y “ejecutarla”, actualizando el valor de los registros, contador de programa), la propia RAM, etc.
Dado que el ordenador original, si no había sido ampliado con alguna de las muchas tarjetas disponibles, solo disponía de 256 bytes de RAM, se utilizó la memoria interna del PIC18F4550 para emularla. Los registros (A, B, C, D, E, H , L, PC y Status) fueron implementados como simples variables, y un programa más o menos complejo escrito en JALv2 hizo que el PIC se comportase como un Intel 8080. Si bien JALv2 es un buen lenguaje de programación (libre y gratuito) y genera código muy eficiente, el programa resultante no fue tan rápido como un i8080 de verdad. Mientras que el procesador original del Altair podía ejecutar unas 500 mil instrucciones por segundo, nuestro “clon” solo es capaz de machacar unas 60 mil.
Una vez que el programa que convertía el PIC en un i8080 estuvo listo, lo probamos utilizando como dispositivo de salida una pantalla LCD de 4 lineas de 20 caracteres. Eso nos permitió depurarlo, ya que podíamos ver simultáneamente el estado de los registros, las instrucciones que se iban ejecutando y muchas cosas más. Con esa etapa concluida, comenzamos a analizar los esquemas y manuales del Altair 8800, para comprender exactamente como funcionaba su panel frontal. La idea era que aunque sus “tripas” fuesen modernas, desde el punto de vista del usuario resultase indistinguible de uno real.
No teníamos el gabinete que utilizaba el Altair original (aunque ya estamos trabajando en la recreación de uno), pero podíamos diseñar una placa de circuito impreso grande, que alojase las llaves, LEDs, microcontrolador y demás componentes de forma que cada elemento del panel estuviese en el sitio adecuado. Diseñamos y mandamos a construir la placa, y cuando estuvo lista comenzamos con el montaje. Instalamos los LEDs y las llaves de forma que quedasen todos a la misma altura, y de forma temporal, mientras esperamos resolver el tema de la caja, utilizamos un acrílico a modo de “sostén” de todos esos elementos. Además, se grabó con láser ese panel de forma que fuese sencillo reconocer la función de cada cosa.
El PCB, de dos caras, mide unos 37×12 centímetros. Los LEDs se controlan mediante un registro de desplazamiento construido sobre varios chips 74HC595, al igual que las llaves. La alimentación -consume unos 400 mA sobre 5V- está regulada mediante un circuito integrado LM7805. Para no tener que ingresar los programas cada vez que se enciende la maquina, implementamos un “disco duro” con capacidad para 256 programas utilizando un chip EEPROM de 8 pines y 64KB. Utilizando las llaves “Aux” del panel frontal se elige un “slot” de los 256 y se guarda o recupera el contenido de la RAM.
Como se ve en las fotografías, no se parece demasiado al original desde el punto de vista estético, pero eso lo vamos a solucionar en breve. Por lo pronto, lo importante es que se comporta tal como lo hacia un Altair 8800. De hecho, una vez que estuvo montado, utilizamos las llaves del panel frontal para cargar el programa que viene de ejemplo en los manuales de la máquina original, y se ejecutó correctamente al primer intento.
Al igual que el original, este ordenador puede ejecutar los programas “de corrido” (modo RUN) o paso a paso (STEP). Hasta donde hemos podido experimentar, su comportamiento es el de la maquina original. Es posible que tenga alguna diferencia, pero al no tener más que los manuales del Altair y algunos vídeos que muestran como funcionaba no podemos asegurar que sea “100% idéntica”. Pero si es lo suficientemente parecida como para poder apreciar lo que sentían aquellos programadores que, hace más de tres décadas, programaban en binario.