Subversion Repositories Kolibri OS

Rev

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

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