]> git.sesse.net Git - pistorm/commitdiff
Fix up mouse forwarding
authorbeeanyew <beeanyew@gmail.com>
Sun, 10 Jan 2021 00:25:52 +0000 (01:25 +0100)
committerbeeanyew <beeanyew@gmail.com>
Sun, 10 Jan 2021 00:25:52 +0000 (01:25 +0100)
emulator.c
input/input.c

index 03cf080868c8175f902fb91cc5d9fd5d79faad2a..7da5df39648b87887e599368600b9e1cb140f5a5 100644 (file)
@@ -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);
 }
index 39af402519a5d8d7cf989b030c7578fe33b340da..4f8079433185c92664de4a3939eb067b30ce2968 100644 (file)
@@ -1,5 +1,6 @@
 #include <termios.h>
 #include <unistd.h>
+#include <stdint.h>
 #include <linux/input.h>
 
 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;
   }