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