Lector de Discos Flexibles Amiga Basado en Arduino: Recuperación de Datos Open Source de Bajo Costo
Componentes y Suministros
- Resistencia 1 kΩ × 1
- Protoboard (genérica) × 1
- Cables Dupont (genéricos) × 1
- Fuente de Alimentación para Protoboard SparkFun 5V/3.3V × 1
- Arduino UNO (o Pro Mini) × 1
Aplicaciones y Servicios en Línea
- Arduino IDE
Sobre este Proyecto
Objetivo
Crear una forma simple, económica y de código abierto para recuperar datos de discos flexibles Amiga DD (Double Density) desde Windows 10 y otros sistemas operativos.
Solución
Un Arduino + una aplicación Windows. El proyecto permite leer discos Amiga de 3.5" (formato DD, 880 KB) usando una unidad de disquete de PC estándar y un Arduino, sin necesidad de hardware costoso como KryoFlux o Catweasel.
¿Por Qué Este Proyecto?
- Preservar datos de discos antiguos para el futuro.
- Una PC normal no puede leer discos Amiga debido a su codificación MFM única y formato de sectores.
- Las soluciones comerciales son caras y mayormente cerradas (closed source).
Antecedentes Personales
El autor creció con un Amiga 500+ y aprendió programación con AMOS. Tras años sin hardware funcional, decidió recuperar sus discos usando electrónica moderna. Investigó formatos de disco, codificación MFM, y el hardware de unidades de disquete para desarrollar esta solución.
Investigación Clave
Recursos fundamentales:
- techtravels.org
- FAQ del formato .ADF (Amiga Disk File) por Laurent Clévy
- Amiga Forever
- Wikipedia - Amiga Disk File
- English Amiga Board
- QEEWiki - Contadores en ATmega168/328
- Pinout de unidad de disquete
- Lista de formatos de disco flexible
Desafíos Técnicos y Solución
El Problema de Velocidad
Los discos DD giran a 300 RPM con codificación MFM. Para leer datos correctamente se requiere muestreo a 500 kHz. El Arduino a 16 MHz tiene margen limitado.
Evolución de Intentos
- Intento 1 - Registros de Desplazamiento: Usó dos 74HC594 para convertir serie a paralelo y reducir frecuencia de muestreo a 62.5 kHz. Funcionó pero los datos no eran confiables.
- Intento 2 - Interrupciones (ISR): Intentó detectar pulsos en ISR a 500 kHz. La sobrecarga de la ISR y
digitalReaderan demasiado lentas. - Intento 3 - Contador Hardware: Usó Timer/Counter0 del ATmega328 para contar pulsos externamente. Eliminó la limitación de velocidad de software.
- Intento 4 - Bucle de Fase Bloqueada (PLL) por Software: Sincronizó el timer interno con cada pulso detectado, reajustando el contador (TCNT2) en cada flanco. Logró lectura casi perfecta.
- Intento 5 - ISR Optimizada (NAKED): Movió la resincronización a una ISR en pin INT0 con atributo
ISR_NAKEDy ensamblador inline. Redujo la ISR a 5 instrucciones (0.3125 µs). - Intento 6 - Trigger Schmitt: Añadió 74HCT14 para limpiar señal. No hubo mejora significativa.
- Intento 7 - Validación MFM: Aplicó reglas de codificación MFM (no dos '1' seguidos, máx tres '0' seguidos) para detectar/corregir errores.
Decodificación y Formato ADF
Los pulsos del lector son datos MFM crudos. El software busca la palabra de sincronización 0x4489 (precedida por 0xAAAAAAAA) para localizar sectores. Decodifica cabeceras y datos, verifica checksums, y re-lee pistas hasta obtener 11 sectores válidos por cara. Genera archivos .ADF (imagen raw de 901,120 bytes: 80 pistas × 2 caras × 11 sectores × 512 bytes).
Estado Actual y Futuro (V2)
- Proyecto completo bajo licencia GPLv3: GitHub Repo
- V2 disponible con lectura/escritura mejorada.
- Soporte planeado para formato FDI (universal, documentado) y escritura de discos.
- Investigación de formatos con protección de copia no estándar.
Esquemáticos
Ver sección "Schematics" para diagramas de conexión del Arduino a la unidad de disquete (pines: /DIR, /STEP, /TRK00, /SIDE1, /RDATA, /INDEX, MOTOR ON, DRIVE SEL, GND).
Proceso de manufactura
- La Evolución y Oficio de la Animación
- La Evolución de los Discos Flexibles: De Medios Magnéticos a Almacenamiento Óptico
- 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
- Lector de Discos Flexibles Amiga Basado en Arduino: Recuperación de Datos Open Source de Bajo Costo