Section courante

A propos

Section administrative du site

Accéder à la disquette depuis le BIOS

Un enregistreur à cassette était la principale forme d'entreposage de masse au début de l'informatique personnelle. Cependant, les unités de disquettes sont rapidement devenus la norme. Les PC peuvent contrôler un maximum de quatre unités de disque, numérotés de 0 à 3. Le DOS désigne les deux premières unités comme unité de disque A et unité de disque B.

Les premiers systèmes PC basés sur disque n'utilisaient qu'un seul côté des disques pour l'entreposage des données. Les versions 1.1 et ultérieures de DOS entreposent les données des deux côtés du disque.

Structure du disque

Chaque face d'un disque se compose de 40 pistes de 9 secteurs chacune. Chaque secteur a une capacité de 512 octets. Les pistes sont numérotées de 0 à 39. La piste 0 est située sur le bord extérieur et la piste 39 sur le bord intérieur du disque. Les deux faces du disque portent les désignations face 0 (avant) et face 1 (arrière). Ce disque a une capacité d'entreposage totale de 360 Ko.

Les unités de disque inclus avec les ordinateurs AT ont 80 pistes avec 15 secteurs au lieu de 40 pistes avec 9 secteurs. Un unité de disquette AT peut entreposer jusqu'à 1,2 mégaoctets de données par disque. Les systèmes dotés d'un unité de disque de 1,2 Mo peuvent lire à la fois des disques de 1,2 Mo et des disques de 360 Ko.

Remarque : Bien qu'il soit possible d'écrire sur des disques formatés 360 Ko à l'aide d'un unité de disque de type AT de 1,2 Mo, les disques résultants ne sont pas toujours lisibles par un unité de disque PC/XT 360K standard.

Cette structure est basée sur les spécifications DOS. Il est possible de programmer directement le contrôleur de disque ou d'utiliser les différentes fonctions du BIOS pour modifier la structure du disque. Certaines méthodes de protection contre la copie tirent parti de cette capacité pour organiser les données sur le disque de manière à ce que DOS ne puisse pas les utiliser directement.

Les méthodes de transfert de données vers ou depuis le disque sont identiques. La tête de lecture/écriture se déplace d'abord sur la bonne piste. Comme le disque bouge constamment, le secteur à traiter finit par passer par la tête, permettant le transfert de données.

Le BIOS rend certaines fonctions disponibles pour l'accès au disque au niveau le plus bas. Le BIOS pense à DASD (Direct Access Storage Device) plutôt qu'aux unités de disque.

Un total de six fonctions de disque BIOS sont accessibles en appelant l'interruption 13h et en transmettant le numéro de fonction au registre AH.

Fonction 0 : Réinitialiser le disque

La fonction 0 réinitialise l'unité de disque. La réinitialisation s'exécute toujours automatiquement lors du démarrage du système, mais doit également se produire lorsqu'une erreur se produit lors de l'appel de l'une de ces six fonctions. Avant l'appel d'interruption, la fonction numéro 0 doit être chargée dans le registre AH. Après l'exécution de la fonction, l'état d'erreur est renvoyé dans le registre AH. Une valeur indiquant le type d'erreur, le cas échéant, est renvoyée dans le registre AH après les 6 fonctions.

Si un programme appelle la fonction de réinitialisation sans que l'unité de disque signale auparavant une erreur, le code d'erreur 1 (numéro de fonction non inscrit) peut être renvoyé dans certains cas, même si aucune erreur ne s'est produite. Pour cette raison, la fonction ne doit être appelée qu'après une erreur, et non après chaque opération sur le disque.

Fonction 1 : État

La fonction 1 détecte l'état du disque sans accès au disque. S'il renvoie une valeur de 0 comme résultat, aucune erreur ne s'est produite. Une autre valeur représente l'un des codes d'erreur suivants :

Valeur Description
01h Numéro de fonction non autorisé
02h Marquage d'adresse introuvable
03h Tentative d'écriture sur disque protégé en écriture
04h Adresse secteur introuvable
06h Disque changé
08h Dépassement DMA
09h Transmission de données au-delà de la frontière du segment
10h Erreur de lecture
20h Erreur du contrôleur de disque
40h Piste introuvable
80h Erreur de dépassement de délai, le variateur ne répond pas

Si l'une de ces erreurs apparaît, l'opération de disque venant de se terminer a été répétée plusieurs fois après une réinitialisation. La plupart du temps, l'opération répétée réussit sans erreur. Si ce n'est pas le cas, le programme actuel en mémoire doit réagir à la condition d'erreur de manière appropriée et afficher un message d'erreur.

