qui peut me donné un petit exemple de programme d'interruption clavier
pour gérer le clavier moi meme
je programme sous dos avec borland turbo c
merci d'avance.
qui peut me donné un petit exemple de programme d'interruption clavier
pour gérer le clavier moi meme
je programme sous dos avec borland turbo c
merci d'avance.
tu veux détourner l'int bios ou l'irq ?
je veux le faire avec l'irq car je croix que c plus simple
mais je veux un exemple de prog car sinon je risque de pener grave pour faire fonctionner un prog d'exemple
Bonsoir,
un exemple de détournement d'interruption clavier. Testé sous TC++ 3.0:
mon exemple n'est pas transcendant, mais suffisant pour comprendre ce qu'il faut faire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include <dos.h> int keypressed_i; void interrupt (*old_keyb_handler)(); void interrupt new_keyb_handler() { keypressed_i++; old_keyb_handler(); // on n'oublie pas d'appeler l'ancien isr }; int main() { // int 9 est l'interruption clavier old_keyb_handler = getvect(0x09); // choppe adresse de la routine d'int. originale keypressed_i=0; setvect(0x09, &new_keyb_handler); // installe notre nouveau isr clavier while( keypressed_i < 10) // attend la frappe de 5 touches ( 1 touche => 1 Makecode + 1 Breakcode) { gotoxy(1,1); printf("%d", keypressed_i); } setvect(0x09, old_keyb_handler); // restaure ancienne routine clavier return 0; };
golem
+++
Un peu de pub pour mes unités Pascal : télécharge mes unités
http://www.developpez.com/pascal/unite/src_unit.zip
Ouvre "SClavier.pas", et découvre la reprogrammation complète du clavier avec en retour une code ASCII (l'interruption renvoie un "code clavier", il faut remaper le clavier ...).
Pour t'aider à la convertion Pascal -> C :
http://www.developpez.com/pascal/tutorial/TP-C.htm
---
Parties intéressantes du code :
à placer dans ton interruption, récupère le code clavier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 asm cli in al,60h mov [TmpTouche],al { Stocke la touche pressée } in al,61h or al,130 out 61h,al { Dit à l'ordi qu'une touche a été pressée } and al,127 out 61h,al { Reinitialisation terminée } mov al,32 out 20h,al { Revalider les interruptions } sti end;
Quelques codes de clavier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Codes claviers spéciaux : 224 : Annonce que la touche suivante sera "une touche étendue" 255 : Le tampon est plein !
1 -> Echappe
28 -> Entrée
57 -> Espace
Ce qui est super, c'est qu'après tu auras un tableau pouvant dire si une touche est pressée ou non ! (et donc gèrer la pression simultanée de touches)
@+ Haypo
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager