Section courante

A propos

Section administrative du site

 Langage  Elément  Tutoriel  Programmation  Plateforme  Compilateur  Outils  Emulateur  Annexe  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
Rust
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Introduction
Les remarques
Les opérateurs
Les instructions conditionnelles
Les instructions de boucles
Type de données élémentaire
Référence des registres
Mode d'adressage du processeur
Structure de données
Référence des instructions par catégories
Référence, lexique et dictionnaire des instructions 80x86
Les symboles prédéfinies
Les directives
Mode 8080
Mode réel
Mode protégé
Mode virtuel 8086
Mode SMM
Format du descripteur de segment
Format du TSS
Format du SMM
Format BCD
Format des nombres réels
8086/8088
Série NEC V20/V30
80286
80386
Pentium
Pentium Pro
AVX-512
MMX (MultiMedia eXtensions)
MPX (Memory Protection Extensions)
SGX (Software Guard Extensions)
SHA extensions
SMX (Safer Mode Extensions)
SSE (Streaming SIMD Extensions)
SSE2 (Streaming SIMD Extensions 2)
SSE3 (Streaming SIMD Extensions 3)
SSSE3 (Supplemental Streaming SIMD Extensions 3)
SSE4.1 (Streaming SIMD Extensions 4.1)
SSE4.2 (Streaming SIMD Extensions 4.2)
TSX (Transactional Synchronization Extensions)
VMX (Virtual-Machine eXtensions)
x86-64
Les boucles
Les chaînes
les comparaisons
Les conversions
Les décalages de bits
Les drapeaux
Les opérateurs
Saut conditionnel
Saut inconditionnel
Les transferts de données
Utilisation de la pile
Accès mémoire
Ensemble d'instructions pour les applications 80386
BIOS compatible au micro-ordinateur IBM PC
Démarrage du système
Détermination de la version du BIOS
Détermination du type de PC
Fonctions de sortie de l'écran du BIOS
Détermination de la configuration du système à l'aide du BIOS
Détermination de la RAM disponible à l'aide du BIOS
Accéder à la disquette depuis le BIOS
Accéder au disque dur depuis le BIOS
Accéder au port série depuis le BIOS
L'interruption de la cassette
Accéder au clavier depuis le BIOS
Accéder à l'imprimante à partir du BIOS
Lecture de la date et de l'heure à partir du BIOS
Variables du BIOS
Bonjour
Application
Détection
Mathématique
Temps
Stationnement de voiture
BIOS SCSI
CMOS de XT
DesqView
Valeur absolue (ABS)
Triangle Pascal
Année bissextile
DOS
GeoWorks
86-DOS
MS-DOS 2
MS-DOS 6
A86
LZASM
MASM
NASM
TASM
CodeView
Free Hex Editor Neo
OllyDbg
SoftICE
Turbo Debugger
DOSBox
emu8086
PCE - PC Emulator
PCem
Interruptions
Port d'entrée/sortie
RAM de l'IBM PC
Téléchargement
00h à 07h: Processeur
08h à 0Fh: Périphériques (IRQ0 à IRQ7)
10h: Gestionnaire vidéo
13h: Accès aux disques
14h: Gestion des ports séries
15h: Extension d'Entrée/Sortie
16h: Gestion du clavier
17h: Gestion de l'imprimante
21h: Service DOS
2Ah: Interface de service réseau
2Fh: Multiplexe
33h: Interface du pilote de souris
59h: GSS Computer Graphics Interface
5Ch: Réseau BIOS (NetBIOS)
67h: Gestionnaire EMM/EMS
00h: Mode vidéo
01h: Sélection du type de curseur
10h, F0h: Tseng Labs HiColor
4Fh: Pilote VESA
5Fh: Realtek RTVGA
6Fh: Video 7
18h: Demande des informations SCSI
01h: Écrit dans la RAM non-volatile (Amstrad PC1512)
02h: Lecture dans la RAM non-volatile (Amstrad PC1512)
10h: Gestionnaire principal TopView
89h: Entrée en mode protégé
64h: OS/2 API DOS32StartSession
FFh, 92h: Détecte la présence du pilote «PREDIR.EXE»
16h: Windows & DPMI
0Ah: Détection de Windows
84h: Demande le point d'entrée
86h: Détection du mode DPMI
87h: Détecte l'installation DPMI
8Eh: Machine virtuel et application
Préface
Notes légal
Dictionnaire
Recherche

