forked from KolibriOS/kolibrios
Com mouse driver: added support for third button.
git-svn-id: svn://kolibrios.org@5075 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
bb295aca38
commit
455fe89163
@ -4,7 +4,7 @@
|
|||||||
# If delay is negative, wait for termination of the spawned process. Otherwise, simply wait
|
# If delay is negative, wait for termination of the spawned process. Otherwise, simply wait
|
||||||
#
|
#
|
||||||
#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen
|
#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen
|
||||||
#/SYS/LOADDRV "COM_MOUSE" 1 # serial mouse driver
|
#/SYS/LOADDRV "COMMOUSE" 1 # serial mouse driver
|
||||||
#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board
|
#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board
|
||||||
#/SYS/refrscrn "" 1 # Refresh screen
|
#/SYS/refrscrn "" 1 # Refresh screen
|
||||||
/SYS/LOADDRV "RDC" 1 # videodriver for RDC M2010/M2012
|
/SYS/LOADDRV "RDC" 1 # videodriver for RDC M2010/M2012
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# If delay is negative, wait for termination of the spawned process. Otherwise, simply wait
|
# If delay is negative, wait for termination of the spawned process. Otherwise, simply wait
|
||||||
#
|
#
|
||||||
#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen
|
#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen
|
||||||
#/SYS/LOADDRV "COM_MOUSE" 1 # serial mouse driver
|
#/SYS/LOADDRV "COMMOUSE" 1 # serial mouse driver
|
||||||
#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board
|
#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board
|
||||||
#/SYS/refrscrn "" 1 # Refresh screen
|
#/SYS/refrscrn "" 1 # Refresh screen
|
||||||
/SYS/LOADDRV "RDC" 1 # videodriver for RDC M2010/M2012
|
/SYS/LOADDRV "RDC" 1 # videodriver for RDC M2010/M2012
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# If delay is negative, wait for termination of the spawned process. Otherwise, simply wait
|
# If delay is negative, wait for termination of the spawned process. Otherwise, simply wait
|
||||||
#
|
#
|
||||||
#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen
|
#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen
|
||||||
#/SYS/LOADDRV "COM_MOUSE" 1 # serial mouse driver
|
#/SYS/LOADDRV "COMMOUSE" 1 # serial mouse driver
|
||||||
#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board
|
#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board
|
||||||
#/SYS/refrscrn "" 1 # Refresh screen
|
#/SYS/refrscrn "" 1 # Refresh screen
|
||||||
/SYS/LOADDRV "RDC" 1 # videodriver for RDC M2010/M2012
|
/SYS/LOADDRV "RDC" 1 # videodriver for RDC M2010/M2012
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# If delay is negative, wait for termination of the spawned process. Otherwise, simply wait
|
# If delay is negative, wait for termination of the spawned process. Otherwise, simply wait
|
||||||
#
|
#
|
||||||
#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen
|
#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen
|
||||||
#/SYS/LOADDRV "COM_MOUSE" 1 # serial mouse driver
|
#/SYS/LOADDRV "COMMOUSE" 1 # serial mouse driver
|
||||||
#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board
|
#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board
|
||||||
#/SYS/refrscrn "" 1 # Refresh screen
|
#/SYS/refrscrn "" 1 # Refresh screen
|
||||||
/SYS/LOADDRV "RDC" 1 # videodriver for RDC M2010/M2012
|
/SYS/LOADDRV "RDC" 1 # videodriver for RDC M2010/M2012
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# If delay is negative, wait for termination of the spawned process. Otherwise, simply wait
|
# If delay is negative, wait for termination of the spawned process. Otherwise, simply wait
|
||||||
#
|
#
|
||||||
#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen
|
#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen
|
||||||
#/SYS/LOADDRV "COM_MOUSE" 1 # serial mouse driver
|
#/SYS/LOADDRV "COMMOUSE" 1 # serial mouse driver
|
||||||
#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board
|
#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board
|
||||||
#/SYS/refrscrn "" 1 # Refresh screen
|
#/SYS/refrscrn "" 1 # Refresh screen
|
||||||
/SYS/LOADDRV "RDC" 1 # videodriver for RDC M2010/M2012
|
/SYS/LOADDRV "RDC" 1 # videodriver for RDC M2010/M2012
|
||||||
|
@ -31,6 +31,9 @@ include '../fdo.inc'
|
|||||||
; 2nd byte 0 X5 X4 X3 X2 X1 X0
|
; 2nd byte 0 X5 X4 X3 X2 X1 X0
|
||||||
; 3rd byte 0 Y5 Y4 Y3 Y2 Y1 Y0
|
; 3rd byte 0 Y5 Y4 Y3 Y2 Y1 Y0
|
||||||
|
|
||||||
|
; optional: (logitech extension protocol)
|
||||||
|
; 4th byte 0 MB 0 0 0 0 0
|
||||||
|
|
||||||
struct com_mouse_data
|
struct com_mouse_data
|
||||||
|
|
||||||
port dw ?
|
port dw ?
|
||||||
@ -244,37 +247,35 @@ irq_handler:
|
|||||||
sub dx, 5
|
sub dx, 5
|
||||||
in al, dx
|
in al, dx
|
||||||
and al, 01111111b ; clear MSB (use 7 bit words)
|
and al, 01111111b ; clear MSB (use 7 bit words)
|
||||||
|
test al, 01000000b ; First byte indicator set?
|
||||||
|
jnz .FirstByte
|
||||||
|
|
||||||
; Check which data byte we are reading
|
; Check which data byte we are reading
|
||||||
cmp [esi + com_mouse_data.offset], 2
|
cmp [esi + com_mouse_data.offset], 1
|
||||||
ja .reset
|
jb .SecondByte
|
||||||
je .ThirdByte
|
je .ThirdByte
|
||||||
jp .SecondByte
|
ja .FourthByte
|
||||||
|
|
||||||
; read first data byte
|
; read first data byte
|
||||||
test al, 01000000b ; First byte indicator set?
|
.FirstByte:
|
||||||
jz .reset
|
|
||||||
mov [esi + com_mouse_data.data+0], al
|
mov [esi + com_mouse_data.data+0], al
|
||||||
inc [esi + com_mouse_data.offset]
|
mov [esi + com_mouse_data.offset], 0
|
||||||
jmp .read_loop
|
jmp .read_loop
|
||||||
|
|
||||||
; read second data byte
|
; read second data byte
|
||||||
.SecondByte:
|
.SecondByte:
|
||||||
test al, 01000000b ; First byte indicator set?
|
|
||||||
jnz .reset
|
|
||||||
mov [esi + com_mouse_data.data+1], al
|
mov [esi + com_mouse_data.data+1], al
|
||||||
inc [esi + com_mouse_data.offset]
|
inc [esi + com_mouse_data.offset]
|
||||||
jmp .read_loop
|
jmp .read_loop
|
||||||
|
|
||||||
; read third data byte
|
; read third data byte
|
||||||
.ThirdByte:
|
.ThirdByte:
|
||||||
test al, 01000000b ; First byte indicator set?
|
|
||||||
jnz .reset
|
|
||||||
mov [esi + com_mouse_data.data+2], al
|
mov [esi + com_mouse_data.data+2], al
|
||||||
|
inc [esi + com_mouse_data.offset]
|
||||||
|
|
||||||
; Data packet is complete, parse it and set mouse data
|
; Data packet is complete, parse it and set mouse data
|
||||||
|
|
||||||
; Buttons
|
; Left and Right Buttons
|
||||||
mov al, [esi + com_mouse_data.data+0]
|
mov al, [esi + com_mouse_data.data+0]
|
||||||
mov ah, al
|
mov ah, al
|
||||||
shr al, 3 ; right mouse button
|
shr al, 3 ; right mouse button
|
||||||
@ -285,14 +286,14 @@ irq_handler:
|
|||||||
movzx eax, al
|
movzx eax, al
|
||||||
mov [BTN_DOWN], eax
|
mov [BTN_DOWN], eax
|
||||||
|
|
||||||
; X coordinate
|
; X coordinate
|
||||||
mov al, [esi + com_mouse_data.data+0]
|
mov al, [esi + com_mouse_data.data+0]
|
||||||
shl al, 6
|
shl al, 6
|
||||||
or al, [esi + com_mouse_data.data+1]
|
or al, [esi + com_mouse_data.data+1]
|
||||||
movsx eax, al
|
movsx eax, al
|
||||||
mov [MOUSE_X], eax
|
mov [MOUSE_X], eax
|
||||||
|
|
||||||
; Y coordinate
|
; Y coordinate
|
||||||
mov al, [esi + com_mouse_data.data+0]
|
mov al, [esi + com_mouse_data.data+0]
|
||||||
and al, 00001100b
|
and al, 00001100b
|
||||||
shl al, 4
|
shl al, 4
|
||||||
@ -303,14 +304,26 @@ irq_handler:
|
|||||||
|
|
||||||
invoke SetMouseData, [BTN_DOWN], [MOUSE_X], [MOUSE_Y], 0, 0
|
invoke SetMouseData, [BTN_DOWN], [MOUSE_X], [MOUSE_Y], 0, 0
|
||||||
|
|
||||||
.reset:
|
pop esi
|
||||||
mov [esi + com_mouse_data.offset], 0
|
mov al, 1
|
||||||
|
ret
|
||||||
|
|
||||||
|
.FourthByte:
|
||||||
|
inc [esi + com_mouse_data.offset]
|
||||||
|
|
||||||
|
test al, 00100000b
|
||||||
|
jz .end
|
||||||
|
or [BTN_DOWN], 100b
|
||||||
|
invoke SetMouseData, [BTN_DOWN], [MOUSE_X], [MOUSE_Y], 0, 0
|
||||||
|
|
||||||
.end:
|
.end:
|
||||||
pop esi
|
pop esi
|
||||||
mov al, 1
|
mov al, 1
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; End of code
|
; End of code
|
||||||
|
|
||||||
data fixups
|
data fixups
|
||||||
|
Loading…
Reference in New Issue
Block a user