Fix up mouse forwarding

This commit is contained in:
beeanyew 2021-01-10 01:25:52 +01:00
parent a123985836
commit a66c55892a
2 changed files with 26 additions and 15 deletions

View 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);
}

View 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;
}