Chapitre – 9
Manipulation de gros disques durs
Manipulation de gros disques durs
Dans le chapitre précédent, nous avons discuté des fonctions BIOS-Disk et de l'utilisation des interruptions pour accéder aux supports physiques des disques durs. Nous y 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. Utilisé depuis longtemps par DOS, INT13H est la norme depuis de nombreuses années.
L'INT 13H alloue 24 bits pour la spécification de la géométrie du lecteur et nécessite que le programme appelant connaisse les paramètres spécifiques du disque dur et fournisse l'adressage exact de la tête, du cylindre et du secteur aux routines pour permettre l'accès au disque.
Le BIOS utilise la géométrie du disque dur telle qu'elle est 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 variateur se décomposent comme suit :
- 10 bits pour le numéro de cylindre. Ainsi, la limite maximale du nombre total de cylindres peut aller jusqu'à 1 024 cylindres.
- 8 bits pour le numéro de tête. Ainsi, la limite maximale du nombre total de têtes est de 256.
- 6 bits pour le numéro de secteur. Ainsi, un total maximum de secteurs peut être jusqu'à 63 secteurs.
Ainsi, les secteurs maximum pris en charge par cette approche peuvent aller jusqu'à 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, conduit à un maximum de 8,46 Go. C'est exactement ce que je veux expliquer. Ainsi en utilisant toutes ces fonctions ou INT 13H, on peut accéder aux disques jusqu'à 8,46 Go seulement.
C'est pourquoi, ces dernières années, les limitations de cette ancienne interface ont fait qu'elle a été abandonnée au profit d'une nouvelle façon d'adresser les disques durs, comme décrit plus loin dans ce chapitre.
Tout d'abord, laissez-moi vous raconter une histoire !
Il y a onze ans, quand j'étais en septième standard, dans mon école, j'ai entendu parler du disque dur d'une capacité de 42 Mo, c'était peut-être le WDA-L42 d'IBM. C'était vraiment difficile pour moi et mes amis d'imaginer une si grande capacité de disque dur, à cette époque.
La méthodologie INT 13H a été développée il y a une vingtaine d'années à partir d'aujourd'hui. Vous pouvez maintenant comprendre qu'un disque dur de 8 Go était beaucoup plus grand pour tenir même dans les rêves de cette époque. Mais aujourd'hui, si nous parlons d'un disque dur de 8 Go à tout utilisateur d'ordinateur personnel, il n'aimera peut-être pas l'utiliser en disant qu'il a une petite capacité de stockage.
C'est la raison pour laquelle l'interface INT 13H est finalement arrivée à la fin de 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, beaucoup de matériel et de logiciels plus anciens cesseraient de fonctionner, et vous pouvez comprendre que le marché informatique d'aujourd'hui ne peut jamais supporter un changement aussi important avec des millions d'anciens produits logiciels et matériels qui cessent de fonctionner.
Gardant cette condition à l'esprit, INT 13H a été remplacé par une interface plus récente appelée extensions INT 13H. Cependant, INT 13H peut toujours ê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, soit en fait 9,4 billions de gigaoctets ou 9400000000000 gigaoctets. J'espère maintenant que nous sommes détendus pendant un certain temps jusqu'à ce que cette limite soit dépassée.
Certaines fonctions importantes de l'extension pour l'interruption 13H ont été décrites ci-dessous. Vous pouvez utiliser ces fonctions dans la programmation de la même manière que vous utilisiez les fonctions de INT 13H. C'est aussi une raison pour laquelle ces fonctions sont appelées les extensions de INT 13H.
Prolongations INT 13H :
INT 13H (0x13)
Fonction 1BH (0x1B ou 27) --> Obtenir l'en-tête de fabrication (disque fixe ESDI)
Call with: AH = 1BH
AL = number of sector(s) to read
DL = drive
ES: BX = buffer for manufacturing header
(defect list)
Returns: If function successful
Carry flag = clear
AH = 00H
If function unsuccessful
Carry flag = set
AH = status
Comments:
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 de défauts et le début de la carte des défauts ; les secteurs restants contiennent le reste de la carte des défauts. Le format d'en-tête de fabrication (format d'enregistrement de carte des défauts) se trouve dans IBM 70 Mo, 115 Mo Fixed Disk Drives Technical Reference.
INT 13H (0x13)
Fonction 1BH (0x1B ou 27) --> Obtenir le pointeur vers le bloc d'informations sur le disque SCSI (futur contrôleur SCSI de domaine)
Call with: AH = 1BH
DL = hard drive ID
Returns: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
ES:BX = SCSI disk information block
Comments:
Cette fonction est utilisée pour obtenir le pointeur vers le bloc d'informations sur le disque SCSI. Cela 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 le pointeur vers la RAM de contrôleur libre (futur contrôleur SCSI de domaine)
Call with: AH = 1CH
DL = hard drive ID for any valid SCSI
hard disk
Returns: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
ES:BX = first byte of free RAM on controller
Comments:
Cette fonction est utilisée pour obtenir le Ram du contrôleur libre. ES:BX pointe vers le premier octet de 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 sont aux décalages 1C00H et 1E00H.
INT 13H (0x13)
Fonction 1C08H (0x1C08) --> Obtenir l'état d'achèvement de la commande (disque fixe ESDI)
Call with: AX = 1C08H
DL = drive
ES:BX = buffer for Command Complete
Status Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
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 désactivé et si l'indicateur de report d'échec est défini.
INT 13H (0x13)
Fonction 1C09H (0x1C09) --> Obtenir l'état de l'appareil (disque fixe ESDI)
Call with: AX = 1C09H
DL = drive
ES:BX = buffer for Device Status Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Cette fonction est utilisée pour obtenir l'état de l'appareil. Si la fonction réussit, l'indicateur de report est désactivé et si l'indicateur de report d'échec est défini.
INT 13H (0x13)
Fonction 1C0AH (0x1C0A) --> Obtenir la configuration du périphérique (disque fixe ESDI)
Call with: AX = 1C0AH
DL = drive
ES:BX = buffer for Drive Configuration Status
Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Cette fonction est utilisée pour 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 :
Offset
|
Size
|
Description
|
00H
|
Byte
|
09H
|
01H
|
Byte
|
number of words in block (06H)
|
02H
|
Byte
|
flags
|
03H
|
Byte
|
number of spare sectors per cylinder
|
04H
|
Double Word
|
total number of usable sectors
|
08H
|
Word
|
total number of cylinders
|
0AH
|
Byte
|
tracks per cylinder
|
0BH
|
Byte
|
sectors per track
|
INT 13H (0x13)
Fonction 1C0BH (0x1C0B) --> Obtenir la configuration de l'adaptateur (disque fixe ESDI)
Call with: AX = 1C0BH
ES:BX = buffer for Controller Configuration
Status Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Cette fonction est utilisée pour obtenir la configuration de l'adaptateur. Si la fonction réussit, l'indicateur de portage est effacé et AH est 01H, si l'indicateur de portage infructueux est défini et AH renvoie le statut.
INT 13H (0x13)
Fonction 1C0CH (0x1C0C) --> Obtenir des informations sur le point de vente (disque fixe ESDI)
Call with: AX = 1C0CH
ES:BX = buffer for POS Information Status
Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Cette fonction est utilisée pour obtenir les informations POS. Si la fonction réussit, l'indicateur de portage est effacé et AH est 01H, si l'indicateur de portage infructueux est défini et AH renvoie le statut.
INT 13H (0x13)
Fonction 1C0EH (0x1C0E) --> Traduire RBA en ABA (disque fixe ESDI)
Call with: AX = 1C0EH
CH = low 8 bits of cylinder number
CL = sector number (high two bits of
cylinder number in bits 6 and 7)
DH = head number
DL = drive number
ES:BX = ABA (Absolute Block Address)
number
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Cette fonction traduit la RBA (adresse de bloc relative) en ABA (adresse de bloc absolue). Si la fonction est réussie, 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)
Call with: AH = 20H
DL = drive number
Return: If Function Successful,
Carry Flag = clear
AL = media type
AH = 00H
If Function Unsuccessful,
CF = set
AH = error code
Comments:
Cette fonction est utilisée pour obtenir le format de média actuel. Les valeurs pour le type de support de disquette Compaq/ATAPI ont été données dans le tableau suivant :
Value
|
Media
|
03H
|
720K (1M unformatted)
|
04H
|
1.44M (2M unformatted)
|
06H
|
2.88M (4M unformatted)
|
0CH
|
360K
|
0DH
|
1.2M
|
0EH
|
Toshiba 3mode
|
0FH
|
NEC 3mode (1024 bytes per sectors)
|
10H
|
ATAPI Removable Media Device
|
INT 13H (0x13)
Fonction 21H (0x21 ou 33) --> Lire plusieurs secteurs de disque (PS et PS/2, disques durs)
Call with: AH = 21H
AL = number of sectors to Read
CH = low byte of 12-bit cylinder number
CL = starting sector (bits 0 to 5) and bits 8
and 9 of cylinder (bits 6 and 7)
DH = head number (bits 0 to 5) and bits 10
and 11 of cylinder (bits 6 and 7)
DL = drive number
ES:BX = Data buffer to be read
Return: If Function Successful,
Carry flag = clear
ES:BX = Filled Data Buffer
If Function Unsuccessful,
Carry flag = set
AH = status
Comments:
La fonction est utilisée pour lire les multiples secteurs du disque en utilisant le mode bloc multiple, 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)
Call with: AH = 22H
AL = number of sectors to be written
CH = low byte of 12-bit cylinder number
CL = starting sector (bits 0 to 5) and bits 8
and 9 of cylinder (bits 6 and 7)
DH = head number (bits 0 to 5) and bits 10
and 11 of cylinder (bits 6 and 7)
DL = drive number
ES:BX = buffer containing data to be written
Return: If function Successful,
Carry Flag = clear
AH = 01H
If function Unsuccessful,
Carry Flag = Set
AH = Status
Comments:
La fonction est utilisée pour écrire les multiples secteurs de disque en utilisant le mode bloc multiple, 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)
Call with: AH = 22H
AL = new state (00H, if disabled and 01H,
if enabled)
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = status
Comments:
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 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)
Call with: AH = 23H
AL = feature number
DL = drive number
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AH = Status
Comments:
Cette fonction est utilisée pour définir le registre des fonctionnalités du contrôleur. Si la fonction réussit, l'indicateur de portage est effacé et si l'indicateur de portage infructueux est défini et le registre AH renvoie l'état
INT 13H (0x13)
Fonction 24H (0x24 ou 36) --> Définir plusieurs - Mode de transfert (disque dur, PS et PS/2)
Call with: AH = 24H
AL = number of sectors per block
DL = drive number
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AH = Status
Comments:
Cette fonction est utilisée pour définir Multiple - Mode de transfert. Si vous souhaitez désactiver le mode de transfert multiple, définissez le nombre de secteurs sur 0. La valeur maximale de la taille de bloc (telle que 2, 4, 6, 8 et 16, etc.) dépend du type de lecteur de disque fixe.
La valeur est stockée dans l'octet 15H de la table des paramètres du lecteur de disque 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 pour le numéro de fonctionnalité du disque dur PS/1 ont été répertoriées dans le tableau suivant :
Value
|
Description
|
01H
|
Select 8-bit data transfers instead of 16-bit
|
02H
|
Enable write cache
|
22H
|
Write Same, user-specified area
|
33H
|
Disable retries
|
44H
|
Set number of ECC bytes for read long/write long
|
54H
|
Set cache segments
|
55H
|
Disable look ahead
|
66H
|
Disable reverting to power-on defaults
|
77H
|
Disable error correction
|
81H
|
Select 16-bit data transfers (default)
|
82H
|
Disable write cache
|
88H
|
Enable error correction (default)
|
99H
|
Enable retries (default)
|
AAH
|
Enable look ahead
|
BBH
|
Set ECC length for read long/write long to four bytes
|
CCH
|
Enable reverting to power-on defaults
|
DDH
|
Write Same, entire disk
|
INT 13H (0x13)
Fonction 24H (0x24 ou 36) --> Définir les secteurs (QuickCache II v4.20)
Call with: AX = 24H
BX = New number of sector buffers in
cache
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
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)
Call with: AH = 25H
DL = Drive number
ES:BX = Buffer of 512 bytes for reply packet
Return: If Function Successful,
Carry Flag = Clear
Buffer filled with drive information block
If Function Unsuccessful,
Carry Flag = Set
AH = Status
Comments:
Cette fonction est utilisée pour identifier le lecteur. L'octet à l'adresse 0040h:0074h est défini sur l'état de l'opération. IBM classe officiellement cette fonction comme optionnelle. Les champs Bit pour la configuration générale du variateur ont été donnés dans le tableau suivant :
Bit(s)
|
Description
|
0
|
Reserved (0)
|
1
|
Hard sectored
|
2
|
Soft sectored
|
3
|
Not MFM encoded
|
4
|
Head switch time greater than 15msec
|
5
|
Spindle motor control option implemented
|
6
|
Fixed drive
|
7
|
Removable cartridge drive
|
8
|
Disk transfer rate is less than or equal to 5Mbs
|
9
|
Disk transfer rate is greater than 5Mbs but less than or equal to 10Mbs
|
10
|
Disk transfer rate is greater than 10Mbs
|
11
|
Rotational speed tolerance is greater than 0.5%
|
12
|
Data strobe offset option available
|
13
|
Track offset option available
|
14
|
Format speed tolerance gap required
|
15
|
Reserved for non-magnetic drives (0)
|
La description du format du bloc d'informations de lecteur tel qu'il est donné dans la spécification ATA (AT Attachment) a été donnée dans le tableau suivant :
Offset
|
Size
|
Description
|
00H
|
WORD
|
General drive configuration
|
02H
|
WORD
|
Number of cylinders
|
04H
|
WORD
|
Reserved
|
06H
|
WORD
|
Number of heads
|
08H
|
WORD
|
Number of unformatted bytes per track
|
0AH
|
WORD
|
Number of unformatted bytes per sector
|
0CH
|
WORD
|
Number of sectors per track
|
0EH
|
6 BYTES
|
Vendor unique
|
14H
|
20 BYTES
|
Serial number in ASCII, (0000H=not specified)
|
28H
|
WORD
|
Buffer type
|
2AH
|
WORD
|
Buffer size in 512 byte increments (0000H=not specified)
|
2CH
|
WORD
|
Number of ECC bytes passed on Read/Write Long commands 0000H = not specified
|
2EH
|
8 BYTES
|
Firmware revision in ASCII, 0000H=not specified
|
36H
|
40 BYTES
|
Model number in ASCII, 0000H=not specified
|
5EH
|
WORD
|
Bits 15-8 Vendor Unique, bits 7-0, (if 00H = Read/Write Multiple commands not Implemented, else xxH = Maximum number of sectors that can be transferred per interrupt on Read and Write Multiple Commands)
|
60H
|
WORD
|
0000H = Cannot perform Doubleword I/O,
0001H = Can perform Doubleword I/O.
|
62H
|
WORD
|
Bit 15-9 (0=reserved),
bit 8 (1=DMA Supported),
Bit 7-0 Vendor Unique.
|
64H
|
WORD
|
Reserved
|
66H
|
WORD
|
Bits 15-8 PIO data transfer cycle timing mode, Bits 7-0 Vendor Unique
|
68H
|
WORD
|
Bits 15-8 DMA data transfer cycle timing mode, Bits 7-0 Vendor Unique
|
6AH
|
WORD
|
Bits 15-1 reserved,
bit 0 (1=the fields reported in translation mode are valid,
0=the fields reported in translation mode may be valid)
|
6CH
|
WORD
|
Number of current cylinders
|
6EH
|
WORD
|
Number of current heads
|
70H
|
WORD
|
Number of current sectors per track
|
72H
|
DWORD
|
Current capacity in sectors
|
76H
|
WORD
|
Reserved
|
78H
|
136 BYTES
|
Not defined
|
100H
|
64 BYTES
|
Vendor unique
|
140H
|
96 BYTES
|
Reserved
|
INT 13H (0x13)
Fonction 25H (0x25 ou 37) --> Définir l'intervalle de vidage (QuickCache II v4.20)
Call with: AH = 25H
BX = Interval of Flush
Return: If Function Successful,
AH = 0000H
If Function Unsuccessful,
AH = status
Comments:
Cette fonction est utilisée pour définir l'intervalle de rinçage. Si la fonction réussit, AH est 0000H sinon AH renvoie le statut.
INT 13H (0x13)
Fonction 26H (0x26 ou 38) --> Désinstallation de QuickCache II v4.20
Call with: AH = 26H
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = status
Comments:
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)
Call with: AH = 27H
BX = 0000H
Return: BH = Major Version
BL = Binary Minor Version
If installed,
AX = 0000H
BX = Non-zero
Comments:
Si installé, le registre AX est 0000H et BX renvoie une valeur non nulle.
INT 13H (0x13)
Fonction 28H (0x28 ou 40) --> Définir le démontage automatique (QuickCache II v4.20)
Call with: AH = 28H
AL = New State
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
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)
Call with: AH = 29H
Return: AX = 0000H
INT 13H (0x13)
Fonction 2AH (0x2A ou 42) --> Définir la taille du tampon (QuickCache II v4.20)
Call with: AH = 2AH
AL = Buffer Size
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Cette fonction est utilisée pour définir la taille de la mémoire tampon. Si la fonction réussit, AX est 0000H, si elle échoue, AX renvoie le statut.
INT 13H (0x13)
Fonction 2BH (0x2B ou 43) --> Sons d'accès au lecteur (QuickCache II v4.20)
Call with: AH = 2BH
AL = new state (00h disabled, 01h
enabled)
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Si la fonction réussit, AX est 0000H, si elle échoue, AX renvoie le statut. Fonction d'appel 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 tamponnée (QuickCache II v4.20)
Call with: AH = 2CH
AL = new state
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Cette fonction active ou désactive les écritures différées pour tous les lecteurs. Utilisez AH=38H pour changer un seul disque. Utilisez AL = 00H pour désactiver et 01H pour activer.
INT 13H (0x13)
Fonction 2DH (0x2D ou 45) --> Définir la lecture tamponnée (QuickCache II v4.20)
Call with: AH = 2Dh
AL = new state (00h disabled, 01h
enabled)
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
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 changer un seul lecteur.
INT 13H (0x13)
Fonction 2EH (0x2E ou 46) --> Définir le nombre de vidages (QuickCache II v4.20)
Call with: AH = 2EH
BX = Flush count
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Cette fonction est utilisée pour définir le nombre de rinçages. Si la fonction réussit, AX est 0000H, si elle échoue, AX renvoie le statut.
INT 13H (0x13)
Fonction 2FH (0x2F ou 47) --> Forcer le vidage incrémentiel immédiat (QuickCache II v4.20)
Call with: AH = 2FH
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Si la fonction réussit, AX est 0000H, si elle échoue, AX renvoie le statut.
INT 13H (0x13)
Fonction 30H (0x30 ou 48) --> Obtenir des informations (QuickCache II v4.20)
Call with: AH = 30H
AL = Information Number (See Table in
Comments)
DS:DX = buffer for info
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
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, 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 à fournir à AL ont été répertoriés dans le tableau suivant :
Value
|
Description
|
00H
|
System information
|
01H
|
Drive information
|
02H
|
Access frequency (Array of 30 words)
|
03H
|
Drive Index (Array of 32 bytes indicating BIOS drive for DOS drive)
|
INT 13H (0x13)
Fonction 31H (0x31 ou 49) --> Réserver de la mémoire (QuickCache II v4.20)
Call with: AH = 31H
BX = Number of paragraphs of
conventional memory to reserve for
Applications.
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Cette fonction est utilisée pour réserver la mémoire pour les applications. Si la fonction réussit, AX est 0000H, si elle échoue, 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)
Call with: AH = 32H
AL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Cette fonction est utilisée pour activer la mise en cache pour un lecteur spécifique. Par exemple, appelez Function avec AL = 00H pour A : et ainsi de suite. Si la fonction réussit, AX est 0000H, si elle échoue, 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)
Call with: AH = 33H
AL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Cette fonction est utilisée pour désactiver la mise en cache pour un lecteur spécifique. Par exemple, appelez Function avec AL = 00H pour A : et ainsi de suite. Si la fonction réussit, AX est 0000H, si elle échoue, AX renvoie le statut.
INT 13H (0x13)
Fonction 34H (0x34 ou 52) --> Verrouiller/Déverrouiller Secteur(s) (QuickCache II v4.20)
Call with: AH = 34H
AL = Locking/Unlocking function number
(See the Table Given in Comments)
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
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, AX est 0000H, si elle échoue, AX renvoie le statut. Les différents numéros de fonction à appeler avec AL ont été donnés dans le tableau suivant :
Value
|
Function
|
00H
|
End sector locking/unlocking
|
01H
|
Lock all accessed sectors into cache
|
02H
|
Unlock all accessed sectors and discard from cache
|
INT 13H (0x13)
Fonction 35H (0x35 ou 53) --> Définir la taille du pool de verrouillage (QuickCache II v4.20)
Call with: AH = 35H
BX = Number of sectors in lock pool
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Cette fonction est utilisée pour définir la taille du pool de verrous. Si la fonction réussit, AX est 0000H, si elle échoue, AX renvoie le statut.
INT 13H (0x13)
Fonction 36H (0x36 ou 54) --> Définir la taille du tampon de trace
Call with: AH = 36H
AL = New size of trace buffer
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Cette fonction est utilisée pour définir la taille du tampon de suivi. Si la fonction réussit, AX est 0000H, si elle échoue, 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 tamponnées pour un lecteur spécifique (QuickCache II v4.20)
Call with: AH = 37H
AL = New state
DL = Drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Cette fonction est utilisée pour définir des lectures tamponnées pour un lecteur spécifique. Si AL = 00H l'état est activé, sinon désactivé. Si la fonction réussit, AX est 0000H, si elle échoue, AX renvoie le statut.
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)
Call with: AH = 38H
AL = New state
DL = Drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Cette fonction est utilisée pour définir des é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, AX est 0000H, si elle échoue, AX renvoie le statut.
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)
Call with: AH = 39H
AL = New size of read buffer
DL = Drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Cette fonction est utilisée pour définir la taille du tampon de lecture pour un lecteur spécifique tel que DL = 00H pour A : et ainsi de suite. Si la fonction réussit, AX est 0000H, si elle échoue, 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)
Call with: AH = 3AH
AL = New size of Write buffer
DL = Drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Cette fonction est utilisée pour définir la taille du tampon d'écriture pour un lecteur spécifique tel que DL = 00H pour A : et ainsi de suite. Si la fonction réussit, AX est 0000H, si elle échoue, 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)
Call with: AH = 3DH
AL = New state
DL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Cette fonction est utilisée pour activer/désactiver le rinçage du cylindre pour un lecteur spécifique tel que DL = 00H pour A : et ainsi de suite. Si la fonction réussit, AX est 0000H, si elle échoue, AX renvoie le statut. 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 un bonus de secteur unique (QuickCache II v4.20)
Call with: AH = 3EH
AL = New value for bonus
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Cette fonction est utilisée pour définir le bonus de secteur unique. Si la fonction réussit, AX est 0000H, si elle échoue, AX renvoie le statut.
INT 13H (0x13)
Fonction 3FH (0x3F ou 63) --> Définir le seuil de bonus (QuickCache II v4.20)
Call with: AH = 3FH
AL = New value for bonus threshold
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Cette fonction est utilisée pour définir le seuil de bonus. Si la fonction réussit, AX est 0000H, si elle échoue, AX renvoie le statut
INT 13H (0x13)
Fonction 41H (0x41 ou 65) --> Vérification de l'installation (extensions IBM/MS INT 13H)
Call with: AH = 41H
BX = 55AAH
DL = Drive number (80H-FFH)
Return: If Extensions Supported and Function Successful,
Carry Flag = Clear
BX = AA55H
AH = Major version of extensions (See the
table in Comments)
AL = Internal use
CX = API subset support bitmap (See the
Table in Comments)
DH = Extension version (v2.0 and later)
If Extension not Supported or Function Unsuccessful,
Carry Flag = set
AH = 01H (Function Invalid)
Comments:
Cette fonction vérifie si les extensions IBM/MS INT 13H sont installées et prises en charge. Les valeurs des versions majeures des extensions ont été données dans le tableau suivant :
Value
|
Major Version of Extension
|
01H
|
1.x
|
20H
|
2.0 / EDD-1.0
|
21H
|
2.1 / EDD-1.1
|
30H
|
EDD-3.0
|
Les champs Bit pour le bitmap de prise en charge de l'API des extensions IBM/MS INT 13H sont indiqués dans le tableau suivant :
Bit(s)
|
Description
|
0
|
Extended disk access functions (AH=42H, 43H, 44H, 47h and 48H) supported.
|
1
|
Removable drive controller functions (AH=45H, 46H, 48H, 49H, and INT15/AH =52H) supported.
|
2
|
Enhanced disk drive (EDD) functions (AH=48H and AH=4EH) supported. Extended drive parameter table is valid.
|
3-15
|
Reserved (0)
|
INT 13H (0x13)
Fonction 42H (0x42 ou 66) --> Lecture étendue (extensions IBM/MS INT 13H)
Call with: AH = 42H
DL = Drive number
DS:SI = Disk address packet (See the table in
comments)
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
Cette fonction est l'extension de la fonction de lecture de disque. Si la fonction est réussie, 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'adresse de disque est défini sur le nombre de blocs transférés avec succès. Le format du paquet d'adresse de disque a été donné ci-dessous :
Offset
|
Size
|
Description
|
00H
|
BYTE
|
Size of Packet (10H)
|
01H
|
BYTE
|
Reserved (0)
|
02H
|
WORD
|
Number of blocks to transfer
|
04H
|
DWORD
|
Transfer buffer
|
08H
|
QWORD
|
Starting absolute block number (LBA)
|
INT 13H (0x13)
Fonction 43H (0x43 ou 67) --> Écriture étendue (extensions IBM/MS INT 13H)
Call with: AH = 43H
AL = write flags (See the table in
comments)
DL = drive number.
DS:SI = disk address packet
Return: If Function Successful,
Carry Flag = clear
AH = 00H
If Function Unsuccessful,
Carry Flag = set
AH = error code
Comments:
Cette fonction est l'extension de la fonction d'écriture sur disque. Si la fonction est réussie, 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 nombre de blocs du paquet d'adresse de disque est défini sur le nombre de blocs avec succès. Les informations des drapeaux d'écriture pour les différentes versions ont été données dans le tableau suivant :
Version 1.0 and 2.0
|
Version 2.1 and later
|
Value
|
Description
|
Value
|
Description
|
Bit 0
|
Verify Write
|
00H and 01H
|
Write without Verify
|
Bits 1 to 7
|
Reserved (0)
|
02H
|
Write with verify
|
INT 13H (0x13)
Fonction 44H (0x44 ou 68) --> Vérifier les secteurs (extensions IBM/MS INT 13H)
Call with: AH = 44H
DL = drive number
DS:SI = disk address packet
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
Cette fonction est l'extension de la fonction Vérifier les secteurs. Si la fonction est réussie, 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 nombre de blocs du paquet d'adresse de disque est défini sur le nombre de blocs avec succès
INT 13H (0x13)
Fonction 45H (0x45 ou 69) --> Verrouiller/déverrouiller le lecteur (extensions IBM/MS INT 13H)
Call with: AH = 45H
AL = Operation Number (See the Table in
comments)
DL = Drive number
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
AL = Lock State (00H = Unlocked)
If Function Unsuccessful,
Carry Flag = Set
AH = Error code
Comments:
Cette fonction est utilisée pour verrouiller/déverrouiller le lecteur. Cette fonction doit être prise en charge pour tous les lecteurs amovibles numérotés 80H ou supérieurs. 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 que 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 :
Value
|
Function
|
00H
|
Lock media in drive
|
01H
|
Unlock media
|
02H
|
Check lock status
|
INT 13H (0x13)
Fonction 46H (0x46 ou 70) --> Éjecter le support (extensions IBM/MS INT 13H)
Call with: AH = 46H
AL = 00H (reserved)
DL = Drive number
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
Cette fonction sert à éjecter le support. Si la fonction réussit, l'indicateur de portage est effacé et le registre AH est 00H, sinon l'indicateur de portage 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)
Call with: AH = 47H
DL = Drive number
DS:SI = Disk address packet
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
Cette fonction est l'extension de la fonction de recherche. Si la fonction est réussie, 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 nombre de blocs du paquet d'adresse de disque est défini sur le nombre de blocs avec succès.
INT 13H (0x13)
Fonction 48H (0x48 ou 72) --> Obtenir les paramètres du lecteur (extensions IBM/MS INT 13H)
Call with: AH = 48H
DL = Drive (80H-FFH)
DS:SI = Buffer for drive parameters
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
DS:SI = Buffer filled
If Function Unsuccessful,
Carry Flag = Set
AH = Error code
Comments:
Cette fonction est utilisée pour obtenir les paramètres du variateur. Si la fonction réussit, l'indicateur de portage est effacé et le registre AH est 00H avec DS:SI de tampon rempli, sinon l'indicateur de portage 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)
Call with: AH = 49H
DL = Drive number (any drive number, see
Comments)
Return: If media has not been changed,
Carry Flag = Clear
AH = 00H
If media may have been changed,
Carry Flag = Set
AH = 06H (Error code for media change)
Comments:
Cette fonction est l'extension de la fonction de changement de support. Si la fonction réussit, l'indicateur de portage est effacé et le registre AH est 00H, sinon l'indicateur de portage 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 n'autorise que les numéros de lecteur 00H à 7FH de disquettes.
INT 13H (0x13)
Fonction 4AH (0x4A ou 74) --> Lancer l'émulation de disque (CD-ROM amorçable)
Call with: AH = 4AH
AL = 00H
DS:SI = Specification packet (see the Table in comments)
Return: If Function Successful,
Carry Flag = Clear
If Function unsuccessful,
Carry Flag = Set
AX = Status Code
Comments:
Cette fonction est utilisée pour lancer l'émulation de 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 le code d'état et le lecteur ne sera pas en mode d'émulation.
Le format du paquet de spécifications de CD-ROM amorçable a été donné dans le tableau suivant :
Offset
|
Size
|
Description
|
00H
|
BYTE
|
Size of packet in bytes (13H)
|
01H
|
BYTE
|
Boot media type
|
02H
|
BYTE
|
Drive Number
Drive Number
|
Drive Description
|
00H
|
Floppy image
|
80H
|
Bootable hard disk
|
81H to FFH
|
Non bootable or no Emulation
|
|
03H
|
BYTE
|
CD-ROM controller number
|
04H
|
DWORD
|
Logical Block Address of disk image to Emu
|
08H
|
WORD
|
Device Specification
Value
|
Description
|
(IDE) Bit 0
|
Drive is slave instead of master
|
(SCSI) Bits 0 to 7
|
LUN (Logical Unit Number) and PUN (Physical Unit Number)
|
Bits 8 to 15
|
Bus Number
|
|
0AH
|
WORD
|
Segment of 3Kb buffer for caching CD-ROM reads
|
0CH
|
WORD
|
Load segment for initial boot image (if 0000H, load at segment 07C0H)
|
0EH
|
WORD
|
Number of 512-byte virtual sectors to load (only valid for Function 4CH of INT 13H)
|
10H
|
BYTE
|
Low byte of cylinder count (for Function 08H of INT 13H)
|
11H
|
BYTE
|
Sector count, high bits of cylinder count (for Function 08H of INT 13H)
|
12H
|
BYTE
|
Head count (for Function 08H of INT 13H)
|
Les champs Bit pour le type de support de démarrage CD-ROM amorçable ont été indiqués dans le tableau suivant :
Bit(s)
|
Description
|
3-0
|
Media type
Value
|
Description
|
0000
|
No emulation.
|
0001
|
1.2M diskette.
|
0010
|
1.44M diskette.
|
0011
|
2.88M diskette.
|
0100
|
Hard disk (drive C:)
|
Other
|
Reserved
|
|
5-4
|
Reserved (0)
|
6
|
Image contains ATAPI driver
|
7
|
Image contains SCSI driver(s)
|
INT 13H (0x13)
Fonction 4B00H (0x4B00) --> Terminer l'émulation de disque (CD-ROM amorçable)
Call with: AX = 4B00H
DL = Drive number (or 7FH to terminate
all emulations)
DS:SI = Empty specification packet
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AX = Status code
DS:SI = Specification packet filled
Comments:
Cette fonction est utilisée pour terminer l'émulation de 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 d'émulation.
INT 13H (0x13)
Fonction 4B01H (0x4B01) --> Obtenir l'état (CD-ROM amorçable)
Call with: AX = 4B01H
DL = Drive number
DS:SI = Empty specification packet
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AX = Status code
DS:SI = Specification packet filled
Comments:
La fonction est utilisée pour obtenir le statut. 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 de disque et démarrer (CD-ROM amorçable)
Call with: AH = 4CH
AL = 00H
DS:SI = Specification packet
Return: If Function Successful,
Nothing
If Function Unsuccessful,
Carry Flag = Set
AX = Status code
Comments:
Cette fonction est utilisée pour lancer l'émulation de disque et démarrer le système. Si la fonction réussit, ne renvoie rien d'autre, l'indicateur de retenue est défini et le registre AX renvoie le code d'état.
INT 13H (0x13)
Fonction 4D00H (0x4D00) --> Retourner le catalogue de démarrage (CD-ROM amorçable)
Call with: AX = 4D00H
DS:SI = Command packet (See the Table in
comments)
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AX = Status code
Comments:
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 amorçable de "Get Boot Catalog" paquet de commande a été donné dans le tableau suivant :
Offset
|
Size
|
Description
|
00H
|
BYTE
|
Size of packet in bytes (08H)
|
01H
|
BYTE
|
Number of sectors of boot catalog to read
|
02H
|
DWORD
|
Buffer for boot catalog
|
06H
|
WORD
|
First sector in boot catalog to transfer
|
INT 13H (0x13)
Fonction 4EH (0x4E ou 78) --> Définir la configuration matérielle (extensions IBM/MS INT 13H v2.1)
Call with: AH = 4EH
AL = Function Number ( See the Table in comments)
DL = Drive number
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
AL = Status
Comments:
Cette fonction est utilisée pour définir la configuration matérielle. Les numéros de fonction permettant à AL d'appeler cette fonction sont indiqués dans le tableau suivant :
Value
|
Description
|
00H
|
Enable prefetch
|
01H
|
Disable prefetch
|
02H
|
Set maximum PIO transfer mode
|
03H
|
Set PIO mode 0
|
04H
|
Set default PIO transfer mode
|
05H
|
Enable INT 13H DMA maximum mode
|
06H
|
Disable INT 13H DMA
|
Les modes DMA et PIO s'excluent mutuellement. Par conséquent, la sélection de DMA désactive PIO pour l'appareil spécifié ou tous les appareils de ce contrôleur et la sélection de PIO désactive DMA
INT 13H (0x13)
Fonction 5001H (0x5001) --> Envoyer la commande de paquet (Enhanced Disk Drive Spec v3.0)
Call with: AX = 5001H
DL = Drive number
ES:BX = Command packet (See the Table in
comments)
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
Cette fonction est utilisée pour envoyer les commandes de paquets. Si la fonction est réussie, 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 paquet de commande Format of Enhanced Disk Drive Spec v3.0 a été donné dans le tableau suivant :
Offset
|
Size
|
Description
|
00H
|
WORD
|
Signature B055H
|
02H
|
BYTE
|
Length of packet in bytes
|
03H
|
BYTE
|
Reserved (0)
|
04H
|
N BYTEs
|
Formatted packet data
|
INT 13H (0x13)
Fonction 5501H (0x5501) --> Demande (Seagate ST01/ST02)
Call with: AX = 5501H
DH = Number of bytes to transfer
DL = Drive Number
ES:BX = Buffer for results
Return
ES:BX buffer, filled with the Inquiry results.
Comments:
Cette fonction est utilisée pour envoyer une demande. Le BIOS ST01/ST02 ne renvoie aucune indication de succès ou d'échec pour la fonction, par conséquent, toutes les commandes doivent être supposées avoir 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 d'appareil) (Seagate ST01/ST02)
Call with: AX = 5503H
DH = DTQ byte (See the table in
comments)
DL = Drive Number
Return: Nothing
Comments:
Cette fonction est utilisée pour définir le DTQ (Device Type Qualifier). La fonction ne renvoie rien. Les champs Bit pour l'octet DTQ ont été affichés dans le tableau suivant :
Bit(s)
|
Description
|
0
|
Seagate installation software present
|
1
|
Selected drive has been installed
|
2
|
Host Adapter checks parity on the selected drive
|
3
|
Selected drive is ST225N
|
4
|
Selected drive is paired ST225N/NP
|
5
|
Reserved
|
6
|
SCSI drive attached
|
7
|
Reserved
|
INT 13H (0x13)
Fonction 5504H (0x5504) --> Identification de retour (Seagate ST01/ST02)
Call with: AX = 5504H
DL = Drive Number
Return:
AX = 4321H
BL = selected drive number (00H, 01H)
BH = number of drives attached to Host
Adapter
Comments:
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)
Call with: AX = 5505H
DL = Drive Number
DH = Sub function (see the comments)
Return:
Nothing
Comments:
La fonction est utilisée pour garer les têtes du disque. Il était utilisé dans les anciens disques durs, mais les disques durs modernes n'ont besoin d'aucun programme externe pour se garer.
La sous-fonction 00H parque les têtes (commande SCSI Stop) et la sous-fonction 01H déparque les têtes (commande SCSI Start) du disque.
INT 13H (0x13)
Fonction 5506H (0x5506) --> Parité du bus SCSI (Seagate ST01/ST02)
Call with: AX = 5506H
DL = Drive Number
DH = Sub function Number (See
Comments)
Return:
AL = Status (00H parity checking
disabled, 01H parity checking enabled)
Comments:
Appelez la fonction avec le numéro de sous-fonction suivant pour DH :
Value
|
Description
|
00H
|
Disable parity check
|
01H
|
Enable parity check
|
02H
|
Return current parity setting
|
INT 13H (0x13)
Fonction 5507H (0x5507) Vers Fonction 550DH (0x550D) --> Fonctions réservées (Seagate ST01/ST02)
Call with: AX = 5507H to AX = 550DH
Comments:
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)
Call with: AH = A0H
SI = 4358H
Return:
AX = Segment of Resident Code
Comments:
Cette fonction est utilisée pour 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)
Call with: AH = A1H
SI = 4358H
Return:
Carry Flag = Clear
AH = 00H (v5.10)
Comments:
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)
Call with: AH = A3H
SI = 4358H
Return:
Carry Flag = Clear
Comments:
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)
Call with: AH = A4H
SI = 4358H
Return:
Carry Flag = Clear
Comments:
Cette fonction est utilisée pour activer le cache.
INT 13H (0x13)
Fonction EEH (0xEE ou 238) --> Set 1024-Cylinder Flag (SWBIOS)
Call with: AH = EEH
DL = Drive Number
Return:
Carry Flag = Clear
AH = 00H
Comments:
La fonction est utilisée pour définir 1024 - Indicateur de cylindre. Le fanion est effacé par tous les appels INT 13H sauf AH=EEH et AH=EFH. Disk Manager prend également en charge ces appels. Cette fonction équivaut à appeler 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)
Call with: AH = EFH
CX = Cylinder offset for next INT 13H call
DL = Drive Number
Return:
Carry Flag = Clear
AH = 00H
Comments:
La fonction est utilisée pour définir le décalage du cylindre. Pour les logiciels qui supportent cet appel, la fonction AH=EEH équivaut à appeler cette fonction avec CX=0400H. Le décalage du cylindre est remis à 0 par tous les INT 13H appelés sauf AH=EEH et AH=EFH.
INT 13H (0x13)
Fonction F9H (0xF9 ou 249) --> Vérification de l'installation (SWBIOS)
Call with: AH = F9H
DL = Drive Number
Return: If Function Successful,
Carry Flag = Clear
DX = Configuration Word (see comments)
If Function Unsuccessful,
Carry Flag = Set
Comments:
Cette fonction est utilisée pour la vérification de l'installation. Si la fonction est réussie, l'indicateur de report est désactivé 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)
Call with: AH = FEH
DL = Drive Number
Return:
Carry Flag = Clear
DX = Number of Cylinders beyond 1024
on drive
Comments:
Cette fonction est utilisée pour 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 module de comptage 1024. Disk Manager prend également en charge ces appels
INT 13H (0x13)
Fonction FFH (0xFF ou 255) --> Fonction officiellement privée (IBM SurePath BIOS)
INT 13H (0x13)
Fonction FFFFH (0xFFFF) --> Définir le mode turbo (utilitaire UNIQUE UX Turbo)
Call with: AX = FFFFH
BH = AAH
BL = Sub Function Number (See the table
in Comments)
Return: If installed,
AX = 1234H
Comments:
Cette fonction est utilisée pour définir le mode Turbo. Les numéros de sous-fonction pour appeler la fonction avec BL ont été donnés dans le tableau suivant :
Value
|
Description
|
00H
|
Installation check
|
01H
|
Turn on Turbo mode
|
02H
|
Turn off Turbo mode
|
03H
|
Set Turbo mode according to hardware switch
|
04H
|
Set disk access to Turbo mode
|
05H
|
Set disk access to Normal mode
|
Comment utiliser les extensions INT 13H en programmation C
Nous pouvons appeler les fonctions d'extension de INT 13H avec les mêmes fonctions C (int86(), int86x() etc.) que nous utilisions dans les chapitres précédents. Apprenons-le par un exemple.
L'exemple suivant donne le focus aux trois fonctions (Vérifier les extensions présentes, lecture étendue et écriture étendue). Cependant, nous n'allons pas utiliser la fonction d'écriture étendue dans ce chapitre.
Le programme vérifie d'abord si les extensions sont supportées 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 à l'aide des extensions BIOS INT 13 */
#include<stdio.h>
#include<dos.h>
/* Assigns the identifier to the data type */
typedef unsigned char Byte;
typedef unsigned int Word;
typedef unsigned long DWord;
/* disk_packet structure is loaded in DS:SI and command executed */
struct disk_packet
{
Byte size_pack; // Size of packet must be 16 or 16+
Byte reserved1; // Reserved
Byte no_of_blocks;// Number of blocks for transfer
Byte reserved2; // Reserved
/* Address in Segment:Offset format */
Word offset; //offset address
Word segment; //segment address
/* To Support the Disk Even of Capacity of 1152921504.607 GB */
DWord lba1;
DWord lba2;
}
disk_pack;
/* Function to check if the Extensions are supported */
void check_ext_present()
{
union REGS inregs, outregs; /* Input Registers and
Output */
inregs.h.ah=0x41; /* Function to Check
Extension Present */
inregs.x.bx=0x55AA;
inregs.h.dl=0x80; /* Drive No for first Hard Disk */
int86(0x13,&inregs,&outregs); /*Call interrupt */
if(outregs.x.cflag)
{
/* Extension Not Supported */
printf("\nBios extension not supported");
exit(1);
}
if(outregs.x.bx==0xAA55)
if(outregs.x.cx & 0x1)
/* Extension Present */
printf("\nExtended I/O supported");
}
/* Function to read the Sector */
void read_sectors(void *buffer)
{
union REGS inregs, outregs; /* Input and Output
Registers */
struct SREGS segregs; // Segment Registers
disk_pack.size_pack=16; // Set size to 16
disk_pack.no_of_blocks=1; // One block
disk_pack.reserved1=0; // Reserved Word
disk_pack.reserved2=0; // Reserved Word
disk_pack.segment=FP_SEG(buffer);// Segment of buffer
disk_pack.offset=FP_OFF(buffer); // Offset of buffer
/* request for MBR of hard disk 1 */
/* Read Absolute sector 0 */
disk_pack.lba1=0; /* LBA address, Contains first
32 bits */
/* We normally require( drives < 2.1 T.B) to set
only this */
disk_pack.lba2=0; // Last 32 bit address
inregs.h.ah=0x42; // Function to read
inregs.h.dl=0x80; // Drive Number for First Hard Disk inregs.x.si = FP_OFF(&disk_pack); /*Make DS:SI point
to disk_pack */
segregs.ds = FP_SEG(&disk_pack);
/* Call Interrupt */
int86x(0x13,&inregs,&outregs,&segregs);
if(outregs.x.cflag)
printf("\n\nError %d\n",outregs.h.ah);
else
printf("\n\nI hope Everything is all Right");
}
//// Write Sector Function \\\\
void write_sector()
{
/* It will be written in the same way as read_sectors function, except Function Number, which will be 0x43 in this function. We’ll discuss extended write function in next chapters.
Before Using this Function please check and verify what are you going to do. You should have the proper knowledge of what you are going to do. Use of this function in lack of knowledge or carelessly may destroy your data. */
}
/// Main Function \\\\
void main()
{
int i=0;
/* buffer to hold MBR */
Byte mbr[512];
clrscr();
/* check for BIOS extension present */
check_ext_present();
/* read sector */
read_sectors(&mbr);
printf("\n\n Data of MBR \n");
printf("▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀\n\n\n");
while(i++<512)
{
/* display the MBR buffer */
printf("%c",mbr[i]);
}
}
Commentaires sur le codage du programme
typedef Attribue l'identifiant au type de données tel que typedef unsigned char Byte; attribue l'identificateur Byte au type de données char. De même, l'identificateur Word est attribué à int et DWord est attribué à 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/supportées 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 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 ainsi 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 les différentes options Function. Nous l'utiliserons dans les prochains chapitres.
Remarque :
Nous lisons les secteurs du disque des deux manières suivantes :
- Lecture (ou écriture) de secteur relatif
- Lecture (ou écriture) de secteur absolu
Dans Relative Sector Read, nous lisons les secteurs du disque conformément à la géométrie CHS (Cylinder, Head and Sector) du disque. Dans le secteur relatif lire le MBR du disque (premier secteur du disque) est sur le cylindre 0, la tête 0 et le secteur 1.
Dans 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 Cylindre, Tête correspondant et Numéro de secteur.
Comme dans la lecture (ou l'écriture) de secteur absolu, nous devons calculer uniquement les secteurs absolus dans la boucle dans les opérations telles que la lecture ou l'écriture de disque entier, alors qu'en cas de lecture (ou d'écriture) de secteur relatif, nous devons exécuter trois boucles à la fois pour calculer le CHS, donc la lecture/écriture absolue du secteur est beaucoup plus rapide que la lecture/écriture relative du secteur.
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 des deux méthodes de lecture et montre ainsi comment L'approche par secteur absolu peut rendre nos programmes chronophages (tels que la lecture/écriture sur disque entier ou des programmes d'effacement de disque entier, etc.) pour s'exécuter beaucoup plus rapidement :
Relative Sectors Reading
|
Absolute Sector reading
|
Cylinder =0, Head =0, Sector = 1
|
Absolute Sector = 0
|
Cylinder =0, Head =0, Sector = 2
|
Absolute Sector = 1
|
Cylinder =0, Head =0, Sector = 3
|
Absolute Sector = 2
|
.
.
.
.
|
.
.
.
.
|
Cylinder =0, Head =0, Sector = 62
|
Absolute Sector = 61
|
Cylinder =0, Head =0, Sector = 63
|
Absolute Sector = 62
|
Cylinder =0, Head =1, Sector = 1
|
Absolute Sector = 63
|
Cylinder =0, Head =1, Sector = 2
|
Absolute Sector = 64
|
Cylinder =0, Head =1, Sector = 3
|
Absolute Sector = 65
|
Cylinder =0, Head =1, Sector = 4
|
Absolute Sector = 66
|
.
.
.
.
|
.
.
.
.
|
Cylinder =0, Head =1, Sector = 63
|
Absolute Sector = 125
|
Cylinder =0, Head =2, Sector = 1
|
Absolute Sector = 126
|
Cylinder =0, Head =2, Sector = 2
|
Absolute Sector = 127
|
Cylinder =0, Head =2, Sector = 3
|
Absolute Sector = 128
|
.
.
.
.
|
.
.
.
.
|
Cylinder =0, Head =15, Sector = 63
|
Absolute Sector = 1007
|
Cylinder =1, Head =0, Sector = 1
|
Absolute Sector = 1008
|
Cylinder =1, Head =0, Sector = 2
|
Absolute Sector = 1009
|
Cylinder =1, Head =0, Sector = 3
|
Absolute Sector = 1010
|
.
.
.
.
|
.
.
.
.
|
Cylinder =1, Head =0, Sector = 63
|
Absolute Sector = 1070
|
Cylinder =1, Head =1, Sector = 1
|
Absolute Sector = 1071
|
Cylinder =1, Head =1, Sector = 2
|
Absolute Sector = 1072
|
Cylinder =1, Head =1, Sector = 3
|
Absolute Sector = 1073
|
.
.
.
.
|
.
.
.
.
|
Cylinder =1, Head =15, Sector = 63
|
Absolute Sector = 2015
|
Cylinder =2, Head =0, Sector = 1
|
Absolute Sector = 2016
|
Cylinder =2, Head =0, Sector = 2
|
Absolute Sector = 2017
|
Cylinder =2, Head =0, Sector = 3
|
Absolute Sector = 2018
|
.
.
.
.
|
.
.
.
.
|
Cylinder =11, Head =15, Sector = 60
|
Absolute Sector = 12092
|
Cylinder =11, Head =15, Sector = 61
|
Absolute Sector = 12093
|
Cylinder =11, Head =15, Sector = 62
|
Absolute Sector = 12094
|
Cylinder =11, Head =15, Sector = 63
|
Absolute Sector = 12095
|
Les informations de la table de partition du MBR, qui sont affichées par n'importe quel outil d'analyse de disque MBR, ont été données ci-dessous :
Dans les informations ci-dessus, les numéros de secteur relatifs pour le démarrage des deux partitions sont respectivement 63 et 11277630, qui sont exempts de partitions et comptés en fonction du nombre de secteurs disponibles sur le disque.
Page modifiée le: 09/03/2022