Subversion Repositories Kolibri OS

Rev

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