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