Difference between revisions of "Beaglefloppy"

From Kernel Fablab Lannion
Jump to: navigation, search
 
(2 intermediate revisions by the same user not shown)
Line 5: Line 5:
 
J'ai remis la main sur celui-ci mais, à ma grande tristesse, il ne fonctionne plus : la pile qui permettait de maintenir l'horloge à l'heure s'est répandue sur la carte mère et a rongé les circuits au-delà de mes compétences en réparation (ou de ma patience). Restait un carton rempli de disquettes dont je souhaitais bien récupérer le contenu.
 
J'ai remis la main sur celui-ci mais, à ma grande tristesse, il ne fonctionne plus : la pile qui permettait de maintenir l'horloge à l'heure s'est répandue sur la carte mère et a rongé les circuits au-delà de mes compétences en réparation (ou de ma patience). Restait un carton rempli de disquettes dont je souhaitais bien récupérer le contenu.
  
Inspiré par [https://www.chzsoft.de/site/hardware/preserving-a-floppy-disk-with-a-logic-analyzer/ une idée de Christian Zietz], j'ai entrepris de réaliser un petit montage électronique autour d'une BeagleBone black accompagné d'un logiciel dédié pour extraire le contenu de mes disquettes.
+
Inspiré par [https://www.chzsoft.de/site/hardware/preserving-a-floppy-disk-with-a-logic-analyzer/ une idée de Christian Zietz], j'ai entrepris de réaliser un petit montage électronique autour d'une BeagleBone Black accompagné d'un logiciel dédié pour extraire le contenu de mes disquettes.
 
À la différence du projet dont je me suis inspiré, je n'ai pas eu recours à un analyseur logique pour l'acquisition du flux brut provenant du lecteur de disquettes mais j'ai exploité à cette fin les co-processeurs PRU de la BeagleBone, grâce à l'excellent package logiciel [https://github.com/abhishek-kakkar/BeagleLogic beaglelogic]. Les GPIO de la BeagleBone ont également été mis à profit pour contrôler le lecteur de disquette (déplacement de la tête, sélection de la face à lire).
 
À la différence du projet dont je me suis inspiré, je n'ai pas eu recours à un analyseur logique pour l'acquisition du flux brut provenant du lecteur de disquettes mais j'ai exploité à cette fin les co-processeurs PRU de la BeagleBone, grâce à l'excellent package logiciel [https://github.com/abhishek-kakkar/BeagleLogic beaglelogic]. Les GPIO de la BeagleBone ont également été mis à profit pour contrôler le lecteur de disquette (déplacement de la tête, sélection de la face à lire).
  
Ce projet doit permettre, moyennant peut-être quelques petits changements, la préservation du contenu de disquette d'à-peu-près n'importe quel format.
+
Ce projet doit permettre, moyennant peut-être quelques petits changements, la préservation du contenu de disquettes d'à-peu-près n'importe quel format.
  
 
Il faut savoir que les disquettes Amiga utilisaient un format de modulation dérivé de [https://en.wikipedia.org/wiki/Modified_Frequency_Modulation MFM] que les contrôleurs de lecteur de disquette de PC sont incapables de décoder (indépendamment du système de fichiers AFS ou FFS, que Linux par exemple sait très bien lire), d'où la nécessité d'un montage électronique ad-hoc.
 
Il faut savoir que les disquettes Amiga utilisaient un format de modulation dérivé de [https://en.wikipedia.org/wiki/Modified_Frequency_Modulation MFM] que les contrôleurs de lecteur de disquette de PC sont incapables de décoder (indépendamment du système de fichiers AFS ou FFS, que Linux par exemple sait très bien lire), d'où la nécessité d'un montage électronique ad-hoc.
 +
 +
Pour autant, un lecteur de disquette 3.5" de PC convient pour le montage (c'est le contrôleur côté carte mère de PC qui ne convient pas). Si on emploie un lecteur haute densité comme ce que l'on trouve la plupart du temps, il faudra veiller à ce que les disquettes à préserver ne soient pas des disquettes HD formatées en DD (double densité). Cela était monnaie courante sur Amiga à une époque où les disquettes DD avaient disparu du marché, les lecteurs DD acceptant volontiers d'utiliser des disquettes HD (mais avec les niveaux électriques adaptés à une disquette DD). Il sera nécessaire de boucher le trou des disquettes HD formatées en DD avec un morceau de scotch pour forcer un lecteur HD à utiliser les niveaux électriques adaptés à un format DD.
  
 
= Câblage =
 
= Câblage =
 +
 +
Un lecteur de disquette s'attend à ce que ses entrées soient reliées sur des sorties collecteur-ouvert du circuit qui le contrôle. Pour cette raison, il est nécessaire de passer par un buffer open-collector entre les sorties de la BeagleBone et les entrées du lecteur de disquette à câbler. Une référence classique pour adapter les sorties de la BeagleBone est un circuit intégré 7407.
 +
 +
Les sorties du lecteur de disquette sont des sorties collecteur-ouvert. Elle peuvent être reliées aux entrées de la BeagleBone en direct, chacune accompagnée d'une résistance de pull-up de 1K Ohms environ vers l'alim 3.3V de la BeagleBone (P9_3).
 +
 +
Il sera nécessaire d'alimenter le lecteur de disquette avec une alimentation 5V suffisante.
 +
NB : le 12V n'est typiquement pas requis.
 +
 +
Une alimentation 5V capable de fournir 2 ou 3A devrait suffire à alimenter le lecteur de disquette et la BeagleBone.
 +
 +
Le câblage est le suivant :
 +
* P9_11 (GPIO_30) ---[buffer]---> floppy pin 32 (SIDE1)
 +
* P9_13 (GPIO_31) ---[buffer]---> floppy pin 18 (DIR)
 +
* P9_15 (GPIO_48) ---[buffer]---> floppy pin 20 (STEP)
 +
* P9_12 (GPIO_60) <---[1K pullup vers P9_3]--- floppy pin 26 (TRK00)
 +
* GND ------> floppy pin 10 (MOTEA)
 +
* GND ------> floppy pin 14 (DRVSA)
 +
 +
Le câblage suivant doit être amovible et sera a effectuer après boot de la BeagleBone :
 +
* P8_39 (GPIO_76) <------ DGND
 +
* P8_40 (GPIO_77) <------ DGND
 +
* P8_41 (GPIO_74) <------ DGND
 +
* P8_42 (GPIO_75) <------ DGND
 +
* P8_43 (GPIO_72) <------ DGND
 +
* P8_44 (GPIO_73) <------ DGND
 +
* P8_45 (GPIO_70) <---[1K pullup vers P9_3]--- floppy pin 30 (RDATA)
 +
* P8_46 (GPIO_71) <---[1K pullup vers P9_3]--- floppy pin 8 (INDEX)
  
 
= Extraction d'une image de flux brut au format SuperCard Pro =
 
= Extraction d'une image de flux brut au format SuperCard Pro =
 +
 +
L'extraction d'une image brute de disquette demande de disposer du logiciel beaglelogic sur la BeagleBone.
 +
Le plus simple est de flasher une carte mémoire avec une image pré-installée comme celle disponible ici : https://github.com/abhishek-kakkar/BeagleLogic/wiki/BeagleLogic-%22no-setup-required%22-setup:-Introducing-System-Image!
 +
 +
Récupérer ensuite le code source C de l'outil d'extraction sur le dépôt GitHub du projet : https://github.com/Shadocko/beaglefloppy
 +
 +
Compiler à l'aide de la commande suivante :
 +
    gcc beaglefloppy.c -o beaglefloppy
 +
 +
Pour extraire une image, rien de plus facile : insérer la disquette dans le lecteur puis, en tant que root, lancer la commande qui suit
 +
    ./beaglefloppy image.scp
 +
 +
L'extraction de l'image prend aux environs de 6 minutes pour échantillonner 5 tours complets pour chaque piste, ce qui assure un résultat plus sûr. Les images ainsi produites pèsent entre 75 et 80Mo environ.
  
 
= Récupération des fichiers ou d'une image ADF =
 
= Récupération des fichiers ou d'une image ADF =
 +
 +
Les fichiers image au format SuperCard Pro peuvent être exploités à l'aide d'un logiciel d'émulation MFM tel que [https://hxc2001.com/download/floppy_drive_emulator/index.html HxC Floppy Emulator] (NB : la version Windows fonctionne bien sous Wine, pourvu de disposer d'un CPU compatible x86). Après ouverture de l'image brute, il sera généralement possible d'extraire une image du système de fichier (type ADF) ou même d'extraire les fichiers contenus sur la disquette.
 +
 +
[[Fichier:Hxcfloppy.png]]
 +
 +
L'interface utilisateur de HxC Floppy Emulator est plutôt explicite. Le bouton "Export" permettra de convertir l'image brute vers un autre format d'image, par exemple ADF pour utilisation dans un émulateur. Le bouton "Disk Browser" fera apparaître une fenêtre qui permettra, sur sélection du bon système de fichier et format de disquette, de naviguer dans l'arborescence de fichiers et d'en extraire le contenu.

Latest revision as of 23:12, 20 November 2019

Montage beaglefloppy.jpg

Gamin, j'étais l'heureux propriétaire d'un Amiga sur lequel je passais beaucoup de temps à dessiner et développer des bricoles en GFA Basic (et, soyons honnêtes, à jouer...).

J'ai remis la main sur celui-ci mais, à ma grande tristesse, il ne fonctionne plus : la pile qui permettait de maintenir l'horloge à l'heure s'est répandue sur la carte mère et a rongé les circuits au-delà de mes compétences en réparation (ou de ma patience). Restait un carton rempli de disquettes dont je souhaitais bien récupérer le contenu.

Inspiré par une idée de Christian Zietz, j'ai entrepris de réaliser un petit montage électronique autour d'une BeagleBone Black accompagné d'un logiciel dédié pour extraire le contenu de mes disquettes. À la différence du projet dont je me suis inspiré, je n'ai pas eu recours à un analyseur logique pour l'acquisition du flux brut provenant du lecteur de disquettes mais j'ai exploité à cette fin les co-processeurs PRU de la BeagleBone, grâce à l'excellent package logiciel beaglelogic. Les GPIO de la BeagleBone ont également été mis à profit pour contrôler le lecteur de disquette (déplacement de la tête, sélection de la face à lire).

Ce projet doit permettre, moyennant peut-être quelques petits changements, la préservation du contenu de disquettes d'à-peu-près n'importe quel format.

Il faut savoir que les disquettes Amiga utilisaient un format de modulation dérivé de MFM que les contrôleurs de lecteur de disquette de PC sont incapables de décoder (indépendamment du système de fichiers AFS ou FFS, que Linux par exemple sait très bien lire), d'où la nécessité d'un montage électronique ad-hoc.

Pour autant, un lecteur de disquette 3.5" de PC convient pour le montage (c'est le contrôleur côté carte mère de PC qui ne convient pas). Si on emploie un lecteur haute densité comme ce que l'on trouve la plupart du temps, il faudra veiller à ce que les disquettes à préserver ne soient pas des disquettes HD formatées en DD (double densité). Cela était monnaie courante sur Amiga à une époque où les disquettes DD avaient disparu du marché, les lecteurs DD acceptant volontiers d'utiliser des disquettes HD (mais avec les niveaux électriques adaptés à une disquette DD). Il sera nécessaire de boucher le trou des disquettes HD formatées en DD avec un morceau de scotch pour forcer un lecteur HD à utiliser les niveaux électriques adaptés à un format DD.

Câblage

Un lecteur de disquette s'attend à ce que ses entrées soient reliées sur des sorties collecteur-ouvert du circuit qui le contrôle. Pour cette raison, il est nécessaire de passer par un buffer open-collector entre les sorties de la BeagleBone et les entrées du lecteur de disquette à câbler. Une référence classique pour adapter les sorties de la BeagleBone est un circuit intégré 7407.

Les sorties du lecteur de disquette sont des sorties collecteur-ouvert. Elle peuvent être reliées aux entrées de la BeagleBone en direct, chacune accompagnée d'une résistance de pull-up de 1K Ohms environ vers l'alim 3.3V de la BeagleBone (P9_3).

Il sera nécessaire d'alimenter le lecteur de disquette avec une alimentation 5V suffisante. NB : le 12V n'est typiquement pas requis.

Une alimentation 5V capable de fournir 2 ou 3A devrait suffire à alimenter le lecteur de disquette et la BeagleBone.

Le câblage est le suivant :

  • P9_11 (GPIO_30) ---[buffer]---> floppy pin 32 (SIDE1)
  • P9_13 (GPIO_31) ---[buffer]---> floppy pin 18 (DIR)
  • P9_15 (GPIO_48) ---[buffer]---> floppy pin 20 (STEP)
  • P9_12 (GPIO_60) <---[1K pullup vers P9_3]--- floppy pin 26 (TRK00)
  • GND ------> floppy pin 10 (MOTEA)
  • GND ------> floppy pin 14 (DRVSA)

Le câblage suivant doit être amovible et sera a effectuer après boot de la BeagleBone :

  • P8_39 (GPIO_76) <------ DGND
  • P8_40 (GPIO_77) <------ DGND
  • P8_41 (GPIO_74) <------ DGND
  • P8_42 (GPIO_75) <------ DGND
  • P8_43 (GPIO_72) <------ DGND
  • P8_44 (GPIO_73) <------ DGND
  • P8_45 (GPIO_70) <---[1K pullup vers P9_3]--- floppy pin 30 (RDATA)
  • P8_46 (GPIO_71) <---[1K pullup vers P9_3]--- floppy pin 8 (INDEX)

Extraction d'une image de flux brut au format SuperCard Pro

L'extraction d'une image brute de disquette demande de disposer du logiciel beaglelogic sur la BeagleBone. Le plus simple est de flasher une carte mémoire avec une image pré-installée comme celle disponible ici : https://github.com/abhishek-kakkar/BeagleLogic/wiki/BeagleLogic-%22no-setup-required%22-setup:-Introducing-System-Image!

Récupérer ensuite le code source C de l'outil d'extraction sur le dépôt GitHub du projet : https://github.com/Shadocko/beaglefloppy

Compiler à l'aide de la commande suivante :

   gcc beaglefloppy.c -o beaglefloppy

Pour extraire une image, rien de plus facile : insérer la disquette dans le lecteur puis, en tant que root, lancer la commande qui suit

   ./beaglefloppy image.scp

L'extraction de l'image prend aux environs de 6 minutes pour échantillonner 5 tours complets pour chaque piste, ce qui assure un résultat plus sûr. Les images ainsi produites pèsent entre 75 et 80Mo environ.

Récupération des fichiers ou d'une image ADF

Les fichiers image au format SuperCard Pro peuvent être exploités à l'aide d'un logiciel d'émulation MFM tel que HxC Floppy Emulator (NB : la version Windows fonctionne bien sous Wine, pourvu de disposer d'un CPU compatible x86). Après ouverture de l'image brute, il sera généralement possible d'extraire une image du système de fichier (type ADF) ou même d'extraire les fichiers contenus sur la disquette.

Hxcfloppy.png

L'interface utilisateur de HxC Floppy Emulator est plutôt explicite. Le bouton "Export" permettra de convertir l'image brute vers un autre format d'image, par exemple ADF pour utilisation dans un émulateur. Le bouton "Disk Browser" fera apparaître une fenêtre qui permettra, sur sélection du bon système de fichier et format de disquette, de naviguer dans l'arborescence de fichiers et d'en extraire le contenu.