This is a separated part from the "cutemouse-driver", but only for PS2 or USB(legacy enable) mouse without serial ports and without to draw the mousepointer:
call CHECKPS2
jc short ERROR
call PS2ON
jc short ERROR
mov bx, [X]
mov cx, [Y]
mov dx, [S]
;-------------------------------
ERROR: call PS2OFF
;---------------------------------------------------------------
; Sub-Routine
;---------------------------------------------------------------
CHECKPS2: int 11h ; get equipment list
test al, 3
jz short NOPS2 ; jump if PS/2-Mouse not indicated
mov bh, 3
mov ax, 0C205h
int 15h ; initialize mouse, bh=datasize
jc short NOPS2
mov bh, 3
mov ax, 0C203h
int 15h ; set mouse resolution bh
jc short NOPS2
mov ax, cs
mov es, ax
mov bx, OFFSET PS2TEST
mov ax, 0C207h
int 15h ; mouse, es:bx=ptr to handler
jc short NOPS2
xor bx, bx
mov es, bx ; mouse, es:bx=ptr to handler
mov ax, 0C207h
int 15h
ret
NOPS2: stc
ret
;---------------------------------------------------------
PS2ON: call PS2OFF
mov ax, cs
mov es, ax
mov bx, OFFSET PS2IRQ
mov ax, 0C207h ; es:bx=ptr to handler
int 15h
jc short NOPS2
mov bh, 1 ; set mouse on
mov ax, 0C200h
int 15h
ret
;-------------------------------
PS2OFF: xor bx, bx ; set mouse off
mov ax, 0C200h
int 15h
xor bx, bx
mov es, bx
mov ax, 0C207h ; es:bx=ptr to handler
int 15h
ret
;---------------------------------------------------------------------------
; PS2-Mousehandler
;---------------------------------------------------------------------------
PS2IRQ: cld
push ds
pusha
mov ax, @DATA
mov ds, ax
mov bp, sp
mov ax, [bp+22+6] ; buttons
mov bx, [bp+22+4] ; X movement
mov cx, [bp+22+2] ; Y movement
mov [S], ax
mov [X], bx
mov [Y], cx
popa
pop ds
PS2TEST: retf
;----------------------------------------------
.DATA
S DW 0 ;Bitfields for pointing device status:
;Bit(s) Description (Table 00525)
; 15-8 reserved (0)
; 7 Y data overflowed
; 6 X data overflowed
; 5 Y data is negative
; 4 X data is negative
; 3 reserved (1)
; 2 middle button pressed
; 1 right button pressed
; 0 left button pressed
X DW 0
Y DW 0