Subversion Repositories Kolibri OS

Rev

Rev 58 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 58 Rev 120
1
; Íîìåð ïðèíèìàåìîãî îò ìûøè áàéòà
1
; Íîìåð ïðèíèìàåìîãî îò ìûøè áàéòà
2
MouseByteNumber DB 0
2
MouseByteNumber DB 0
3
; Òðåõáàéòîâàÿ ñòðóêòóðà äàííûõ, ïåðåäàâàåìàÿ ìûøüþ
3
; Òðåõáàéòîâàÿ ñòðóêòóðà äàííûõ, ïåðåäàâàåìàÿ ìûøüþ
4
FirstByte       DB 0
4
FirstByte       DB 0
5
SecondByte      DB 0
5
SecondByte      DB 0
6
ThirdByte       DB 0
6
ThirdByte       DB 0
7
 
-
 
-
 
7
timer_ticks_com dd 0
8
;***************************************
8
;***************************************
9
;* ÍÎÂÛÉ ÎÁÐÀÁÎÒ×ÈÊ ÏÐÅÐÛÂÀÍÈß ÎÒ ÌÛØÈ *
9
;* ÍÎÂÛÉ ÎÁÐÀÁÎÒ×ÈÊ ÏÐÅÐÛÂÀÍÈß ÎÒ ÌÛØÈ *
10
;***************************************
10
;***************************************
11
check_mouse_data_com1:
11
check_mouse_data_com1:
12
;        cmp     [com1_mouse_detected],0
12
;        cmp     [com1_mouse_detected],0
13
;        je      @@EndMouseInterrupt
13
;        je      @@EndMouseInterrupt
14
; Ïðîâåðèòü íàëè÷èå äàííûõ
14
; Ïðîâåðèòü íàëè÷èå äàííûõ
15
        mov     DX,3F8h  ;[COMPortBaseAddr]
15
        mov     DX,3F8h  ;[COMPortBaseAddr]
16
        add     DX,5         ;xFDh
16
        add     DX,5         ;xFDh
17
        in      AL,DX
17
        in      AL,DX
18
        test    AL,1   ;Äàííûå ãîòîâû?
18
        test    AL,1   ;Äàííûå ãîòîâû?
19
        jz      @@Error
19
        jz      @@Error
20
; Ââåñòè äàííûå
20
; Ââåñòè äàííûå
21
        mov     DX,3F8h   ;[COMPortBaseAddr]   ;xF8h
21
        mov     DX,3F8h   ;[COMPortBaseAddr]   ;xF8h
22
        in      AL,DX
22
        in      AL,DX
23
; Ñáðîñèòü ñòàðøèé íåçíà÷àùèé áèò
23
; Ñáðîñèòü ñòàðøèé íåçíà÷àùèé áèò
24
        and     AL,01111111b
24
        and     AL,01111111b
25
 
25
 
26
; Îïðåäåëèòü ïîðÿäêîâûé íîìåð ïðèíèìàåìîãî áàéòà
26
; Îïðåäåëèòü ïîðÿäêîâûé íîìåð ïðèíèìàåìîãî áàéòà
27
        cmp     [MouseByteNumber],0
27
        cmp     [MouseByteNumber],0
28
        je      @@FirstByte
28
        je      @@FirstByte
29
        cmp     [MouseByteNumber],1
29
        cmp     [MouseByteNumber],1
30
        je      @@SecondByte
30
        je      @@SecondByte
31
        cmp     [MouseByteNumber],2
31
        cmp     [MouseByteNumber],2
32
        je      @@ThirdByte
32
        je      @@ThirdByte
33
        jmp     @@Error
33
        jmp     @@Error
34
 
34
 
35
; Ñîõðàíèòü ïåðâûé áàéò äàííûõ
35
; Ñîõðàíèòü ïåðâûé áàéò äàííûõ
36
@@FirstByte:
36
@@FirstByte:
37
        test    AL,1000000b       ;Ïåðâûé áàéò ïîñûëêè?
37
        test    AL,1000000b       ;Ïåðâûé áàéò ïîñûëêè?
38
        jz      @@Error
38
        jz      @@Error
39
        mov     [FirstByte],AL
39
        mov     [FirstByte],AL
40
        inc     [MouseByteNumber] ;óâåëè÷èòü ñ÷åò÷èê
