Emuler un lecteur de disquette

De Kernel Fablab Lannion

Besoin

Pour remettre en route les machines cms, nous devons disposer d'une disquette. C'est le medium utilisé pour sauegarder les programmes PRECIDOT et NOVAR. Nous avons donc choisit d'd'analyser le contenu de cette disquette pour pouvoir y stocker nos circuit, puis les importer dans les machines.

Le hic , c'est qu'entrer le début du retrofit et la maintenant, nous avons changer d'ordi et n'avons plus de lecteur de disquette. Il existe bien des adaptateur SD/controller FDD, mais c'est plus marrant d'en fabriquer un nous-même, non ?

Excuse moi, mais on est en 2015 alors, c'est quoi en fait un lecteur de disquette ?

la disquette

On ne revient pas sur tous les types de disquette, ils sont bien décrits ici

Nous nous focalisons donc sur un lecteur de disquette 3 1/2.

  • capacité : 720Ko
  • nb de piste : 80
  • nombre de secteur par piste :9
  • taille d'un secteur : 512 octes
  • double face
  • débit : 250 Kb/s

Le bus

identifions les besoins d'entrées et de sorties (IO) :

déjà, le signal à utiliser est : 5V TTL

ensuite voici le schémas du bus :

Pin Name Direction Description
8 /INDEX < Index (300 rpm > freq : 5 Hz)
10-16 MOT SEL + Enable > debut de sequence
18 /DIR > indique le sens de parcours des pistes (0 decroit, 1 croit)
20 /STEP > saut de track ( deplacement de 512*9=4608 octets)
22 /WDATA > donnée à recuperer sur 24
24 /WGATE > reception donnée 250Kbit/s
26 /TRK00 < indique la première piste
28 /WPT < 0 si protection en ecriture
30 /RDATA < emission de donnée serie 250 Kb/s
32 /SIDE1 > 0 : 80 premieres pistes (0-360 Ko) 1 : 80 dernieres pistes(360-720 Ko)
34 /DSKCHG - /RDY < lecteur prêt

soit 6 pins in et 5 pins out

Le programme

ceci est un draft, une capture avec l'analyseur IKALOGIC permettra de le valider

Lecture de la disquette : Le contrôleur passe la pin 10 (ou 16) à 0 pour sélectionner le lecteur et ce durant toute l'operation. Tant que la pin 10 est à 0, le simulateur passe la pin 8 (/INDEX) à 0 pendant 5 ms toutes les 200 ms. Tant qu'il n'y a pas eu de déplacement, le simulateur laisse la pin 26 (/TRACK00) à 0.

La pin 32 indique sur quelle face on est.

si le controleur ne passe pas la pin 20 (step) à 0 pendant 40 ms, c'est qu'il veut rester sur la piste zero sinon il passe à 0 la pin 20 autant de fois qu'il veut incrémenter (pin 18 à 0) ou décrémenter (pin 18 à 1) la piste courante. 40ms à 1 indique la fin de cette séquence. Le simulateur doit, le cas échéant, repasser la pin 26 à 1 pour indiquer qu'on n'est plus sur la première piste. le simulateur modifie donc sont index en fonction.

Si le contrôleur à passé la pin 24 (/WGATE) à 0, c'est qu'il veut ecrire. LE simulateur récupere donc les infos sur la pin 22 (/WDATA) et remplace les données. sinon c'est qu'il veut lire, le simulateur émet donc les données sur la pin 30 (/RDATA)

Dans notre cas l'encodage est du MFM.