Chapitre – 9
Travailler avec des disques durs de grande taille
Travailler avec des disques durs de grande taille
Dans le chapitre précédent, nous avons discuté des fonctions du BIOS-Disk et de l'utilisation des interruptions pour accéder aux supports physiques des disques durs. Là, nous avons utilisé les fonctions INT 13H pour accéder aux disques durs.
L'interface INT 13H prend en charge de nombreuses commandes différentes telles que la lecture, l'écriture, le formatage et la vérification, etc., qui peuvent être transmises au BIOS, qui les transmet ensuite au disque dur. Parce qu'il a été utilisé par DOS pendant une longue période, INT13H a été la norme pendant de nombreuses années.
INT 13H alloue 24 bits pour la spécification de la géométrie du disque et exige que le programme appelant connaisse les paramètres spécifiques du disque dur et fournisse aux routines un adressage précis de la tête, du cylindre et du secteur pour accéder au disque.
Le BIOS utilise la géométrie du disque dur telle que configurée dans le programme de configuration du BIOS. Les 24 bits alloués par l'interface INT 13H pour la spécification de la géométrie du disque sont répartis comme suit :
- 10 bits pour le numéro de cylindre. Ainsi, la limite maximale du nombre total de cylindres peut atteindre 1024 cylindres.
- 8 bits pour le numéro de tête. Ainsi, la limite maximale du nombre total de buts est de 256.
- 6 bits pour le numéro de secteur. Ainsi, le nombre total maximal de secteurs peut atteindre 63 secteurs.
Ainsi, le nombre maximal de secteurs pris en charge par cette approche peut atteindre 1024 * 256 * 63 = 16515072.
Cela signifie que l'interface INT13H peut prendre en charge des disques contenant jusqu'à environ 16,5 millions de secteurs, ce qui, à 512 octets par secteur, donne un maximum de 8,46 Go. C'est exactement ce que je veux expliquer. Ainsi, en utilisant toutes ces fonctions ou INT 13H, nous pouvons accéder aux disques uniquement jusqu'à 8,46 Go.
C'est pourquoi, ces dernières années, les limitations de cette ancienne interface ont conduit à son abandon au profit d'une nouvelle façon d'adresser les disques durs, qui est décrite plus loin dans ce chapitre.
Tout d’abord, laissez-moi vous raconter une histoire !
Il y a onze ans, lorsque j'étais en septième année, j'ai entendu parler d'un disque dur de 42 Mo à mon école, peut-être s'agissait-il du WDA-L42 d'IBM. Il était vraiment difficile pour moi et mes amis d’imaginer une telle capacité de disque dur à cette époque.
La méthodologie INT 13H a été développée il y a une vingtaine d’années aujourd’hui. Vous pouvez maintenant voir qu’un disque dur de 8 Go était bien plus grand que ce que quiconque aurait pu imaginer, même dans ses rêves, à l’époque. Mais aujourd'hui, si nous parlons d'un disque dur de 8 Go à n'importe quel utilisateur de PC, il peut ne pas vouloir l'utiliser en disant qu'il a une petite capacité de stockage.
C'est pourquoi l'interface INT 13H a finalement épuisé son utilité dans les systèmes modernes. INT 13H utilisait 24 bits pour allouer la géométrie du disque, et malheureusement, il n'était pas possible d'étendre l'interface BIOS INT 13H existante, car si cela était fait, de nombreux anciens produits matériels et logiciels cesseraient de fonctionner, et vous pouvez comprendre que le marché informatique d'aujourd'hui ne résistera jamais à un changement aussi important lorsque des millions d'anciens produits logiciels et matériels cesseront de fonctionner.
Compte tenu de cette condition, INT 13H a été remplacé par une interface plus récente appelée extensions INT 13H. Cependant, INT 13H peut encore être utilisé par DOS et certains autres systèmes d'exploitation plus anciens, et à d'autres fins de compatibilité.
La nouvelle interface INT 13H utilise 64 bits au lieu de 24 bits pour l'adressage et autorise une taille de disque dur maximale de 9,4 * 1021 octets, ce qui correspond en réalité à 9,4 billions de gigaoctets ou 940000000000000 gigaoctets. Espérons que nous pourrons maintenant nous calmer un moment jusqu’à ce que cette limite soit franchie.
Certaines fonctions d’extension importantes pour l’interruption 13H sont décrites ci-dessous. Vous pouvez utiliser ces fonctions dans la programmation de la même manière que vous avez utilisé les fonctions INT 13H. C'est aussi la raison pour laquelle ces fonctions sont appelées extensions INT 13H.
INT 13H Prolongations :
INTERNE 13H (0x13)
Fonction 1BH (0x1B ou 27) --> Obtenir l'en-tête de production (disque fixe ESDI)
Appel avec : AH = 1BH
AL = nombre de secteurs à lire
DL = lecteur
ES:BX = Tampon pour l'en-tête de production
(liste des défauts)
Renvoie : si la fonction réussit
Drapeau de transport = clair
AH = 00X
Si la fonction échoue
Drapeau de transport = défini
AH = statut
Commentaires:
Cette fonction permet d'obtenir l'en-tête de fabrication du disque fixe. Le premier secteur lu contient l'en-tête de fabrication avec le nombre d'entrées défectueuses et le début de la carte des défauts ; les secteurs restants contiennent le reste de la carte des défauts. Le format de l'en-tête de fabrication (format d'enregistrement de la carte des défauts) est disponible dans le manuel IBM 70MB, 115MB Fixed Disk Drives Technical Reference.
INT 13H (0x13)
Fonction 1BH (0x1B ou 27) --> Obtenir un pointeur vers le bloc d'informations du disque SCSI (futur contrôleur SCSI de domaine)
Appel avec : AH = 1BH
DL = ID du disque dur
Renvoie : si la fonction réussit
Drapeau de transport = clair
AH = 01H
Si la fonction échoue
Drapeau de transport = défini
AH = statut
ES:BX = Bloc d'informations du disque SCSI
Commentaires:
Cette fonction permet d'obtenir le pointeur vers le bloc d'informations du disque SCSI. Elle définit également un indicateur non réinitialisable qui empêche l'affichage de certains messages du contrôleur.
INT 13H (0x13)
Fonction 1CH (0x1C ou 28) --> Obtenir un pointeur vers la RAM libre du contrôleur (futur contrôleur SCSI de domaine)
Appel avec : AH = 1CH
DL = ID du disque dur pour tout SCSI valide
disque dur
Renvoie : si la fonction réussit
Drapeau de transport = clair
AH = 01H
Si la fonction échoue
Drapeau de transport = défini
AH = statut
ES:BX = premier octet de RAM libre sur le contrôleur
Commentaires:
Cette fonction permet d'obtenir la mémoire RAM libre du contrôleur. ES:BX pointe vers le premier octet de mémoire RAM libre sur le contrôleur, disponible pour d'autres utilisations. ES contient le segment sur lequel réside le contrôleur. Les deux ports d'E/S mappés en mémoire du contrôleur se trouvent aux décalages 1C00H et 1E00H.
INT 13H (0x13)
Fonction 1C08H (0x1C08) --> Obtenir l'état d'achèvement de la commande (disque fixe ESDI)
Appel avec : AX = 1C08H
DL = lecteur
ES:BX = tampon pour la fin de la commande
Bloc d'état
Retour : Si la fonction réussit
Drapeau de transport = clair
AH = 01H
Si la fonction échoue
Drapeau de transport = défini
AH = statut
Commentaires:
Cette fonction est utilisée pour obtenir l'état d'achèvement de la commande. Si la fonction réussit, l'indicateur de report est effacé et si elle échoue, l'indicateur de report est défini.
INT 13H (0x13)
Fonction 1C09H (0x1C09) --> Obtenir l'état du périphérique (disque fixe ESDI)
Appel avec : AX = 1C09H
DL = lecteur
ES:BX = tampon pour le bloc d'état du périphérique
Retour : Si la fonction réussit
Drapeau de transport = clair
AH = 01H
Si la fonction échoue
Drapeau de transport = défini
AH = statut
Commentaires:
Cette fonction permet d'obtenir l'état de l'appareil. Si la fonction réussit, l'indicateur de report est effacé et si elle échoue, l'indicateur de report est défini.
INT 13H (0x13)
Fonction 1C0AH (0x1C0A) --> Obtenir la configuration du périphérique (disque fixe ESDI)
Appel avec : AX = 1C0AH
DL = lecteur
ES:BX = tampon pour l'état de configuration du lecteur
Bloc
Retour : Si la fonction réussit
Drapeau de transport = clair
AH = 01H
Si la fonction échoue
Drapeau de transport = défini
AH = statut
Commentaires:
Cette fonction permet d'obtenir la configuration du périphérique pour le disque. Si la fonction réussit, l'indicateur de report est effacé et le registre AH est 01H, sinon l'indicateur de report est défini et le registre AH renvoie l'état. Le tableau suivant montre le format du bloc d'état de configuration du lecteur ESDI :
Compenser
|
Taille
|
Description
|
00H
|
Octet
|
09H
|
01H
|
Octet
|
nombre de mots dans le bloc (06H)
|
02H
|
Octet
|
drapeaux
|
03H
|
Octet
|
nombre de secteurs de rechange par cylindre
|
04H
|
Mot double
|
nombre total de secteurs utilisables
|
08H
|
Mot
|
nombre total de cylindres
|
0AH
|
Octet
|
pistes par cylindre
|
0BH
|
Octet
|
secteurs par piste
|
INT 13H (0x13)
Fonction 1C0BH (0x1C0B) --> Obtenir la configuration de l'adaptateur (disque fixe ESDI)
Appel avec : AX = 1C0BH
ES:BX = tampon pour la configuration du contrôleur
Bloc d'état
Retour : Si la fonction réussit
Drapeau de transport = clair
AH = 01H
Si la fonction échoue
Drapeau de transport = défini
AH = statut
Commentaires:
Cette fonction est utilisée pour obtenir la configuration de l'adaptateur. Si la fonction réussit, l'indicateur de report est effacé et AH est 01H. Si elle échoue, l'indicateur de report est défini et AH renvoie l'état.
INT 13H (0x13)
Fonction 1C0CH (0x1C0C) --> Obtenir des informations POS (disque fixe ESDI)
Appel avec : AX = 1C0CH
ES:BX = tampon pour l'état des informations POS
Bloc
Retour : Si la fonction réussit
Drapeau de transport = clair
AH = 01H
Si la fonction échoue
Drapeau de transport = défini
AH = statut
Commentaires:
Cette fonction est utilisée pour obtenir les informations POS. Si la fonction réussit, l'indicateur de report est effacé et AH est 01H, si elle échoue, l'indicateur de report est défini et AH renvoie le statut.
INT 13H (0x13)
Fonction 1C0EH (0x1C0E) --> Traduire RBA en ABA (disque fixe ESDI)
Appel avec : AX = 1C0EH
CH = 8 bits inférieurs du numéro de cylindre
CL = numéro de secteur (deux bits de poids fort de
numéro de cylindre dans les bits 6 et 7)
DH = numéro de tête
DL = numéro de lecteur
ES:BX = ABA (adresse de bloc absolue)
nombre
Retour : Si la fonction réussit
Drapeau de transport = clair
AH = 01H
Si la fonction échoue
Drapeau de transport = défini
AH = statut
Commentaires:
Cette fonction convertit l'adresse de bloc relative (RBA) en adresse de bloc absolue (ABA). Si la fonction réussit, l'indicateur de report est effacé et le registre AH est 01H, sinon l'indicateur de report est défini et AH renvoie l'état.
INT 13H (0x13)
Fonction 20H (0x20 ou 32) --> Obtenir le format de support actuel (périphérique de support amovible Compaq ATAPI)
Appel avec : AH = 20H
DL = numéro de lecteur
Retour : Si la fonction réussit,
Drapeau de transport = clair
AL = type de média
AH = 00H
Si la fonction échoue,
CF = ensemble
AH = code d'erreur
Commentaires:
Cette fonction permet d'obtenir le format de support actuel. Les valeurs pour le type de support de disquette Compaq/ATAPI sont indiquées dans le tableau suivant :
Valeur
|
Médias
|
03H
|
720 Ko (1 Mo non formaté)
|
04H
|
1,44 M (2 M non formatés)
|
06H
|
2,88 M (4 M non formatés)
|
0CH
|
360K
|
0DH
|
1,2 M
|
0EH
|
Toshiba 3mode
|
0FH
|
Mode NEC 3 (1024 octets par secteurs)
|
10H
|
Périphérique de support amovible ATAPI
|
INT 13H (0x13)
Fonction 21H (0x21 ou 33) --> Lire plusieurs secteurs de disque (PS et PS/2, disques durs)
Appel avec : AH = 21H
AL = nombre de secteurs à lire
CH = octet de poids faible du numéro de cylindre 12 bits
CL = secteur de départ (bits 0 à 5) et bits 8
et 9 du cylindre (bits 6 et 7)
DH = numéro de tête (bits 0 à 5) et bits 10
et 11 du cylindre (bits 6 et 7)
DL = numéro de lecteur
ES:BX = Tampon de données à lire
Retour : Si la fonction réussit,
Drapeau de transport = clair
ES:BX = Tampon de données rempli
Si la fonction échoue,
Drapeau de transport = défini
AH = statut
Commentaires:
La fonction est utilisée pour lire plusieurs secteurs de disque à l'aide du mode de blocs multiples, qui génère une interruption uniquement après la fin du transfert d'un groupe de secteurs plutôt qu'après chaque secteur.
INT 13H (0x13)
Fonction 22H (0x22 ou 34) --> Écrire plusieurs secteurs de disque (PS et PS/2, disques durs)
Appel avec : AH = 22H
AL = nombre de secteurs à écrire
CH = octet de poids faible du numéro de cylindre 12 bits
CL = secteur de départ (bits 0 à 5) et bits 8
et 9 du cylindre (bits 6 et 7)
DH = numéro de tête (bits 0 à 5) et bits 10
et 11 du cylindre (bits 6 et 7)
DL = numéro de lecteur
ES:BX = tampon contenant les données à écrire
Retour : Si la fonction réussit,
Drapeau de transport = clair
AH = 01H
Si la fonction échoue,
Drapeau de transport = Définir
AH = Statut
Commentaires:
La fonction est utilisée pour écrire plusieurs secteurs de disque à l'aide du mode de blocs multiples, qui génère une interruption uniquement après la fin du transfert d'un groupe de secteurs plutôt qu'après chaque secteur.
INT 13H (0x13)
Fonction 22H (0x22 ou 34) --> Activer/Désactiver le cache (QuickCache II v4.20)
Appel avec : AH = 22H
AL = nouvel état (00H, si désactivé et 01H,
si activé)
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = statut
Commentaires:
Cette fonction active et/ou désactive la mise en cache de tous les lecteurs. Si la fonction réussit, le registre AX est 0000H, sinon elle renvoie le statut.
INT 13H (0x13)
Fonction 23H (0x23 ou 35) --> Définir le registre des fonctionnalités du contrôleur (PS et PS/2, disque dur)
Appel avec : AH = 23H
AL = numéro de fonction
DL = numéro de lecteur
Retour : Si la fonction réussit,
Drapeau de transport = Effacer
Si la fonction échoue,
Drapeau de transport = Définir
AH = Statut
Commentaires:
Cette fonction est utilisée pour définir le registre des fonctions du contrôleur. Si la fonction réussit, l'indicateur de report est effacé et si elle échoue, l'indicateur de report est défini et le registre AH renvoie l'état
INT 13H (0x13)
Fonction 24H (0x24 ou 36) --> Définir plusieurs modes de transfert (disque dur, PS et PS/2)
Appel avec : AH = 24H
AL = nombre de secteurs par bloc
DL = numéro de lecteur
Retour : Si la fonction réussit,
Drapeau de transport = Effacer
Si la fonction échoue,
Drapeau de transport = Définir
AH = Statut
Commentaires:
Cette fonction permet de définir le mode de transfert multiple. Si vous souhaitez désactiver le mode de transfert multiple, définissez le nombre de secteurs sur 0. La valeur maximale de la taille du bloc (par exemple 2, 4, 6, 8 et 16, etc.) dépend du type de disque dur fixe.
La valeur est stockée dans l'octet 15H de la table des paramètres du disque dur fixe créée par POST (Power On Self-Test). L'octet à l'adresse 0040H:0074H est défini sur l'état de fonctionnement. Les valeurs du numéro de fonction du disque dur PS/1 sont répertoriées dans le tableau suivant :
Valeur
|
Description
|
01H
|
Sélectionnez les transferts de données 8 bits au lieu de 16 bits
|
02H
|
Activer le cache d'écriture
|
22H
|
Écrire de la même manière, zone spécifiée par l'utilisateur
|
33H
|
Désactiver les nouvelles tentatives
|
44H
|
Définir le nombre d'octets ECC pour la lecture longue/l'écriture longue
|
54H
|
Définir les segments de cache
|
55H
|
Désactiver la fonction de prévision
|
66H
|
Désactiver le retour aux paramètres par défaut à la mise sous tension
|
77H
|
Désactiver la correction d'erreur
|
81H
|
Sélectionnez les transferts de données 16 bits (par défaut)
|
82H
|
Désactiver le cache d'écriture
|
88H
|
Activer la correction des erreurs (par défaut)
|
99H
|
Activer les nouvelles tentatives (par défaut)
|
AAH
|
Activer la prévision
|
BBH
|
Définissez la longueur ECC pour la lecture longue/écriture longue sur quatre octets
|
CCH
|
Activer le retour aux paramètres par défaut à la mise sous tension
|
DDH
|
Écrire de la même manière, sur tout le disque
|
INT 13H (0x13)
Fonction 24H (0x24 ou 36) --> Définir les secteurs (QuickCache II v4.20)
Appel avec : AX = 24H
BX = Nouveau nombre de tampons de secteur dans
cache
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction est utilisée pour définir les secteurs. Si la fonction réussit, le registre AX est 0000H, sinon AX renvoie le statut.
INT 13H (0x13)
Fonction 25H (0x25 ou 37) --> Identifier le lecteur (disque dur, PS et PS/2)
Appel avec : AH = 25H
DL = Numéro de lecteur
ES:BX = Tampon de 512 octets pour le paquet de réponse
Retour : Si la fonction réussit,
Drapeau de transport = Effacer
Tampon rempli avec le bloc d'informations du lecteur
Si la fonction échoue,
Drapeau de transport = Définir
AH = Statut
Commentaires:
Cette fonction permet d'identifier le lecteur. L'octet à l'adresse 0040h:0074h correspond à l'état de l'opération. IBM classe officiellement cette fonction comme facultative. Les champs de bits pour la configuration générale du lecteur sont indiqués dans le tableau suivant :
Morceau(x)
|
Description
|
0
|
Réservé (0)
|
1
|
Secteur dur
|
2
|
Secteurs mous
|
3
|
Non codé MFM
|
4
|
Temps de commutation de la tête supérieur à 15 ms
|
5
|
Option de contrôle du moteur de broche implémentée
|
6
|
Transmission fixe
|
7
|
Lecteur de cartouche amovible
|
8
|
Le taux de transfert du disque est inférieur ou égal à 5 Mbs
|
9
|
Le taux de transfert du disque est supérieur à 5 Mbs mais inférieur ou égal à 10 Mbs
|
10
|
Le taux de transfert du disque est supérieur à 10 Mbs
|
11
|
La tolérance de vitesse de rotation est supérieure à 0,5 %
|
12
|
Option de décalage de stroboscope de données disponible
|
13
|
Option de décalage de voie disponible
|
14
|
Écart de tolérance de vitesse de format requis
|
15
|
Réservé aux lecteurs non magnétiques (0)
|
La description du format du bloc d'informations du lecteur tel que donné dans la spécification ATA (AT Attachment) est donnée dans le tableau suivant :
Compenser
|
Taille
|
Description
|
00H
|
MOT
|
Configuration générale du lecteur
|
02H
|
MOT
|
Nombre de cylindres
|
04H
|
MOT
|
Réservé
|
06H
|
MOT
|
Nombre de têtes
|
08H
|
MOT
|
Nombre d'octets non formatés par piste
|
0AH
|
MOT
|
Nombre d'octets non formatés par secteur
|
0CH
|
MOT
|
Nombre de secteurs par piste
|
0EH
|
6 OCTETS
|
Fournisseur unique
|
14H
|
20 OCTETS
|
Numéro de série en ASCII, (0000H=non spécifié)
|
28H
|
MOT
|
Type de tampon
|
2AH
|
MOT
|
Taille du tampon par incréments de 512 octets (0000H = non spécifié)
|
2CH
|
MOT
|
Nombre d'octets ECC transmis sur les commandes longues de lecture/écriture 0000H = non spécifié
|
2EH
|
8 OCTETS
|
Révision du firmware en ASCII, 0000H=non spécifié
|
36H
|
40 OCTETS
|
Numéro de modèle en ASCII, 0000H=non spécifié
|
5EH
|
MOT
|
Bits 15-8 uniques au fournisseur, bits 7-0, (si 00H = commandes multiples de lecture/écriture non implémentées, sinon xxH = nombre maximal de secteurs pouvant être transférés par interruption sur les commandes multiples de lecture et d'écriture)
|
60H
|
MOT
|
0000H = Impossible d'effectuer une E/S Doubleword, 0001H = Peut effectuer une E/S Doubleword.
|
62H
|
MOT
|
Bit 15-9 (0 = réservé), bit 8 (1 = DMA pris en charge), bit 7-0 unique au fournisseur.
|
64H
|
MOT
|
Réservé
|
66H
|
MOT
|
Bits 15-8 Mode de synchronisation du cycle de transfert de données PIO, bits 7-0 uniques au fournisseur
|
68H
|
MOT
|
Bits 15-8 Mode de synchronisation du cycle de transfert de données DMA, bits 7-0 uniques au fournisseur
|
6AH
|
MOT
|
Bits 15-1 réservés, bit 0 (1=les champs reportés en mode traduction sont valides, 0=les champs reportés en mode traduction peuvent être valides)
|
6CH
|
MOT
|
Nombre de cylindres actuels
|
6EH
|
MOT
|
Nombre de têtes actuelles
|
70H
|
MOT
|
Nombre de secteurs actuels par piste
|
72H
|
DWORD
|
Capacité actuelle dans les secteurs
|
76H
|
>MOT
|
Réservé
|
78H
|
136 OCTETS
|
Non défini
|
100H
|
64 OCTETS
|
Fournisseur unique
|
140H
|
96 OCTETS
|
Réservé
|
INT 13H (0x13)
Fonction 25H (0x25 ou 37) --> Définir l'intervalle de vidage (QuickCache II v4.20)
Appel avec : AH = 25H
BX = Intervalle de chasse d'eau
Retour : Si la fonction réussit,
AH = 0000H
Si la fonction échoue,
AH = statut
Commentaires:
Cette fonction est utilisée pour définir l'intervalle de rinçage. Si la fonction réussit, AH est 0000H, sinon AH renvoie l'état.
INT 13H (0x13)
Fonction 26H (0x26 ou 38) --> Désinstallation de QuickCache II v4.20
Appel avec : AH = 26H
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = statut
Commentaires:
AX renvoie l'état de 0001H à 00FFH pour le vecteur d'interruption qui a été accroché par un autre TSR
INT 13H (0x13)
Fonction 27H (0x27 ou 39) --> Vérification de l'installation (QuickCache II v4.20)
Appel avec : AH = 27H
BX = 0000H
Retour : BH = Version majeure
BL = Version mineure binaire
Si installé,
AXE = 0000H
BX = Non nul
Commentaires:
Si installé, le registre AX est 0000H et BX renvoie une valeur différente de zéro.
INT 13H (0x13)
Fonction 28H (0x28 ou 40) --> Définir le démontage automatique (QuickCache II v4.20)
Appel avec : AH = 28H
AL = Nouvel État
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Appelez la fonction avec AL = 00H pour désactiver et avec AL = 01H pour activer.
INT 13H (0x13)
Fonction 29H (0x29 ou 41) --> Aucune opération (QuickCache II v4.20)
Appel avec : AH = 29H
Retour : AX = 0000H
INT 13H (0x13)
Fonction 2AH (0x2A ou 42) --> Définir la taille du tampon (QuickCache II v4.20)
Appel avec : AH = 2AH
AL = Taille du tampon
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction permet de définir la taille de la mémoire tampon. Si la fonction réussit, l'AX est 0000H, si elle échoue, l'AX renvoie le statut.
INT 13H (0x13)
Fonction 2BH (0x2B ou 43) --> Sons d'accès au lecteur (QuickCache II v4.20)
Appel avec : AH = 2BH
AL = nouvel état (00h désactivé, 01h
activé)
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Si la fonction réussit, l'AX est 0000H, en cas d'échec, l'AX renvoie l'état. Appelez la fonction avec AL = 00H pour désactiver et AL = 01H pour activer les sons d'accès au lecteur
INT 13H (0x13)
Fonction 2CH (0x2C ou 44) --> Définir l'écriture en mémoire tampon (QuickCache II v4.20)
Appel avec : AH = 2CH
AL = nouvel état
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction active ou désactive les écritures différées pour tous les lecteurs. Utilisez AH=38H pour modifier un seul lecteur. Utilisez AL = 00H pour désactiver et 01H pour activer.
INT 13H (0x13)
Fonction 2DH (0x2D ou 45) --> Définir la lecture en mémoire tampon (QuickCache II v4.20)
Appel avec : AH = 2Dh
AL = nouvel état (00h désactivé, 01h
activé)
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction active ou désactive la lecture anticipée pour tous les lecteurs. Utilisez AL = 00H pour désactiver et AL = 01H pour activer. Utilisez AH=37H pour modifier un seul lecteur.
INT 13H (0x13)
Fonction 2EH (0x2E ou 46) --> Définir le nombre de vidages (QuickCache II v4.20)
Appel avec : AH = 2EH
BX = Nombre de chasses d'eau
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction permet de définir le nombre de rinçages. Si la fonction réussit, l'AX est 0000H, si elle échoue, l'AX renvoie le statut.
INT 13H (0x13)
Fonction 2FH (0x2F ou 47) --> Forcer le vidage incrémentiel immédiat (QuickCache II v4.20)
Appel avec : AH = 2FH
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Si la fonction réussit, l'AX est 0000H, si elle échoue, l'AX renvoie le statut.
INT 13H (0x13)
Fonction 30H (0x30 ou 48) --> Obtenir des informations (QuickCache II v4.20)
Appel avec : AH = 30H
AL = Numéro d'information (voir tableau dans
(Commentaires)
DS:DX = tampon pour info
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction est utilisée pour obtenir les différents types d'informations sur le système, spécifiés par AL. Si la fonction réussit, l'AX est 0000H, si elle échoue, AX renvoie le statut. AX = 8000H indique un spécificateur d'informations non valide. Les numéros d'informations à spécifier à AL sont répertoriés dans le tableau suivant :
Valeur
|
Description
|
00H
|
Informations système
|
01H
|
Informations sur le lecteur
|
02H
|
Fréquence d'accès (Tableau de 30 mots)
|
03H
|
Index du lecteur (tableau de 32 octets indiquant le lecteur BIOS pour le lecteur DOS)
|
INT 13H (0x13)
Fonction 31H (0x31 ou 49) --> Réserve de mémoire (QuickCache II v4.20)
Appel avec : AH = 31H
BX = Nombre de paragraphes de
mémoire conventionnelle à réserver pour
Demandes.
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction permet de réserver la mémoire pour les applications. Si la fonction réussit, l'AX est 0000H, si elle échoue, l'AX renvoie le statut.
INT 13H (0x13)
Fonction 32H (0x32 ou 50) --> Activer la mise en cache pour un lecteur spécifique (QuickCache II v4.20)
Appel avec : AH = 32H
AL = numéro de lecteur
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction est utilisée pour activer la mise en cache pour un lecteur spécifique. Par exemple, appelez la fonction avec AL = 00H pour A: et ainsi de suite. Si la fonction réussit, l'AX est 0000H, si elle échoue, l'AX renvoie le statut.
INT 13H (0x13)
Fonction 33H (0x33 ou 51) --> Désactiver la mise en cache pour un lecteur spécifique (QuickCache II v4.20)
Appel avec : AH = 33H
AL = numéro de lecteur
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction est utilisée pour désactiver la mise en cache pour un lecteur spécifique. Par exemple, appelez la fonction avec AL = 00H pour A: et ainsi de suite. Si la fonction réussit, l'AX est 0000H, si elle échoue, l'AX renvoie le statut.
INT 13H (0x13)
Fonction 34H (0x34 ou 52) --> Verrouiller/Déverrouiller le(s) secteur(s) (QuickCache II v4.20)
Appel avec : AH = 34H
AL = Numéro de fonction de verrouillage/déverrouillage
(Voir le tableau donné dans les commentaires)
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction est utilisée pour appeler les fonctions de verrouillage/déverrouillage des secteurs, spécifiés par AL. Si la fonction réussit, l'AX est 0000H, si elle échoue, l'AX renvoie le statut. Les différents numéros de fonctions à appeler avec AL sont indiqués dans le tableau suivant :
Valeur
|
Fonction
|
00H
|
Verrouillage/déverrouillage du secteur final
|
01H
|
Verrouiller tous les secteurs accessibles dans le cache
|
02H
|
Déverrouiller tous les secteurs accessibles et les supprimer du cache
|
INT 13H (0x13)
Fonction 35H (0x35 ou 53) --> Définir la taille du pool de verrouillage (QuickCache II v4.20)
Appel avec : AH = 35H
BX = Nombre de secteurs dans le pool de verrouillage
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction est utilisée pour définir la taille du pool de verrouillage. Si la fonction réussit, l'AX est 0000H, si elle échoue, l'AX renvoie le statut.
INT 13H (0x13)
Fonction 36H (0x36 ou 54) --> Définir la taille du tampon de trace
Appel avec : AH = 36H
AL = Nouvelle taille du tampon de trace
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction est utilisée pour définir la taille du tampon de trace. Si la fonction réussit, l'AX est 0000H, si elle échoue, l'AX renvoie le statut. Cette fonction est généralement appelée avec la fonction 24H de INT 13H avec AL=05H.
INT 13H (0x13)
Fonction 37H (0x37 ou 55) --> Définir les lectures en mémoire tampon pour un lecteur spécifique (QuickCache II v4.20)
Appel avec : AH = 37H
AL = Nouvel état
DL = Numéro de lecteur
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction est utilisée pour définir des lectures en mémoire tampon pour un lecteur spécifique. Si AL = 00H, l'état est activé, sinon désactivé. Si la fonction réussit, l'AX est 0000H, en cas d'échec, l'AX renvoie l'état.
INT 13H (0x13)
Fonction 38H (0x38 ou 56) --> Définir les écritures en mémoire tampon pour un lecteur spécifique (QuickCache II v4.20)
Appel avec : AH = 38H
AL = Nouvel état
DL = Numéro de lecteur
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction est utilisée pour définir les écritures en mémoire tampon pour un lecteur spécifique. Si AL = 00H, l'état est activé, sinon désactivé. Si la fonction réussit, l'AX est 0000H, si elle échoue, AX renvoie l'état.
INT 13H (0x13)
Fonction 39H (0x39 ou 57) --> Définir la taille du tampon de lecture pour un lecteur spécifique (QuickCache II v4.20)
Appel avec : AH = 39H
AL = Nouvelle taille du tampon de lecture
DL = Numéro de lecteur
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction permet de définir la taille du tampon de lecture pour un lecteur spécifique, par exemple DL = 00H pour A:, etc. Si la fonction réussit, l'AX est 0000H, si elle échoue, l'AX renvoie le statut.
INT 13H (0x13)
Fonction 3AH (0x3A ou 58) --> Définir la taille du tampon d'écriture pour un lecteur spécifique (QuickCache II v4.20)
Appel avec : AH = 3AH
AL = Nouvelle taille du tampon d'écriture
DL = Numéro de lecteur
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction est utilisée pour définir la taille du tampon d'écriture pour un lecteur spécifique, par exemple DL = 00H pour A:, etc. Si la fonction réussit, l'AX est 0000H, si elle échoue, l'AX renvoie le statut.
INT 13H (0x13)
Fonction 3DH (0x3D ou 61) --> Activer/désactiver le rinçage du cylindre pour le lecteur (QuickCache II v4.20)
Appel avec : AH = 3DH
AL = Nouvel état
DL = numéro de lecteur
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction est utilisée pour activer/désactiver le rinçage du cylindre pour un entraînement spécifique tel que DL = 00H pour A : et ainsi de suite. Si la fonction réussit, l'AX est 0000H, si elle échoue, l'AX renvoie l'état. Si le registre AL est défini sur 01H, l'état est activé, sinon désactivé.
INT 13H (0x13)
Fonction 3EH (0x3E ou 62) --> Définir le bonus sur un seul secteur (QuickCache II v4.20)
Appel avec : AH = 3EH
AL = Nouvelle valeur pour le bonus
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction permet de définir le bonus d'un seul secteur. Si la fonction réussit, l'AX est 0000H, si elle échoue, l'AX renvoie le statut.
INT 13H (0x13)
Fonction 3FH (0x3F ou 63) --> Définir le seuil de bonus (QuickCache II v4.20)
Appel avec : AH = 3FH
AL = Nouvelle valeur pour le seuil de bonus
Retour : Si la fonction réussit,
AXE = 0000H
Si la fonction échoue,
AX = Statut
Commentaires:
Cette fonction est utilisée pour définir le seuil de bonus. Si la fonction réussit, l'AX est 0000H, si elle échoue, l'AX renvoie le statut
INT 13H (0x13)
Fonction 41H (0x41 ou 65) --> Vérification de l'installation (extensions IBM/MS INT 13H)
Appel avec : AH = 41H
BX = 55AAH
DL = Numéro de lecteur (80H-FFH)
Retour : si les extensions sont prises en charge et fonctionnent correctement,
Drapeau de transport = Effacer
BX = AA55H
AH = Version majeure des extensions (Voir la
tableau dans les commentaires)
AL = Usage interne
CX = bitmap de support de sous-ensemble d'API (voir le
Tableau dans les commentaires)
DH = Version d'extension (v2.0 et ultérieure)
Si l'extension n'est pas prise en charge ou si la fonction échoue,
Drapeau de transport = défini
AH = 01H (Fonction non valide)
Commentaires:
Cette fonction vérifie si les extensions IBM/MS INT 13H sont installées et prises en charge. Les valeurs des versions principales des extensions sont indiquées dans le tableau suivant :
Valeur
|
Version principale de l'extension
|
01H
|
1.x
|
20H
|
2.0 / EDD-1.0
|
21H
|
2.1 / EDD-1.1
|
30H
|
EDD-3.0
|
Les champs de bits pour la bitmap de support de l'API des extensions IBM/MS INT 13H ont été indiqués dans le tableau suivant :
Morceau(x)
|
Description
|
0
|
Fonctions d'accès au disque étendues (AH = 42H, 43H, 44H, 47h et 48H) prises en charge.
|
1
|
Fonctions du contrôleur de lecteur amovible (AH = 45H, 46H, 48H, 49H et INT15/AH = 52H) prises en charge.
|
2
|
Prise en charge des fonctions de lecteur de disque (EDD) améliorées (AH=48H et AH=4EH). Le tableau des paramètres de lecteur étendus est valide.
|
3-15
|
Réservé (0)
|
INT 13H (0x13)
Fonction 42H (0x42 ou 66) --> Lecture étendue (extensions IBM/MS INT 13H)
Appel avec : AH = 42H
DL = Numéro de lecteur
DS:SI = Paquet d'adresse de disque (voir le tableau dans
(commentaires)
Retour : Si la fonction réussit,
Drapeau de transport = Effacer
AH = 00H
Si la fonction échoue,
Drapeau de transport = Définir
AH = code d'erreur
Commentaires:
Cette fonction est l'extension de la fonction de lecture de disque. Si la fonction réussit, l'indicateur de report est effacé et le registre AH est 00H, sinon l'indicateur de report est défini et AH renvoie le code d'erreur. Le champ de comptage de blocs du paquet d'adresses de disque est défini sur le nombre de blocs transférés avec succès. Le format du paquet d'adresses de disque est indiqué ci-dessous :
Compenser
|
Taille
|
Description
|
00H
|
OCTET
|
Taille du paquet (10H)
|
01H
|
OCTET
|
Réservé (0)
|
02H
|
MOT
|
Nombre de blocs à transférer
|
04H
|
DWORD
|
Tampon de transfert
|
08H
|
Mot-clé
|
Numéro de bloc absolu de départ (LBA)
|
INT 13H (0x13)
Fonction 43H (0x43 ou 67) --> Écriture étendue (extensions IBM/MS INT 13H)
Appel avec : AH = 43H
AL = écriture des drapeaux (voir le tableau dans
(commentaires)
DL = numéro de lecteur.
DS:SI = paquet d'adresse de disque
Retour : Si la fonction réussit,
Drapeau de transport = clair
AH = 00H
Si la fonction échoue,
Drapeau de transport = défini
AH = code d'erreur
Commentaires:
Cette fonction est l'extension de la fonction d'écriture sur disque. Si la fonction réussit, l'indicateur de report est effacé et le registre AH est 00H, sinon l'indicateur de report est défini et AH renvoie le code d'erreur. Le champ de comptage de blocs du paquet d'adresses de disque est défini sur le nombre de blocs réussis. Les informations sur les indicateurs d'écriture pour différentes versions sont données dans le tableau suivant :
Version 1.0 et 2.0
|
Version 2.1 et ultérieure
|
Valeur
|
Description
|
Valeur
|
Description
|
Bit 0
|
Vérifier l'écriture
|
00H et 01H
|
Écrire sans vérifier
|
Morceaux 1 à 7
|
Réservé (0)
|
02H
|
Écrire avec vérifier
|
INT 13H (0x13)
Fonction 44H (0x44 ou 68) --> Vérifier les secteurs (extensions IBM/MS INT 13H)
Appel avec : AH = 44H
DL = numéro de lecteur
DS:SI = paquet d'adresse de disque
Retour : Si la fonction réussit,
Drapeau de transport = Effacer
AH = 00H
Si la fonction échoue,
Drapeau de transport = Définir
AH = code d'erreur
Commentaires:
Cette fonction est l'extension de la fonction Vérifier les secteurs. Si la fonction réussit, l'indicateur de report est effacé et le registre AH est 00H, sinon l'indicateur de report est défini et AH renvoie le code d'erreur. Le champ de comptage de blocs du paquet d'adresses de disque est défini sur le nombre de blocs réussis
INT 13H (0x13)
Fonction 45H (0x45 ou 69) --> Verrouiller/déverrouiller le lecteur (extensions IBM/MS INT 13H)
Appel avec : AH = 45H
AL = Numéro d'opération (voir le tableau dans
(commentaires)
DL = Numéro de lecteur
Retour : Si la fonction réussit,
Drapeau de transport = Effacer
AH = 00H
AL = État verrouillé (00H = Déverrouillé)
Si la fonction échoue,
Drapeau de transport = Définir
AH = Code d'erreur
Commentaires:
Cette fonction permet de verrouiller/déverrouiller le lecteur. Cette fonction doit être prise en charge pour tous les lecteurs amovibles numérotés 80H ou plus. Jusqu'à 255 verrous peuvent être placés sur un lecteur, et le support ne sera pas physiquement déverrouillé tant que tous les verrous n'auront pas été supprimés.
Si la fonction réussit, l'indicateur de report est effacé et le registre AH est 00H, sinon l'indicateur de report est défini et AH renvoie le code d'erreur.
Les numéros d'opération pour les différentes opérations de verrouillage/déverrouillage du lecteur sont indiqués dans le tableau suivant :
Valeur
|
Fonction
|
00H
|
Verrouiller le support dans le lecteur
|
01H
|
Déverrouiller les médias
|
02H
|
Vérifier l'état du verrou
|
INT 13H (0x13)
Fonction 46H (0x46 ou 70) --> Éjecter le support (extensions IBM/MS INT 13H)
Appel avec : AH = 46H
AL = 00H (réservé)
DL = Numéro de lecteur
Retour : Si la fonction réussit,
Drapeau de transport = Effacer
AH = 00H
Si la fonction échoue,
Drapeau de transport = Définir
AH = code d'erreur
Commentaires:
Cette fonction permet d'éjecter le support. Si la fonction réussit, l'indicateur de report est effacé et le registre AH est 00H, sinon l'indicateur de report est défini et AH renvoie le code d'erreur.
INT 13H (0x13)
Fonction 47H (0x47 ou 71) --> Recherche étendue (extensions IBM/MS INT 13H)
Appel avec : AH = 47H
DL = Numéro de lecteur
DS:SI = Paquet d'adresse de disque
Retour : Si la fonction réussit,
Drapeau de transport = Effacer
AH = 00H
Si la fonction échoue,
Drapeau de transport = Définir
AH = code d'erreur
Commentaires:
Cette fonction est l'extension de la fonction de recherche. Si la fonction réussit, l'indicateur de report est effacé et le registre AH est 00H, sinon l'indicateur de report est défini et AH renvoie le code d'erreur. Le champ de comptage de blocs du paquet d'adresses de disque est défini sur le nombre de blocs réussis.
INT 13H (0x13)
Fonction 48H (0x48 ou 72) --> Obtenir les paramètres du lecteur (extensions IBM/MS INT 13H)
Appel avec : AH = 48H
DL = Conduite (80H-FFH)
DS:SI = Tampon pour les paramètres du lecteur
Retour : Si la fonction réussit,
Drapeau de transport = Effacer
AH = 00H
DS:SI = Tampon rempli
Si la fonction échoue,
Drapeau de transport = Définir
AH = Code d'erreur
Commentaires:
Cette fonction est utilisée pour obtenir les paramètres du variateur. Si la fonction réussit, le drapeau de report est effacé et le registre AH est 00H avec DS:SI de tampon rempli, sinon le drapeau de report est défini et AH renvoie le code d'erreur.
INT 13H (0x13)
Fonction 49H (0x49 ou 73) --> Changement de support étendu (extensions IBM/MS INT 13H)
Appel avec : AH = 49H
DL = Numéro de lecteur (n'importe quel numéro de lecteur, voir
(Commentaires)
Retour : Si le support n'a pas été modifié,
Drapeau de transport = Effacer
AH = 00H
Si les supports ont pu être modifiés,
Drapeau de transport = Définir
AH = 06H (Code d'erreur pour le changement de support)
Commentaires:
Cette fonction est l'extension de la fonction de changement de support. Si la fonction réussit, l'indicateur de report est effacé et le registre AH est 00H, sinon l'indicateur de report est défini et AH renvoie le code d'erreur.
La principale différence entre cette fonction et la fonction AH = 16H de INT 13H est que nous pouvons spécifier n'importe quel numéro de lecteur, où la fonction 16H autorise uniquement les numéros de lecteur 00H à 7FH de disquettes.
INT 13H (0x13)
Fonction 4AH (0x4A ou 74) --> Lancer l'émulation du disque (CD-ROM amorçable)
Appel avec : AH = 4AH
AL = 00H
DS:SI = Paquet de spécifications (voir le tableau dans les commentaires)
Retour : Si la fonction réussit,
Drapeau de transport = Effacer
Si la fonction échoue,
Drapeau de transport = Définir
AX = Code d'état
Commentaires:
Cette fonction est utilisée pour lancer l'émulation du disque. Si la fonction réussit, l'indicateur de report est effacé, sinon l'indicateur de report est défini et le registre AX renvoie un code d'état et le lecteur ne sera pas en mode émulation.
Le format du paquet de spécifications du CD-ROM de démarrage est indiqué dans le tableau suivant :
Compenser
|
Taille
|
Description
|
00H
|
OCTET
|
Taille du paquet en octets (13H)
|
01H
|
OCTET
|
Type de support de démarrage
|
02H
|
OCTET
|
Numéro de lecteur
Numéro de lecteur
|
Description du lecteur
|
00H
|
Image de disquette
|
80H
|
Disque dur bootable
|
81H à FFH
|
Non bootable ou pas d'émulation
|
|
03H
|
OCTET
|
Numéro de contrôleur de CD-ROM
|
04H
|
DWORD
|
Adresse du bloc logique de l'image disque vers Emu
|
08H
|
MOT
|
Spécifications de l'appareil
Valeur
|
Description
|
(IDE) Bit 0
|
Le lecteur est esclave au lieu d'être maître
|
(SCSI) Bits 0 à 7
|
LUN (numéro d'unité logique) et PUN (numéro d'unité physique)
|
Morceaux 8 à 15
|
Numéro de bus
|
|
0AH
|
MOT
|
Segment de tampon de 3 Ko pour la mise en cache des lectures de CD-ROM
|
0CH
|
MOT
|
Charger le segment pour l'image de démarrage initiale (si 0000H, charger au segment 07C0H)
|
0EH
|
MOT
|
Nombre de secteurs virtuels de 512 octets à charger (valable uniquement pour la fonction 4CH de INT 13H)
|
10H
|
OCTET
|
Octet faible du nombre de cylindres (pour la fonction 08H de INT 13H)
|
11H
|
OCTET
|
Nombre de secteurs, bits élevés du nombre de cylindres (pour la fonction 08H de INT 13H)
|
12H
|
OCTET
|
Effectif (pour la Fonction 08H de INT 13H)
|
Les champs de bits pour le type de support de démarrage CD-ROM amorçable ont été indiqués dans le tableau suivant :
Morceau(x)
|
Description
|
3-0
|
Type de média
Valeur
|
Description
|
0000
|
Aucune émulation.
|
0001
|
Disquette de 1,2 Mo.
|
0010
|
Disquette 1,44M.
|
0011
|
Disquette 2,88M.
|
0100
|
Disque dur (lecteur C:)
|
Autre
|
Réservé
|
|
5-4
|
Réservé (0)
|
6
|
L'image contient le pilote ATAPI
|
7
|
L'image contient des pilotes SCSI
|
INT 13H (0x13)
Fonction 4B00H (0x4B00) --> Terminer l'émulation du disque (CD-ROM amorçable)
Appel avec : AX = 4B00H
DL = Numéro de lecteur (ou 7FH pour terminer
toutes les émulations)
DS:SI = Paquet de spécifications vide
Retour : Si la fonction réussit,
Drapeau de transport = Effacer
Si la fonction échoue,
Drapeau de transport = Définir
AX = Code d'état
DS:SI = Paquet de spécifications rempli
Commentaires:
Cette fonction est utilisée pour terminer l'émulation du disque. Si vous souhaitez terminer toutes les émulations, appelez la fonction avec DL = 7FH. Si la fonction réussit, l'indicateur de report est effacé, sinon l'indicateur de report est défini et le registre AX renvoie le code d'état et le lecteur reste en mode émulation.
INT 13H (0x13)
Fonction 4B01H (0x4B01) --> Obtenir l'état (CD-ROM amorçable)
Appel avec : AX = 4B01H
DL = Numéro de lecteur
DS:SI = Paquet de spécifications vide
Retour : Si la fonction réussit,
Drapeau de transport = Effacer
Si la fonction échoue,
Drapeau de transport = Définir
AX = Code d'état
DS:SI = Paquet de spécifications rempli
Commentaires:
La fonction est utilisée pour obtenir l'état. Si la fonction réussit, l'indicateur de report est effacé, sinon l'indicateur de report est défini et le registre AX renvoie le code d'état
INT 13H (0x13)
Fonction 4CH (0x4C ou 76) --> Lancer l'émulation du disque et le démarrage (CD-ROM amorçable)
Appel avec : AH = 4CH
AL = 00H
DS:SI = Paquet de spécifications
Retour : Si la fonction réussit,
Rien
Si la fonction échoue,
Drapeau de transport = Définir
AX = Code d'état
Commentaires:
Cette fonction est utilisée pour lancer l'émulation du disque et démarrer le système. Si la fonction réussit, elle ne renvoie rien d'autre que l'indicateur de report défini et le registre AX renvoie le code d'état.
INT 13H (0x13)
Fonction 4D00H (0x4D00) --> Renvoyer le catalogue de démarrage (CD-ROM de démarrage)
Appel avec : AX = 4D00H
DS:SI = Paquet de commande (voir le tableau dans
(commentaires)
Retour : Si la fonction réussit,
Drapeau de transport = Effacer
Si la fonction échoue,
Drapeau de transport = Définir
AX = Code d'état
Commentaires:
Cette fonction est utilisée pour renvoyer le catalogue de démarrage. Si la fonction réussit, l'indicateur de report est effacé, sinon l'indicateur de report est défini et le registre AX renvoie le code d'état. Le format du CD-ROM de démarrage du paquet de commande « Get Boot Catalog » est indiqué dans le tableau suivant :
Compenser
|
Taille
|
Description
|
00H
|
OCTET
|
Taille du paquet en octets (08H)
|
01H
|
OCTET
|
Nombre de secteurs du catalogue de démarrage à lire
|
02H
|
DWORD
|
Tampon pour le catalogue de démarrage
|
06H
|
MOT
|
Premier secteur du catalogue de démarrage à transférer
|
INT 13H (0x13)
Fonction 4EH (0x4E ou 78) --> Définir la configuration matérielle (extensions IBM/MS INT 13H v2.1)
Appel avec : AH = 4EH
AL = Numéro de fonction (voir le tableau dans les commentaires)
DL = Numéro de lecteur
Retour : Si la fonction réussit,
Drapeau de transport = Effacer
AH = 00H
Si la fonction échoue,
Drapeau de transport = Définir
AH = code d'erreur
AL = Statut
Commentaires:
Cette fonction permet de définir la configuration matérielle. Les numéros de fonction permettant à AL d'appeler cette fonction sont indiqués dans le tableau suivant :
Valeur
|
Description
|
00H
|
Activer la prélecture
|
01H
|
Désactiver la prélecture
|
02H
|
Définir le mode de transfert PIO maximal
|
03H
|
Définir le mode PIO sur 0
|
04H
|
Définir le mode de transfert PIO par défaut
|
05H
|
Activer le mode maximum DMA INT 13H
|
06H
|
Désactiver INT 13H DMA
|
Les modes DMA et PIO s'excluent mutuellement. Par conséquent, la sélection de DMA désactive PIO pour le périphérique spécifié ou pour tous les périphériques de ce contrôleur et la sélection de PIO désactive DMA.
INT 13H (0x13)
Fonction 5001H (0x5001) --> Commande d'envoi de paquet (Spécifications de lecteur de disque améliorées v3.0)
Appel avec : AX = 5001H
DL = Numéro de lecteur
ES:BX = Paquet de commande (voir le tableau dans
(commentaires)
Retour : Si la fonction réussit,
Drapeau de transport = Effacer
AH = 00H
Si la fonction échoue,
Drapeau de transport = Définir
AH = code d'erreur
Commentaires:
Cette fonction est utilisée pour envoyer les commandes de paquets. Si la fonction réussit, l'indicateur de transport est effacé et le registre AH est 00H, sinon l'indicateur de transport est défini et AH renvoie le code d'erreur. Le format du paquet de commandes Enhanced Disk Drive Spec v3.0 a été indiqué dans le tableau suivant :
Compenser
|
Taille
|
Description
|
00H
|
MOT
|
Signature B055H
|
02H
|
OCTET
|
Longueur du paquet en octets
|
03H
|
OCTET
|
Réservé (0)
|
04H
|
N OCTETS
|
Paquet de données formaté
|
INT 13H (0x13)
Fonction 5501H (0x5501) --> Requête (Seagate ST01/ST02)
Appel avec : AX = 5501H
DH = Nombre d'octets à transférer
DL = Numéro de lecteur
ES:BX = Tampon pour les résultats
Retour
Tampon ES:BX, rempli avec les résultats de l'enquête.
Commentaires:
Cette fonction est utilisée pour envoyer une requête. Le BIOS ST01/ST02 ne renvoie aucune indication de réussite ou d'échec pour la fonction, par conséquent toutes les commandes doivent être considérées comme ayant réussi.
Le BIOS ST01/ST02 mappe toujours ses lecteurs après les lecteurs BIOS précédents sans modifier le nombre de lecteurs BIOS à 0040H:0075H. Cette commande est identique à la commande SCSI Inquiry
INT 13H (0x13)
Fonction 5502H (0x5502) --> Réservé (Seagate ST01/ST02)
INT 13H (0x13)
Fonction 5503H (0x5503) --> Définir DTQ (Qualificateur de type de périphérique) (Seagate ST01/ST02)
Appeler avec : AX = 5503H
DH = octet DTQ (voir le tableau dans
(commentaires)
DL = Numéro de lecteur
Retour : Rien
Commentaires:
Cette fonction permet de définir le DTQ (Device Type Qualifier). La fonction ne renvoie rien. Les champs de bits pour l'octet DTQ sont indiqués dans le tableau suivant :
Morceau(x)
|
Description
|
0
|
Logiciel d'installation Seagate présent
|
1
|
Le lecteur sélectionné a été installé
|
2
|
L'adaptateur hôte vérifie la parité sur le lecteur sélectionné
|
3
|
Le lecteur sélectionné est ST225N
|
4
|
Le lecteur sélectionné est couplé au ST225N/NP
|
5
|
Réservé
|
6
|
Lecteur SCSI connecté
|
7
|
Réservé
|
INT 13H (0x13)
Fonction 5504H (0x5504) --> Renvoyer l'identification (Seagate ST01/ST02)
Appeler avec : AX = 5504H
DL = Numéro de lecteur
Retour:
AXE = 4321H
BL = numéro de lecteur sélectionné (00H, 01H)
BH = nombre de lecteurs connectés à l'hôte
Adaptateur
Commentaires:
La fonction est utilisée pour renvoyer l'identification du ou des lecteurs.
INT 13H (0x13)
Fonction 5505H (0x5505) --> Têtes de parc (Seagate ST01/ST02)
Appeler avec : AX = 5505H
DL = Numéro de lecteur
DH = Sous-fonction (voir les commentaires)
Retour:
Rien
Commentaires:
Cette fonction permet de garer les têtes du disque. Elle était utilisée dans les anciens disques durs, mais les disques durs modernes n'ont pas besoin d'un programme externe pour garer leurs têtes.
La sous-fonction 00H gare les têtes (commande SCSI Stop) et la sous-fonction 01H débloque les têtes (commande SCSI Start) du disque.
INT 13H (0x13)
Fonction 5506H (0x5506) --> Parité du bus SCSI (Seagate ST01/ST02)
Appel avec : AX = 5506H
DL = Numéro de lecteur
DH = Sous-fonction Numéro (Voir
(Commentaires)
Retour:
AL = Statut (vérification de parité 00H
désactivé, vérification de parité 01H activée)
Commentaires:
Appelez la fonction avec le numéro de sous-fonction suivant pour DH :
Valeur
|
Description
|
00H
|
Désactiver le contrôle de parité
|
01H
|
Activer le contrôle de parité
|
02H
|
Renvoyer le réglage de parité actuel
|
INT 13H (0x13)
Fonction 5507H (0x5507) vers fonction 550DH (0x550D) --> Fonctions réservées (Seagate ST01/ST02)
Appel avec : AX = 5507H à AX = 550DH
Commentaires:
Ces fonctions ont été officiellement répertoriées comme « réservées »
INT 13H (0x13)
Fonction A0H (0xA0 ou 160) --> Obtenir le segment de code résident (Super PC-Kwik v3.20 et versions ultérieures)
Appel avec : AH = A0H
SI = 4358H
Retour:
AX = Segment du code résident
Commentaires:
Cette fonction permet d'obtenir le segment de code résident. AX renvoie le segment de code résident.
INT 13H (0x13)
Fonction A1H (0xA1 ou 161) --> Vider le cache (Super PC-Kwik v3.20 et versions ultérieures)
Appel avec : AH = A1H
SI = 4358H
Retour:
Drapeau de transport = Effacer
AH = 00H (v5.10)
Commentaires:
La fonction est utilisée pour vider le cache.
INT 13H (0x13)
Fonction A3H (0xA3 ou 163) --> Désactiver le cache (Super PC- Kwik v3.20 et versions ultérieures)
Appel avec : AH = A3H
SI = 4358H
Retour:
Drapeau de transport = Effacer
Commentaires:
La fonction est utilisée pour désactiver le cache.
INT 13H (0x13)
Fonction A4H (0xA4 ou 164) --> Activer le cache (Super PC-Kwik v3.20 et versions ultérieures)
Appel avec : AH = A4H
SI = 4358H
Retour:
Drapeau de transport = Effacer
Commentaires:
Cette fonction est utilisée pour activer le cache.
INT 13H (0x13)
Fonction EEH (0xEE ou 238) --> Définir l'indicateur de cylindre 1024 (SWBIOS)
Appel avec : AH = EEH
DL = Numéro de lecteur
Retour:
Drapeau de transport = Effacer
AH = 00H
Commentaires:
La fonction est utilisée pour définir l'indicateur 1024 – Cylindre. L'indicateur est effacé par tous les appels INT 13H à l'exception de AH=EEH et AH=EFH. Disk Manager prend également en charge ces appels. Cette fonction est équivalente à l'appel de la fonction AH=EFH avec CX=0400H pour le logiciel qui prend en charge cet appel.
Cette fonction est également prise en charge par HyperDisk v4.01 et versions ultérieures, et PC-Cache v5.5 et versions ultérieures, afin de permettre la mise en cache des lecteurs utilisant SWBIOS pour accéder à plus de 1024 cylindres.
INT 13H (0x13)
Fonction EFH (0xEF ou 239) --> Définir le décalage du cylindre (Ontrack Drive Rocket)
Appel avec : AH = EFH
CX = Décalage du cylindre pour le prochain appel INT 13H
DL = Numéro de lecteur
Retour:
Drapeau de transport = Effacer
AH = 00H
Commentaires:
La fonction est utilisée pour définir le décalage du cylindre. Pour les logiciels qui prennent en charge cet appel, la fonction AH=EEH équivaut à appeler cette fonction avec CX=0400H. Le décalage du cylindre est réinitialisé à 0 par tous les INT 13H appelés, à l'exception de AH=EEH et AH=EFH.
INT 13H (0x13)
Fonction F9H (0xF9 ou 249) --> Vérification de l'installation (SWBIOS)
Appel avec : AH = F9H
DL = Numéro de lecteur
Retour : Si la fonction réussit,
Drapeau de transport = Effacer
DX = Mot de Configuration (voir commentaires)
Si la fonction échoue,
Drapeau de transport = Définir
Commentaires:
Cette fonction est utilisée pour vérifier l'installation. Si la fonction réussit, l'indicateur de report est effacé et DX renvoie le mot de configuration, sinon l'indicateur de report est défini.
Le bit 15 est défini si d'autres extensions SWBIOS sont disponibles. Disk Manager prend également en charge ces appels.
INT 13H (0x13)
Fonction FEH (0xFE ou 254) --> Obtenir le nombre de cylindres étendu (SWBIOS)
Appel avec : AH = FEH
DL = Numéro de lecteur
Retour:
Drapeau de transport = Effacer
DX = Nombre de cylindres au-delà de 1024
en route
Commentaires:
Cette fonction permet d'obtenir le nombre étendu de cylindres. La fonction AH = 08H de INT 13H renverra un nombre de cylindres tronqué à 1024. Le BIOS sans cette extension renverrait le nombre modulo 1024. Disk Manager prend également en charge ces appels
INT 13H (0x13)
Fonction FFH (0xFF ou 255) --> Fonction officiellement privée (BIOS IBM SurePath)
INT 13H (0x13)
Fonction FFFFH (0xFFFF) --> Définir le mode Turbo (utilitaire Turbo UNIQUE UX)
Appel avec : AX = FFFFH
BH = AAH
BL = Numéro de sous-fonction (voir le tableau)
(dans les commentaires)
Retour : Si installé,
AXE = 1234H
Commentaires:
Cette fonction permet de définir le mode Turbo. Les numéros de sous-fonctions permettant d'appeler la fonction avec BL sont indiqués dans le tableau suivant :
Valeur
|
Description
|
00H
|
Vérification de l'installation
|
01H
|
Activer le mode Turbo
|
02H
|
Désactiver le mode Turbo
|
03H
|
Régler le mode Turbo en fonction du commutateur matériel
|
04H
|
Régler l’accès au disque sur le mode Turbo
|
05H
|
Définir l’accès au disque en mode normal
|
Comment utiliser les extensions INT 13H dans la programmation C
Nous pouvons appeler les fonctions d'extension de INT 13H avec les mêmes fonctions C (int86(), int86x() etc.) que celles que nous avons utilisées dans les chapitres précédents. Apprenons-le à l'aide d'un exemple.
L'exemple suivant met l'accent sur les trois fonctions (vérifier les extensions présentes, lecture étendue et écriture étendue). Cependant, nous n'utiliserons pas la fonction d'écriture étendue dans ce chapitre.
Le programme vérifie d'abord si les extensions sont prises en charge ou non, si les extensions sont présentes pour INT 13H, il lit le secteur absolu 0 (donc MBR) du disque. Le codage du programme se déroule de la manière suivante :
/* Programme pour accéder aux secteurs au-delà de 8,46 Go en utilisant les extensions BIOS INT 13 */
#include<stdio.h>
#include<dos.h>
/* Affecte l'identifiant au type de données */
typedef unsigned char Octet;
typedef unsigned int Mot;
typedef unsigned long DWord;
/* la structure disk_packet est chargée dans DS:SI et la commande est exécutée */
structure disk_packet
{
Byte size_pack; // La taille du paquet doit être 16 ou 16+
Octet réservé1; // Réservé
Octet no_of_blocks;// Nombre de blocs à transférer
Octet réservé2; // Réservé
/* Adresse dans le segment : format de décalage */
Décalage de mot ; //adresse de décalage
Segment de mot ; //adresse du segment
/* Pour prendre en charge le disque dur d'une capacité de 1152921504,607 Go */
Mot-clé lba1;
Mot-clé lba2;
}
disque_pack;
/* Fonction pour vérifier si les extensions sont prises en charge */
void check_ext_present()
{
union REGS inregs, outregs; /* Registres d'entrée et
Sortir */
inregs.h.ah=0x41; /* Fonction à vérifier
Extension Présente */
inregs.x.bx=0x55AA;
inregs.h.dl=0x80; /* Numéro de lecteur pour le premier disque dur */
int86(0x13,&inregs,&outregs); /*Interruption d'appel */
si(outregs.x.cflag)
{
/* Extension non prise en charge */
printf("\nExtension du BIOS non prise en charge");
sortie(1);
}
si(outregs.x.bx==0xAA55)
si(outregs.x.cx & 0x1)
/* Extension présente */
printf("\nE/S étendues prises en charge");
}
/* Fonction pour lire le secteur */
void read_sectors(void *buffer)
{
union REGS inregs, outregs; /* Entrée et sortie
Registres */
struct SREGS segregs; // Registres de segments
disk_pack.size_pack=16; // Définir la taille à 16
disk_pack.no_of_blocks=1; // Un bloc
disk_pack.reserved1=0; // Mot réservé
disk_pack.reserved2=0; // Mot réservé
disk_pack.segment=FP_SEG(buffer);// Segment de tampon
disk_pack.offset=FP_OFF(buffer); // Décalage du tampon
/* demande de MBR du disque dur 1 */
/* Lire le secteur absolu 0 */
disk_pack.lba1=0; /* Adresse LBA, contient le premier
32 bits */
/* Nous avons normalement besoin de disques < 2,1 To pour définir
seulement ceci */
disk_pack.lba2=0; // Dernière adresse 32 bits
inregs.h.ah=0x42; // Fonction à lire
inregs.h.dl=0x80; // Numéro de lecteur pour le premier disque dur inregs.x.si = FP_OFF(&disk_pack); /*Créer un point DS:SI
vers disk_pack */
segregs.ds = FP_SEG(&disk_pack);
/* Interruption d'appel */
int86x(0x13,&inregs,&outregs,&segregs);
si(outregs.x.cflag)
printf("\n\nErreur %d\n",outregs.h.ah);
autre
printf("\n\nJ'espère que tout va bien");
}
//// Écrire la fonction de secteur \\\\
void write_sector()
{
/* Elle sera écrite de la même manière que la fonction read_sectors, à l'exception du numéro de fonction, qui sera 0x43 dans cette fonction. Nous aborderons la fonction d'écriture étendue dans les prochains chapitres.
Avant d'utiliser cette fonction, veuillez vérifier ce que vous allez faire. Vous devez avoir une connaissance appropriée de ce que vous allez faire. L'utilisation de cette fonction par manque de connaissances ou par négligence peut détruire vos données. */
}
/// Fonction principale \\\\
void main()
{
int i=0;
/* tampon pour contenir le MBR */
Octet mbr[512];
clrscr();
/* vérifier la présence d'une extension du BIOS */
check_ext_present();
/* lire le secteur */
lire_secteurs(&mbr);
printf("\n\n Données du MBR \n");
printf("▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀\n\n\n");
tandis que(i++<512)
{
/* afficher le tampon MBR */
printf("%c",mbr[i]);
}
}
Données du MBR
Commentaires sur le codage du programme
typedef Affecte l'identifiant au type de données de telle sorte que typedef unsigned char Byte; affecte l'identifiant Byte pour le type de données char. De même, l'identifiant Word est affecté à int et DWord est affecté à long.
La structure disk_packet est chargée dans DS:SI et la commande (comme la lecture étendue, l'écriture étendue ou la vérification, etc.) est exécutée. Voir les fonctions des extensions IBM/MS INT 13H (fonction 41H à fonction 49H) données précédemment.
La fonction check_ext_present() vérifie si les extensions sont disponibles/prises en charge ou non. La fonction est appelée avec BX=55AAH (inregs.x.bx=0x55AA;) et si les extensions sont prises en charge, le registre BX est défini sur AA55H. (Voir la fonction 41H donnée précédemment)
La fonction read_sectors est utilisée pour lire le secteur absolu du disque, spécifié par disk_pack.lba1. Dans ce programme, nous avons donné disk_pack.lba1=0, nous allons donc lire le secteur absolu 0 (voir la note ci-dessous) et donc lire le MBR du disque.
La fonction write_sector est également identique à la fonction read_sectors et sera écrite de la même manière mais avec des options de fonction différentes. Nous l'utiliserons dans les prochains chapitres.
Note:
Nous lisons les secteurs du disque des deux manières suivantes :
- Lecture (ou écriture) du secteur relatif
- Lecture (ou écriture) absolue du secteur
Dans la lecture de secteurs relatifs, nous lisons les secteurs du disque conformément à la géométrie CHS (cylindre, tête et secteur) du disque. Dans la lecture de secteurs relatifs, le MBR du disque (premier secteur du disque) se trouve sur le cylindre 0, la tête 0 et le secteur 1.
Lors de la lecture absolue des secteurs du disque, nous n'avons pas besoin de spécifier les numéros de cylindre ou de tête dans notre programme. Les secteurs absolus sont comptés à partir du secteur absolu 0.
Ainsi, si nous allons lire le MBR du disque (premier secteur du disque), nous allons lire le secteur absolu 0. C'est le travail du BIOS de convertir le numéro de secteur absolu en son numéro de cylindre, de tête et de secteur correspondant.
Comme dans la lecture (ou l'écriture) de secteurs absolus, nous devons calculer uniquement les secteurs absolus dans la boucle dans les opérations telles que la lecture ou l'écriture du disque entier, alors que dans le cas de la lecture (ou de l'écriture) de secteurs relatifs, nous devons exécuter trois boucles à la fois pour calculer le CHS. Par conséquent, la lecture/écriture de secteurs absolus est beaucoup plus rapide que la lecture/écriture de secteurs relatifs.
Par exemple, si nous avons un disque dur avec 16 têtes (côtés), 12 cylindres et 63 secteurs, le tableau ci-dessous montre la procédure et la différence entre les deux méthodes de lecture et montre ainsi comment l'approche sectorielle absolue peut rendre nos programmes chronophages (tels que les programmes de lecture/écriture de disque entier ou d'effacement de disque entier, etc.) beaucoup plus rapides :
Lecture des secteurs relatifs
|
Lecture du secteur absolu
|
Cylindre = 0, Tête = 0, Secteur = 1
|
Secteur absolu = 0
|
Cylindre = 0, Tête = 0, Secteur = 2
|
Secteur absolu = 1
|
Cylindre = 0, Tête = 0, Secteur = 3
|
Secteur absolu = 2
|
.
.
.
.
|
.
.
.
.
|
Cylindre = 0, Tête = 0, Secteur = 62
|
Secteur absolu = 61
|
Cylindre = 0, Tête = 0, Secteur = 63
|
Secteur absolu = 62
|
Cylindre = 0, Tête = 1, Secteur = 1
|
Secteur absolu = 63
|
Cylindre = 0, Tête = 1, Secteur = 2
|
Secteur absolu = 64
|
Cylindre = 0, Tête = 1, Secteur = 3
|
Secteur absolu = 65
|
Cylindre = 0, Tête = 1, Secteur = 4
|
Secteur absolu = 66
|
.
.
.
.
|
.
.
.
.
|
Cylindre = 0, Tête = 1, Secteur = 63
|
Secteur absolu = 125
|
Cylindre = 0, Tête = 2, Secteur = 1
|
Secteur absolu = 126
|
Cylindre = 0, Tête = 2, Secteur = 2
|
Secteur absolu = 127
|
Cylindre = 0, Tête = 2, Secteur = 3
|
Secteur absolu = 128
|
.
.
.
.
|
.
.
.
.
|
Cylindre = 0, Tête = 15, Secteur = 63
|
Secteur absolu = 1007
|
Cylindre = 1, Tête = 0, Secteur = 1
|
Secteur absolu = 1008
|
Cylindre = 1, Tête = 0, Secteur = 2
|
Secteur absolu = 1009
|
Cylindre = 1, Tête = 0, Secteur = 3
|
Secteur absolu = 1010
|
.
.
.
.
|
.
.
.
.
|
Cylindre = 1, Tête = 0, Secteur = 63
|
Secteur absolu = 1070
|
Cylindre = 1, Tête = 1, Secteur = 1
|
Secteur absolu = 1071
|
Cylindre = 1, Tête = 1, Secteur = 2
|
Secteur absolu = 1072
|
Cylindre = 1, Tête = 1, Secteur = 3
|
Secteur absolu = 1073
|
.
.
.
.
|
.
.
.
.
|
Cylindre = 1, Tête = 15, Secteur = 63
|
Secteur absolu = 2015
|
Cylindre = 2, Tête = 0, Secteur = 1
|
Secteur absolu = 2016
|
Cylindre = 2, Tête = 0, Secteur = 2
|
Secteur absolu = 2017
|
Cylindre = 2, Tête = 0, Secteur = 3
|
Secteur absolu = 2018
|
.
.
.
.
|
.
.
.
.
|
Cylindre = 11, Tête = 15, Secteur = 60
|
Secteur absolu = 12092
|
Cylindre = 11, Tête = 15, Secteur = 61
|
Secteur absolu = 12093
|
Cylindre = 11, Tête = 15, Secteur = 62
|
Secteur absolu = 12094
|
Cylindre = 11, Tête = 15, Secteur = 63
|
Secteur absolu = 12095
|
Vous trouverez ci-dessous les informations sur la table de partition MBR affichée par n'importe quel outil d'analyse MBR sur le disque :
Affiché par n'importe quel outil d'analyse MBR sur le disque
Dans les informations ci-dessus, les numéros de secteur relatifs pour le début des deux partitions sont respectivement 63 et 11277630, ils sont exempts de partitions et sont comptés en fonction du nombre de secteurs disponibles sur le disque.