Subversion Repositories Kolibri OS

Compare Revisions

Ignore whitespace Rev 773 → Rev 774

/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm
4,12 → 4,12
include '../../../imports.inc'
 
struc IOCTL
{ .handle dd ?
.io_code dd ?
.input dd ?
.inp_size dd ?
.output dd ?
.out_size dd ?
{ .handle dd ?
.io_code dd ?
.input dd ?
.inp_size dd ?
.output dd ?
.out_size dd ?
}
 
virtual at 0
22,7 → 22,7
DRV_ENTRY equ 1
DRV_EXIT equ -1
 
MT_3B equ 0
MT_3B equ 0
MT_3BScroll equ 3
MT_5BScroll equ 4
 
33,73 → 33,73
 
proc START stdcall, state:dword
 
cmp [state], DRV_ENTRY
jne .fin
cmp [state], DRV_ENTRY
jne .fin
.init:
 
call detect_mouse
test eax,eax
jnz .exit
call detect_mouse
test eax,eax
jnz .exit
 
mov [MouseType],MT_3B
mov [MouseType],MT_3B
 
call try_mode_ID3
test eax,eax
jnz .stop_try
mov [MouseType],MT_3BScroll
call try_mode_ID4
test eax,eax
jnz .stop_try
mov [MouseType],MT_5BScroll
call try_mode_ID3
test eax,eax
jnz .stop_try
mov [MouseType],MT_3BScroll
call try_mode_ID4
test eax,eax
jnz .stop_try
mov [MouseType],MT_5BScroll
.stop_try:
 
mov bl, 0x20 ; read command byte
call kbd_cmd
cmp ah,1
je .exit
mov bl, 0x20 ; read command byte
call kbd_cmd
cmp ah,1
je .exit
 
call kbd_read
cmp ah,1
je .exit
call kbd_read
cmp ah,1
je .exit
 
or al, 10b
push eax
mov bl, 0x60 ; write command byte
call kbd_cmd
cmp ah,1
je .exit
or al, 10b
push eax
mov bl, 0x60 ; write command byte
call kbd_cmd
cmp ah,1
je .exit
 
pop eax
call kbd_write
cmp ah,1
je .exit
pop eax
call kbd_write
cmp ah,1
je .exit
 
mov al, 0xF4 ; enable data reporting
call mouse_cmd
mov al, 0xF4 ; enable data reporting
call mouse_cmd
 
mov bl, 0xAE ; enable keyboard interface
call kbd_cmd
stdcall AttachIntHandler, 12, irq_handler
stdcall RegService, my_service, service_proc
ret
mov bl, 0xAE ; enable keyboard interface
call kbd_cmd
stdcall AttachIntHandler, 12, irq_handler, dword 0
stdcall RegService, my_service, service_proc
ret
 
.fin:
;stdcall DetachIntHandler, 12, irq_handler
mov bl, 0xA7 ; disable mouse interface
call kbd_cmd
xor eax, eax
ret
;stdcall DetachIntHandler, 12, irq_handler
mov bl, 0xA7 ; disable mouse interface
call kbd_cmd
xor eax, eax
ret
 
.exit:
mov bl, 0xA7 ; disable mouse interface
call kbd_cmd
mov bl, 0xAE ; enable keyboard interface
call kbd_cmd
xor eax, eax
ret
mov bl, 0xA7 ; disable mouse interface
call kbd_cmd
mov bl, 0xAE ; enable keyboard interface
call kbd_cmd
xor eax, eax
ret
endp
 
proc service_proc stdcall, ioctl:dword
106,12 → 106,12
mov edi, [ioctl]
mov eax, [edi+IOCTL.io_code]
test eax, eax
jz .getversion
jz .getversion
cmp eax,1
jz .gettype
jz .gettype
 
.err:
or eax, -1
or eax, -1
ret
 
.ok:
120,13 → 120,13
 
.getversion:
cmp [edi+IOCTL.out_size], 4
jb .err
jb .err
mov edi, [edi+IOCTL.output]
mov dword [edi], PS2_DRV_VER ; version of driver
jmp .ok
.gettype:
cmp [edi+IOCTL.out_size], 4
jb .err
jb .err
mov edi, [edi+IOCTL.output]
mov eax,[MouseType]
mov dword [edi], eax ; mouse type
138,60 → 138,60
mov bl, 0xAD ; disable keyboard interface
call kbd_cmd
cmp ah,1
je .fail
je .fail
 
mov bl, 0xA8 ; enable mouse interface
call kbd_cmd
cmp ah,1
je .fail
je .fail
 
mov al, 0xFF ; reset
mov al, 0xFF ; reset
call mouse_cmd
jc .fail
jc .fail
 
call mouse_read
jc .fail
jc .fail
cmp al, 0xAA
jne .fail ; dead mouse
jne .fail ; dead mouse
 
; get device ID
call mouse_read
jc .fail
jc .fail
cmp al, 0x00
jne .fail ; unknown device
jne .fail ; unknown device
xor eax,eax
ret
 
.fail:
or eax,-1
or eax,-1
ret
 
try_mode_ID3:
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0xC8 ;200d
call mouse_cmd
jc .fail
jc .fail
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0x64 ;100d
call mouse_cmd
jc .fail
jc .fail
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0x50 ;80d
call mouse_cmd
jc .fail
jc .fail
 
mov al, 0xF2 ;Get device id
call mouse_cmd
jc .fail
jc .fail
 
call mouse_read
jc .fail
jc .fail
cmp al, 0x03
jne .fail
 
198,35 → 198,35
xor eax,eax
ret
.fail:
or eax,-1
or eax,-1
ret
 
try_mode_ID4:
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0xC8 ;200d
call mouse_cmd
jc .fail
jc .fail
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0xC8 ;100d
call mouse_cmd
jc .fail
jc .fail
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0x50 ;80d
call mouse_cmd
jc .fail
jc .fail
 
mov al, 0xF2 ;Get device id
call mouse_cmd
jc .fail
jc .fail
 
call mouse_read
jc .fail
jc .fail
cmp al, 0x04
jne .fail
 
234,7 → 234,7
ret
 
.fail:
or eax,-1
or eax,-1
ret
include 'ps2m_iofuncs.inc'
242,12 → 242,12
 
section '.data' data readable writable align 16
 
version dd 0x00050005
version dd 0x00050005
my_service db 'ps2mouse',0
 
;iofuncs data
mouse_cmd_byte db 0
mouse_nr_tries db 0
mouse_cmd_byte db 0
mouse_nr_tries db 0
mouse_nr_resends db 0
 
;hid data
259,10 → 259,10
fourth_byte db 0
 
;main data
MouseType dd 0
MouseType dd 0
 
XMoving dd 0
YMoving dd 0
ZMoving dd 0
ButtonState dd 0
XMoving dd 0
YMoving dd 0
ZMoving dd 0
ButtonState dd 0
;timerTicks dd 0