Kit Simulador Altair 8800 Basado en Arduino: Construye y Programa un Computador Retro
Componentes y Suministros
| Arduino Mega 2560 | × | 1 |
| Arduino Due (alternativa al Mega, no se necesitan ambos) | × | 1 |
| LED genérico | × | 36 |
| Transistor NPN de uso general | × | 36 |
| Resistencia 10 kΩ | × | 36 |
| Resistencia 150 Ω | × | 36 |
| Interruptor basculante mini SPDT On-On (16 para direcciones + 1 de encendido) | × | 17 |
| Interruptor momentáneo SPDT (On)-Off-(On) (para funciones RUN/STOP/EXAMINE...) | × | 8 |
| Chapa metálica para panel frontal | × | 1 |
| Módem Bluetooth SparkFun BlueSMiRF Silver (opcional, para terminal serie vía Bluetooth) | × | 1 |
| Tarjeta microSD con adaptador (opcional, solo para emulación de unidad de disco) | × | 1 |
Aplicaciones y Servicios en Línea
- Arduino IDE
- Biblioteca DueFlashStorage para Arduino Due (permite guardar datos en memoria flash, ya que el Due no tiene EEPROM)
- Biblioteca soft_uart para Arduino Due (UART por software para usar cualquier pin como interfaz serie)
Sobre el Proyecto
Durante mucho tiempo quise tener un computador Altair 8800 para experimentar. Pero los Altair originales funcionales son raros y caros (1500–2500 $). Existen alternativas como altairclone.com, pero cuestan unos 600 $. Afortunadamente, Mike Douglas (creador del Altair Clone) puso a disposición de la comunidad toda la documentación y el software que recopiló, lo que permite entender el funcionamiento interno del Altair y sus periféricos más populares.
Al revisar las especificaciones del Arduino Mega 2560, me pregunté si tendría suficientes pines I/O para conectar directamente los LEDs e interruptores del panel frontal del Altair y escribir mi propio emulador. Resulta que el Mega tiene exactamente el número justo de pines. Así que decidí crear mi propio clon del Altair.

Usar el Arduino Mega funcionó bien y fue sencillo de configurar, pero la emulación corre solo al ~25 % de la velocidad original y ofrece solo 6 KB de RAM emulada (aunque en la época eso era mucho). El almacenamiento permanente también es limitado: la EEPROM del Mega solo almacena 4 KB.
El Arduino Due, en cambio, tiene memoria suficiente para 64 KB de RAM emulada y corre mucho más rápido. Además, puede guardar datos en la memoria flash en tiempo de ejecución, permitiendo usar hasta 32 KB de almacenamiento semipermanente para cargar y guardar programas y datos en el emulador.
Con el Due ahora tengo un simulador Altair 8800 que funciona a velocidad original, proporciona 64 KB de RAM, incluye mucho software histórico y aún ofrece 32 KB de almacenamiento permanente.
Aspectos Destacados
- Reproduce fielmente el comportamiento de los elementos del panel frontal del Altair.
- Velocidad de emulación: ~100 % velocidad original (Due) o ~25 % (Mega).
- RAM emulada: 64 KB (Due) o 6 KB (Mega).
- Incluye numerosos programas históricos: Pong, Altair 4K BASIC (primer producto de Microsoft), Altair Extended BASIC, MITS Programming System II (solo Due), Altair Time Sharing BASIC (multiusuario), etc.
- Ejemplos de BASIC y Assembler precargados y fáciles de cargar.
- Emula una placa 88-SIO, 88-2SIO y 88-ACR (grabadora de casete). Cada dispositivo serie puede mapearse a una interfaz serie del Arduino. Por defecto, 88-SIO y 88-2SIO puerto 1 usan el puerto serie principal a 115200 baudios 8n1 (accesible por USB). Recomiendo conectar un dongle Bluetooth serie a los pines RX/TX para usar cualquier dispositivo Bluetooth como terminal.
- En el Due, tanto el puerto serie principal (USB) como Serial1 (pines 18/19) pueden usarse simultáneamente.
- Los datos enviados a cada dispositivo serie (incluyendo cinta ACR) pueden capturarse y reproducirse en hasta 256 archivos almacenados en la memoria local del Arduino (EEPROM o FLASH).
- Interfaz de casete compatible con comandos CSAVE/CLOAD de Extended BASIC (soporte automático).
- Emula tarjeta gráfica Cromemco Dazzler (requiere hardware/software adicional).
- Emula tarjeta de video Processor Technology VDM-1 (requiere hardware/software adicional).
- Emula hasta 16 unidades de disco 88-DCDD (4 por defecto). Requiere tarjeta SD conectada al bus SPI del Arduino. Solo soportado con Arduino Due.
- Emula controlador de disco duro 88-HDSK con hasta 4 unidades y 4 platos por unidad.
- Emula placa 88-RTC-VI con reloj en tiempo real e interrupciones vectoriales, permitiendo ejecutar Altair Time Sharing BASIC.
- Páginas de memoria de 256 bytes pueden guardarse en almacenamiento permanente y recargarse, facilitando guardar programas introducidos por el panel frontal.
- Numerosos ajustes configurables mediante editor integrado.
Importante: En el Due, todos los datos capturados o guardados en el simulador se borran al subir un nuevo sketch, porque se almacenan en memoria flash que se borra al reprogramar. Si se usa tarjeta SD, los datos se guardan allí y no se pierden al actualizar el firmware.
Documentación
Como el simulador funciona igual que el Altair 8800 original, la documentación original (fácil de encontrar en Google) proporciona toda la información necesaria para operar los interruptores del panel frontal.
Sin embargo, el simulador incluye funciones extra y software integrado accesibles mediante los interruptores AUX1/AUX2 del panel frontal (presentes en el original pero sin uso). Esa funcionalidad se explica en un documento aparte (Documentation.pdf en el repositorio), demasiado extenso para incluir aquí.
Instrucciones de Montaje
El objetivo era usar la mínima circuitería de apoyo. Tanto el Mega como el Due tienen suficientes pines I/O para cablear directamente todos los elementos del panel frontal. Solo se necesitan transistores y resistencias para pilotar los 36 LEDs (si se conectaran directamente a los pines del Arduino, la corriente total al encender muchos simultáneamente superaría los límites del microcontrolador).
En lugar de esquemas completos (tediosos y repetitivos: 36 circuitos idénticos de driver LED, cableado de 32 interruptores), el documento de esquemas contiene tablas detalladas de qué elementos van a qué pines del Arduino y los esquemas de los subcircuitos (drivers de LED). También se incluye un archivo Fritzing que muestra la disposición de los componentes en la placa de tiras (stripboard).
Para el panel frontal, partí de un escaneo de alta calidad del panel del Altair (disponible en vintage-computer.com) e imprimí en cartulina en una copistería. Como soporte usé una chapa de 22 gauge, taladrando los agujeros para LEDs e interruptores con un taladro normal. Los circuitos de driver de LED se sueldan en tiras de stripboard que se sueldan directamente a los LEDs, sujetados por la chapa metálica.
El panel se sostiene verticalmente con una caja de madera simple, menos profunda que el Altair original porque solo aloja el panel y el Arduino.