Accéder au disque dur depuis le BIOS

Les modèles XT d'origine comprenaient des disques durs de 10 mégaoctets. Les disques durs sont devenu par la suite le périphérique d'entreposage de masse de choix sur les PC, suivis de près par les disquettes. Cependant, les deux périphériques ont de nombreuses caractéristiques en commun.

Comme la disquette, un disque dur est constitué de plaques aimantées, également appelées disques, pouvant entreposer des données sous forme d'impulsions magnétiques. Contrairement à la disquette, un disque dur contient plusieurs de ces disques. Les plaques d'un disque dur peuvent entreposer des données des deux côtés et doivent donc avoir une tête de lecture/écriture au-dessus et au-dessous de chaque disque pour lire et écrire des données.

Formatage du disque dur

Le formatage du disque dur est similaire à celui d'une disquette : chaque disque est divisé en pistes contenant des secteurs. Un cylindre est constitué de tous les secteurs accessibles sans déplacer les têtes de lecture/écriture. En d'autres termes, les têtes restent immobiles dans un cylindre tandis que le disque se déplace sous elles. Déplacer les têtes vers un autre ensemble de pistes accède à un autre cylindre. Chaque cylindre contient le même nombre de secteurs, qui à leur tour contiennent un nombre constant d'octets.

Partitions

Le disque dur a une autre division au-delà des niveaux de piste, de secteur et de cylindre : les partitions vous permettent de configurer des parties d'un disque dur pour différents systèmes d'exploitation. Bien que vous puissiez formater un disque selon un système d'exploitation et utiliser ce système d'exploitation exclusivement, les disques durs vous permettent de stocker plusieurs systèmes d'exploitation à la fois. Vous pouvez allouer le nombre de cylindres nécessaires à chaque système d'exploitation lors du formatage d'un disque dur. Le premier secteur du disque dur contient les informations sur cette allocation de mémoire. Ces informations incluent des données sur le début de chaque partition et sa taille, ainsi que le système d'exploitation se trouvant dans cette partition (par exemple, DOS a le code 1). Il enregistre également quel système d'exploitation est actif et quel système d'exploitation doit être démarré lors du démarrage du système.

Les modèles XT et AT peuvent contrôler des disques durs capables d'entreposer 10 mégaoctets, 20 mégaoctets, 40 mégaoctets et plus. Les deux disques durs ont 2 disques (4 faces) (numérotés de 0 à 3) et acceptent 17 secteurs par cylindre de 512 octets chacun. La différence de capacité réside uniquement dans le nombre de cylindres. Le disque dur XT comporte 306 cylindres numérotés de 0 à 305 de chaque côté de son support disque ; l'AT comporte 615 cylindres numérotés de 0 à 614 de chaque côté de son support disque. Le disque dur XT a une capacité minimale de 10,16 mégaoctets et le disque dur AT une capacité minimale de 20,41 mégaoctets.

Remarque : Soyez extrêmement prudent lorsque vous utilisez les fonctions d'accès au disque dur du BIOS. Contrairement à un unité de disque que vous pouvez tester avec un disque inutilisé, vous ne pouvez pas faire la même chose avec un disque dur. Une utilisation négligente de la fonction d'écriture ou de formatage peut entraîner une perte de données irrémédiable. Si vous envisagez d'essayer ces fonctions, sauvegardez l'intégralité du disque dur avant d'essayer ces fonctions.

