1,11 → 1,11 |
;************************************** |
;* ÎÁÐÀÁÎÒ×ÈÊ ÏÐÅÐÛÂÀÍÈß ÎÒ ÌÛØÈ PS/2 * |
;* IRQ HANDLER FOR PS/2 MOUSE * |
;************************************** |
|
proc irq_handler |
|
call Wait8042BufferEmpty ;î÷èñòêà áóôåðà |
in al,0x60 ;ïîëó÷èòü ñêýí-êîä |
call Wait8042BufferEmpty ;clear buffer |
in al,0x60 ;get scan-code |
|
cmp [mouse_byte],0 |
je .byte1 |
18,8 → 18,8 |
jmp .error |
|
.byte1: |
test al,1000b ;ïåðâûé áàéò ïîñûëêè? |
jz .error ;ñáîé ñèíõðîíèçàöèè |
test al,1000b ;first byte? |
jz .error |
mov [first_byte],al |
inc [mouse_byte] |
jmp .exit |
66,7 → 66,7 |
mov [ZMoving],eax |
|
.xy_moving: |
mov ah,0 ;äóáëèðóåì çíàê âî âñå ðàçðÿäû AH |
mov ah,0 |
mov al,[first_byte] |
test al,10000b |
jz @f |
77,7 → 77,7 |
cwd |
mov [XMoving],eax |
|
mov ah,0 ;äóáëèðóåì çíàê âî âñå ðàçðÿäû AH |
mov ah,0 |
mov al,[first_byte] |
test al,100000b |
jz @f |
103,10 → 103,10 |
|
|
;*********************************************** |
;* ÎÆÈÄÀÍÈÅ Î×ÈÑÒÊÈ ÂÕÎÄÍÎÃÎ ÁÓÔÅÐÀ I8042 * |
;* Ïðè âûõîäå èç ïðîöåäóðû: * |
;* ôëàã ZF óñòàíîâëåí - íîðìàëüíîå çàâåðøåíèå, * |
;* ôëàã ZF ñáðîøåí - îøèáêà òàéì-àóòà. * |
;* Waiting for clearing I8042 buffer * |
;* Retutned state: * |
;* ZF is set - good ending, * |
;* ZF is cleared - time-out error. * |
;*********************************************** |
Wait8042BufferEmpty: |
push ecx |
117,4 → 117,4 |
loopnz @b |
pop ecx |
|
ret ;âîçâðàò â ïîäïðîãðàììó |
ret |