40
        inc     [MouseByteNumber] ;óâåëè÷èòü ñ÷åò÷èê
41
        jmp     @@EndMouseInterrupt
41
        jmp     @@EndMouseInterrupt
42
; Ñîõðàíèòü âòîðîé áàéò äàííûõ
42
; Ñîõðàíèòü âòîðîé áàéò äàííûõ
43
@@SecondByte:
43
@@SecondByte:
44
        test    AL,1000000b
44
        test    AL,1000000b
45
        jnz     @@Error
45
        jnz     @@Error
46
        mov     [SecondByte],AL
46
        mov     [SecondByte],AL
47
        inc     [MouseByteNumber] ;óâåëè÷èòü ñ÷åò÷èê
47
        inc     [MouseByteNumber] ;óâåëè÷èòü ñ÷åò÷èê
48
        jmp     @@EndMouseInterrupt
48
        jmp     @@EndMouseInterrupt
49
; Ñîõðàíèòü òðåòèé áàéò äàííûõ
49
; Ñîõðàíèòü òðåòèé áàéò äàííûõ
50
@@ThirdByte:
50
@@ThirdByte:
51
        test    AL,1000000b
51
        test    AL,1000000b
52
        jnz     @@Error
52
        jnz     @@Error
53
        mov     [ThirdByte],AL    ;óâåëè÷èòü ñ÷åò÷èê
53
        mov     [ThirdByte],AL    ;óâåëè÷èòü ñ÷åò÷èê
54
        mov     [MouseByteNumber],0
54
        mov     [MouseByteNumber],0
55
; (Ïàêåò äàííûõ îò ìûøè ïðèíÿò ïîëíîñòüþ).
55
; (Ïàêåò äàííûõ îò ìûøè ïðèíÿò ïîëíîñòüþ).
56
; Çàïèñàòü íîâîå çíà÷åíèå ñîñòîÿíèÿ êíîïîê ìûøè
56
; Çàïèñàòü íîâîå çíà÷åíèå ñîñòîÿíèÿ êíîïîê ìûøè
57
        mov al,[FirstByte]   ;[0xfb01]
57
        mov al,[FirstByte]   ;[0xfb01]
58
        mov ah,al
58
        mov ah,al
59
        shr al,3
59
        shr al,3
60
        and al,2
60
        and al,2
61
        shr ah,5
61
        shr ah,5
62
        and ah,1
62
        and ah,1
63
        add al,ah
63
        add al,ah
64
        mov    [0xfb40],al
64
        mov    [0xfb40],al
65
        mov    [mouse_active],1
65
        mov    [mouse_active],1
66
; Ïðèáàâèòü ïåðåìåùåíèå ïî X ê êîîðäèíàòå X
66
; Ïðèáàâèòü ïåðåìåùåíèå ïî X ê êîîðäèíàòå X
67
        mov     AL,[FirstByte]
67
        mov     AL,[FirstByte]
68
        shl     AL,6
68
        shl     AL,6
69
        or      AL,[SecondByte]
69
        or      AL,[SecondByte]
70
        cbw
70
        cbw
71
         shl  ax,1
71
        call    mouse_acceleration_com1
72
        add     AX,[0xFB0A]    ;[XCoordinate]
72
        add     AX,[0xFB0A]    ;[XCoordinate]
73
        ; Êóðñîð íå äîëæåí âûõîäèòü çà ëåâóþ èëè
73
        ; Êóðñîð íå äîëæåí âûõîäèòü çà ëåâóþ èëè
74
        ; ïðàâóþ ãðàíèöó ýêðàíà
74
        ; ïðàâóþ ãðàíèöó ýêðàíà
75
        js      @@X1
75
        js      @@X1
76
        cmp     AX,[0xFE00]   ;ScreenLength
76
        cmp     AX,[0xFE00]   ;ScreenLength
77
        jb      @@X2
77
        jb      @@X2
78
        ; Óñòàíîâèòü êîîðäèíàòó X ïî ïðàâîé ãðàíèöå
78
        ; Óñòàíîâèòü êîîðäèíàòó X ïî ïðàâîé ãðàíèöå
79
        mov     AX,[0xFE00]   ;ScreenLength-1
79
        mov     AX,[0xFE00]   ;ScreenLength-1
80
        dec     ax
80
        dec     ax
81
        jmp     @@X2
81
        jmp     @@X2