Le BIOS accède au disque dur via l'interruption 13h - la même interruption utilisée pour l'accès à la disquette. Les fonctions individuelles sont identiques pour les unités de disque dur et de disquette, mais le contrôle du disque dur est très différent du contrôle de l'unité de disquette. Le BIOS utilise différents modules pour contrôler le disque dur et les unités de disque. Lorsque vous appelez l'interruption 13h, elle accède d'abord à la routine du disque dur. Cette routine teste si le disque dur ou l'unité de disquette doit être adressé, en fonction du numéro de périphérique dans le registre DL. Si le disque dur est impliqué, il appelle la routine appropriée dans le module de disque dur. D'autre part, si l'unité de disquette doit être adressé, un autre module doit être appelé en appelant l'interruption 40h, pointant vers l'ancienne interruption de disque 13h.

Toutes les fonctions du disque dur partagent la condition qu'après l'appel de la fonction, elles utilisent le drapeau de retenue pour indiquer si elles peuvent exécuter leur tâche ou si une erreur s'est produite. Si c'est le cas, le drapeau de retenue est activé et un code d'erreur est transmis au registre AH. Les codes individuels ont les significations suivantes :

Valeur Description
01h Fonction ou unité indisponible adressé
02h Marquage d'adresse introuvable
04h Secteur introuvable
05h Erreur lors de la réinitialisation du contrôleur
07h Erreur lors de l'initialisation du contrôleur
09h Erreur de transmission DMA : Limite de segment franchie
0Ah Secteur défectueux
10h Erreur de lecture
11h Erreur de lecture corrigée avec ECC
20h Défaut du contrôleur
40h L'opération de recherche a échoué
80h L'unité de disque ne répond pas (dépassement de délai)
AAh Le disque pas prêt
CCh Erreur d'écriture

Lorsque l'une de ces erreurs se produit à l'exception de l'erreur 01, exécutez une réinitialisation et essayez d'appeler à nouveau la fonction. La plupart du temps, l'erreur ne se reproduira pas.

En savoir plus sur les erreurs

Si l'erreur 11H se produit pendant la fonction de lecture, les données lues ne sont peut-être pas réellement défectueuses. Cette erreur indique qu'une erreur de lecture s'est produite, mais qu'elle a pu être corrigée à l'aide de l'algorithme ECC (Error Correction Code). Cette procédure est similaire au processus CRC (Cyclic Redundancy Check) utilisé dans les unités de disque. Une formule mathématique compliquée ajoute les octets individuels d'un secteur. Le résultat du processus va sur le disque sous la forme d'un secteur plus quatre octets. Si une erreur de lecture se produit, elle peut être corrigée dans certaines limites à l'aide des résultats ECC enregistrés.

L'utilisation de registres de microprocesseur pour la transmission de données devient un autre parallèle entre les fonctions de disque dur et de disquette. Le numéro de fonction passe au registre AH. Si le programme demande le numéro du disque dur à adresser, il passe toujours au registre DL. La valeur 80h représente toujours le premier disque dur et 81H pour le deuxième disque dur. Le numéro de la tête de lecture/écriture (et indirectement du disque adressé) passe au registre DH. Le registre CH accepte le numéro de cylindre. N'oubliez pas qu'un disque dur de 10 Mo contient plus de 306 cylindres. Étant donné que ce registre 8 bits ne peut adresser que 256 cylindres à la fois, ce registre seul ne suffit pas pour indiquer le numéro de cylindre.

Pour cette raison, les bits 6 et 7 de l'aide du registre CL indiquent le numéro de cylindre. Ils forment les bits 8 et 9 du numéro de cylindre, permettant un intervalle adressable de 1 024 cylindres (0 à 1 023). Les bits 0 à 5 du registre CL fournissent le numéro du secteur à adresser (ils sont numérotés de 1 à 17 dans chaque cylindre). Si vous tentez d'accéder à plusieurs secteurs à la fois, les numéros de ces sections passent au registre AL. Pendant les opérations de lecture/écriture, une adresse de tampon doit être indiquée à partir de laquelle les données peuvent être lues ou vers laquelle les données peuvent être transférées. Dans un tel cas, le registre ES transmet l'adresse du segment et le registre BX l'adresse de déplacement de ce tampon.

