Rev 465 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 465 | Rev 473 | ||
---|---|---|---|
1 | $Revision: 465 $ |
1 | $Revision: 473 $ |
2 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
3 | ;; ;; |
3 | ;; ;; |
4 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
4 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
5 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; Distributed under terms of the GNU General Public License ;; |
6 | ;; ;; |
6 | ;; ;; |
7 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
7 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
8 | 8 | ||
9 | ;************************************************** |
9 | ;************************************************** |
10 | ;* ÏÎÈÑÊ ÌÛØÈ ÏÎ ÏÎÑËÅÄÎÂÀÒÅËÜÍÛÌ ÏÎÐÒÀÌ * |
10 | ;* ÏÎÈÑÊ ÌÛØÈ ÏÎ ÏÎÑËÅÄÎÂÀÒÅËÜÍÛÌ ÏÎÐÒÀÌ * |
11 | ;* Ïðîöåäóðà ïîäãîòàâëèâàåò ãëîáàëüíûå ïåðåìåííûå * |
11 | ;* Ïðîöåäóðà ïîäãîòàâëèâàåò ãëîáàëüíûå ïåðåìåííûå * |
12 | ;* COMPortNum è COMPortBaseAddr äëÿ ïîäïðîãðàììû * |
12 | ;* COMPortNum è COMPortBaseAddr äëÿ ïîäïðîãðàììû * |
13 | ;* óñòàíîâêè îáðàáîò÷èêà ïðåðûâàíèÿ * |
13 | ;* óñòàíîâêè îáðàáîò÷èêà ïðåðûâàíèÿ * |
14 | ;************************************************** |
14 | ;************************************************** |
15 | ; Àâòîð èñõîäíîãî òåêñòà Êóëàêîâ Âëàäèìèð Ãåííàäüåâè÷. |
15 | ; Àâòîð èñõîäíîãî òåêñòà Êóëàêîâ Âëàäèìèð Ãåííàäüåâè÷. |
16 | ; Àäàïòàöèÿ è äîðàáîòêà Mario79 |
16 | ; Àäàïòàöèÿ è äîðàáîòêà Mario79 |
17 | 17 | ||
18 | Detect_COM_Mouse: |
18 | Detect_COM_Mouse: |
19 | pusha |
19 | pusha |
20 | call MSMouseSearch |
20 | call MSMouseSearch |
21 | cmp AL,'M' |
21 | cmp AL,'M' |
22 | jne @f |
22 | jne @f |
23 | mov [com1_mouse_detected],1 |
23 | mov [com1_mouse_detected],1 |
24 | pusha |
24 | mov [irq_owner+4*4], 1 ; IRQ4 owner is System |
25 | - | ||
26 | mov eax,4 |
25 | mov eax, [RESERVED_PORTS] |
27 | shl eax,2 |
26 | inc eax |
28 | mov [irq_owner+eax], 1 |
- | |
29 | - | ||
30 | inc dword [RESERVED_PORTS] |
- | |
31 | mov edi,[RESERVED_PORTS] |
27 | mov [RESERVED_PORTS], eax |
32 | shl edi,4 |
28 | shl eax, 4 |
33 | mov [RESERVED_PORTS+edi+0],dword 1 |
29 | mov [RESERVED_PORTS+eax+0], dword 1 |
34 | mov [RESERVED_PORTS+edi+4],dword 0x3f0 |
30 | mov [RESERVED_PORTS+eax+4], dword 0x3F8 |
35 | mov [RESERVED_PORTS+edi+8],dword 0x3ff |
31 | mov [RESERVED_PORTS+eax+8], dword 0x3FF |
36 | - | ||
37 | popa |
- | |
38 | mov esi,boot_setmouse_type+22 |
32 | mov esi,boot_setmouse_type+22 |
39 | call boot_log |
33 | call boot_log |
40 | @@: |
34 | @@: |
41 | sub [COMPortBaseAddr],100h |
35 | sub [COMPortBaseAddr],100h |
42 | call MSMouseSearch |
36 | call MSMouseSearch |
43 | cmp AL,'M' |
37 | cmp AL,'M' |
44 | jne @f |
38 | jne @f |
45 | mov [com2_mouse_detected],1 |
39 | mov [com2_mouse_detected],1 |
46 | pusha |
40 | mov [irq_owner+3*4], 1 ; IRQ3 owner is System |
47 | - | ||
48 | mov eax,3 |
41 | mov eax, [RESERVED_PORTS] |
49 | shl eax,2 |
42 | inc eax |
50 | mov [irq_owner+eax], 1 |
- | |
51 | - | ||
52 | inc dword [RESERVED_PORTS] |
- | |
53 | mov edi,[RESERVED_PORTS] |
43 | mov [RESERVED_PORTS], eax |
54 | shl edi,4 |
44 | shl eax, 4 |
55 | mov [RESERVED_PORTS+edi+0],dword 1 |
45 | mov [RESERVED_PORTS+eax+0], dword 1 |
56 | mov [RESERVED_PORTS+edi+4],dword 0x2f0 |
46 | mov [RESERVED_PORTS+eax+4], dword 0x2F8 |
57 | mov [RESERVED_PORTS+edi+8],dword 0x2ff |
47 | mov [RESERVED_PORTS+eax+8], dword 0x2FF |
58 | - | ||
59 | popa |
- | |
60 | mov esi,boot_setmouse_type+44 |
48 | mov esi,boot_setmouse_type+44 |
61 | call boot_log |
49 | call boot_log |
62 | @@: |
50 | @@: |
63 | popa |
51 | popa |
64 | jmp end_detecting_mouse |
52 | jmp end_detecting_mouse |
65 | 53 | ||
66 | MSMouseSearch: |
54 | MSMouseSearch: |
67 | ; ÏÎÈÑÊ ÌÛØÈ ×ÅÐÅÇ COM-ÏÎÐÒÛ |
55 | ; ÏÎÈÑÊ ÌÛØÈ ×ÅÐÅÇ COM-ÏÎÐÒÛ |
68 | MouseSearch: |
56 | MouseSearch: |
69 | ; Óñòàíàâëèâàåì ñêîðîñòü |
57 | ; Óñòàíàâëèâàåì ñêîðîñòü |
70 | ; ïðèåìà/ïåðåäà÷è 1200 áîä |
58 | ; ïðèåìà/ïåðåäà÷è 1200 áîä |
71 | mov DX,[COMPortBaseAddr] |
59 | mov DX,[COMPortBaseAddr] |
72 | add DX,3 |
60 | add DX,3 |
73 | in AL,DX |
61 | in AL,DX |
74 | or AL,80h ;óñòàíîâèòü áèò DLAB |
62 | or AL,80h ;óñòàíîâèòü áèò DLAB |
75 | out DX,AL |
63 | out DX,AL |
76 | mov DX,[COMPortBaseAddr] |
64 | mov DX,[COMPortBaseAddr] |
77 | mov AL,60h ;1200 áîä |
65 | mov AL,60h ;1200 áîä |
78 | out DX,AL |
66 | out DX,AL |
79 | inc DX |
67 | inc DX |
80 | mov AL,0 |
68 | mov AL,0 |
81 | out DX,AL |
69 | out DX,AL |
82 | ; Óñòàíîâèòü äëèíó ñëîâà 7 áèò, 1 ñòîïîâûé áèò, |
70 | ; Óñòàíîâèòü äëèíó ñëîâà 7 áèò, 1 ñòîïîâûé áèò, |
83 | ; ÷åòíîñòü íå êîíòðîëèðîâàòü |
71 | ; ÷åòíîñòü íå êîíòðîëèðîâàòü |
84 | mov DX,[COMPortBaseAddr] |
72 | mov DX,[COMPortBaseAddr] |
85 | add DX,3 |
73 | add DX,3 |
86 | mov AL,00000010b |
74 | mov AL,00000010b |
87 | out DX,AL |
75 | out DX,AL |
88 | ; Çàïðåòèòü âñå ïðåðûâàíè |
76 | ; Çàïðåòèòü âñå ïðåðûâàíè |
89 | mov DX,[COMPortBaseAddr] |
77 | mov DX,[COMPortBaseAddr] |
90 | inc DX |
78 | inc DX |
91 | mov AL,0 |
79 | mov AL,0 |
92 | out DX,AL |
80 | out DX,AL |
93 | ; Ïðîâåðèòü, ÷òî óñòðîéñòâî ïîäêëþ÷åíî è ÿâëÿåòñ |
81 | ; Ïðîâåðèòü, ÷òî óñòðîéñòâî ïîäêëþ÷åíî è ÿâëÿåòñ |
94 | ; ìûøüþ òèïà MSMouse |
82 | ; ìûøüþ òèïà MSMouse |
95 | ; Îòêëþ÷èòü ïèòàíèå ìûøè è ïðåðûâàíè |
83 | ; Îòêëþ÷èòü ïèòàíèå ìûøè è ïðåðûâàíè |
96 | mov DX,[COMPortBaseAddr] |
84 | mov DX,[COMPortBaseAddr] |
97 | add DX,4 ;ðåãèñòð óïðàâëåíèÿ ìîäåìîì |
85 | add EDX,4 ;ðåãèñòð óïðàâëåíèÿ ìîäåìîì |
98 | mov AL,0 ;ñáðîñèòü DTR, RTS è OUT2 |
86 | mov AL,0 ;ñáðîñèòü DTR, RTS è OUT2 |
99 | out DX,AL |
87 | out DX,AL |
100 | ; Îæèäàòü 5 "òèêîâ" (0,2 ñ) |
88 | ; Îæèäàòü 5 "òèêîâ" (0,2 ñ) |
101 | mov ecx,0xffff |
89 | mov ecx, 0xFFFF |
102 | dT_1: |
- | |
103 | dec ecx |
90 | loop $ |
104 | cmp ecx,0 |
- | |
105 | jne dT_1 |
- | |
106 | mov ecx,0xffff |
- | |
107 | ; Âêëþ÷èòü ïèòàíèå ìûøè |
91 | ; Âêëþ÷èòü ïèòàíèå ìûøè |
108 | mov AL,11b ;óñòàíîâèòü DTR è RTS |
92 | mov al, 1 |
109 | out DX,AL |
93 | out dx, al |
- | 94 | mov ecx, 0xFFFF |
|
- | 95 | loop $ |
|
110 | ; Î÷èñòèòü ðåãèñòð äàííûõ |
96 | ; Î÷èñòèòü ðåãèñòð äàííûõ |
111 | mov DX,[COMPortBaseAddr] |
97 | sub edx, 4 |
112 | in AL,DX |
98 | in AL,DX |
- | 99 | add edx, 4 |
|
- | 100 | mov AL,11b ;óñòàíîâèòü DTR è RTS |
|
- | 101 | out DX,AL |
|
- | 102 | mov ecx, 0x1FFFF |
|
113 | ; Öèêë îïðîñà ïîðòà |
103 | ; Öèêë îïðîñà ïîðòà |
114 | WaitData: |
104 | WaitData: |
115 | ; Îæèäàòü åùå 10 "òèêîâ" |
105 | ; Îæèäàòü åùå 10 "òèêîâ" |
116 | dec ecx |
106 | dec ecx |
117 | cmp ecx,0 |
107 | cmp ecx,0 |
118 | je NoMouse |
108 | je NoMouse |
119 | ; Ïðîâåðèòü íàëè÷èå èäåíòèôèêàöèîííîãî áàéòà |
109 | ; Ïðîâåðèòü íàëè÷èå èäåíòèôèêàöèîííîãî áàéòà |
120 | mov DX,[COMPortBaseAddr] |
110 | mov DX,[COMPortBaseAddr] |
121 | add DX,5 |
111 | add DX,5 |
122 | in AL,DX |
112 | in AL,DX |
123 | test AL,1 ;Äàííûå ãîòîâû? |
113 | test AL,1 ;Äàííûå ãîòîâû? |
124 | jz WaitData |
114 | jz WaitData |
125 | ; Ââåñòè äàííûå |
115 | ; Ââåñòè äàííûå |
126 | mov DX,[COMPortBaseAddr] |
116 | mov DX,[COMPortBaseAddr] |
127 | in AL,DX |
117 | in AL,DX |
128 | NoMouse: |
118 | NoMouse: |
129 | ret |
119 | ret |
130 | 120 | ||
131 | iglobal |
121 | iglobal |
132 | COMPortBaseAddr dw 3F8h |
122 | COMPortBaseAddr dw 3F8h |
133 | ;COMPortNum dw 0 |
123 | ;COMPortNum dw 0 |
134 | endg |
124 | endg |
135 | 125 | ||
136 | iglobal |
126 | iglobal |
137 | boot_setmouse_type db 'Detected - PS2 mouse',0 |
127 | boot_setmouse_type db 'Detected - PS2 mouse',0 |
138 | db 'Detected - COM1 mouse',0 |
128 | db 'Detected - COM1 mouse',0 |
139 | db 'Detected - COM2 mouse',0 |
129 | db 'Detected - COM2 mouse',0 |
140 | endg |
130 | endg |
141 | 131 | ||
142 | end_detecting_mouse: |
132 | end_detecting_mouse: |