El interruptor de encendido del panel frontal se cablea añadiendo un conector de alimentación (igual que el del Arduino) a la caja, conectándolo al interruptor del panel y de ahí a un enchufe que va al Arduino.
Con el Arduino Due, la emulación de hasta 16 unidades 88-DCDD puede activarse conectando una tarjeta SD al puerto SPI del Due. La última página del documento de esquemas muestra el cableado detallado.
Antes de subir el sketch al Due, cambie la optimización del compilador de Arduino a "performance" (por defecto está en "size"). Edite el archivo platform.txt (ruta típica: c:\Users\[usuario]\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.9\platform.txt) y reemplace todas las ocurrencias de -Os por -O3. Si omite este paso, el simulador irá significativamente más lento.
El software también puede ejecutarse en un Arduino "pelado" (Mega o Due) sin panel frontal. Esto permite correr muchos programas incluidos (los que usan principalmente terminal serie). Para ello, edite config.h y establezca #define STANDALONE 1. Consulte la sección "Debugging capabilities" en la documentación para operar el panel frontal virtual. No es el uso previsto; si no quiere construir el hardware, use emuladores basados en PC. El archivo config.h contiene interruptores para incluir/excluir funcionalidades; los valores por defecto funcionan bien.
Agradecimientos
- Videos instructivos de Mike Douglas (deramp5113) de altairclone.com: gran ayuda para entender el funcionamiento.
- Herramienta ADEXER de Martin Eberhard: invaluable para depuración de bajo nivel del soporte de disco duro. También escribió dos cargadores de arranque usados en el simulador: CDBL (combo disk boot loader) y HDBL (hard disk boot loader).
- Proyecto i8080 core model: inspiración para implementación eficiente del half-carry y la instrucción DAA.
- Software original Altair 8800 incluido, recopilado por Mike Douglas: Altair 4K BASIC (1975), Extended ROM BASIC (1975), Time Sharing BASIC (1977), Kill-the-Bit (1975), Pong (Mike Douglas), "Daisy, Daisy..." música (Steve Dompier, 1975), Music System (Processor Technology, 1977), MITS Programming System II (1976), Altair Turnkey Monitor (1977), diagnósticos de CPU i8080, etc.
- Imágenes de disco y disco duro (subdirectorio "disks" en el archivo fuente) tomadas de altairclone.com y deramp.com: CP/M, varias versiones de BASIC en disco, Altair DOS (incluyendo Fortran) y más.
Foro de Discusión
Chris Davis (Altairduino.com) ha creado un grupo de Google para discutir dudas sobre Altair-Duino:
https://groups.google.com/forum/#!forum/altair-duino
Código
Código del simulador Altair 8800 para Arduino
https://github.com/dhansel/Altair8800
Esquemas
En lugar de esquemas completos (muy repetitivos), este documento describe qué pines conectar a qué elementos del panel frontal y proporciona esquemas de los subcircuitos (drivers de LED, etc.). Incluye archivo Fritzing ledstrip_4OVCpRyKQS.fzz que muestra la disposición en la stripboard (importante: los componentes de cada LED ocupan máx. 5 pistas para mantener el tamaño original del panel).
Proceso de manufactura
- Panel de control para Flight Simulator 2020 con Arduino Nano: Pantallas LCD y CDI
- Construye un Spybot controlado por Bluetooth con Arduino
- FlickMote: Mando IR por gestos para Smart Home
- TV‑B‑Gone DIY con Arduino: Mando universal para apagar cualquier TV
- Construye un Reloj Maestro LED Personalizado con Alarma – Visible desde 12 Metros
- Find Me: Localizador Inteligente de Objetos con Arduino y Bluetooth
- Soluciones de Alimentación Optimizadas para Proyectos Arduino
- Tres en raya con Arduino, matriz LED MAX7219 y carcasa de cartón
- Construye un Robot Cuadrúpedo Inteligente con Arduino: Guía Paso a Paso
- Construye un volante joystick personalizado con Arduino para gaming
- Construye una Máquina CNC Totalmente Funcional con Arduino Nano R3