En travaillant avec les fonctions présentées ici, une erreur de temporisation peut se produire fréquemment après une opération de lecture. Cela se produit généralement en raison de la diminution de la vitesse requise pour lire le disque : L'ancienne vitesse ne peut pas être reprise immédiatement après la lecture.

Fonction 2 : Lire

La fonction 2 lit les données du disque. Le BIOS doit connaître l'emplacement à partir duquel vous souhaitez lire les données du disque. Cette information est passée dans les registres DL, DH, CL et CH :

Registre Description
DL Numéro d'unité de disque (0 à 3)
DH Côté du disque (toujours 0 pour les disques simple face)
Valeur Description
0 Face avant
1 Face arrière
CL Premier secteur à lire (1 à 9/1 à 15)
CH Piste contenant le secteur à lire

Jusqu'à 9 secteurs (unités de disque PC/XT) ou 15 secteurs (unités de disque AT) peuvent être lus à l'aide d'un seul appel de fonction. Le registre AL précise ce nombre de secteurs. Étant donné que les unités de disque entreposent généralement des données appartenant ensemble dans des secteurs séquentiels, cela permet un accès rapide aux données (par exemple, 9x512 octets = 4,5 Ko en une révolution de disque).

L'adresse d'un tampon en mémoire doit être passée dans les registres ES et BX puisque la zone de transfert de données n'a pas d'emplacement fixe en RAM dans lequel elle puisse résider. Le registre ES accepte l'adresse de segment du tampon et le registre BX accepte l'adresse de déplacement.

La fonction renvoie l'état d'erreur au registre AH et le nombre de secteurs lus dans le registre AL. En plus du registre AH, un drapeau de retenue activé (drapeau de retenue = 1) signale l'apparition d'une erreur.

Fonction 3 : Écrire

La fonction 3 permet l'accès en écriture au disque. Elle accepte des paramètres similaires à ceux utilisés dans la fonction 2 ci-dessus :

Registre Description
DL Numéro de l'unité de disque (0 à 3)
DH Côté du disque (toujours 0 pour les disques simple face)
Valeur Description
0 Face avant
1 Face arrière
CL Premier secteur à écrire (1 à 9/1 à 15)
CH Piste dans laquelle se trouve le secteur à écrire

La valeur dans le registre AL indique le nombre de secteurs à écrire, tandis que les registres ES et BX indiquent l'adresse de la zone mémoire à partir de laquelle les données doivent être lues. La fonction transmet l'état d'erreur dans le registre AH et le nombre de secteurs écrits dans le registre AL. Le drapeau de retenue a la même signification que dans la fonction 2.

Fonction 4 : vérifier le disque

La fonction 4 teste si les données sont correctement transférées vers et depuis le disque. Le BIOS base la transmission correcte des données sur une valeur de contrôle de redondance cyclique (CRC), au lieu de simplement comparer les données en mémoire avec les données sur disque. L'utilisation d'un CRC consiste à additionner la valeur de chaque octet individuel dans un secteur avec une formule spécifique. Étant donné que la plupart des unités de disque fonctionnent bien et ont une fiabilité exceptionnelle, la plupart des programmeurs ignorent cette fonction. Le DOS n'utilise cette fonction que pour tester les données ayant été transmises à un disque en réponse à un drapeau VERIFY ON actif.

La configuration du registre est similaire aux fonctions fonction 2 et fonction 3 (voir ci-dessus), à la différence que le registre AH doit contenir 4. Comme la fonction n'a pas besoin d'une adresse de tampon, cette fonction n'utilise pas les registres BX et ES.

Remarque : Cette fonction ne fonctionne correctement que sur un PC ou un XT : les AT peuvent renvoyer des résultats incorrects.

Fonction 5 : Formater

La dernière fonction de l'interruption 13h permet à l'utilisateur de formater une partie d'un disque. Le formatage du disque (par exemple, avec la commande FORMAT du DOS) est une exigence car les disques utilisés par le PC sont à secteurs logiciels. Cela signifie que le logiciel, et non le matériel, détermine le positionnement des secteurs et des pistes sur le disque. Le système d'exploitation doit installer les pistes et les secteurs sur le disque à l'aide de cette fonction. Les secteurs ne doivent pas contenir 512 octets. Cette fonction du BIOS permet de formater 128, 256, 512 ou 1024 octets par secteur. Cependant, vous devez formater une piste complète.

