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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
org 100h
%macro affiche 4
;%1=x,%2=y,%3=LPtext,%4=couleur
mov si,%3
mov bx,%1
mov di,%2
mov ah,%4
call VGA3
%endmacro
mov ax,cs
mov ds,ax
;sauvegarde du pointeur originale sur IRQ 12=int 74h (souris)
push 0
pop es
mov si,74h
shl si,2
cli
mov ax,[es:si]
mov [offset_IRQ12_original],ax
mov ax,[es:si+2]
mov [segment_IRQ12_original],ax
;mis en place de notre IRQ12 perso
mov ax,souris
mov [es:si],ax ;offset
mov ax,cs
mov [es:si+2],ax ;segment
sti
;passage en mode texte 80*25 16 couleurs
mov ah,0
mov al,3h
int 10h
;tester souris
mov ax,65535 ;boucle pour patienter 65535*65535
B:
mov cx,65535
A: loop A
dec ax
jnz B
;restauration de IRQ12 original
cli
push 0
pop es
mov si,74h
shl si,2
mov ax,[offset_IRQ12_original]
mov [es:si],ax
mov ax,[segment_IRQ12_original]
mov [es:si+2],ax
sti
ret
;-----------------------
souris:
cli
push ax
push bx
push cx
push si
push di
in al,60h ;lecture du premier octet de la trame
test al,1 ;click droit
jz suite
push es
mov ax,0B800h
push ax
pop es
affiche 0,0,droit,1110b ;affichage du message "click droit"
mov cx,65535 ;tempo
C: loop C
mov ax,0B800h
push ax
pop es
affiche 0,0,blanc,1110b ;effacement du message "click droit"
pop es
suite:
mov al,20h ;acquitement
out 0A0h,al ;pic escalve (irq 12 gérée par irq2 du maitre)
out 20h,al ;pic maitre
pop di
pop si
pop cx
pop bx
pop ax
fin:
sti
iret
;------ routine d'affichage en ram vga directe
VGA3: ;si=LPtext,bx=x,di=y,ah=couleur,es=B800h
pushad
shl bx,1
VGA3_debut:
lodsb
cmp al,0
jz VGA3_fin
mov [es:di+bx],ax
inc bx
inc bx
jmp VGA3_debut
VGA3_fin:
popad
ret
;---------------------------
offset_IRQ12_original resw 1
segment_IRQ12_original resw 1
droit db 'click droit',0
blanc db ' ',0 |
Partager