Lecteur de disquettes Amiga basé sur Arduino : Récupération de données open-source et abordable
Composants et fournitures
| Composant | Quantité | Notes |
|---|---|---|
| Résistance 1 kΩ | 1 | |
| Plaque d'essai (breadboard) | 1 | |
| Fils de connexion | 1 jeu | |
| Alimentation breadboard 5V/3,3V (SparkFun) | 1 | |
| Arduino UNO (ou Pro Mini) | 1 | Pro Mini fonctionnel également |
Applications et services en ligne
- Arduino IDE
À propos de ce projet
Objectif
Créer une solution simple, peu coûteuse et open-source pour récupérer les données de disquettes Amiga double densité (DD) depuis Windows 10 et autres systèmes d'exploitation.
Solution
Un Arduino + une application Windows.
Pourquoi ?
Pour préserver les données de ces disquettes pour l'avenir. Un PC standard ne peut pas lire les disquettes Amiga en raison de leur format d'écriture spécifique.
Site du projet : https://amiga.robsmithdev.co.uk/
Note : La version 2 (V2) offre une lecture et une écriture améliorées !
Expériences Amiga
L'auteur doit sa carrière à l'Amiga, notamment l'A500+ reçu à 10 ans. Après les jeux, il a découvert Deluxe Paint III, Workbench, et a remporté un concours de programmation AMOS avec le jeu « In The Pipe Line ».
Contexte
Avec des boîtes de disquettes et un A500+ défectueux, l'auteur a cherché à sauvegarder ses données. Les solutions existantes (KryoFlux, Catweasel) étaient trop chères et souvent closed-source. Inspiré par GreatScott, il a exploré la piste Arduino.
Recherche
Ressources clés :
- techtravels.org
- FAQ du format .ADF par Laurent Clévy
- Amiga Forever
- Wikipedia - Amiga Disk File
- English Amiga Board
- QEEWiki - Compteurs ATmega168/328
- Brochage lecteur disquette
- Liste des formats de disquettes
Hypothèses de départ
Disque DD : 300 tr/min, 80 pistes, 11 secteurs/piste, 512 octets/secteur, encodage MFM. Échantillonnage requis : 500 kHz – un défi pour un Arduino à 16 MHz.
Tentatives successives
Tentative 1 : Registres à décalage (shift registers)
Utilisation de deux 74HC594 pour réduire la fréquence d'échantillonnage par 8. Transmission série à 2 Mbaud via FTDI. Fonctionnait mais données non exploitables – besoin d'analyser le signal réel.
Tentative 2 : Interruption (ISR) à 500 kHz
Trop lent : l'ISR prenait plus de temps que l'intervalle entre impulsions (2 µs). Abandon de digitalRead pour accès direct aux registres – encore insuffisant.
Tentative 3 : Compteur matériel (Hardware Counter)
Utilisation du Timer/Counter0 de l'ATmega328 pour compter les impulsions externes. Vitesse plus un problème. Détection d'une impulsion dans une fenêtre de 2 µs.
Tentative 4 : Boucle à verrouillage de phase (PLL) logicielle
Réinitialisation du compteur timer à chaque impulsion détectée pour se resynchroniser. Fonctionne ! Lecture quasi parfaite, avec quelques erreurs de checksum résolues par relecture multiple.
Tentative 5 : ISR optimisée (ISR_NAKED)
Routage de l'impulsion vers INT0 (haute priorité). ISR minimaliste en assembleur inline : 5 instructions seulement (~0,3 µs). Amélioration notable.
Tentative 6 : Trigger Schmitt et résistance de tirage
Ajout d'un 74HCT14 (trigger Schmitt) et résistance 1 kΩ. Pas de différence significative.
Tentative 7 : Validation MFM
Règles MFM : pas deux « 1 » consécutifs, pas plus de trois « 0 » consécutifs. Détection d'erreurs mineures, mais certains disques restent illisibles sans erreur détectée – piste pour investigation future.
Décodage
Le lecteur émet une impulsion à chaque transition de phase (données MFM brutes). Recherche du mot de synchronisation 0x4489 (ou 0x2AAAAAAA44894489 masqué). Décodage des en-têtes et données secteurs. Écriture en format ADF (raw 512 octets/secteur). Vérification checksums et relecture jusqu'à 11 secteurs valides par piste.
Perspectives (V2 et au-delà)
- Projet open-source sous licence GPL v3.
- Support d'autres formats : FDI (universel, bien documenté) plutôt qu'IPF (closed).
- Ajout de l'écriture de disquettes (ADF et FDI).
Code source complet : GitHub Repository
Schématiques
Voir les schémas de câblage et le montage final sur breadboard dans les images du projet.
Processus de fabrication
- L'Évolution et l'Art de l'Animation
- L'Évolution des Disquettes : Du Support Magnétique au Stockage Optique
- Construire un Spybot Arduino piloté par Bluetooth
- FlickMote : Télécommande IR à gestes pour maison connectée
- TV-B-Gone DIY Arduino : Télécommande universelle pour toutes les TV
- Construire une horloge maître LED personnalisée avec alarme – Visible à 12 mètres
- Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
- Solutions d'alimentation optimisées pour projets Arduino
- Lecteur de disquettes Amiga basé sur Arduino : Récupération de données open-source et abordable