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
COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ?MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ? par junarnoalg
La prochaine session de MyTIC aura lieu à Namur, le 23 mars prochain. Pendant presque une heure, nous parlerons de SharePoint 2010. Voici un aperçu du programme.
Accueil : 17h30 Début de la session : 18h00 - Les nouvelles int...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : ASSEMBLEURRE : ASSEMBLEUR par solleil
Cliquez pour lire la suite par solleil RE : ASSEMBLEURRE : ASSEMBLEUR par ghuysmans99
Cliquez pour lire la suite par ghuysmans99
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|