Section courante

A propos

Section administrative du site

Variables du BIOS

Les autres sections du BIOS décrivaient différentes interruptions du BIOS et leurs fonctions. Ces fonctions nécessitent un segment de mémoire pour entreposer les variables et les données. Pour cette raison, le BIOS réserve la zone de mémoire entre les adresses 0040:000 et 0050:0000 pour l'entreposage des variables internes. Le contenu de la plupart de ces variables peut être lu à l'aide de certaines fonctions du BIOS ou en utilisant l'accès direct. Parfois, l'accès direct est la méthode la plus simple des deux, mais il augmente les chances qu'un programme ne s'exécute pas correctement sur certains PC. Étant donné que le BIOS peut varier d'un PC à l'autre, différentes versions du BIOS peuvent utiliser des emplacements de mémoire individuels dans cette zone de différentes manières. Lorsque vous travaillez avec des PC standard et compatibles (par exemple, IBM, Tandon,...), vous pouvez supposer que l'affectation de mémoire fournie ici reste constante entre les machines.

La liste suivante décrit les variables individuelles, leurs objectifs et leurs adresses. L'adresse indiquée est l'adresse de déplacement de l'adresse de segment 0040h. Par exemple, une variable avec l'adresse de déplacement 10h a l'adresse 0040:0010 ou 10h.

00h à 07h

Pendant le processus de démarrage, une routine BIOS détermine la configuration de son PC. Il détermine, entre autres, le nombre d'interfaces série (RS-232) installées. Ces numéros d'interface sont stockés sous forme de quatre mots dans les emplacements de mémoire 0040:0000 à 0040:0007. Chacun de ces mots représente l'une des quatre cartes pouvant être installées pour la transmission asynchrone de données. L'octet de poids faible est d'abord entreposé, suivi de l'octet de poids fort. Comme peu de PC disposent de quatre cartes série, les mots représentant une carte manquante contiennent la valeur 0.

0Bh à 0Fh

Pendant le processus de démarrage, une routine BIOS détermine la configuration de son PC. Il détermine, entre autres, le nombre d'interfaces parallèles installées. Ces numéros de carte sont entreposés sous forme de quatre mots dans les emplacements de mémoire 0040:0008 à 0040:000F. Chacun de ces mots désigne l'une des quatre cartes pouvant être installées pour la transmission parallèle des données. L'octet de poids faible est d'abord stocké, suivi de l'octet de poids fort. Comme peu de PC ont quatre cartes parallèles à leur disposition, les mots représentant une carte manquante contiennent la valeur 0.

10h à 11h

Ce mot représente la configuration matérielle du PC telle qu'appelée par l'interruption 11h du BIOS. Semblable aux deux mots ci-dessus, cette configuration est déterminée lors du processus de démarrage. Les objectifs des bits individuels de ce mot sont normalisés pour le PC et le XT, mais peuvent différer dans certains autres ordinateurs.

12h

Cet octet entrepose les informations recueillies lors de l'auto-test du système, exécuté pendant le processus de démarrage et après un démarrage tardif. Les routines du BIOS utilisent également cet octet pour reconnaître les touches actives. Il n'a aucune utilité pratique pour le programmeur.

13h à 14h

Ce mot indique la capacité de RAM du système en kilo-octets. Ces informations sont également collectées pendant le processus de démarrage et peuvent être lues à l'aide de l'interruption 12h du BIOS.

15h à 16h

Ces deux octets testent le matériel pendant le processus de démarrage. Ils n'ont plus aucune utilité après chaque test matériel.

17h

C'est ce qu'on appelle l'octet d'état du clavier car il contient l'état du clavier et des différentes touches. La fonction 02h de l'interruption clavier du BIOS 16h lit cet octet. L'accès à cet octet permet à l'utilisateur d'activer ou de désactiver la touche Insert ou Caps Lock. Les quatre bits supérieurs de cet octet peuvent être modifiés par l'utilisateur ; les quatre bits inférieurs doivent rester intacts. Voici les drapeaux de l'état clavier :

Bit Description
0 1=Touche SHIFT de droite est enfoncé
1 1=Touche SHIFT de gauche est enfoncé
2 1=Touche CTRL est enfoncé
3 1=Touche ALT est enfoncé
4 1=SCROLL LOCK est activé
5 1=NUM LOCK est activé
6 1=CAPS LOCK est activé
7 1=INSERT est activé

