BIOSDISK |
Disque BIOS |
---|---|
Turbo C++ | bios.h |
Syntaxe
int biosdisk(int cmd, int drive, int head, int track, int sector, int nsects, void *buffer); |
Paramètres
Nom | Description |
---|---|
cmd | Ce paramètre permet d'indiquer l'opération à effectuer via INT 13h. |
drive | Ce paramètre permet d'indiquer le numéro d'unité de disque. |
head | Ce paramètre permet d'indiquer le numéro de la tête de lecture/écriture (de 0 à max-1). |
track | Ce paramètre permet d'indiquer le numéro de la piste (ou cylindre) à accéder. |
sector | Ce paramètre permet d'indiquer le numéro du secteur à lire ou écrire (commence à 1). |
nsects | Ce paramètre permet d'indiquer le nombre de secteurs à traiter (lecture ou écriture). |
buffer | Ce paramètre permet d'indiquer le pointeur vers une zone mémoire pour stocker ou envoyer les données. |
Description
Cette fonction permet d'appeler une fonction de l'interruption 13h du BIOS permettant la gestion des unités de disque.
Remarques
- biosdisk utilise l'interruption 0x13 pour transmettre les opérations de disque directement au BIOS.
- drive est un nombre spécifiant l'unité de disque à utiliser : 0 pour le premier lecteur de disquette, 1 pour le deuxième, 2 pour le troisième,... Pour les disques durs, la valeur 0x80 spécifie le premier lecteur, 0x81 le deuxième, 0x82 le troisième,...
- Pour les disques durs, c'est l'unité de disque physique étant spécifié, et non la partition du disque. Si nécessaire, l'application doit interpréter elle-même les informations de la table de partition.
- cmd indique l'opération à effectuer. Selon la valeur de cmd, les autres paramètres peuvent être nécessaires ou non.
- Voici les valeurs possibles pour cmd pour IBM PC, XT, AT ou PS/2, ou tout système compatible :
- biosdisk fonctionne sous le niveau des fichiers sur les secteurs bruts. Il peut détruire le contenu des fichiers et des répertoires d'un disque dur.
- Valeur de retour : biosdisk renvoie un octet d'état composé des bits suivants :
- 0x11 n'est pas une erreur, car les données sont correctes. La valeur est renvoyée pour permettre à l'application de décider par elle-même.
- La portabilité du biosdisk fonctionne uniquement avec les IBM PC et compatibles.
Valeur | Description |
---|---|
0 | Réinitialise le système de disque, forçant le contrôleur de lecteur à effectuer une réinitialisation matérielle. Tous les autres paramètres sont ignorés. |
1 | Renvoie l'état de la dernière opération sur le disque. Tous les autres paramètres sont ignorés. |
2 | Lit un ou plusieurs secteurs du disque en mémoire. Le premier secteur à lire est défini par la tête, la piste et le secteur. Le nombre de secteurs est indiqué par nsects. Les données sont lues, 512 octets par secteur, dans le tampon. |
3 | Écrit un ou plusieurs secteurs du disque depuis la mémoire. Le secteur de départ à écrire est défini par la tête, la piste et le secteur. Le nombre de secteurs est indiqué par nsects. Les données sont écrites, à raison de 512 octets par secteur, depuis le tampon. |
4 | Vérifie un ou plusieurs secteurs. Le secteur de départ est donné par tête, piste et secteur. Le nombre de secteurs est donné par nsects. |
5 | Formate une piste. La piste est spécifiée par head et track. buffer pointe vers une table d'en-têtes de secteurs à écrire sur la piste nommée. Consultez le Manuel de référence technique d'IBM PC pour une description de cette table et de l'opération de formatage. |
Les valeurs de commande suivantes sont autorisées uniquement pour les systèmes XT, AT, PS/2 et compatibles :
Valeur | Description |
---|---|
6 | Formate une piste et définit les indicateurs de secteurs défectueux. |
7 | Formate le lecteur à partir d'une piste spécifique. |
8 | Renvoie les paramètres actuels du lecteur. Les informations du lecteur sont renvoyées dans le tampon, dans les 4 premiers octets. |
9 | Initialise les caractéristiques de la paire de lecteurs. |
10 | Effectue une lecture longue, lisant 512 octets plus 4 octets supplémentaires par secteur. |
11 | Effectue une écriture longue, écrivant 512 octets plus 4 octets supplémentaires par secteur. |
12 | Effectue une recherche de disque. |
13 | Réinitialise le disque en alternance. |
14 | Lit le tampon de secteur. |
15 | Écrit le tampon de secteur. |
16 | Vérifie si l'unité de disque nommé est prêt. |
17 | Recalibre l'unité de disque. |
18 | Diagnostic de la RAM du contrôleur. |
19 | Diagnostic de l'unité de disque. |
20 | Diagnostic interne du contrôleur. |
Valeur | Description |
---|---|
0x00 | Opération réussie. |
0x01 | Commande incorrecte. |
0x02 | Marque d'adresse introuvable. |
x03 | Tentative d'écriture sur un disque protégé en écriture. |
0x04 | Secteur introuvable. |
0x05 | Échec de la réinitialisation (disque dur). |
0x06 | Disque modifié depuis la dernière opération. |
0x07 | Échec de l'activité des paramètres du lecteur. |
0x08 | Dépassement de capacité de l'accès direct à la mémoire (DMA). |
0x09 | Tentative d'exécution d'un accès direct à la mémoire (DMA) au-delà de la limite de 64 Ko. |
0x0A | Secteur défectueux détecté. |
0x0B | Piste incorrecte détectée. |
0x0C | Piste non prise en charge. |
0x10 | CRC/ECC incorrect lors de la lecture du disque. |
0x11 | Erreur de données corrigées CRC/ECC. |
0x20 | Échec du contrôleur. |
0x40 | Échec de l'opération de recherche. |
0x80 | Échec de la réponse de la pièce jointe. |
0xAA | Lecteur non prêt (disque dur uniquement). |
0xBB | Erreur indéfinie (disque dur uniquement). |
0xCC | Erreur d'écriture. |
0xE0 | Erreur d'état. |
0xFF | Échec de l'opération de détection. |
Exemple
- #include <bios.h>
- #include <stdio.h>
-
- int main(void) {
- #define CMD 2 /* lire la commande du secteur */
- #define DRIVE 0 /* numéro de l'unité de disque pour A: */
- #define HEAD 0 /* numéro de tête de disque */
- #define TRACK 1 /* numéro de piste */
- #define SECT 1 /* numéro de secteur */
- #define NSECT 1 /* nombre de secteurs */
-
- int result;
- char buffer[512];
-
- printf("Tentative de lecture à partir de l'unité de disque A:\n");
- result= biosdisk(CMD, DRIVE, HEAD, TRACK, SECT, NSECT, buffer);
- if(result == 0) printf("Lecture du disque depuis A: réussie.\n");
- else printf("Tentative de lecture à partir du lecteur A : échec.\n");
- return 0;
- }
Voir également
Dernière mise à jour : Dimanche, le 28 Février 2021