Rev 479 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 479 | Rev 486 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | ;************************************** |
1 | ;************************************** |
2 | ;* ÎÁÐÀÁÎÒ×ÈÊ ÏÐÅÐÛÂÀÍÈß ÎÒ ÌÛØÈ PS/2 * |
2 | ;* IRQ HANDLER FOR PS/2 MOUSE * |
3 | ;************************************** |
3 | ;************************************** |
Line 4... | Line 4... | ||
4 | 4 | ||
Line 5... | Line 5... | ||
5 | proc irq_handler |
5 | proc irq_handler |
6 | 6 | ||
Line 7... | Line 7... | ||
7 | call Wait8042BufferEmpty ;î÷èñòêà áóôåðà |
7 | call Wait8042BufferEmpty ;clear buffer |
8 | in al,0x60 ;ïîëó÷èòü ñêýí-êîä |
8 | in al,0x60 ;get scan-code |
9 | 9 | ||
10 | cmp [mouse_byte],0 |
10 | cmp [mouse_byte],0 |
Line 16... | Line 16... | ||
16 | cmp [mouse_byte],3 |
16 | cmp [mouse_byte],3 |
17 | je .byte4 |
17 | je .byte4 |
18 | jmp .error |
18 | jmp .error |
Line 19... | Line 19... | ||
19 | 19 | ||
20 | .byte1: |
20 | .byte1: |
21 | test al,1000b ;ïåðâûé áàéò ïîñûëêè? |
21 | test al,1000b ;first byte? |
22 | jz .error ;ñáîé ñèíõðîíèçàöèè |
22 | jz .error |
23 | mov [first_byte],al |
23 | mov [first_byte],al |
24 | inc [mouse_byte] |
24 | inc [mouse_byte] |
Line 25... | Line 25... | ||
25 | jmp .exit |
25 | jmp .exit |
Line 64... | Line 64... | ||
64 | .z_moving: |
64 | .z_moving: |
65 | movsx eax,al |
65 | movsx eax,al |
66 | mov [ZMoving],eax |
66 | mov [ZMoving],eax |
Line 67... | Line 67... | ||
67 | 67 | ||
68 | .xy_moving: |
68 | .xy_moving: |
69 | mov ah,0 ;äóáëèðóåì çíàê âî âñå ðàçðÿäû AH |
69 | mov ah,0 |
70 | mov al,[first_byte] |
70 | mov al,[first_byte] |
71 | test al,10000b |
71 | test al,10000b |
72 | jz @f |
72 | jz @f |
Line 73... | Line 73... | ||
73 | mov ah,0FFh |
73 | mov ah,0FFh |
74 | 74 | ||
75 | @@: |
75 | @@: |
76 | mov al,[second_byte] |
76 | mov al,[second_byte] |
Line 77... | Line 77... | ||
77 | cwd |
77 | cwd |
78 | mov [XMoving],eax |
78 | mov [XMoving],eax |
79 | 79 | ||
80 | mov ah,0 ;äóáëèðóåì çíàê âî âñå ðàçðÿäû AH |
80 | mov ah,0 |
81 | mov al,[first_byte] |
81 | mov al,[first_byte] |
Line 101... | Line 101... | ||
101 | ret |
101 | ret |
102 | endp |
102 | endp |
Line 103... | Line 103... | ||
103 | 103 | ||
104 | 104 | ||
105 | ;*********************************************** |
105 | ;*********************************************** |
106 | ;* ÎÆÈÄÀÍÈÅ Î×ÈÑÒÊÈ ÂÕÎÄÍÎÃÎ ÁÓÔÅÐÀ I8042 * |
106 | ;* Waiting for clearing I8042 buffer * |
107 | ;* Ïðè âûõîäå èç ïðîöåäóðû: * |
107 | ;* Retutned state: * |
108 | ;* ôëàã ZF óñòàíîâëåí - íîðìàëüíîå çàâåðøåíèå, * |
108 | ;* ZF is set - good ending, * |
109 | ;* ôëàã ZF ñáðîøåí - îøèáêà òàéì-àóòà. * |
109 | ;* ZF is cleared - time-out error. * |
110 | ;*********************************************** |
110 | ;*********************************************** |
111 | Wait8042BufferEmpty: |
111 | Wait8042BufferEmpty: |
112 | push ecx |
112 | push ecx |
113 | xor ecx,ecx |
113 | xor ecx,ecx |
114 | @@: |
114 | @@: |
115 | in al,64h |
115 | in al,64h |
116 | test al,00000010b |
116 | test al,00000010b |
Line 117... | Line 117... | ||
117 | loopnz @b |
117 | loopnz @b |