18h

Cet octet est similaire à l'octet 17h ci-dessus, à la différence que cet octet indique l'état actif des touches SysReq et Break. Voici les drapeaux de l'état clavier étendue :

Bit Description
0 1=Touche CTRL est enfoncé
1 1=Touche ALT est enfoncé
2 1=Touche SysReq est enfoncé (AT et quelques XT)
3 1=Mode pause activé
4 1=Touche BREAK est enfoncé
5 1=NUM LOCK est enfoncé
6 1=CAPS LOCK est enfoncé
7 1=INSERT est enfoncé

19h

Cet octet est utilisé lorsqu'on enfonce une combinaison de touche ALT+Code ASCII. Il conserva donc la valeur tapée lorsqu'on enfonce la touche ALT suivie d'un code ASCII.

1Ah à 1Bh

Ce mot contient l'adresse du prochain caractère à lire dans le tampon du clavier (voir aussi 1Eh à 3Dh).

1Ch à 1Dh

Ce mot contient l'adresse du dernier caractère du tampon du clavier (voir aussi 1Eh à 3Dh).

1Eh à 3Dh

Cette zone de mémoire contient le véritable tampon du clavier. Étant donné que chaque caractère entreposé dans la mémoire tampon du clavier nécessite 2 octets, sa capacité de 32 octets offre un espace pour un maximum de 16 caractères. Pour un caractère ASCII normal, la mémoire tampon entrepose le code ASCII, puis le code de balayage du caractère. Le code de balayage est le numéro de la touche activée ayant généré le caractère ASCII. Si le caractère dans la mémoire tampon du clavier utilise un code étendu (par exemple, une touche de curseur), alors le premier octet contient la valeur 0 et le deuxième octet contient le code de touche étendu. L'ordinateur lit constamment les caractères de la mémoire tampon du clavier. Si le tampon n'est pas plein, des caractères peuvent être ajoutés. L'adresse du prochain caractère à lire dans la mémoire tampon du clavier est entreposée dans le mot à l'emplacement mémoire 0040:001Ah. Lorsqu'un caractère est lu, le caractère se déplace de 2 octets vers la fin du tampon en mémoire. Lorsqu'un caractère a été lu à partir du dernier emplacement mémoire du tampon, ce pointeur se réinitialise au début du tampon.

Il en va de même pour le pointeur à l'emplacement mémoire 0040:001C, indiquant la fin du tampon clavier. Si vous ajoutez un nouveau caractère, il est entreposé dans la mémoire tampon du clavier à l'emplacement indiqué par ce pointeur. Puis le pointeur est incrémenté de 2 pour se déplacer vers la fin du tampon. Si un nouveau caractère est entreposé au dernier emplacement mémoire du tampon, ce pointeur revient au début du tampon.

La relation entre les pointeurs de début et de fin indique quelque chose sur l'état du tampon. Deux conditions sont particulièrement intéressantes. La première est la condition lorsque les deux pointeurs contiennent la même adresse (aucun caractère n'est actuellement disponible dans la mémoire tampon du clavier). L'autre condition est lorsqu'un caractère doit être ajouté à la fin du tampon du clavier, mais l'ajout de 2 au pointeur de fin le pointerait vers le pointeur de début. Cela signifie que la mémoire tampon du clavier est pleine, c'est-à-dire qu'aucun caractère supplémentaire ne peut être accepté.

3Eh

Les quatre bits les plus bas correspondent au nombre de unités de disque PC installés (vous avez droit à un maximum de quatre unités de disque). Ces octets indiquent également si les variateurs connectés doivent être calibrés. C'est généralement le cas après qu'une erreur se soit produite lors d'un accès en lecture, en écriture ou en recherche. Lorsqu'une erreur se produit, le bit correspondant dans cet octet est mis à 0.

3Fh

Les quatre bits inférieurs de cet octet indiquent si le moteur de l'unité de disque actuel est en mouvement. Un 1 dans le bit correspondant l'indique. De plus, le bit 7 est toujours activé lorsque l'accès en écriture est en cours.

40h

