From a66c55892a6fd635340610acd293e8f2e7471663 Mon Sep 17 00:00:00 2001 From: beeanyew Date: Sun, 10 Jan 2021 01:25:52 +0100 Subject: [PATCH] Fix up mouse forwarding --- emulator.c | 32 +++++++++++++++++++------------- input/input.c | 9 +++++++-- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/emulator.c b/emulator.c index 03cf080..7da5df3 100644 --- a/emulator.c +++ b/emulator.c @@ -231,9 +231,7 @@ int main(int argc, char *argv[]) { m68k_pulse_reset(); while (42) { if (mouse_hook_enabled) { - if (get_mouse_status(&mouse_dx, &mouse_dy, &mouse_buttons)) { - //printf("Maus: %d (%.2X), %d (%.2X), B:%.2X\n", mouse_dx, mouse_dx, mouse_dy, mouse_dy, mouse_buttons); - } + get_mouse_status(&mouse_dx, &mouse_dy, &mouse_buttons); } if (cpu_emulation_running) @@ -364,8 +362,20 @@ static unsigned int target = 0; unsigned int m68k_read_memory_8(unsigned int address) { PLATFORM_CHECK_READ(OP_TYPE_BYTE); - address &=0xFFFFFF; - return read8((uint32_t)address); + if (mouse_hook_enabled) { + if (address == CIAAPRA) { + unsigned char result = (unsigned int)read8((uint32_t)address); + if (mouse_buttons & 0x01) { + //mouse_buttons -= 1; + return (unsigned int)(result ^ 0x40); + } + else + return (unsigned int)result; + } + } + + address &=0xFFFFFF; + return read8((uint32_t)address); } unsigned int m68k_read_memory_16(unsigned int address) { @@ -375,30 +385,26 @@ unsigned int m68k_read_memory_16(unsigned int address) { if (address == JOY0DAT) { // Forward mouse valueses to Amyga. unsigned short result = (mouse_dy << 8) | (mouse_dx); - mouse_dx = mouse_dy = 0; return (unsigned int)result; } - if (address == CIAAPRA) { + /*if (address == CIAAPRA) { unsigned short result = (unsigned int)read16((uint32_t)address); if (mouse_buttons & 0x01) { - mouse_buttons -= 1; return (unsigned int)(result | 0x40); } else return (unsigned int)result; - } + }*/ if (address == POTGOR) { unsigned short result = (unsigned int)read16((uint32_t)address); if (mouse_buttons & 0x02) { - mouse_buttons -= 2; - return (unsigned int)(result | 0x2); + return (unsigned int)(result ^ (0x2 << 9)); } else - return (unsigned int)result; + return (unsigned int)(result & 0xFFFD); } } - address &=0xFFFFFF; return (unsigned int)read16((uint32_t)address); } diff --git a/input/input.c b/input/input.c index 39af402..4f80794 100644 --- a/input/input.c +++ b/input/input.c @@ -1,5 +1,6 @@ #include #include +#include #include static int lshift = 0, rshift = 0, lctrl = 0, rctrl = 0, lalt = 0, altgr = 0; @@ -112,12 +113,16 @@ int get_key_char(char *c) return 0; } +uint16_t mouse_x = 0, mouse_y = 0, mouse_b = 0; + int get_mouse_status(char *x, char *y, char *b) { struct input_event ie; if (read(mouse_fd, &ie, sizeof(struct input_event)) != -1) { *b = ((char *)&ie)[0]; - *x = ((char *)&ie)[1]; - *y = ((char *)&ie)[2]; + mouse_x += ((char *)&ie)[1]; + *x = mouse_x; + mouse_y += (-((char *)&ie)[2]); + *y = mouse_y; //-((char *)&ie)[2]; return 1; } -- 2.39.2