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 |