82
@@X1:
82
@@X1:
83
       ; Óñòàíîâèòü êîîðäèíàòó X ïî ëåâîé ãðàíèöå
83
       ; Óñòàíîâèòü êîîðäèíàòó X ïî ëåâîé ãðàíèöå
84
        xor     AX,AX
84
        xor     AX,AX
85
@@X2:
85
@@X2:
86
        mov     [0xFB0A],AX     ;[XCoordinate]
86
        mov     [0xFB0A],AX     ;[XCoordinate]
87
        ; Ïðèáàâèòü ïåðåìåùåíèå ïî Y ê êîîðäèíàòå Y
87
        ; Ïðèáàâèòü ïåðåìåùåíèå ïî Y ê êîîðäèíàòå Y
88
        mov     AL,[FirstByte]
88
        mov     AL,[FirstByte]
89
        and     AL,00001100b
89
        and     AL,00001100b
90
        shl     AL,4
90
        shl     AL,4
91
        or      AL,[ThirdByte]
91
        or      AL,[ThirdByte]
92
        cbw
92
        cbw
93
         shl  ax,1
93
        call    mouse_acceleration_com1
94
        add     AX,[0xFB0C]   ;[YCoordinate]
94
        add     AX,[0xFB0C]   ;[YCoordinate]
95
        ; Êóðñîð íå äîëæåí âûõîäèòü çà âåðõíþþ èëè
95
        ; Êóðñîð íå äîëæåí âûõîäèòü çà âåðõíþþ èëè
96
        ; íèæíþþ ãðàíèöó ýêðàíà
96
        ; íèæíþþ ãðàíèöó ýêðàíà
97
        js      @@Y1
97
        js      @@Y1
98
        cmp     AX,[0xFE04]  ;ScreenHeigth
98
        cmp     AX,[0xFE04]  ;ScreenHeigth
99
        jb      @@Y2
99
        jb      @@Y2
100
        ; Óñòàíîâèòü êîîðäèíàòó X ïî íèæíåé ãðàíèöå
100
        ; Óñòàíîâèòü êîîðäèíàòó X ïî íèæíåé ãðàíèöå
101
        mov     AX,[0xFE04] ;ScreenHeigth-1
101
        mov     AX,[0xFE04] ;ScreenHeigth-1
102
        dec     ax
102
        dec     ax
103
        jmp     @@Y2
103
        jmp     @@Y2
104
@@Y1:
104
@@Y1:
105
       ; Óñòàíîâèòü êîîðäèíàòó X ïî âåðõíåé ãðàíèöå
105
       ; Óñòàíîâèòü êîîðäèíàòó X ïî âåðõíåé ãðàíèöå
106
        xor     AX,AX
106
        xor     AX,AX
107
@@Y2:
107
@@Y2:
108
        mov     [0xFB0C],AX     ;[YCoordinate]
108
        mov     [0xFB0C],AX     ;[YCoordinate]
-
 
109
        mov   eax,[timer_ticks]
-
 
110
        mov   [timer_ticks_com],eax
109
        jmp     @@EndMouseInterrupt
111
        jmp     @@EndMouseInterrupt
110
 
112
 
111
@@Error:
113
@@Error:
112
; Ïðîèçîøåë ñáîé â ïîðÿäêå ïåðåäà÷è èíôîðìàöèè îò
114
; Ïðîèçîøåë ñáîé â ïîðÿäêå ïåðåäà÷è èíôîðìàöèè îò
113
; ìûøè, îáíóëèòü ñ÷åò÷èê áàéòîâ ïàêåòà äàííûõ
115
; ìûøè, îáíóëèòü ñ÷åò÷èê áàéòîâ ïàêåòà äàííûõ
114
        mov     [MouseByteNumber],0
116
        mov     [MouseByteNumber],0
115
@@EndMouseInterrupt:
117
@@EndMouseInterrupt:
116
        call  ready_for_next_irq
118
        call  ready_for_next_irq
117
        ret
119
        ret
-
 
120
 
-
 
121
mouse_acceleration_com1:
-
 
122
        push    eax
-
 
123
        mov   eax,[timer_ticks]
-
 
124
        sub   eax,[timer_ticks_com]
-
 
125
        cmp   eax,[mouse_delay]
-
 
126
        pop    eax
-
 
127
        ja     @f
-
 
128
        shl    ax,1
-
 
129
@@:
-
 
130
        ret