- .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