Accueil > > > LECTURE DU SCANCODE [TASM, PORT 60H, DÉTOURNEMENT D'INT]
LECTURE DU SCANCODE [TASM, PORT 60H, DÉTOURNEMENT D'INT]
Information sur la source
Description
En fichier EXE du MS-DOS
pour compiler : TASM nomdufichier
pour linker : TLINK nomdufichier
Le scancode est le code qu'envoie le clavier lors d'un changement d'état d'une de ses touches.
Source
- .386
- code segment use16
- assume cs:code,ds:code
- prog:
- mov ax,cs
- mov ds,ax
- mov ax,0B800h ;Pointe sur la mémoire vidéo du mode texte pour affichage de caractère
- mov es,ax
- xor ax,ax
- mov gs,ax
- mov eax, gs:[09h*4]
- mov oldirq1, eax ;sauvegarde de l'IRQ1 lié à l'INT 09h (sinon PANIC)
- mov ax, cs
- shl eax, 16
- mov ax, offset irq1
- mov gs:[09h*4], eax ;place celle du code présent
- boucle:
- xor di,di
- mov si,offset map
- mov cx,256
- actualiser:
- movsb
- inc di
- loop actualiser
- cmp codefin,81h ;Dès que la touche ESC est relâcher on quitte
- jnz boucle
- fin:
- mov eax, oldirq1 ;restauration de l'Int 09h (sinon PANIC)
- mov gs:[09h*4], eax
- mov ah,4Ch
- int 21h ;Code de fin
- irq1:
- pushad
- xor ax,ax
- in al,60h ;Lecture du Scancode
- mov bx,ax
- cmp ax,81h ;Test de la touche Esc relâchée
- jz _esc
- jge break
- mov ds:[map+bx],'1'
- mov ds:[map+0E0h],'.'
- mov ds:[map+0E1h],'.'
- jmp irqfin
- _esc:
- mov codefin,al
- jmp irqfin
- break:
- cmp al,0E0h ;Teste si le code E0h est présent pour les touches étendues
- jz .e0
- cmp al,0E1h ;Teste si le code E1h est présent (seul la touche Pause l'utilise)
- jz .e0
- and bx,7Fh
- mov ds:[map+bx],'.'
- jmp irqfin
- .e0:
- mov ds:[map+bx],'X'
- irqfin:
- mov al,20h
- out 20h,al ;End Of Interrupt
- popad
- iret ;Comme ret sauf pour interruption
- oldirq1 dd ? ;sauvegarde de l'ancienne adresse de l'IRQ1 (irq du clavier)
- map db 256 dup('.') ;Carte du scancode
- codefin db 0 ;test du code 81h c'est le BreakCode de la touche Echap qui permettra de quitter le programme
- code ends
- end prog
.386
code segment use16
assume cs:code,ds:code
prog:
mov ax,cs
mov ds,ax
mov ax,0B800h ;Pointe sur la mémoire vidéo du mode texte pour affichage de caractère
mov es,ax
xor ax,ax
mov gs,ax
mov eax, gs:[09h*4]
mov oldirq1, eax ;sauvegarde de l'IRQ1 lié à l'INT 09h (sinon PANIC)
mov ax, cs
shl eax, 16
mov ax, offset irq1
mov gs:[09h*4], eax ;place celle du code présent
boucle:
xor di,di
mov si,offset map
mov cx,256
actualiser:
movsb
inc di
loop actualiser
cmp codefin,81h ;Dès que la touche ESC est relâcher on quitte
jnz boucle
fin:
mov eax, oldirq1 ;restauration de l'Int 09h (sinon PANIC)
mov gs:[09h*4], eax
mov ah,4Ch
int 21h ;Code de fin
irq1:
pushad
xor ax,ax
in al,60h ;Lecture du Scancode
mov bx,ax
cmp ax,81h ;Test de la touche Esc relâchée
jz _esc
jge break
mov ds:[map+bx],'1'
mov ds:[map+0E0h],'.'
mov ds:[map+0E1h],'.'
jmp irqfin
_esc:
mov codefin,al
jmp irqfin
break:
cmp al,0E0h ;Teste si le code E0h est présent pour les touches étendues
jz .e0
cmp al,0E1h ;Teste si le code E1h est présent (seul la touche Pause l'utilise)
jz .e0
and bx,7Fh
mov ds:[map+bx],'.'
jmp irqfin
.e0:
mov ds:[map+bx],'X'
irqfin:
mov al,20h
out 20h,al ;End Of Interrupt
popad
iret ;Comme ret sauf pour interruption
oldirq1 dd ? ;sauvegarde de l'ancienne adresse de l'IRQ1 (irq du clavier)
map db 256 dup('.') ;Carte du scancode
codefin db 0 ;test du code 81h c'est le BreakCode de la touche Echap qui permettra de quitter le programme
code ends
end prog
Conclusion
Ce code peut être optimisé en utilisant un bit par touche sur la carte du scancode au lieu d'un octet, on peut ainsi réduire la taille. On peut ne pas utiliser l'interruption du clavier mais c'est moins bien et un test est nécessaire avant la lecture du scancode c'est le bit 0 sur le port 64h. Il est peut-être plus facile d'utiliser les fonctions de l'INT 16h mais seulement en 16bits!
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
[FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE SECOND JOURTECHDAYS PARIS 2012 : PLEINIèRE SECOND JOUR par ROMELARD Fabrice
Après une première journée dédiée aux développeurs, cette seconde journée est dédiée au monde des entreprises et de ses applications. Ainsi, cette pleinière est dédiée à faire un 360 de l'évolution des applications Business aux demandes ac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|