Fonction 00h : Réinitialiser

La fonction 0h réinitialise le contrôleur sans avoir besoin d'autres paramètres. Après qu'une erreur se soit produite, cette fonction doit toujours être appelée avant le prochain accès aux données. Les informations du disque dur sur lesquelles repose l'exécution de la réinitialisation passent au registre DL.

Fonction 01h : État

La fonction 01h lit l'état du disque dur (cet état est indiqué après chaque opération sur le disque dur). Le numéro du variateur dont l'état doit être lu doit être entreposé dans le registre DL.

Fonction 02h : Lecture de secteur

La fonction 02h lit un ou plusieurs secteurs. Un seul appel de cette fonction peut lire jusqu'à 128 secteurs. Cette limitation se produit car le contrôleur de disque dur transfère les données directement dans la RAM via le DMA. La puce DMA ne peut transférer qu'un maximum de 64 Ko à la fois, dans un segment de mémoire à la fois. Pour cette raison, il est important que le tampon complet dont l'adresse passe à ES:BX tienne dans le 64K en commençant par l'adresse de segment dans ES. Sinon, la puce DMA peut signaler une erreur.

Cette fonction lit initialement tous les secteurs dans l'ordre numérique à l'intérieur du cylindre indiqué, en utilisant la tête de lecture/écriture indiquée. Une fois que la fonction a lu le dernier secteur d'un cylindre et que des secteurs supplémentaires doivent être lus, la lecture se poursuit avec le premier secteur du même cylindre, mais en utilisant une tête de lecture/écriture différente. Une fois que la fonction a accédé à la dernière tête de lecture/écriture et qu'il reste des secteurs supplémentaires, le processus de lecture se poursuit dans le premier secteur du cylindre suivant sur la première tête de lecture/écriture.

Fonction 03 : Écrire un secteur

La fonction 03h écrit un ou plusieurs secteurs. Un seul appel de cette fonction peut écrire des données dans jusqu'à 128 secteurs. Cette limitation est également causée par le DMA (voir fonction 02h ci-dessus).

Cette fonction écrit initialement tous les secteurs dans l'ordre numérique à l'intérieur du cylindre indiqué, en utilisant la tête de lecture/écriture indiquée. Une fois que la fonction écrit dans le dernier secteur d'un cylindre et que des secteurs supplémentaires doivent être écrits, l'écriture se poursuit avec le premier secteur du même cylindre, mais en utilisant une tête de lecture/écriture différente. Une fois que la fonction a atteint la dernière tête de lecture/écriture et qu'il reste des secteurs supplémentaires, le processus d'écriture se poursuit dans le premier secteur du cylindre suivant sur la première tête de lecture/écriture.

Fonction 04h : Vérifier

