Subversion Repositories Kolibri OS

Rev

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