Cet octet contient une valeur numérique indiquant la période de temps jusqu'à ce qu'un moteur d'unité de disque s'arrête. Étant donné que le BIOS ne peut accéder qu'à un seul unité de disque à la fois, cette valeur fait référence au dernier unité auquel on a accédé. Suite à l'accès à cet unité, le BIOS place la valeur 37 dans ce registre. Pendant chaque interruption de minuterie (qui se produit environ 18,2 fois par seconde), la valeur de cet octet est décrémentée de 1. Lorsqu'elle atteint finalement 0, le moteur du disque est arrêté. Cela se produit après environ deux secondes.

41h

Cet octet contient l'état du dernier accès au disque. Lorsque l'octet contient la valeur 0, la dernière opération de disque a été effectuée de manière ordonnée. Une autre valeur signale qu'un code d'erreur a été interdit par le contrôleur de disque.

42h à 48h

Ces sept octets indiquent l'état du contrôleur de disque NEC. Ils indiquent également l'état du contrôleur de disque dur sur les systèmes de disque dur.

49h

Cet octet contient le mode d'affichage actuel tel que rapporté par le BIOS. Il s'agit de la même valeur indiquée lorsque l'utilisateur active un mode d'affichage par la fonction 0 de l'interruption vidéo 10h du BIOS.

4Ah

Ce mot contient le nombre de colonnes de texte par ligne d'affichage dans le mode d'affichage courant.

4Ch

Ce mot contient le nombre d'octets nécessaires à l'affichage d'une page écran dans le mode d'affichage courant, tel que rapporté par le BIOS. En mode texte 80x25 caractères, il s'agit de 4 000 octets.

4Eh à 4Fh

Ce mot contient l'adresse de la page d'écran en cours actuellement sur le moniteur, par rapport au début de la RAM de la carte vidéo. La RAM vidéo de la carte couleur commence à B800:0000 pour la première page écran et à B800:1000 pour la deuxième page écran en mode texte 80x25 caractères. Cette variable contient généralement la valeur 1000h.

50h à 5Fh

Ces 16 octets contiennent la position actuelle du curseur pour chaque page d'écran. Le BIOS peut contrôler un maximum de 8 pages d'écran. Le BIOS réserve deux octets pour chaque page d'écran. L'octet de poids faible indique la colonne de l'écran, qui peut avoir des valeurs allant de 0 à 39 (en mode 40 colonnes) ou de 0 à 79 (en mode 80 colonnes). L'octet de poids fort indique la ligne d'écran, qui peut avoir des valeurs allant de 0 à 24. Si vous modifiez les valeurs dans ce tableau, la position immédiate du curseur clignotant reste inchangée, mais le changement deviendra perceptible la prochaine fois que vous saisirez des caractères dans la page d'affichage correspondante.

Vous pouvez utiliser ces octets pour positionner le curseur, mais nous ne recommandons pas cette méthode.

60h

Cet octet contient la ligne de départ du curseur clignotant, pouvant prendre des valeurs allant de 0 à 7 (carte graphique couleur) ou de 0 à 14 (carte graphique monochrome). Changer le contenu de cet octet ne change pas l'apparence du curseur, car il doit d'abord être transmis par le BIOS au contrôleur vidéo.

61h

Cet octet contient la ligne de fin du curseur clignotant, pouvant prendre des valeurs allant de 0 à 7 (carte graphique couleur) ou de 0 à 14 (carte graphique monochrome). Changer le contenu de cet octet ne change pas l'apparence du curseur, car il doit d'abord être transmis par le BIOS au contrôleur vidéo.

62h

Cet octet contient le numéro de la page écran actuellement affichée.

63h à 64h

Ce mot contient le port de la carte vidéo. Si un PC contient plusieurs cartes vidéo, la valeur entreposée sera l'adresse de la carte vidéo actuellement active.

65h

Le contenu du sélecteur de mode d'une carte contrôleur vidéo dicte le mode d'affichage actuel. La valeur actuelle est entreposée dans cet emplacement de mémoire.

66h

Une carte couleur en mode graphique moyenne résolution peut afficher 320x200 pixels en quatre couleurs différentes. Trois de ces couleurs proviennent de l'une des deux palettes de couleurs. Cet octet contient la palette de couleurs actuellement active (0 ou 1).

67h à 6Bh