La fonction 04h vérifie les différents secteurs d'un cylindre. Aucune comparaison n'a lieu entre les données sur le disque et les données en mémoire (aucune adresse de tampon n'est nécessaire dans ES:BX). Les numéros ECC vérifient si les octets entreposés renvoient les mêmes résultats après traitement via l'algorithme ECC. Le registre AL indique le nombre de secteurs à vérifier.

Fonction 05h : formater

La fonction 05h formate le disque dur. Avant de pouvoir accéder à un disque dur, il doit être formaté. Semblable à la fonction utilisée pour formater un disque, cette fonction doit connaître la tête de lecture/écriture et le numéro de cylindre. De plus, il doit transmettre l'adresse du tampon au couple de registres ES:BX. Ce tampon doit avoir une longueur de 512 octets, même si la fonction n'accède qu'aux 34 premiers octets. Il contient deux octets pour chacun des 17 secteurs à formater. Le premier octet indique si le secteur est en bon état. En supposant que chaque secteur est en bon état, la valeur 0 est entrée dans cet octet. Le deuxième octet accepte le numéro logique devant être affecté au secteur courant. Le BIOS prend les informations des deux premiers octets de la table sur le premier secteur physique du cylindre. Les octets 3 et 4 fournissent des informations sur le second cylindre physique. Une fois que la série physique a déjà été déterminée, la séquence logique des secteurs peut être définie par 2 octets d'une indication de secteur dans cette table.

Les nombres diffèrent entre un secteur logique et son secteur physique respectif. Ce déplacement des secteurs logiques, appelé entrelacement de secteurs, permet d'optimiser le temps d'accès sur un disque dur.

Le disque dur moyen tourne à 60 tours par seconde. Cela signifie que le secteur physique suivant apparaît sous la tête de lecture/écriture tous les millièmes de seconde. Le contrôleur de disque dur est incapable de transférer les 512 octets du secteur précédemment lu dans la mémoire du PC. Pour cette raison, les secteurs logiques se décalent par rapport aux secteurs physiques, de sorte que le secteur logique suivant n'apparaît sous la tête de lecture/écriture qu'après que le contrôleur de disque dur a terminé la transmission du dernier secteur.

Le facteur d'entrelacement, c'est-à-dire le nombre de secteurs par lesquels les secteurs logiques se décalent par rapport aux secteurs physiques, dépend de la relation entre la vitesse à laquelle le disque dur tourne et la vitesse de traitement du contrôleur de disque dur. Par exemple, si le facteur d'entrelacement est de 6, cela signifie que pour chaque secteur lu, un "saut" de 5 secteurs a lieu avant que le secteur logique suivant ne suive. Plus ce facteur se rapproche de 1 (auquel cas les secteurs physique et logique sont identiques), plus le disque dur est rapide et plus la vitesse de transmission se rapproche de la limite physique.

Alors que les disques durs XT fonctionnent avec un facteur d'entrelacement de 1:6, les disques durs AT sont deux fois plus rapides, avec un facteur d'entrelacement de 1:3. Les effets du facteur d'entrelacement et la relation entre les secteurs logiques et physiques peuvent être vus dans le tableau suivant :

AT : Secteur physique XT : Secteur physique Secteur logique Secteur
1 1 1 1
2 7 2 4
3 13 3 7
4 2 4 10
5 8 5 13
6 14 6 16
7 3 7 2
8 9 8 5
9 15 9 8
10 4 10 11
11 10 11 14
12 16 12 17
13 5 13 3
14 11 14 6
15 17 15 9
16 6 16 12
17 12 17 15

Lors d'un appel de fonction, le BIOS entre une valeur dans le premier octet d'un marqueur de secteur indiquant au programme appelant si le secteur est correcte ou non. La valeur 0 signifie correcte et la valeur 128 signifie qu'une erreur de magnétisation s'est produite. Outre les registres mentionnés ci-dessus, le registre AL accepte le nombre de secteurs à traiter. Les cylindres des disques durs AT et XT étant au format 17 secteurs, le registre AL doit contenir la valeur 17 lors de l'appel de cette fonction.

Fonction 08h : Vérifier les spécifications du disque

La fonction 08h, passant le numéro du disque dur : dans le registre DL, vérifie les spécifications du disque dur. Ceci est important pour examiner les disques durs avec des formats inhabituels.

Après l'appel de la fonction, le registre DL contient le nombre de disques durs connectés. Ce nombre peut être 0, 1 ou 2. De plus, le registre DH contient le nombre de têtes de lecture/écriture. Étant donné que le décompte des têtes de lecture/écriture commence toujours à 0, une valeur de 7 signifie que 8 têtes sont disponibles. Le registre CL (bits 0 à 7 du numéro de cylindre) et les deux bits supérieurs du registre CH (bits 8 et 9 du numéro de cylindre) indiquent le nombre de cylindres. Le comptage commence ici aussi à 0. La dernière information se trouve dans les 6 bits inférieurs du registre CH. Il indique le nombre de secteurs par cylindre, où le comptage commence à 1 (une exception à la règle, puisque les autres comptages de cette fonction commencent par 0).

Lorsqu'un utilisateur interface un disque dur étranger à un PC, le BIOS doit connaître les caractéristiques de ce disque dur pour effectuer un accès correct. Pour cette raison, il utilise l'interruption 41h pour le disque dur : 0 et l'interruption 46h pour le disque dur : 1 comme pointeurs vers une table. Ce tableau a un format prescrit par le BIOS et décrit le disque dur connecté. Le BIOS entrepose toute une série de tables afin que le BIOS puisse s'ajuster correctement lors du démarrage du système à partir du disque dur d'une unité de disque de démarrage.

Remarque : Si le disque dur : est déjà dans le PC et fonctionne correctement, n'essayez pas d'accéder au tableau de description du disque dur, car le disque dur pourrait être endommagé.

Une table doit être construite en RAM pour disque dur étranger : l'interfaçage, et les vecteurs d'interruption 41h ou 46h doivent pointer vers cette table. De plus, la fonction 9 doit configurer le BIOS pour utiliser cette table. Le chiffre 9 déclare la fonction. Le numéro d'unité de disque (80h ou 81h) est chargé dans le registre DL. Vous n'aurez peut-être jamais à utiliser cette fonction compliquée : la plupart des fabricants de disques durs incluent un programme de configuration effectuant la même tâche. Consultez la documentation fournie avec le disque dur : pour connaître les paramètres nécessaires au tableau de description du disque dur.

Fonction 0AH : Lire ECC
Fonction 0BH : Écrire ECC

Les fonctions 0Ah et 0Bh sont des fonctions de lecture/écriture supplémentaires. Elles diffèrent des fonctions 2 et 3 en ce qu'elles lisent et écrivent les quatre octets ECC à la fin de chaque secteur en plus des 512 octets de données. Pour cette raison, chaque secteur a 516 octets au lieu de 512 octets, et seuls 127 secteurs peuvent être lus ou écrits à la fois, au lieu de 128 comme dans les fonctions 2 et 3.

Fonction 0Bh : Recalibrer

La fonction 0Bh recalibre l'un des deux disques durs. Il renvoie également l'état d'erreur, en transmettant le numéro d'erreur au registre DL.

Fonction 10h : Vérifier l'état prêt

La fonction 10h teste si oui ou non le disque dur dont le numéro est dans le registre DL est actuellement prêt à exécuter des commandes. Si le drapeau de retenue est activé au retour de cette fonction, le disque dur n'est pas prêt. Un code d'erreur passe au registre AH.

Fonction 14h : Autotest

La fonction 14h force le contrôleur à effectuer un autotest interne. Si le contrôleur est correcte, il revient avec un drapeau de retenue de réinitialisation.

Fonction 15h : vérifier le type d'unité de disque

La fonction 15h détermine le type d'unité de disque. Le numéro de l'unité de disque (80h ou 81h) passe dans le registre DL. Si l'unité de disque est indisponible, il renvoie la valeur 0 dans le registre AH après l'appel de la fonction. Si le registre AH contient une valeur de 1 ou 2, le périphérique indiqué est un unité de disquette. La valeur 3 indique un disque dur. Si c'est le cas, les registres CX et DX contiennent le nombre de secteurs sur ce disque dur. Les deux registres forment un nombre de 32 bits (le registre CX contient les 16 bits supérieurs et le registre DX les 16 bits inférieurs).

Évitez l'accès au disque dur à l'aide des fonctions du BIOS, sauf en cas d'absolue nécessité. Laissez ces tâches aux fonctions DOS, OS/2 ou UNIX autant que possible.



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Mardi, le 7 février 2023