diff --git a/drivers/mouse/ps2mouse4d/trunk/ps2m_iofuncs.inc b/drivers/mouse/ps2mouse4d/trunk/ps2m_iofuncs.inc index 3a1e0741d3..9f4d3d9635 100644 --- a/drivers/mouse/ps2mouse4d/trunk/ps2m_iofuncs.inc +++ b/drivers/mouse/ps2mouse4d/trunk/ps2m_iofuncs.inc @@ -69,11 +69,14 @@ mouse_cmd: call kbd_write cmp ah, 1 je .fail - + + cmp [mouse_cmd_byte], 0xF5 + je .ok call mouse_read - + cmp al, 0xFA jne .noack +.ok: clc ret .noack: @@ -85,8 +88,8 @@ mouse_cmd: .fail: stc ret - - + + mouse_read: mov [mouse_nr_tries], 100 .repeat: diff --git a/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm b/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm index 4f55c79032..9e50f3d09e 100644 --- a/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm +++ b/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm @@ -22,7 +22,10 @@ entry START proc START c, state:dword, cmdline:dword cmp [state], DRV_ENTRY - jne .nothing + je .init + cmp [state], DRV_EXIT + je .fini + jmp .nothing .init: ; disable keyboard and mouse interrupts ; keyboard IRQ handler can interfere badly otherwise @@ -54,12 +57,12 @@ proc START c, state:dword, cmdline:dword 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 al, 0xF4 ; enable data reporting @@ -89,6 +92,10 @@ proc START c, state:dword, cmdline:dword .nothing: xor eax, eax ret +.fini: + mov al, 0xF5 + call mouse_cmd + ret .exit: mov bl, 0xA7 ; disable mouse interface