- LA DISQUETTE -
I. Présentation
La disquette est un support magnétique. Elle est donc
constituée d'une succession de pôles nord et de pôles sud. La tête de
lecture-écriture récupère les signaux inscrits sur le support par
induction électromagnétique et inscrit les données par magnétisation du
support.
Une disquette est physiquement divisée en pistes et en
secteurs (voir schéma ci-dessous). Les pistes sont des divisions
circulaires concentriques et les secteurs des divisions angulaires. Une
disquette peut disposer aussi d'une ou de deux faces (une ou deux
têtes).
L'intersection d'une piste et d'un secteur, et cela sur
une face donnée, donne lieu à un secteur relatif. Celui-ci est la plus
petite unité d'allocation que l'on puisse disposer.
Les pistes sont numérotables de 0 à n-1 (0 étant la piste la plus extérieure), n étant le nombre maximal de pistes disponibles
sur ce support. Les secteurs sont également numérotables de 1 à i, i étant le
nombre maximal de secteurs formatés.
On peut déterminer ainsi la capacité d'une disquette
:
Capacité = nombre de têtes x nombre de pistes par face x
nombre de secteurs par piste x taille d'un secteur
relatif. |
On peut aussi calculer le nombre de secteurs relatifs
présent sur la disquette:
Nombre de secteurs = nombre de têtes x nombre de
pistes par face x nombre de secteurs par piste. |
II. Le hardware
1/ Le support
Il existe deux tailles principales de disquettes
souples sur PC : le format 3"1/2 et 5"1/4 (Le 8" est mort avant le PC).
Hormis la différence que présente leur boîtier, la principale réside en
réalité en la finesse de la granulation du matériau magnétique utilisé.
Il en est de même pour les différent types de disquettes.
Format |
Type |
Nombre de têtes |
Secteurs/ Piste |
Piste/ Face |
Secteurs / Disque |
Taille secteur relatifs |
Capacité (en Ko) |
Débit en Kbit/s |
Media descriptor |
5"1/4 |
Simple Densité |
1 |
4 |
40 |
160 |
512 |
80 |
125 |
/ |
5"1/4 |
Simple Densité |
2 |
4 |
40 |
320 |
512 |
160 |
125 |
/ |
5"1/4 |
Double Densité |
1 |
8 |
40 |
320 |
512 |
160 |
250 |
FEh |
5"1/4 |
Double Densité |
2 |
8 |
40 |
640 |
512 |
320 |
250 |
FFh |
5"1/4 |
Double Densité |
1 |
9 |
40 |
360 |
512 |
180 |
250 |
FCh |
5"1/4 |
Double Densité |
2 |
9 |
40 |
720 |
512 |
360 |
250 |
FDh |
5"1/4 |
Double Densité |
1 |
8 |
80 |
640 |
512 |
320 |
250 |
FAh |
5"1/4 |
Double Densité |
2 |
8 |
80 |
1
280 |
512 |
640 |
250 |
FBh |
5"1/4 |
Haute Densité |
2 |
15 |
80 |
2
400 |
512 |
1
200 |
500 |
F9h |
3"1/2 |
Double Densité |
1 |
8 |
80 |
640 |
512 |
320 |
250 |
FAh |
3"1/2 |
Double Densité |
2 |
8 |
80 |
1
280 |
512 |
640 |
250 |
FBh |
3"1/2 |
Double Densité |
2 |
9 |
80 |
1
440 |
512 |
720 |
250 |
F9h |
3"1/2 |
Haute Densité |
2 |
18 |
80 |
2
880 |
512 |
1
440 |
500 |
F0h |
3"1/2 |
Extra Haute Densité |
2 |
36 |
80 |
5
760 |
512 |
2
880 |
1
000 |
F0h |
3"1/2 |
LS-120 |
2 |
??? |
??? |
??? |
512 |
120
000 |
3
000 |
F8h |
??? |
ZIP 100 |
64 |
32 |
96 |
196
576 |
512 |
100
000 |
//
ou USB ? |
F8h |
??? |
ZIP 250 |
??? |
??? |
??? |
??? |
512 |
250
000 |
//
ou USB ? |
F8h |
Les principaux formats de disquettes.
Ce tableau n'est pas exhaustif. Il comporte seulement les
types de disquettes les plus couramment utilisées. Il est néanmoins
possible de surformater une disquette, c'est-à-dire amener le nombre de
pistes ou de secteurs en dehors des plages conseillées par le
constructeur. De ce fait, il est possible de réaliser des formats de
disquettes bâtards. Ceux-ci ne fonctionneront généralement que sur le PC
qui les a formater, de plus ils nécessitent un drivers pour que le DOS
puissent reconnaître le format et donc l'exploiter. Je rappelle que
l'opération du formatage consiste à créer physiquement les pistes et les
secteurs.
|
1 |
Étiquette. |
2 |
Volet de
protection. |
3 |
Protection en
écriture. |
4 |
Encoche de
détection disquette HD (Haute Densité). |
5 |
Encoche de
rotation du disque. |
6 |
Encoches de
positionnement de la disquette. |
7 |
Support
magnétique qui contient les données. |
8 |
Piste
magnétique. |
9 |
Secteur
physique. |
10 |
Secteur
relatif. |
Schéma interne et externe d'une disquette
3"1/2.
Nous avons découvert la disquette. Penchons nous
maintenant vers son lecteur.
2/ Le lecteur
Nous allons nous intéresser à son aspect électronique, son
aspect mécanique ne nous intéressant pas. La partie électronique qui
gère le lecteur disquette est très vaste. Mais parmi les plus importants
composants figure le NEC uPD765 (ou équivalent). C'est le contrôleur de
disquette qui s'est imposé comme standard depuis des années. Il est très
conseillé de baser la programmation du contrôleur de disquette sur les
fonctions du NEC 765A d'origine car tout les contrôleurs ultérieurs sont
100 % compatibles avec celui-ci.
Contrôleurs |
Marque |
Description |
uPD765A |
NEC |
Le contrôleur de disquette
d'origine. 15 commandes de lecture, écriture et formatage. |
uPD72065A |
NEC |
Amélioration du modèle précédent, 3
commandes supplémentaires pour la réinitialisation et la mise en
veille. |
uPD72065B |
NEC |
Une nouvelle commande qui détermine
la version de la puce. |
8272A |
INTEL |
Clone du 765. |
82077AA |
INTEL |
Amélioration du 8272 possédant un
mode FIFO et le support des lecteurs 2.88 Mo (8
commandes). |
82078 |
INTEL |
Totalité des commandes du 82077AA
avec le support des lecteurs bandes 2 Mbps/s et ajout de fonctions
d'identification matériel. |
Liste des principaux contrôleurs que l'on
peut trouver sur le marché.
Brochage du UPD765A de Nec et du 8272
d'Intel, 2 contrôleurs de disquette très utilisés.
III. Le Software
1/ Accés par le BIOS
Dans un chapitre
ultérieur j'aborderais la programmation directe du lecteur de disquette
qui nécessite des boucles de synchronisations complexes et la
programmation du canal DMA n°2.
N° de
sous-fonction |
Intitulé |
Description |
00h |
Réinitialisation |
Permet de réinitialiser le lecteur
en cas d'erreurs ou lors de la première utilisation. |
01h |
Lecture de l'état |
Permet de connaître l'état du
lecteur de disquette. |
02h |
Lecture |
Lit et met en mémoire un ou
plusieurs secteurs logiques. |
03h |
Écriture |
Écrit un morceau de mémoire sur un
ou plusieurs secteurs logiques. |
04h |
Vérification |
Vérifie un ou plusieurs
secteurs. |
05h |
Formatage |
Formate plusieurs pistes. |
08h |
Lecture des paramètres
disque |
Lit le bloc des paramètres
disque. |
15h |
Déterminer le type du
lecteur |
Détermine le type du lecteur. |
16h |
Détection ouverture
lecteur |
Détecte l'ouverture du
lecteur. |
17h |
Fixer format
disquette |
Fixe le format de la disquette en
fonction des formats standards. |
18h |
Fixer format
disquette |
Fixe le format de la
disquette. |
Fonctions disponibles en utilisant
l'interruption 13h du BIOS.
Pour simplifier sa programmation, le BIOS a été pourvue de
plusieurs fonctions. Celles-ci étant logées dans l'interruption n°13h.
Le DOS est également pourvue de fonctions de lecture-écriture, notamment
avec l'interruption 26h et 27h. Mais il va falloir oublier le DOS quand
on créé un système d'exploitation. Nous allons seulement détailler
les fonctions 00, 02h et 03h. Ces fonctions réalisent respectivement
l'initialisation du lecteur de disquette, la lecture de secteurs et
l'écriture de secteurs.
Fonctions |
Réinitialisation
sur lecteur disquette. |
Interruption
13h. |
Sous fonction
00h. |
Entrées |
AH |
00h |
DL |
Numéro du lecteur de
disquette. |
Sorties |
AH |
Code d'erreur si Flag
Carry. |
Flag
carry = 0 |
Pas d'erreur. AH =
0 |
Flag
carry = 1 |
Code d'erreur dans
AH. |
Remarques |
Appel de cette
fonction nécessaire lors de la première utilisation du lecteur de
disquette. |
Fonctions |
Lecture sur
lecteur disquette. |
Interruption
13h. |
Sous fonction
02h. |
Entrées |
AH |
02h |
DL |
Numéro du lecteur de
disquette. |
DH |
Numéro de face. |
CH |
Numéro de piste. |
CL |
Numéro de secteur. |
AL |
Nombre de secteurs à
lire. |
ES |
Segment du buffer. |
BX |
Offset du buffer. |
Sorties |
AH |
Code d'erreur si Flag
Carry. |
Flag
carry = 0 |
Pas d'erreur. AH =
0 |
Flag
carry = 1 |
Code d'erreur dans
AH. |
Remarques |
On ne peut lire
que des secteurs
consécutifs. |
Fonctions |
Écriture sur
lecteur disquette. |
Interruption
13h. |
Sous fonction
03h. |
Entrées |
AH |
03h |
DL |
Numéro du lecteur de
disquette. |
DH |
Numéro de face. |
CH |
Numéro de piste. |
CL |
Numéro de secteur. |
AL |
Nombre de secteurs à
lire. |
ES |
Segment du buffer. |
BX |
Offset du buffer. |
Sorties |
AH |
Code d'erreur si Flag
Carry. |
Flag
carry = 0 |
Pas d'erreur. AH =
0 |
Flag
carry = 1 |
Code d'erreur dans
AH. |
Remarques |
On ne peut
écrire que des secteurs
consécutifs. |
Détail des fonctions 00h, 02h et
03h.
Après chaque accès au lecteur de disquette par ces
fonctions, il est conseiller de vérifier le Flag Carry avec
l'instruction JC et il faut immédiatement identifier la raison de
l'erreur si erreur il y a. EX:
ReadBootSector:
;Sous-programme qui lit le secteur de boot
mov
ah,00h
;Fonction 0 de l'interruption 13h int
13h
;Exécution de l'initialisation jc
Erreur
;Si erreur alors on saute au label erreur mov
ax,0201h
;Lire un secteur à partir : mov
dx,0001h
;Du lecteur n°1 sur la face 0, mov
cx,0001h
;secteur 1 et piste 0.(Secteur de BOOT) push cs pop
es mov bx,offset Buffer ;Et
mettre le secteur lu en CS:buffer. (ES:BX) int 13h jc
Erreur ret Erreur: <
CODE A EXÉCUTER SI ERREUR >
Buffer db 512 dup
(0)
;Allocation de 512 octets pour contenir le secteur lu
Code d'erreur |
Signification |
01h |
N° de fonction
appelée non supporté. |
02h |
Marque
d'adresse non trouvée. |
03h |
Tentative
d'écriture sur un disque protégé en écriture. |
04h |
Le secteur est
introuvable. |
06h |
La disquette
est à été enlevée, changée ou n'est pas présente. |
08h |
Dépassement de
capacité du DMA. Le transfert est trop lent. |
09h |
Débordement
DMA. Un transfert est sortie d'une page de 64 Ko. |
0Ch |
Le type de
support est introuvable. |
10h |
Erreur de CRC.
Les données lus sont erronées. |
20h |
Erreur sur le
contrôleur de disquette. |
40h |
Echec de
l'opération de recherche. La piste n'a pas été trouvée. |
80h |
Erreur de
time-out. Le lecteur ne réagit pas. |
Codes d'erreur renvoyé en AH lors de
l'appel d'une fonction disquette de l'interruption 13.
2/ Accés par les ports d'E/S
3/ La Table des paramètres disque/ette (Disk
Parameter Table)
Le bios à besoin de tout une série
d'informations concernant le lecteur de disquette pour effectuer la
programmation du contrôleur. Celui-ci dispose donc en ROM d'une
table pour chaque lecteur existant et chaque format de disquette
supporté. Cette table, appelé vulgairement DPT (Disk Parameter Table) est
accessible via un pointeur situé dans le vecteur d'interruption 1Eh. A
l'adresse mémoire 0000h:1Eh*4, soit en 0000h:0078h est donc situé
l'adresse de la DPT. Il est donc possible de modifié cette adresse pour
pointer sur une nouvelle table adaptée à nos besoins !!
Le seul intérêt présenté par une
personnalisation de la DPT est d'optimiser l'accès au lecteur de
disquette ou éventuellement de gérer un lecteur particulier (2.88 Mo).
Cette table comprend 11 octets :
ADRESSE |
CONTENU |
TYPE |
EXEMPLE
(HD 3"1/2) |
00h
(bit 0 à 3) |
Temps de monté
de la tête exprimé en multiple de 16 ms. |
4 bits |
1111b |
00h
(bit 4 à 7) |
Vitesse de
progression (0Fh=1ms, 0Eh=2 ms, 0Dh=3ms...) |
4 bits |
1101b |
01h
(bit 0) |
État Dma. Ce
bit doit rester à 0, il indique que le BIOS utilise le canal DMA
n°2 pour ce lecteur. |
1 bit |
0b |
01h
(bit 1 à 7) |
Temps de
descente de la tête exprimé en multiple de 2 ms. |
7 bits |
000001b |
02h |
Temps avant
extinction moteur exprimé en multiple de 55 ms (Nombre d'appels de
l' interruption 08h). |
1 octets |
25h |
03h |
Taille du
secteur relatif. |
1 octets |
02h |
04h |
Nombre de
secteur par piste. |
1 octets |
18h |
05h |
Taille du GAP3
en lecture/écriture. |
1 octets |
1Bh |
06h |
Longueur du
transfert de données. |
1 octets |
FFh |
07h |
Taille du GAP3
en formatage. |
1 octets |
54h |
08h |
Octet utilisé
comme caractère de formatage. |
1 octets |
F6h |
09h |
Temps de repos
des têtes (ms). |
1 octets |
0Fh |
0Ah |
Temps de
montée en vitesse du moteur exprimé en multiple de 125 ms. |
1 octets |
08h |
Pour un total de 11
octets. |
Contenu de la DPT, des données sensibles
!
Peu de ces champs on d'utilité à être changé,
seul le les temps peuvent êtres raccourcis pour optimiser les accès au/x
lecteur/s. Je déconseille fortement la modification des autres données.
Malgré cela, l'accès à la DPT est très facile, voici une technique très
simple :
AccesDpt:
xor ax,ax
;Met ax à zéro
(je rappelle que xor nb,nb est toujours égal à zéro) mov
ds,ax
;initialise DS à zéro lds
si,ds:[0078h] ;Récupère l'adresse située
en 0000h:0078h dans
DS:SI,
;DS:SI pointe sur la DPT.
Pour optimiser les paramètres de la DPT il faut
réaliser une copie de cette dernière dans une partie résidente de la
mémoire (Le BIOS doit toujours y avoir accès) puis ensuite il suffit
d'altérer les paramètre à notre convenance.
TRAVAUX PRATIQUES - exercice n°2 -
Ø Exercice au
format TASM O Exercice au format
NASM
Étape n° 1 |
Téléchargez l'exercice qui correspond à votre
assembleur. |
Étape n° 2 |
Puis
complétez le programme ALTERDPT.ASM avec les valeurs qui vous
intéressent. |
Étape n° 3 |
Ø Assemblez-le avec TASM
avec la ligne de commande TASM
ALTERDPT/M4/X/T. |
O Assemblez-le avec NASM
avec la ligne de commande NASM ALTERDPT.ASM -F BIN
-O ALTERDPT.COM |
Étape n° 4 |
Ø Liez-le avec TLINK
avec la ligne de commande TLINK ALTERDPT
/X/T. |
O Pas d'opération de
linkage. |
Étape n° 4 |
Exécutez TESTDISK, le programme vous donnera un indice de
rapidité de votre lecteur. |
Étape n° 5 |
Exécuter ALTERDPT, celui-ci altérera les paramètres de la
DPT pour optimiser les accès au lecteur de disquette. |
Étape n° 8 |
Ensuite relancez encore un test avec TESTDISK et comparez
les résultats ! |
Étape n° 9 |
Si les
résultats sont satisfaisant, vous pouvez inclure la ligne <Chemin>ALTERDPT.com dans votre
autoexec.bat. A chaque démarrage, automatiquement, ALTERDPT
modifiera la DPT pour l'optimiser. |
|