Subversion Repositories Kolibri OS

Rev

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