add relative mouse handling in mouse.asm
authorJohn Tsiombikas <nuclear@member.fsf.org>
Mon, 19 Jun 2023 02:10:20 +0000 (05:10 +0300)
committerJohn Tsiombikas <nuclear@member.fsf.org>
Mon, 19 Jun 2023 02:10:20 +0000 (05:10 +0300)
src/dos/mouse.asm
src/dos/mouse.h

index 92b4f49..3a68966 100644 (file)
@@ -9,6 +9,7 @@ WRITE equ 4
 PIXRATE equ 15
 XLIM equ 7
 YLIM equ 8
 PIXRATE equ 15
 XLIM equ 7
 YLIM equ 8
+READREL equ 0xb
 
 PUSHA_EAX_OFFS equ 28
 PUSHA_ECX_OFFS equ 24
 
 PUSHA_EAX_OFFS equ 28
 PUSHA_ECX_OFFS equ 24
@@ -61,6 +62,19 @@ _show_mouse:
        pop ebp
        ret
 
        pop ebp
        ret
 
+; int read_mouse_bn(void)
+       global read_mouse_bn_
+       global _read_mouse_bn
+read_mouse_bn_:
+_read_mouse_bn:
+       pusha
+       mov ax, READ
+       int 0x33
+       xor eax, eax
+       mov ax, bx
+       popa
+       ret
+
 ; int read_mouse(int *xp, int *yp)
        global read_mouse_
 read_mouse_:
 ; int read_mouse(int *xp, int *yp)
        global read_mouse_
 read_mouse_:
@@ -102,6 +116,42 @@ _read_mouse:
        pop ebp
        ret
 
        pop ebp
        ret
 
+; void read_mouse_rel(int *xp, int *yp)
+       global read_mouse_rel_
+read_mouse_rel_:
+       pusha
+       mov esi, eax    ; xp
+       mov edi, edx    ; yp
+       mov ax, READREL
+       int 0x33
+       movsx eax, cx
+       mov [esi], eax
+       movsx eax, dx
+       mov [edi], eax
+       popa
+       ret
+
+       global _read_mouse_rel
+_read_mouse_rel:
+       push ebp
+       mov ebp, esp
+       push ebx
+       push esi
+       push edi
+       mov ax, READREL
+       int 0x33
+       mov ebx, [ebp + 8]
+       movsx eax, cx
+       mov [ebx], eax
+       mov ebx, [ebp + 12]
+       movsx eax, dx
+       mov [ebx], eax
+       pop edi
+       pop esi
+       pop ebx
+       pop ebp
+       ret
+
 ; void set_mouse(int x, int y)
        global set_mouse_
 set_mouse_:
 ; void set_mouse(int x, int y)
        global set_mouse_
 set_mouse_:
index b54f6a9..aa46df3 100644 (file)
@@ -13,7 +13,9 @@ extern "C" {
 
 int have_mouse(void);
 void show_mouse(int show);
 
 int have_mouse(void);
 void show_mouse(int show);
+int read_mouse_bn(void);
 int read_mouse(int *xp, int *yp);
 int read_mouse(int *xp, int *yp);
+void read_mouse_rel(int *xp, int *yp);
 void set_mouse(int x, int y);
 void set_mouse_limits(int xmin, int ymin, int xmax, int ymax);
 void set_mouse_rate(int xrate, int yrate);
 void set_mouse(int x, int y);
 void set_mouse_limits(int xmin, int ymin, int xmax, int ymax);
 void set_mouse_rate(int xrate, int yrate);