diff --git a/menu.cpp b/menu.cpp index f035146..4deb103 100644 --- a/menu.cpp +++ b/menu.cpp @@ -869,7 +869,7 @@ void HandleUI(void) case MENU_ARCHIE_MAIN1: OsdSetTitle(user_io_get_core_name(), OSD_ARROW_RIGHT | OSD_ARROW_LEFT); - menumask = 0x7f; + menumask = 0xff; OsdWrite(0, "", 0, 0); strcpy(s, " Floppy 0: "); @@ -888,21 +888,23 @@ void HandleUI(void) OsdWrite(5, "", 0, 0); - strcpy(s, " Aspect ratio: "); + strcpy(s, " Aspect ratio: "); strcat(s, archie_get_ar() ? "16:9" : "4:3"); OsdWrite(6, s, menusub == 3, 0); OsdWrite(7, "", 0, 0); - sprintf(s, " Stereo mix: %s", config_stereo_msg[archie_get_amix()]); + sprintf(s, " Stereo mix: %s", config_stereo_msg[archie_get_amix()]); OsdWrite(8, s, menusub == 4, 0); OsdWrite(9, "", 0, 0); - sprintf(s, " Swap joysticks: %s", user_io_get_joyswap() ? "Yes" : "No"); + sprintf(s, " Swap joysticks: %s", user_io_get_joyswap() ? "Yes" : "No"); OsdWrite(10, s, menusub == 5, 0); + sprintf(s, " Swap mouse btn 2/3: %s", archie_get_mswap() ? "Yes" : "No"); + OsdWrite(11, s, menusub == 6, 0); - for (int i = 11; i<15; i++) OsdWrite(i, "", 0, 0); + for (int i = 12; i<15; i++) OsdWrite(i, "", 0, 0); - OsdWrite(15, STD_EXIT, menusub == 6, 0); + OsdWrite(15, STD_EXIT, menusub == 7, 0); menustate = MENU_ARCHIE_MAIN2; parentstate = MENU_ARCHIE_MAIN1; @@ -943,7 +945,12 @@ void HandleUI(void) menustate = MENU_ARCHIE_MAIN1; break; - case 6: // Exit + case 6: + archie_set_mswap(!archie_get_mswap()); + menustate = MENU_ARCHIE_MAIN1; + break; + + case 7: // Exit menustate = MENU_NONE1; break; } diff --git a/support/archie/archie.cpp b/support/archie/archie.cpp index b8a5949..c33a0f8 100644 --- a/support/archie/archie.cpp +++ b/support/archie/archie.cpp @@ -6,6 +6,7 @@ #include "archie.h" #include "../../debug.h" #include "../../user_io.h" +#include "../../input.h" #define CONFIG_FILENAME "ARCHIE.CFG" @@ -83,6 +84,17 @@ int archie_get_ar() return config.system_ctrl & 1; } +static int mswap = 0; +void archie_set_mswap(char i) +{ + mswap = i; +} + +int archie_get_mswap() +{ + return mswap; +} + void archie_set_amix(char i) { config.system_ctrl = (config.system_ctrl & ~0b110) | ((i & 3)<<1); @@ -264,6 +276,7 @@ void archie_mouse(unsigned char b, int16_t x, int16_t y) // ignore mouse buttons if key scanning is disabled if (flags & FLAG_SCAN_ENABLED) { + static const uint8_t remap[] = { 0, 2, 1 }; static unsigned char buts = 0; uint8_t s; @@ -275,7 +288,7 @@ void archie_mouse(unsigned char b, int16_t x, int16_t y) { unsigned char prefix = (b&mask) ? KDDA : KUDA; archie_kbd_send(STATE_WAIT4ACK1, prefix | 0x07); - archie_kbd_send(STATE_WAIT4ACK2, prefix | s); + archie_kbd_send(STATE_WAIT4ACK2, prefix | ((!mswap ^ !(get_key_mod() & (RGUI|LGUI))) ? s : remap[s])); } } buts = b; diff --git a/support/archie/archie.h b/support/archie/archie.h index 74d0973..4f0b3a5 100644 --- a/support/archie/archie.h +++ b/support/archie/archie.h @@ -15,5 +15,7 @@ void archie_set_ar(char i); int archie_get_ar(); void archie_set_amix(char i); int archie_get_amix(); +void archie_set_mswap(char i); +int archie_get_mswap(); #endif // ARCHIE_H