Arduino-basierter Amiga-Floppy-Lesegerät: Günstige Open-Source-Datenrettung
Komponenten und Materialien
| Komponente | Menge | Hinweis |
|---|---|---|
| Widerstand 1 kΩ | 1 | |
| Steckbrett (Breadboard) | 1 | |
| Steckbrücken (Jumper Wires) | 1 Set | |
| Breadboard-Stromversorgung 5V/3.3V (SparkFun) | 1 | |
| Arduino UNO (oder Pro Mini) | 1 | Pro Mini funktioniert ebenfalls |
Software und Online-Dienste
- Arduino IDE
- Projekt-Website: https://amiga.robsmithdev.co.uk/
- GitHub Repository: ArduinoFloppyDiskReader
Projektziel
Entwicklung einer einfachen, günstigen und Open-Source-Lösung zum Auslesen von Amiga-DD-Disketten (Double Density) unter Windows 10 und anderen Betriebssystemen. Ziel ist die langfristige Datensicherung und Nostalgie.
Hintergrund
Der Autor verdankt seine Karriere dem Amiga 500+. Damals wurden Spiele programmiert (AMOS), heute sollen die alten Disketten gesichert werden. Herkömmliche PC-Laufwerke können Amiga-Disketten nicht lesen (anderes Encoding: MFM). Professionelle Lösungen wie KryoFlux oder Catweasel sind teuer und oft Closed Source.
Forschung und Herausforderungen
Amiga-DD-Disketten drehen mit 300 RPM, haben 80 Tracks, 11 Sektoren/Track, 512 Bytes/Sektor, MFM-kodiert. Erforderliche Abtastrate: 500 kHz – anspruchsvoll für einen 16 MHz Arduino.
Versuch 1: Schieberegister (74HC594)
Zwei 8-Bit-Schieberegister sollten die Abtastrate um Faktor 8 reduzieren. Daten per USART mit 2 Mbaud an PC senden. Funktionierte, aber keine sinnvollen Daten.
Versuch 2: Interrupt-basiert (ISR)
Direktes Einlesen per Interrupt bei 500 kHz. ISR-Overhead und langsame digitalRead() zu langsam. Selbst Port-Manipulation reichte nicht.
Versuch 3: Hardware-Counter (Timer/Counter)
Nutzung des ATMega328 Hardware-Counters (Timer0) zum Zählen der Floppy-Pulse. Timer2 generiert 500 kHz, wird bei jedem Pulse zurückgesetzt (Phasen-Synchronisation).
Versuch 4: Software-PLL (Phase Locked Loop)
Dynamische Anpassung der Taktrate an Frequenzdrift des Laufwerks. Timer-Counter wird bei Pulse-Erkennung auf festen Phasenwert gesetzt (Resynchronisation). Funktionierte gut, aber Checksummen-Fehler blieben.
Versuch 5: Optimierter ISR mit ISR_NAKED
Interrupt Service Routine auf Minimum reduziert (5 Instruktionen, ~0,3 µs). Nutzung von INT0 (höchste Priorität) für Pulserkennung. Assembler-Optimierung für maximale Geschwindigkeit.
Versuch 6: Schmitt-Trigger (74HCT14)
Signalbereinigung durch Hex-Schmitt-Trigger und Pullup-Widerstand (1 kΩ). Keine signifikante Verbesserung.
Versuch 7: MFM-Fehlererkennung
Regeln der MFM-Kodierung genutzt: keine zwei '1' nebeneinander, max. drei '0' nebeneinander. Erkennung und Korrektur von Bitfehlern.
Dekodierung und ADF-Format
- Rohdaten sind MFM-Pulse (Phasenübergänge), keine direkten Bits.
- Suche nach Sync-Wort
0x4489(bzw.0x2AAAAAAA44894489mit Maskierung). - Sektoren-Header und Daten prüfen (Checksummen).
- Gültige Sektoren zu ADF-Datei zusammenfügen (raw 512 Bytes/Sektor, beide Seiten).
- Mehrfaches Einlesen derselben Spur bis alle 11 Sektoren valide.
Ausblick (V2)
- Projekt ist Open Source (GPL v3).
- V2 bietet verbessertes Lesen und Schreiben.
- Unterstützung weiterer Formate (FDI für Kopierschutz, nicht-standard Formate).
- Keine Unterstützung für IPF (Closed Source, kommerziell).
Schaltplan und Aufbau
Die Schaltpläne zeigen die Verbindung von Floppy-Laufwerk (34-polig IDE-Kabel) zum Arduino. Wichtige Signale: /DIR, /STEP, /TRK00, /SIDE1, /RDATA. Stromversorgung nur 5V (12V nicht benötigt).
Herstellungsprozess
- Die Entwicklung und Kunst der Animation
- Die Entwicklung der Disketten: Von magnetischen Medien zu optischer Speicherung
- Bluetooth-gesteuerter Arduino-Spybot bauen – Überwachungsroboter mit IP-Kamera
- FlickMote: Gestensteuerung per Ultraschall & IR für Smart Home (Arduino 101)
- DIY Arduino TV-B-Gone: Universelle TV-Aus-Fernbedienung
- Einen eigenen LED-Master-Clock mit Alarm bauen – aus 12 Metern Entfernung ablesbar
- Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth
- Optimierte Stromversorgungslösungen für Arduino-Projekte
- Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse
- Arduino-basierter Amiga-Floppy-Lesegerät: Günstige Open-Source-Datenrettung