Le numéro de fonction (5) doit être passé dans le registre AH. Le registre AL est chargé avec le nombre de secteurs avec lesquels formater la piste. Ce nombre peut être inférieur aux valeurs par défaut du DOS de 9 ou 15. Le numéro de la piste à formater est passé dans le registre CH. Ce numéro de piste doit être une valeur comprise entre 0 et 39 (PC/XT) ou entre 0 et 79 (AT). Le numéro de l'unité de de disque est passé dans le registre DL et la face du disque dans le registre DH.

Outre ces informations, la fonction de format nécessite également un champ contenant des chartes de formatage, également nécessaire aux fonctions de lecture, d'écriture et de vérification d'un secteur. L'adresse de ce champ est passée dans les registres ES et BX. L'adresse de segment est chargée dans le registre ES et l'adresse de déplacement dans le registre BX.

Cette table contient une entrée composée de quatre octets pour chaque secteur à formater :

Position Description
Octet 1 Piste à formater
Octet 2 Côté du disque (toujours 0 pour les disques simple face) :
Valeur Description
0 Face avant
1 Face arrière
Octet 3 Numéro de secteur
Octet 4 Nombre d'octets dans ce secteur :
0 128 octets
1 256 octets
2 512 octets
3 1024 octets

Même si la fonction possède déjà le numéro de la piste à formater et la face du disque, ces éléments réapparaissent ici pour des raisons de sécurité. Les secteurs sont placés dans cette table séquentiellement, ce qui attribue au premier secteur le numéro logique 1 et au deuxième secteur le numéro logique 7.

Alors que les numéros logiques et physiques des secteurs concordent généralement dans un lecteur de disque, il est logique dans un disque dur de changer le numéro logique d'un secteur au lieu de son numéro physique. Le disque dur du XT réduit le temps d'accès pour les secteurs individuels en déplaçant les secteurs logiques par six par rapport aux secteurs physiques.

De plus, le nombre d'octets qu'un secteur peut contenir n'a pas besoin d'être uniforme, puisque chaque secteur peut être défini dans la table. Avec cela et d'autres paramètres de la table, la protection contre la copie peut être développée en fonction du formatage. La protection contre la copie basée sur le format ne peut pas être traitée par le système d'exploitation.

En plus des informations telles que l'unité de disque et le numéro de secteur transmis aux fonctions du BIOS lors d'un appel, le BIOS nécessite également une série d'autres éléments pour activer certaines opérations de disque. Ces paramètres sont passés dans la table des paramètres du périphérique. Une telle table existe dans le BIOS en ROM, mais vous pouvez installer le vôtre dans la RAM. L'adresse de la nouvelle table de paramètres du périphérique doit être placée dans les emplacements de mémoire 0000:0078 à 0000:007B. Ces emplacements mémoire doivent contenir l'adresse de l'interruption 1Eh (le PC n'utilise pas cette interruption).

Le DOS offre également la possibilité de fournir une table de paramètres de périphérique unique modifiant certaines valeurs de cette table par rapport à la valeur par défaut du BIOS, accélérant l'accès aux unités de disque.

La table elle-même se compose de 11 octets. Les deux premiers octets sont transférés directement au contrôleur de disque. Ils indiquent le temps d'un saut et le mode DMA. Le temps d'un saut est la durée maximale pendant laquelle la tête de lecture/écriture de l'unité de disque peut se déplacer d'une piste à l'autre.

Le deuxième octet indique le temps pendant lequel le moteur de l'unité de disque peut continuer à fonctionner après une opération de disque. Sa valeur par défaut est de 2 secondes, car il suppose qu'il s'agit de la durée maximale entre des accès consécutifs au disque. La vitesse d'accès au disque est plus rapide si le moteur du disque a déjà atteint sa vitesse de fonctionnement et n'a pas besoin d'être remis en vitesse. La valeur dans cet emplacement de mémoire est basée sur l'horloge système de 18 unités par seconde, ainsi, une valeur de 18 représente un temps d'exécution d'environ une seconde.

La valeur dans l'octet 3 indique le nombre d'octets par secteur pour une opération d'écriture ou de lecture. Il correspond aux valeurs de formatage d'un secteur, il contient donc normalement la valeur 3 (512 octets par secteur). Si vous souhaitez écrire ou lire des secteurs avec d'autres tailles de secteur, la valeur appropriée doit être entrée dans cet emplacement de mémoire.

L'octet 4 donne le nombre maximum de secteurs par piste. L'unité de disque PC/XT utilise par défaut la valeur 9 à cet emplacement, tandis que l'AT utilise par défaut la valeur 15 décimale.

L'octet 5 du tableau contient une valeur représentant la quantité d'espace vide entre la fin d'un secteur et le début du secteur suivant. Cet espace concerne le temps que le BIOS doit laisser s'écouler jusqu'à ce que le secteur suivant apparaisse sous la tête de lecture/écriture (pas d'unités de longueur). La valeur par défaut de cet emplacement mémoire est 42.

