Rev 802 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 802 | Rev 1306 | ||
---|---|---|---|
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ;; ;; |
2 | ;; ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;; Includes source code by Kulakov Vladimir Gennadievich. ;; |
6 | ;; Includes source code by Kulakov Vladimir Gennadievich. ;; |
7 | ;; Modified by Mario79 and Rus. ;; |
7 | ;; Modified by Mario79 and Rus. ;; |
- | 8 | ;; 02.12.2009 |
|
8 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
9 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
9 | 10 | ||
10 | ;driver sceletone |
11 | ;driver sceletone |
11 | 12 | ||
12 | format MS COFF |
13 | format MS COFF |
13 | 14 | ||
14 | DEBUG equ 0 |
15 | DEBUG equ 0 |
15 | 16 | ||
16 | include 'proc32.inc' |
17 | include 'proc32.inc' |
17 | include 'imports.inc' |
18 | include 'imports.inc' |
18 | 19 | ||
19 | API_VERSION equ 5 ;debug |
20 | API_VERSION equ 5 ;debug |
20 | 21 | ||
21 | struc IOCTL |
22 | struc IOCTL |
22 | { .handle dd ? |
23 | { .handle dd ? |
23 | .io_code dd ? |
24 | .io_code dd ? |
24 | .input dd ? |
25 | .input dd ? |
25 | .inp_size dd ? |
26 | .inp_size dd ? |
26 | .output dd ? |
27 | .output dd ? |
27 | .out_size dd ? |
28 | .out_size dd ? |
28 | } |
29 | } |
29 | 30 | ||
30 | virtual at 0 |
31 | virtual at 0 |
31 | IOCTL IOCTL |
32 | IOCTL IOCTL |
32 | end virtual |
33 | end virtual |
33 | 34 | ||
34 | public START |
35 | public START |
35 | public version |
36 | public version |
36 | 37 | ||
37 | 38 | ||
38 | DRV_ENTRY equ 1 |
39 | DRV_ENTRY equ 1 |
39 | DRV_EXIT equ -1 |
40 | DRV_EXIT equ -1 |
40 | STRIDE equ 4 ;size of row in devices table |
41 | STRIDE equ 4 ;size of row in devices table |
41 | 42 | ||
42 | SRV_GETVERSION equ 0 |
43 | SRV_GETVERSION equ 0 |
43 | 44 | ||
44 | section '.flat' code readable align 16 |
45 | section '.flat' code readable align 16 |
45 | 46 | ||
46 | proc START stdcall, state:dword |
47 | proc START stdcall, state:dword |
47 | 48 | ||
48 | cmp [state], 1 |
49 | cmp [state], 1 |
49 | jne .exit |
50 | jne .exit |
50 | .entry: |
51 | .entry: |
51 | ;Detect_COM_Mouse: |
52 | ;Detect_COM_Mouse: |
52 | if DEBUG |
53 | if DEBUG |
53 | mov esi, msgInit |
54 | mov esi, msgInit |
54 | call Boot_Log |
55 | call Boot_Log |
55 | end if |
56 | end if |
56 | mov bx, 0x3f8 |
57 | mov bx, 0x3f8 |
57 | call MSMouseSearch |
58 | call MSMouseSearch |
58 | cmp AL,'M' |
59 | cmp AL,'M' |
59 | jne @f |
60 | jne @f |
60 | ;mov [com1_mouse_detected],1 |
61 | ;mov [com1_mouse_detected],1 |
61 | ;mov [irq_owner+4*4], 1 ; IRQ4 owner is System |
62 | ;mov [irq_owner+4*4], 1 ; IRQ4 owner is System |
62 | 63 | ||
63 | mov dx, bx |
64 | mov dx, bx |
64 | inc dx ; 0x3f8 + 1 |
65 | inc dx ; 0x3f8 + 1 |
65 | mov al, 1 |
66 | mov al, 1 |
66 | out dx, al |
67 | out dx, al |
67 | 68 | ||
68 | stdcall AttachIntHandler, 4, irq4_handler, dword 0 |
69 | stdcall AttachIntHandler, 4, irq4_handler, dword 0 |
69 | if DEBUG |
70 | if DEBUG |
70 | cmp eax, 0 |
71 | test eax, eax |
71 | jne .label1 |
72 | jne .label1 |
72 | 73 | ||
73 | mov esi, msg_error_attach_int_handler |
74 | mov esi, msg_error_attach_int_handler |
74 | call Boot_Log |
75 | call Boot_Log |
75 | end if |
76 | end if |
76 | .label1: |
77 | .label1: |
77 | mov eax, 0 |
78 | ; mov eax, 0 |
78 | mov ebx, 0x3F8 |
79 | ; mov ebx, 0x3F8 |
79 | mov ecx, 0x3FF |
80 | ; mov ecx, 0x3FF |
- | 81 | xor ebx,ebx |
|
- | 82 | mov ecx, 0x3F8 |
|
- | 83 | mov edx, 0x3FF |
|
80 | call ReservePortArea |
84 | call ReservePortArea |
81 | 85 | ||
82 | if DEBUG |
86 | if DEBUG |
83 | cmp eax, 1 |
87 | cmp eax, 1 |
84 | jne .go |
88 | jne .go |
85 | 89 | ||
86 | mov esi, msg_error_reserve_ports |
90 | mov esi, msg_error_reserve_ports |
87 | call Boot_Log |
91 | call Boot_Log |
88 | 92 | ||
89 | .go: |
93 | .go: |
90 | mov esi,boot_setmouse_type |
94 | mov esi,boot_setmouse_type |
91 | call Boot_Log |
95 | call Boot_Log |
92 | end if |
96 | end if |
93 | @@: |
97 | @@: |
94 | mov bx, 0x2f8 |
98 | mov bx, 0x2f8 |
95 | call MSMouseSearch |
99 | call MSMouseSearch |
96 | cmp AL,'M' |
100 | cmp AL,'M' |
97 | jne .resume |
101 | jne .resume |
98 | ;mov [com2_mouse_detected],1 |
102 | ;mov [com2_mouse_detected],1 |
99 | ;mov [irq_owner+3*4], 1 ; IRQ3 owner is System |
103 | ;mov [irq_owner+3*4], 1 ; IRQ3 owner is System |
100 | 104 | ||
101 | stdcall AttachIntHandler, 3, irq3_handler, dword 0 |
105 | stdcall AttachIntHandler, 3, irq3_handler, dword 0 |
102 | 106 | ||
103 | mov eax, 0 |
107 | ; mov eax, 0 |
104 | mov ebx, 0x2F8 |
108 | ; mov ebx, 0x2F8 |
- | 109 | ; mov ecx, 0x3F8 |
|
- | 110 | xor ebx,ebx |
|
- | 111 | mov ecx, 0x2F8 |
|
- | 112 | mov edx, 0x3F8 |
|
105 | mov ecx, 0x3F8 |
113 | |
106 | call ReservePortArea |
114 | call ReservePortArea |
107 | if DEBUG |
115 | if DEBUG |
108 | cmp eax, 1 |
116 | cmp eax, 1 |
109 | jne @f |
117 | jne @f |
110 | 118 | ||
111 | mov esi, msg_error_reserve_ports |
119 | mov esi, msg_error_reserve_ports |
112 | call Boot_Log |
120 | call Boot_Log |
113 | @@: |
121 | @@: |
114 | 122 | ||
115 | mov esi,boot_setmouse_type + 22 |
123 | mov esi,boot_setmouse_type + 22 |
116 | call Boot_Log |
124 | call Boot_Log |
117 | end if |
125 | end if |
118 | .resume: |
126 | .resume: |
119 | 127 | ||
120 | stdcall RegService, my_service, service_proc |
128 | stdcall RegService, my_service, service_proc |
121 | if DEBUG |
129 | if DEBUG |
122 | cmp eax, 0 |
130 | test eax, eax |
123 | jne @f |
131 | jne @f |
124 | 132 | ||
125 | mov esi, msg_exit |
133 | mov esi, msg_exit |
126 | call Boot_Log |
134 | call Boot_Log |
127 | end if |
135 | end if |
128 | @@: |
136 | @@: |
129 | ret |
137 | ret |
130 | .fail: |
138 | .fail: |
131 | .exit: |
139 | .exit: |
132 | if DEBUG |
140 | if DEBUG |
133 | mov esi, msg_exit |
141 | mov esi, msg_exit |
134 | call Boot_Log |
142 | call Boot_Log |
135 | end if |
143 | end if |
136 | xor eax, eax |
144 | xor eax, eax |
137 | ret |
145 | ret |
138 | endp |
146 | endp |
139 | 147 | ||
140 | handle equ IOCTL.handle |
148 | handle equ IOCTL.handle |
141 | io_code equ IOCTL.io_code |
149 | io_code equ IOCTL.io_code |
142 | input equ IOCTL.input |
150 | input equ IOCTL.input |
143 | inp_size equ IOCTL.inp_size |
151 | inp_size equ IOCTL.inp_size |
144 | output equ IOCTL.output |
152 | output equ IOCTL.output |
145 | out_size equ IOCTL.out_size |
153 | out_size equ IOCTL.out_size |
146 | 154 | ||
147 | align 4 |
155 | align 4 |
148 | proc service_proc stdcall, ioctl:dword |
156 | proc service_proc stdcall, ioctl:dword |
149 | 157 | ||
150 | mov ebx, [ioctl] |
158 | mov ebx, [ioctl] |
151 | mov eax, [ebx+io_code] |
159 | mov eax, [ebx+io_code] |
152 | cmp eax, SRV_GETVERSION |
160 | cmp eax, SRV_GETVERSION |
153 | jne @F |
161 | jne @F |
154 | 162 | ||
155 | mov eax, [ebx+output] |
163 | mov eax, [ebx+output] |
156 | cmp [ebx+out_size], 4 |
164 | cmp [ebx+out_size], 4 |
157 | jne .fail |
165 | jne .fail |
158 | mov [eax], dword API_VERSION |
166 | mov [eax], dword API_VERSION |
159 | xor eax, eax |
167 | xor eax, eax |
160 | ret |
168 | ret |
161 | @@: |
169 | @@: |
162 | .fail: |
170 | .fail: |
163 | or eax, -1 |
171 | or eax, -1 |
164 | ret |
172 | ret |
165 | endp |
173 | endp |
166 | 174 | ||
167 | align 4 |
175 | align 4 |
168 | MSMouseSearch: |
176 | MSMouseSearch: |
169 | ; ÏÎÈÑÊ ÌÛØÈ ×ÅÐÅÇ COM-ÏÎÐÒÛ |
177 | ; ÏÎÈÑÊ ÌÛØÈ ×ÅÐÅÇ COM-ÏÎÐÒÛ |
170 | MouseSearch: |
178 | MouseSearch: |
171 | ; Óñòàíàâëèâàåì ñêîðîñòü |
179 | ; Óñòàíàâëèâàåì ñêîðîñòü |
172 | ; ïðèåìà/ïåðåäà÷è 1200 áîä |
180 | ; ïðèåìà/ïåðåäà÷è 1200 áîä |
173 | ; in bx COM Port Base Address |
181 | ; in bx COM Port Base Address |
174 | mov DX, bx |
182 | mov DX, bx |
175 | add DX,3 |
183 | add DX,3 |
176 | in AL,DX |
184 | in AL,DX |
177 | or AL,80h ;óñòàíîâèòü áèò DLAB |
185 | or AL,80h ;óñòàíîâèòü áèò DLAB |
178 | out DX,AL |
186 | out DX,AL |
179 | mov DX, bx |
187 | mov DX, bx |
180 | mov AL,60h ;1200 áîä |
188 | mov AL,60h ;1200 áîä |
181 | out DX,AL |
189 | out DX,AL |
182 | inc DX |
190 | inc DX |
183 | mov AL,0 |
191 | mov AL,0 |
184 | out DX,AL |
192 | out DX,AL |
185 | ; Óñòàíîâèòü äëèíó ñëîâà 7 áèò, 1 ñòîïîâûé áèò, |
193 | ; Óñòàíîâèòü äëèíó ñëîâà 7 áèò, 1 ñòîïîâûé áèò, |
186 | ; ÷åòíîñòü íå êîíòðîëèðîâàòü |
194 | ; ÷åòíîñòü íå êîíòðîëèðîâàòü |
187 | mov DX, bx |
195 | mov DX, bx |
188 | add DX,3 |
196 | add DX,3 |
189 | mov AL,00000010b |
197 | mov AL,00000010b |
190 | out DX,AL |
198 | out DX,AL |
191 | ; Çàïðåòèòü âñå ïðåðûâàíè |
199 | ; Çàïðåòèòü âñå ïðåðûâàíè |
192 | mov dx, bx |
200 | mov dx, bx |
193 | inc dx |
201 | inc dx |
194 | mov AL,0 |
202 | mov AL,0 |
195 | out DX,AL |
203 | out DX,AL |
196 | ; Ïðîâåðèòü, ÷òî óñòðîéñòâî ïîäêëþ÷åíî è ÿâëÿåòñ |
204 | ; Ïðîâåðèòü, ÷òî óñòðîéñòâî ïîäêëþ÷åíî è ÿâëÿåòñ |
197 | ; ìûøüþ òèïà MSMouse |
205 | ; ìûøüþ òèïà MSMouse |
198 | ; Îòêëþ÷èòü ïèòàíèå ìûøè è ïðåðûâàíè |
206 | ; Îòêëþ÷èòü ïèòàíèå ìûøè è ïðåðûâàíè |
199 | mov DX, bx |
207 | mov DX, bx |
200 | add EDX,4 ;ðåãèñòð óïðàâëåíèÿ ìîäåìîì |
208 | add EDX,4 ;ðåãèñòð óïðàâëåíèÿ ìîäåìîì |
201 | mov AL,0 ;ñáðîñèòü DTR, RTS è OUT2 |
209 | mov AL,0 ;ñáðîñèòü DTR, RTS è OUT2 |
202 | out DX,AL |
210 | out DX,AL |
203 | ; Îæèäàòü 5 "òèêîâ" (0,2 ñ) |
211 | ; Îæèäàòü 5 "òèêîâ" (0,2 ñ) |
204 | mov ecx, 0xFFFF |
212 | mov ecx, 0xFFFF |
205 | loop $ |
213 | loop $ |
206 | ; Âêëþ÷èòü ïèòàíèå ìûøè |
214 | ; Âêëþ÷èòü ïèòàíèå ìûøè |
207 | mov al, 1 |
215 | mov al, 1 |
208 | out dx, al |
216 | out dx, al |
209 | mov ecx, 0xFFFF |
217 | mov ecx, 0xFFFF |
210 | loop $ |
218 | loop $ |
211 | ; Î÷èñòèòü ðåãèñòð äàííûõ |
219 | ; Î÷èñòèòü ðåãèñòð äàííûõ |
212 | mov dx, bx |
220 | mov dx, bx |
213 | in AL,DX |
221 | in AL,DX |
214 | add edx, 4 |
222 | add edx, 4 |
215 | mov AL, 1011b ;óñòàíîâèòü DTR è RTS è OUT2 |
223 | mov AL, 1011b ;óñòàíîâèòü DTR è RTS è OUT2 |
216 | out DX,AL |
224 | out DX,AL |
217 | mov ecx, 0x1FFFF |
225 | mov ecx, 0x1FFFF |
218 | ; Öèêë îïðîñà ïîðòà |
226 | ; Öèêë îïðîñà ïîðòà |
219 | WaitData: |
227 | WaitData: |
220 | ; Îæèäàòü åùå 10 "òèêîâ" |
228 | ; Îæèäàòü åùå 10 "òèêîâ" |
221 | dec ecx |
229 | dec ecx |
222 | cmp ecx,0 |
230 | ; cmp ecx,0 |
223 | je NoMouse |
231 | jz NoMouse |
224 | ; Ïðîâåðèòü íàëè÷èå èäåíòèôèêàöèîííîãî áàéòà |
232 | ; Ïðîâåðèòü íàëè÷èå èäåíòèôèêàöèîííîãî áàéòà |
225 | mov DX, bx |
233 | mov DX, bx |
226 | add DX,5 |
234 | add DX,5 |
227 | in AL,DX |
235 | in AL,DX |
228 | test AL,1 ;Äàííûå ãîòîâû? |
236 | test AL,1 ;Äàííûå ãîòîâû? |
229 | jz WaitData |
237 | jz WaitData |
230 | ; Ââåñòè äàííûå |
238 | ; Ââåñòè äàííûå |
231 | mov DX, bx |
239 | mov DX, bx |
232 | in AL,DX |
240 | in AL,DX |
233 | NoMouse: |
241 | NoMouse: |
234 | ret |
242 | ret |
235 | 243 | ||
236 | align 4 |
244 | align 4 |
237 | irq3_handler: |
245 | irq3_handler: |
238 | mov dx, 0x2f8 |
246 | mov dx, 0x2f8 |
239 | mov esi, com2_mouse |
247 | mov esi, com2_mouse |
240 | jmp irq_handler |
248 | jmp irq_handler |
241 | 249 | ||
242 | align 4 |
250 | align 4 |
243 | irq4_handler: |
251 | irq4_handler: |
244 | mov dx, 0x3f8 |
252 | mov dx, 0x3f8 |
245 | mov esi, com1_mouse |
253 | mov esi, com1_mouse |
246 | 254 | ||
247 | irq_handler: |
255 | irq_handler: |
248 | 256 | ||
249 | ; in: esi -> COM_MOUSE_DATA struc, dx = base port (xF8h) |
257 | ; in: esi -> COM_MOUSE_DATA struc, dx = base port (xF8h) |
250 | add edx, 5 ; xFDh |
258 | add edx, 5 ; xFDh |
251 | in al, dx |
259 | in al, dx |
252 | test al, 1 ; Äàííûå ãîòîâû? |
260 | test al, 1 ; Äàííûå ãîòîâû? |
253 | jz .Error |
261 | jz .Error |
254 | ; Ââåñòè äàííûå |
262 | ; Ââåñòè äàííûå |
255 | sub edx, 5 |
263 | sub edx, 5 |
256 | in al, dx |
264 | in al, dx |
257 | ; Ñáðîñèòü ñòàðøèé íåçíà÷àùèé áèò |
265 | ; Ñáðîñèòü ñòàðøèé íåçíà÷àùèé áèò |
258 | and al, 01111111b |
266 | and al, 01111111b |
259 | 267 | ||
260 | ; Îïðåäåëèòü ïîðÿäêîâûé íîìåð ïðèíèìàåìîãî áàéòà |
268 | ; Îïðåäåëèòü ïîðÿäêîâûé íîìåð ïðèíèìàåìîãî áàéòà |
261 | cmp [esi+COM_MOUSE_DATA.MouseByteNumber], 2 |
269 | cmp [esi+COM_MOUSE_DATA.MouseByteNumber], 2 |
262 | ja .Error |
270 | ja .Error |
263 | jz .ThirdByte |
271 | jz .ThirdByte |
264 | jp .SecondByte |
272 | jp .SecondByte |
265 | ; Ñîõðàíèòü ïåðâûé áàéò äàííûõ |
273 | ; Ñîõðàíèòü ïåðâûé áàéò äàííûõ |
266 | .FirstByte: |
274 | .FirstByte: |
267 | test al, 1000000b ; Ïåðâûé áàéò ïîñûëêè? |
275 | test al, 1000000b ; Ïåðâûé áàéò ïîñûëêè? |
268 | jz .Error |
276 | jz .Error |
269 | mov [esi+COM_MOUSE_DATA.FirstByte], al |
277 | mov [esi+COM_MOUSE_DATA.FirstByte], al |
270 | inc [esi+COM_MOUSE_DATA.MouseByteNumber] |
278 | inc [esi+COM_MOUSE_DATA.MouseByteNumber] |
271 | jmp .EndMouseInterrupt |
279 | jmp .EndMouseInterrupt |
272 | ; Ñîõðàíèòü âòîðîé áàéò äàííûõ |
280 | ; Ñîõðàíèòü âòîðîé áàéò äàííûõ |
273 | .SecondByte: |
281 | .SecondByte: |
274 | test al, 1000000b |
282 | test al, 1000000b |
275 | jnz .Error |
283 | jnz .Error |
276 | mov [esi+COM_MOUSE_DATA.SecondByte], al |
284 | mov [esi+COM_MOUSE_DATA.SecondByte], al |
277 | inc [esi+COM_MOUSE_DATA.MouseByteNumber] |
285 | inc [esi+COM_MOUSE_DATA.MouseByteNumber] |
278 | jmp .EndMouseInterrupt |
286 | jmp .EndMouseInterrupt |
279 | ; Ñîõðàíèòü òðåòèé áàéò äàííûõ |
287 | ; Ñîõðàíèòü òðåòèé áàéò äàííûõ |
280 | .ThirdByte: |
288 | .ThirdByte: |
281 | test al, 1000000b |
289 | test al, 1000000b |
282 | jnz .Error |
290 | jnz .Error |
283 | mov [esi+COM_MOUSE_DATA.ThirdByte], al |
291 | mov [esi+COM_MOUSE_DATA.ThirdByte], al |
284 | mov [esi+COM_MOUSE_DATA.MouseByteNumber], 0 |
292 | mov [esi+COM_MOUSE_DATA.MouseByteNumber], 0 |
285 | ; (Ïàêåò äàííûõ îò ìûøè ïðèíÿò ïîëíîñòüþ). |
293 | ; (Ïàêåò äàííûõ îò ìûøè ïðèíÿò ïîëíîñòüþ). |
286 | ; Çàïèñàòü íîâîå çíà÷åíèå ñîñòîÿíèÿ êíîïîê ìûøè |
294 | ; Çàïèñàòü íîâîå çíà÷åíèå ñîñòîÿíèÿ êíîïîê ìûøè |
287 | mov al, [esi+COM_MOUSE_DATA.FirstByte] |
295 | mov al, [esi+COM_MOUSE_DATA.FirstByte] |
288 | mov ah, al |
296 | mov ah, al |
289 | shr al, 3 |
297 | shr al, 3 |
290 | and al, 2 |
298 | and al, 2 |
291 | shr ah, 5 |
299 | shr ah, 5 |
292 | and ah, 1 |
300 | and ah, 1 |
293 | add al, ah |
301 | add al, ah |
294 | movzx eax, al |
302 | movzx eax, al |
295 | mov [BTN_DOWN], eax |
303 | mov [BTN_DOWN], eax |
296 | 304 | ||
297 | ; Ïðèáàâèòü ïåðåìåùåíèå ïî X ê êîîðäèíàòå X |
305 | ; Ïðèáàâèòü ïåðåìåùåíèå ïî X ê êîîðäèíàòå X |
298 | mov al, [esi+COM_MOUSE_DATA.FirstByte] |
306 | mov al, [esi+COM_MOUSE_DATA.FirstByte] |
299 | shl al, 6 |
307 | shl al, 6 |
300 | or al, [esi+COM_MOUSE_DATA.SecondByte] |
308 | or al, [esi+COM_MOUSE_DATA.SecondByte] |
301 | 309 | ||
302 | cbw |
310 | cbw |
303 | movzx eax, ax |
311 | movzx eax, ax |
304 | mov [MOUSE_X], eax |
312 | mov [MOUSE_X], eax |
305 | 313 | ||
306 | ; Ïðèáàâèòü ïåðåìåùåíèå ïî Y ê êîîðäèíàòå Y |
314 | ; Ïðèáàâèòü ïåðåìåùåíèå ïî Y ê êîîðäèíàòå Y |
307 | mov al, [esi+COM_MOUSE_DATA.FirstByte] |
315 | mov al, [esi+COM_MOUSE_DATA.FirstByte] |
308 | and al, 00001100b |
316 | and al, 00001100b |
309 | shl al, 4 |
317 | shl al, 4 |
310 | or al, [esi+COM_MOUSE_DATA.ThirdByte] |
318 | or al, [esi+COM_MOUSE_DATA.ThirdByte] |
311 | 319 | ||
312 | cbw |
320 | cbw |
313 | movzx eax, ax |
321 | movzx eax, ax |
314 | neg eax |
322 | neg eax |
315 | mov [MOUSE_Y], eax |
323 | mov [MOUSE_Y], eax |
316 | 324 | ||
317 | stdcall SetMouseData, [BTN_DOWN], [MOUSE_X], [MOUSE_Y], 0, 0 |
325 | stdcall SetMouseData, [BTN_DOWN], [MOUSE_X], [MOUSE_Y], 0, 0 |
318 | 326 | ||
319 | jmp .EndMouseInterrupt |
327 | jmp .EndMouseInterrupt |
320 | 328 | ||
321 | .Error: |
329 | .Error: |
322 | ; Ïðîèçîøåë ñáîé â ïîðÿäêå ïåðåäà÷è èíôîðìàöèè îò |
330 | ; Ïðîèçîøåë ñáîé â ïîðÿäêå ïåðåäà÷è èíôîðìàöèè îò |
323 | ; ìûøè, îáíóëèòü ñ÷åò÷èê áàéòîâ ïàêåòà äàííûõ |
331 | ; ìûøè, îáíóëèòü ñ÷åò÷èê áàéòîâ ïàêåòà äàííûõ |
324 | 332 | ||
325 | mov [esi+COM_MOUSE_DATA.MouseByteNumber],0 |
333 | mov [esi+COM_MOUSE_DATA.MouseByteNumber],0 |
326 | .EndMouseInterrupt: |
334 | .EndMouseInterrupt: |
327 | 335 | ||
328 | ret |
336 | ret |
329 | 337 | ||
330 | ;all initialized data place here |
338 | ;all initialized data place here |
331 | 339 | ||
332 | align 4 |
340 | align 4 |
333 | 341 | ||
334 | struc COM_MOUSE_DATA { |
342 | struc COM_MOUSE_DATA { |
335 | ; Íîìåð ïðèíèìàåìîãî îò ìûøè áàéòà |
343 | ; Íîìåð ïðèíèìàåìîãî îò ìûøè áàéòà |
336 | .MouseByteNumber db ? |
344 | .MouseByteNumber db ? |
337 | ; Òðåõáàéòîâàÿ ñòðóêòóðà äàííûõ, ïåðåäàâàåìàÿ ìûøüþ |
345 | ; Òðåõáàéòîâàÿ ñòðóêòóðà äàííûõ, ïåðåäàâàåìàÿ ìûøüþ |
338 | .FirstByte db ? |
346 | .FirstByte db ? |
339 | .SecondByte db ? |
347 | .SecondByte db ? |
340 | .ThirdByte db ? |
348 | .ThirdByte db ? |
341 | ;.timer_ticks_com dd ? |
349 | ;.timer_ticks_com dd ? |
342 | } |
350 | } |
343 | virtual at 0 |
351 | virtual at 0 |
344 | COM_MOUSE_DATA COM_MOUSE_DATA |
352 | COM_MOUSE_DATA COM_MOUSE_DATA |
345 | end virtual |
353 | end virtual |
346 | 354 | ||
347 | com1_mouse COM_MOUSE_DATA |
355 | com1_mouse COM_MOUSE_DATA |
348 | com2_mouse COM_MOUSE_DATA |
356 | com2_mouse COM_MOUSE_DATA |
349 | 357 | ||
350 | MOUSE_X dd 0 |
358 | MOUSE_X dd 0 |
351 | MOUSE_Y dd 0 |
359 | MOUSE_Y dd 0 |
352 | BTN_DOWN dd 0 |
360 | BTN_DOWN dd 0 |
353 | 361 | ||
354 | COMPortBaseAddr dw 3F8h |
362 | COMPortBaseAddr dw 3F8h |
355 | 363 | ||
356 | 364 | ||
357 | 365 | ||
358 | version dd (5 shl 16) or (API_VERSION and 0xFFFF) |
366 | version dd (5 shl 16) or (API_VERSION and 0xFFFF) |
359 | 367 | ||
360 | my_service db 'COM_Mouse',0 ;max 16 chars include zero |
368 | my_service db 'COM_Mouse',0 ;max 16 chars include zero |
361 | 369 | ||
362 | if DEBUG |
370 | if DEBUG |
363 | msgInit db 'Preved bugoga!',13,10,0 |
371 | msgInit db 'Preved bugoga!',13,10,0 |
364 | boot_setmouse_type db 'Detected - COM1 mouse',13,10,0 |
372 | boot_setmouse_type db 'Detected - COM1 mouse',13,10,0 |
365 | db 'Detected - COM2 mouse',13,10,0 |
373 | db 'Detected - COM2 mouse',13,10,0 |
366 | msg_error_reserve_ports db 'Error reserving ports!',13,10,0 |
374 | msg_error_reserve_ports db 'Error reserving ports!',13,10,0 |
367 | msg_error_attach_int_handler db 'Error attach interrupt handler!',13,10,0 |
375 | msg_error_attach_int_handler db 'Error attach interrupt handler!',13,10,0 |
368 | msg_exit db 'Exit!',13,10,0 |
376 | msg_exit db 'Exit!',13,10,0 |
369 | end if |
377 | end if |
370 | 378 | ||
371 | section '.data' data readable writable align 16 |
379 | section '.data' data readable writable align 16 |
372 | 380 | ||
373 | ;all uninitialized data place here |
381 | ;all uninitialized data place here |