AIRESP32 es un emulador completo del Apple I original, portado para ejecutarse en un ESP32. Este proyecto permite revivir la experiencia del primer computador personal de Apple en hardware moderno, utilizando comunicación serie para entrada/salida.
El emulador incluye:
- ✅ CPU 6502 completo con timing preciso
- ✅ Monitor WozMon
- ✅ BASIC del Apple I
- ✅ Interfaz serie a 115200 baud
- ✅ Compatibilidad con minicom y otros terminales
Más información en Minibots: [https://minibots.wordpress.com/2025/09/28/emulador-de-apple-i-con-esp32]
Más sobre retroinformática aquí: [https://minibots.wordpress.com/retroinformatica/]
-
CPU 6502 (
cpu6502.c/h)- Emulación ciclo-precisa del microprocesador 6502
- Ejecuta a 1.023 MHz (velocidad original del Apple I)
-
MC6821 PIA (
mc6821.c/h)- Interfaz de E/S (Peripheral Interface Adapter)
- Gestiona comunicación teclado/pantalla
-
Motherboard (
motherboard.c/h)- Mapeo de memoria (32KB RAM + 8KB ROM)
- Decodificación de direcciones
-
Terminal (
terminal.cpp/h)- Entrada serie desde ESP32
- Salida formateada para terminales modernos
-
ROM Embebida (
6502.rom.h)- Monitor WozMon + BASIC del Apple I
- Datos embebidos en memoria flash
| Aspecto | Versión PC | Versión ESP32 |
|---|---|---|
| E/S | Terminal nativo | Comunicación serie |
| ROM | Archivo externo | Datos embebidos |
| Timing | clock_gettime() |
micros() |
| Arquitectura | main() loop |
setup()/loop() Arduino |
| Memoria | Asignación dinámica | Arrays estáticos |
| Dependencias | POSIX threads | FreeRTOS |
- Buffer de teclado: Lógica de interrupciones del MC6821
- Timing preciso: Ciclos exactos para 1.023 MHz
- Sin dependencias externas: Todo embebido en el ESP32
- Hardware: ESP32 (cualquier modelo)
- Software:
- Arduino IDE con soporte ESP32
- Terminal serie (minicom, screen, PuTTY, etc.)
- Conexión: USB a serie (FTDI, CP2102, etc.)
-
Instalar Arduino IDE con soporte ESP32:
# En Linux, instalar desde repositorio o descargar sudo apt install arduino -
Agregar board ESP32:
- En Arduino IDE: Archivo → Preferencias
- URL:
https://dl.espressif.com/dl/package_esp32_index.json - Herramientas → Placa → ESP32 Arduino → ESP32 Dev Module
-
Compilar y subir:
cd airesp32 arduino-cli compile --fqbn esp32:esp32:esp32 airesp32.ino arduino-cli upload --fqbn esp32:esp32:esp32 --port /dev/ttyUSB0 airesp32.ino
# Instalar minicom
sudo apt install minicom
# Conectar al ESP32
minicom -D /dev/ttyUSB0 -b 115200
# Configuración (Ctrl+A → O):
# Serial port setup → 115200 8N1
# Hardware flow control → No
# Software flow control → Noscreen /dev/ttyUSB0 115200Al conectar, verás:
===================================
Apple I Computer Emulator for ESP32
Based on AIRE by ea4eoz
===================================
@
El @ es el prompt del Monitor WozMon.
@ 0:0100 # Ver memoria desde 0100
@ 100.1FF # Ver rango de memoria
@ 100: AA # Escribir AA en dirección 0100
@ R # Ejecutar programa desde dirección actual
@ E000 R # Entrar a BASIC (desde E000)
>10 PRINT "HELLO WORLD"
>20 END
>RUN
HELLO WORLD
>
- Líneas de 40 caracteres: Auto-wrap como el Apple I original
- Timing preciso: 1.023 MHz de emulación exacta
- Interrupciones: Manejo correcto de teclado
- CPU: 6502 emulado a 1.023 MHz
- RAM: 32 KB (direcciones 0x0000-0x7FFF)
- ROM: 8 KB (direcciones 0xE000-0xFFFF)
- E/S: MC6821 PIA en 0xD000-0xDFFF
- Baud rate: 115200 (8N1)
- Consumo: ~70KB RAM, ~312KB Flash
- Verificar conexión USB
- Comprobar puerto serie:
ls /dev/ttyUSB* - Reiniciar ESP32 (botón EN)
- Verificar baud rate: 115200
- Configurar terminal: 8N1, sin flow control
- Probar con otro programa terminal
- Es normal: el Apple I no tenía edición de línea
- CTRL+H envía el carácter de backspace al programa
airesp32/
├── airesp32.ino # Sketch principal Arduino
├── cpu6502.c/h # Emulador CPU 6502
├── mc6821.c/h # PIA MC6821
├── motherboard.c/h # Mapeo de memoria
├── terminal.cpp/h # Interfaz serie
├── 6502.rom.h # ROM embebida
└── README.md # Esta documentación
- Fork el proyecto
- Crear rama para feature (
git checkout -b feature/nueva-funcion) - Commit cambios (
git commit -am 'Agrega nueva función') - Push a rama (
git push origin feature/nueva-funcion) - Crear Pull Request
Este proyecto está bajo GNU Lesser General Public License v3.0.
Basado en AIRE.
- Miguel A. Vallejo: Creador del emulador AIRE original
- Steve Wozniak: Diseñador del Apple I
- Comunidad ESP32: Por hacer posible este port
¡Disfruta reviviendo la historia de la computación! 🖥️