Les Chevaliers de Malte/Développeur - Assembleur et Pascal - Interruption 21h, Fonction 44h, Sous-fonction 0Dh: IOCTL: Contrôle d'Entrée/Sortie par bloc


00h à 07h 08h à 0Fh 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh 1Fh 20h 21h 22h 23h 24h 25h 26h 27h 28h 29h 2Ah 2Bh 2Eh 2Fh 33h 41h 4Bh 59h 5Ch 67h 7Ah 80h à F0h Rechercher


Interruption 21h

Fonction 44h, Sous-fonction 0Dh

IOCTL: Contrôle d'Entrée/Sortie par bloc

DOS 3.2+, OS/2, Windows NT


Description

Cette fonction de type IOCTL permet d'effectuer des contrôles d'Entrée/Sortie sur un périphérique de caractères orienté en bloc.


Entrée

 AX=440Dh
 BL=Code d'unité de disque (0=unité courante, 1=A:, 2=B:, 3=C:, 4=D:, 5=E:,...)
 CL=Code de fonction:
Code de fonction Description
40h Cette fonction indique de fixer les paramètres d'un périphérique.
41h Cette fonction permet d'effectuer l'écriture d'une piste.
42h Cette fonction permet d'effectuer le formattage et la vérification d'une piste.
60h Cette fonction indique de demander les paramètres d'un périphérique.
61h Cette fonction permet d'effectuer la lecture d'une piste.
62h Cette fonction permet d'effectuer la vérification d'une piste.
 DS:DX=Adresse du bloc de paramètres


Sortie

 FC=0: Tout va bien, si a été appelé avec CL=60h ou 61h, DS:DX=Adresse du bloc de paramètres
1: Erreur, dans ce cas AX=Code d'erreur

Remarques

    Voici pour les codes inférieur à 40h (fixer les paramètres d'un périphérique), et 60h (demande les paramètres d'un périphérique), le bloc de paramètres est formaté comme suit:

Offset Longueur Description
00h 1 octet Ce champs contient des fonctions spécialisés:
Bits Description
0 Ce bit indique s'il vaut 1 indique qu'il utilise le BPB courant, sinon (0) le champ de périphérique BPB contient un nouveau BPB par défaut
1 Ce bit indique s'il vaut 1 indique qu'il utilise tous les champs du bloc de paramètres, sinon (0) utilise seulement le champ de structure piste
2 Ce bit indique s'il vaut 1 indique qu'il utilise tous les secteurs de même taille sinon (0) utilise tous les secteurs de piste pouvant être de taille différente
01h 1 octet Ce champs contient le type de périphérique:
Code Description
00h Ce code indique une unité disque de 5"1/2, 320/360Ko
01h Ce code indique une unité disque de 5"1/2, 1,2 Mo
02h Ce code indique une unité disque de 3"1/2, 720 Ko
03h Ce code indique une unité disque de 8", simple densité
04h Ce code indique une unité disque de 8", double densité
05h Ce code indique une unité disque fixe
06h Ce code indique une unité disque à dérouleur de bande (TAPE)
07h Ce code indique un autre type d'unité disque
02h à 03h 2 octets Ce champs contient l'attribut de périphérique:
Bits Description
0 Ce bit indique s'il vaut 1 que le support de stockage n'est pas amovible
1 Ce bit indique s'il vaut 1 que le vérouillage de la porte est pris en charge
04h à 05h 2 octets Ce champs contient le nombre de cylindres
06h 1 octet Ce champs contient le type de support:
Code Description
0 Ce code indique un disque 5"1/2; 1,2 Mo
1 Ce code indique un disque 5"1/2; 320/360 Ko
07h à 25h 31 octets Ce champs indique le périphérique BPB
26h à ??? ? octets Ces champs indique l''organisation des pistes:
Offset Description
Mot Ce champs indique le nombre de secteurs par piste
Mot Ce champs indique le numéro du premier secteur dans la piste
Mot Ce champs indique la taille du premier secteur dans la piste
:  
Mot Ce champs indique le numéro du dernier secteur de la piste
Mot Ce champs indique la taille du dernier secteur de la piste

    Voici le champ BPB d'un périphérique structure ses données sur le disque courant et ses zones de contrôle. Ce champ est structuré de la façon suivante:

Offset Longueur Description
00h à 01h 2 octets (1 mot) Ce champs contient le nombre d'octet par secteur.
02h 1 octet Ce champs contient le nombre de secteur par unité d'allocation.
03h à 04h 2 octets (1 mot) Ce champs contient le nombre de secteur réservé au début de l'unité de disque.
05h 1 octet Ce champs contient le nombre de tables d'allocation de fichiers (FAT).
06h à 07h 2 octets (1 mot) Ce champs contient le nombre de maximum d'entrées dans le répertoire racine.
08h à 09h 2 octets (1 mot) Ce champs contient le nombre de secteurs.
0Ah 1 octet Ce champs contient le descripteur du support.
0Bh à 0Ch 2 octets (mot) Ce champs contient le nombre de secteurs par FAT.
0Dh à 0Eh 2 octets (mot) Ce champs contient le nombre de secteurs par piste.
0Fh à 10h 2 octets (mot) Ce champs contient le nombre de têtes.
11h à 14h 4 octets (double mot) Ce champs contient le nombre de secteurs cachés.
15h à 1Fh 11 octets Ce champs est réservé pour un usage interne ou futur.

    Pour les codes inférieurs 41h (écriture de caractères) et 61h (lecture d'une piste), le bloc de paramètres a le format suivant:

Offset Longueur Description
00h 1 octet Ce champs contient une fonction spécial (doit être égal à 0).
01h à 02h 2 octets (mot) Ce champs contient la tête.
03h à 04h 2 octets (mot) Ce champs contient le cylindre.
05h à 06h 2 octets (mot) Ce champs contient le secteur de début.
07h à 08h 2 octets (mot) Ce champs contient le secteur à transférer.
09h à 0Ch 2 octets (mot) Ce champs contient l'adresse du tampon de transfert.

    Pour le code inférieur 42h (formatage et vérification de piste) et 62h (vérification de piste), le bloc de paramètres est structuré comme suit:

Offset Longueur Description
00h 1 octet Ce champs contient une fonction spécial (doit être égal à 0).
01h à 02 1 octet Ce champs contient la tête.

Dernière mise à jour: Lundi, le 24 juillet 2006