Subversion Repositories Kolibri OS

Rev

Rev 2434 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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