Accéder au clavier depuis le BIOS
L'interruption 16h fournit trois fonctions pour lire le clavier et l'état du clavier. Les fonctions du clavier du BIOS sont très limitées : Aucune fonction du BIOS n'existe pour supprimer des caractères de la mémoire tampon du clavier ou renommer des touches. Les fonctions DOS peuvent effectuer ces opérations.
Touches compatibles avec le BIOS
Certaines combinaisons de touches ne peuvent pas être lues par le BIOS en tant que codes de touches car elles exécutent des commandes. L'activation de la touche PrtSc ou Print appelle l'interruption 5h du BIOS. Cela démarre une routine envoyant l'affichage de l'écran actuel à une imprimante, produisant une copie papier.
Les touches Ctrl+Num Lock arrêtent tout le système jusqu'à ce que l'utilisateur appuie sur une autre touche. Le tampon du clavier ignore les touches Ctrl+Num Lock et la touche enfoncée par la suite, de sorte que les programmes ne peuvent pas lire ces touches.
L'appui sur la combinaison de touches Ctrl+Break appelle l'interruption 1Bh. Normalement, le programme en cours s'arrête et retourne sous DOS. Pour éviter cela, cette interruption peut être dirigée vers une routine dans le programme d'application continuant l'exécution du programme si la routine consiste en une instruction en langage assembleur IRET uniquement.
Les AT et quelques PC/XT avancés ont la touche Sys Req. Son ahctivation appelle l'interruption 1Bh en passant la valeur 8500h au registre AX. Lorsque l'utilisateur relâche la touche, le registre AX reçoit alors la valeur 8501h. La valeur 85h dans le registre AH représente le numéro de fonction de l'interruption 15h. Après démarrage du système, la fonction 85h de l'l'interruption 15h du BIOS consiste uniquement en une instruction IRET ; appuyer sur la touche Sys Req n'a aucun résultat visible.
Codes de contrôle
La plupart des gens savent que n'importe quel code ASCII peut être saisi à partir du clavier en utilisant la touche Alt et les touches du pavé numérique. Peu d'utilisateurs connaissent la saisie de caractères à l'aide de la touche Ctrl. Lorsqu'elle est utilisée avec d'autres touches, cette touche peut saisir des codes ASCII inférieurs au numéro de code 32. La figure suivante montre les touches accessibles :
Décimal | Symbole | Touche frappé |
---|---|---|
0 | (Nul) | Ctrl+2 |
1 | (SOH) | Ctrl+A |
2 | Ctrl+B | |
3 | Ctrl+C | |
4 | Ctrl+D | |
5 | Ctrl+E | |
6 | Ctrl+F | |
7 | (BEL) | Ctrl+G |
8 | (BS) | Ctrl+H, BackSpace, Shift+BackSpace |
9 | (TAB) | Ctrl+I |
10 | (LE) | Ctrl+J |
11 | Ctrl+K | |
12 | (FF) | Ctrl+L |
13 | (CR) | Ctrl+M, Enter, Shift+Enter |
14 | Ctrl+N | |
15 | Ctrl+O | |
16 | Ctrl+P | |
17 | Ctrl+Q | |
18 | Ctrl+R | |
19 | Ctrl+S | |
20 | Ctrl+T | |
21 | Ctrl+U | |
22 | Ctrl+V | |
23 | Ctrl+W | |
24 | Ctrl+X | |
25 | Ctrl+Y | |
26 | (EOF) | Ctrl+Z |
27 | (ESC) | Ctrl+[, ESC, Shift+Esc, Ctrl+Esc |
28 | Ctrl+\ | |
29 | Ctrl+] | |
30 | Ctrl+6 | |
31 | Ctrl+- | |
32 | Espace | Ctrl+Barre d'espacement, Barre d'espacement, Shift+Barre d'espacement, Alt+Barre d'espacement |
Fonction 0 : Lire le clavier
L'interruption 16h reçoit normalement un appel lorsqu'un programme s'attend à ce que l'utilisateur saisisse un ou plusieurs caractères. Si un caractère a déjà été saisi avant l'appel de la fonction, le tampon du clavier vide ce caractère et le transmet au programme appelant. S'il n'y a pas de caractère dans la mémoire tampon du clavier, la fonction 0 attend qu'un caractère ait été saisi puis retourne au programme appelant. L'appelant peut déterminer le caractère ou activer une touche à partir du contenu des registres AL et AH.
ASCII
Si le registre AL contient une valeur autre que 0, il contient le code ASCII du caractère. Le registre AH contient le code de balayage de la touche active. Le code dans le registre AL correspond aux codes ASCII pour la sortie des caractères à l'écran. Certaines différences se produisent dans les touches de contrôle :
Code | Touche(s) |
---|---|
8 | Backspace |
9 | Tab |
10 | Ctrl+Return |
13 | Return |
27 | Esc |
Balayage des codes
Le code de balayage dans le registre AH indique le numéro de la touche active, où les touches du clavier sont numérotées en commençant par 0. Comme les claviers PC, XT et AT diffèrent, cela n'a pas d'importance pour la plupart des programmes.
Codes de touches étendus
Si le registre AL contient la valeur 0 après l'appel, le registre AH indique un code clavier étendu. La différence entre le code ASCII et le code étendu du clavier réside dans le fait que certaines touches (par exemple, les touches du curseur) ne peuvent pas tenir dans l'ensemble de 256 caractères du PC. Le tableau suivant donne un aperçu des codes de clavier étendus :
Code(s) | Touche(s) |
---|---|
15 | Shift+Tab |
16 à 25 | Alt+Q, Alt+W, Alt+E, Alt+R, Alt+T, Alt+Y, Alt+U, Alt+I, Alt+O, Alt+P |
30 à 38 | Alt+A, Alt+S, Alt+D, Alt+F, Alt+G, Alt+H, Alt+J, Alt+K, Alt+L |
44 à 50 | Alt+Z, Alt+X, Alt+C, Alt+V, Alt+B, Alt+N, Alt+M |
59 à 68 | F1, F2, F3, F4, F5, F6, F7, F8, F9, F10 |
71 | Home |
72 | ↑ |
73 | Page Up |
75 | ← |
77 | → |
79 | End |
80 | ↓ |
81 | Page Down |
82 | Insert |
83 | Delete |
84 à 93 | Shift+F1, Shift+F2, Shift+F3, Shift+F4, Shift+F5, Shift+F6, Shift+F7, Shift+F8, Shift+F9, Shift+F10 |
94 à 103 | Ctrl+F1, Ctrl+F2, Ctrl+F3, Ctrl+F4, Ctrl+F5, Ctrl+F6, Ctrl+F7, Ctrl+F8, Ctrl+F9, Ctrl+F10 |
104 à 113 | Alt+F1, Alt+F2, Alt+F3, Alt+F4, Alt+F5, Alt+F6, Alt+F7, Alt+F8, Alt+F9, Alt+F10 |
115 | Ctrl+← |
116 | Ctrl+→ |
117 | Ctrl+End |
118 | Ctrl+Page Down |
119 | Ctrl+Home |
120 à 131 | Alt+1, Alt+2Alt+3Alt+4, Alt+5, Alt+6, Alt+7, Alt+8, Alt+9, Alt+0 |
132 | Ctrl+Page Up |
Les combinaisons de touches non contenues dans ce tableau ne peuvent pas être détectées à l'aide des fonctions du clavier du BIOS, car elles ne génèrent pas de codes de clavier.
Fonction 1 : lire le clavier
La fonction 1 lit également le clavier. Contrairement à la fonction 0, la fonction 1 laisse le caractère précédent dans la mémoire tampon du clavier. Des appels répétés de la fonction 1 ou de la fonction 0 lisent à nouveau le clavier. Placez la valeur 1 dans le registre AH pour appeler la fonction 1. Contrairement à la fonction 0, la fonction 1 informe immédiatement le programme appelant avec le drapeau zéro après l'appel de la fonction si un caractère est disponible ou non. Si le drapeau zéro est égal à 1, aucun caractère n'était disponible. Si le drapeau zéro est réinitialisé, les registres AL et AH contiennent des informations sur la touche activée. Comme dans la fonction 0, le registre AL contient la valeur 0 si l'utilisateur a activé une touche étendue, et une valeur différente de 0 si l'utilisateur a appuyé sur une touche "normale". Le registre AH contient le code de balayage des touches normales ; les touches étendues placent leurs codes dans le registre AH.
Fonction 2 : lire les touches de contrôle
La fonction 2 a une tâche complètement différente. Il lit l'état de certaines touches de commande et conditions (par exemple, Insert. Placez le chiffre 2 dans le registre AH pour appeler la fonction. L'état du clavier peut être trouvé dans le registre AL après l'appel de la fonction.
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é |