Subversion Repositories Kolibri OS

Rev

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

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