L'octet 6 détermine la longueur de transfert de données, qui n'a aucune influence sur la transmission de données dans la plupart des cas.

Comme le formatage d'un disque se produit par l'aimantation de certaines zones, les tailles des espaces non magnétiques entre les secteurs doivent être déterminées. L'octet 7 enregistre cela, et ces espaces doivent être plus grands que l'espace entre les secteurs dans l'octet 5 afin que le début d'un secteur puisse être reconnu correctement.

L'octet 8 accepte le code ASCII du caractère remplissant un secteur lors du formatage. Le BIOS utilise par défaut le caractère de division ÷ (code ASCII 246).

Après que la tête de lecture/écriture se soit déplacée d'une piste à l'autre, elle a besoin d'une période de repos pour laisser les vibrations liées au mouvement s'estomper. Ensuite, il peut effectuer correctement tous les accès au disque suivant.

Cette période de repos indiquée dans l'octet 9 du tableau est par défaut un multiple de 1 milliseconde. Alors que le BIOS accorde 25 millisecondes de repos, DOS n'autorise que 15 millisecondes.

La dernière entrée du tableau dans l'octet 10 donne la durée pendant laquelle le moteur du disque atteint la vitesse de fonctionnement. La valeur dans cet emplacement de mémoire est par défaut des multiples de 1/8 de seconde. Même ici, le DOS nécessite plus de la tête de lecture/écriture que le BIOS. Il ne fournit qu'une période d'attente de 1/4 seconde, par opposition à 1/2 seconde pour le BIOS.

Disques durs haute densité

Une partie de l'introduction de l'AT comprenait des unités de disque haute densité de 1,2 mégaoctet. Pour assurer la compatibilité avec les disques durs antérieurs, ils sont capables de lire et d'écrire des disques 320 Ko/360 Ko malgré l'augmentation de la capacité supérieure de 1,2 mégaoctets. Ils peuvent également reconnaître un changement de support de disque. Pour la prise en charge de cette nouvelle capacité, le BIOS d'AT contient trois nouvelles fonctions de disque étant appelées via l'interruption 13h comme les fonctions précédentes.

La première de ces nouvelles fonctions détermine le type d'unité utilisé. Lors de l'appel de fonction, en plus du numéro de fonction 15h, le numéro de l'unité de disque (0 ou 1, 2 réservé au disque dur) doit être passé dans le registre DL. La fonction renvoie le type d'unité de disque dans le registre AH :

Valeur Description
AH=0 Aucun unité de disque de disponible
AH=1 L'unité de disque ne détecte pas le changement de disque
AH=2 L'unité de disque détecte le changement de disque
AH=3 Disque dur

Si l'unité de disque détecte un changement de disque, il peut être détecté à l'aide de la fonction 16h. Après avoir appelé cette fonction en passant la valeur 16h au registre AH et le numéro de l'unité de disque (0 ou 1), la fonction retourne un numéro au registre AH indiquant si le disque a été changé depuis le dernier accès disque. Si ce registre contient la valeur 6, le disque a été changé. La valeur 0 indique qu'aucun changement n'a eu lieu.

La dernière nouvelle fonction, la fonction 17h, doit être appelée avant d'appeler la fonction de formatage (fonction numéro 5) sur les machines PC/AT ou PS/2 pour indiquer au contrôleur comment il doit formater le disque. Il doit formater le disque au format 320 Ko, 360 Ko ou 1,2 mégaoctet. Outre le numéro de fonction dans le registre AH et le numéro de l'unité de disque dans le registre DL, un code doit être transmis au registre AL indiquant non seulement le type de format, mais également le type de lecteur de disque utilisé. Ce code a la signification suivante :

Valeur Description
1 Formater en 320/360 Ko sur un lecteur 320/360K
2 Formater à 320/360 Ko sur un disque de 1,2 Mo
3 Formater à 1,2 Mo sur un lecteur de 1,2 Mo


Dernière mise à jour : Mardi, le 7 février 2023