Les premières versions du BIOS du PC pouvaient utiliser un enregistreur à cassette pour le stockage des données. Ces premières versions du BIOS utilisaient ces cinq octets pour l'accès à la cassette lors de l'entreposage des données. Les modèles XT et AT, n'ayant pas cette interface, utilisent ces emplacements de mémoire en relation avec l'extension de la RAM.

6Ch à 6Fh

Ces quatre octets agissent comme un compteur 32 bits pour le BIOS et le DOS. Le compteur est incrémenté de 1 à chacune des 18,2 interruptions du temporisateur par seconde. Cela permet la mesure et l'affichage du temps. La valeur de ce compteur peut être lue et définie avec l'interruption 1Ah du BIOS. Si 24 heures se sont écoulées, il se remet à 0 et compte à partir de là.

70h

Cet octet contient un 0 lorsque la routine de temporisation est comprise entre 0 et 24 heures. L'octet 70h passe à 1 lorsque la routine du compteur de temps dépasse sa limite de 24 heures. Pour chaque compte de 24 heures suivant, cet octet reste à 1. Si l'interruption 1Ah de minuterie du BIOS est utilisée pour régler l'heure, cet octet est réinitialisé à 0.

71H

Cet octet indique si une interruption clavier se produit ou non après que l'utilisateur a appuyé sur Ctrl+C ou Ctrl+Break. Si le bit 7 de cet octet contient la valeur 1, une interruption clavier s'est produite.

72h à 73h

Pendant le processus de démarrage, une commande de réinitialisation est envoyée au contrôleur du clavier. Pendant la durée de cette remise à zéro, le mot à cet emplacement prend la valeur 1234h.

Variable XT du BIOS

Les configurations matérielles du XT permettent l'introduction de variables supplémentaires. Voici une liste des variables BIOS trouvées dans XT et AT.

74h à 77h

Ces quatre octets sont utilisés uniquement par les systèmes de disque dur pour le contrôle du disque dur.

78h à 7Bh

Chacun de ces quatre octets renvoie l'état de l'un des quatre ports d'imprimante.

7Ch à 7Fh

Chacun de ces quatre octets renvoie l'état de l'un des quatre ports de communication désynchronisé (RS-232).

80h à 81h

Ce mot contient le début de la mémoire tampon du clavier comme adresse de déplacement par rapport à l'adresse de segment 0040. Puisque la mémoire tampon du clavier commence normalement à l'adresse 0040:001E, cet emplacement mémoire contient généralement la valeur 1Eh.

82h à 83h

Ce mot contient la fin de la mémoire tampon du clavier comme adresse de déplacement par rapport à l'adresse de segment 0040. Comme la mémoire tampon du clavier se termine normalement à l'adresse 0040:003E, cet emplacement mémoire contient généralement la valeur 3Eh.

Variables AT du BIOS

Les fonctionnalités avancées de l'AT nécessitent encore plus de variables BIOS. Voici une liste des variables BIOS trouvées uniquement sur les modèles AT.

88h

Cet octet contient la dernière vitesse de transmission de données de l'unité de disque ou du disque dur.

8Ch à 96h

Cette intervalle mémoire contient les variables nécessaires lors de l'accès disque, disque dur.

97h

Cet octet réserve un drapeau de clavier indiquant l'état de la LED (diode électroluminescente) du clavier AT.

98h à A0H

Cette intervalle de mémoire accepte les variables de l'horloge temps réel alimentée par batterie.

Tous les membres de la famille PC (PC, XT et AT ont une variable dans l'emplacement mémoire 0050:0000. Cette variable fonctionne en conjonction avec la routine de copie papier (interruption 5) pour empêcher la sortie de l'imprimante durant l'impression d'une autre copie papier. La routine de copie papier teste pour savoir si ce drapeau a une valeur de 0. Si c'est le cas, et qu'aucune copie papier n'est en cours d'impression, le drapeau passe à 1. Le BIOS peut vérifier cette variable pour voir si une impression est en cours. Après une impression réussie, ce drapeau se remet à 0. Si une erreur a été détectée lors de l'accès à l'imprimante, ce drapeau est mis à la valeur 255 et la procédure d'impression est abandonnée.



Dernière mise à jour : Mardi, le 7 février 2023