GESTION ASYNCHRONE DU CLAVIER


Sommaire

I.Introduction

II.L'interruption clavier

III.Remerciements

Retour au sommaire

I.Introduction

Avez-vous déjà essayé de programmer un jeu en utilisant les procédures basiques du clavier ? Vous avez du vous rendre compte que ce n'était vraiment pas la panacée, car les mouvements reposent sur la fréquence de répétition du clavier et sont donc saccadés. Alors comment faire des mouvements fluides comme dans les jeux actuels ? Hé bien voici la réponse.

Retour au sommaire

II.L'interruption clavier

Au lieu d'utiliser l'interruption DOS habituelle qui lit l'état du clavier, nous allons détourner l'interruption matérielle 09h du clavier, qui est lancée à chaque fois qu'une touche du clavier est lancée, ce qui est bien pratique, car cette int est activée tant et dès que la touche est enfoncée, sans aucune préoccupation de l'état interne de l'ordinateur, puisque elle est déclenchée par le clavier lui-même.

Voyons maintenant ce que nous allons mettre dans notre gestionnaire d'interruption. Il faut d'abord savoir que lorsqu'elle est appelée, l'interruption met à jour le buffer clavier en y mettant l'état et le numéro de la touche qui a déclenché l'interruption. Ce buffer est situé au port 60h. Il suffit donc de lire ce port pour connaitre l'état des touches. La structure de ce port est la suivante :

Structure du port 60h
Bits 7 6 5 4 3 2 1 0  
Valeurs                
         
  Numéro de la touche, de 0 à 127
  Etat de la touche : 1 = relâchée / 0 = appuyée

Notez bien que le numéro de la touche est totalement différent du code ASCII. Ici chaque numéro correspond à une touche du clavier parmi les 102 et non à un caractère.

Comme pour la carte son, comme l'int 09h est une interruption matérielle, donc déclenchée par un PIC, il faut dire au PIC que l'interruption a bien été exécutée, en envoyant au port 20h la valeur 20h.

Note : si vous lancez ensuite le gestionnaire d'interruption initial, alors vous n'avez pas à vous préoccuper du port 20h, puisqu'il est géré par l'interruption originelle. si vous lancez ensuite l'ancien gestionnaire d'interruption, cela permettra de mettre à jour les LEDs du clavier par exemple.

L'idéal est de stocker l'état de chaque touche dans un tableau de 128 booléens, ainsi on pourra le réutiliser pour connaitre l'état des touches.

Résumé :
pour gérer efficacement le clavier il faut donc disposer d'une procédure gestionnaire d'interruption suivant le shéma :

{
-lit le port 60h
-met à jour le tableau des touches
-renvoie 20h au port 20h
-IRET
}

et d'un corps principal contenant :

{
-sauvegarde l'ancien vecteur de l'interruption 09h
-le remplace par l'adresse du gestionnaire d'interruption
-...
-lit le tableau de touches et agit en conséquence
-...
-restaures l'ancien vecteur d'interruption
}

Pour info, voici la correspondance entre les touches et leur numéro (vous remarquerez qu'elles ont été codées à peu près de haut en bas et de gauche à droite sur le clavier) :

Touche Numéro
Escape

01h

1 2 3 4 5 6 7 8 9 0 ) = 02h -> 0Dh
Backspace 0Eh
Tabulation 0Fh
A Z E R T Y U I O P ^ $ 10h -> 1Bh
Enter 1Ch
Ctrl (gauche ou droit) 1Dh
Q S D F G H J K L M ù 1Eh -> 28h
² 29h
Shift gauche 2Ah
* 2Bh
W X C V B N , ; : 2Ch -> 34h
! ou / (pavé numérique) 35h
Shift droit 36h
* (pavé numérique) 37h
Alt (gauche ou droit) 38h
Espace

39h

Caps Lock 3Ah
F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 3Bh -> 44H
Verr num 45h
Arrêt défil. 46h
7 8 9 - 4 5 6 + 1 2 3 0 . (pavé numérique) 47h -> 53h
> 56h
F11 57h
F12 58h

Les touches entre le pavé alphabtétique et le pavé numériques sont des extensions du pavé numérique. Lorsque Verr num est activé, l'appui sur une de ces touches équivaut à l'appui sur la touche correspondante du pavé numérique plus la touche 2Ah (shift gauche) (vous pouvez d'ailleurs essayer : activez Verr num et faites shift + touche du pavé numérique et vous verrez que ca marche), sinon si Verr num est désactivé, cela fera exactement comme pour la touche correspondante du pavé numérique (cad sans touche 42).

 

Retour au sommaire

III.Remerciements

Document écrit par Antoche – Antoche@altern.org - #ICQ : 38 08 99 43

Libre reproduction et diffusion autorisée - modifications interdites sans autorisation de l'auteur.

Merci à La Bible du Programmeur et à HelpPC.

Retour à la rubrique programmation.