diff --git a/menu.cpp b/menu.cpp index 654f0d1..2b3aebf 100644 --- a/menu.cpp +++ b/menu.cpp @@ -864,13 +864,16 @@ void HandleUI(void) OsdWrite(6, s, menusub == 3, 0); OsdWrite(7, "", 0, 0); - sprintf(s, " Stereo mix: %s", config_stereo_msg[archie_get_amix()]); OsdWrite(8, s, menusub == 4, 0); - for (int i = 9; i<15; i++) OsdWrite(i, "", 0, 0); + OsdWrite(9, "", 0, 0); + sprintf(s, " Swap joysticks: %s", user_io_get_joyswap() ? "Yes" : "No"); + OsdWrite(10, s, menusub == 5, 0); - OsdWrite(15, STD_EXIT, menusub == 5, 0); + for (int i = 11; i<15; i++) OsdWrite(i, "", 0, 0); + + OsdWrite(15, STD_EXIT, menusub == 6, 0); menustate = MENU_ARCHIE_MAIN2; parentstate = MENU_ARCHIE_MAIN1; @@ -911,7 +914,12 @@ void HandleUI(void) menustate = MENU_ARCHIE_MAIN1; break; - case 5: // Exit + case 5: + user_io_set_joyswap(!user_io_get_joyswap()); + menustate = MENU_ARCHIE_MAIN1; + break; + + case 6: // Exit menustate = MENU_NONE1; break; } diff --git a/user_io.cpp b/user_io.cpp index c357375..3940b2e 100644 --- a/user_io.cpp +++ b/user_io.cpp @@ -523,11 +523,24 @@ void user_io_init() system(cmd); } +static int joyswap = 0; +void user_io_set_joyswap(int swap) +{ + joyswap = swap; +} + +int user_io_get_joyswap() +{ + return joyswap; +} + void user_io_analog_joystick(unsigned char joystick, char valueX, char valueY) { + uint8_t joy = (!joyswap) ? joystick : joystick ? 0 : 1; + if (core_type == CORE_TYPE_8BIT) { - spi_uio_cmd8_cont(UIO_ASTICK, joystick); + spi_uio_cmd8_cont(UIO_ASTICK, joy); if(io_ver) spi_w((valueY<<8) | (uint8_t)(valueX)); else { @@ -540,9 +553,11 @@ void user_io_analog_joystick(unsigned char joystick, char valueX, char valueY) void user_io_digital_joystick(unsigned char joystick, uint16_t map, int newdir) { + uint8_t joy = (!joyswap) ? joystick : joystick ? 0 : 1; + if (is_minimig()) { - spi_uio_cmd16(UIO_JOYSTICK0 + joystick, map); + spi_uio_cmd16(UIO_JOYSTICK0 + joy, map); return; } @@ -550,11 +565,11 @@ void user_io_digital_joystick(unsigned char joystick, uint16_t map, int newdir) // but only for joystick 1 and 2 if (core_type == CORE_TYPE_MIST) { - ikbd_joystick(joystick, (uint8_t)map); + ikbd_joystick(joy, (uint8_t)map); return; } - spi_uio_cmd16(UIO_JOYSTICK0 + joystick, map); + spi_uio_cmd16(UIO_JOYSTICK0 + joy, map); if (joy_transl == 1 && newdir) { user_io_analog_joystick(joystick, (map & 2) ? 128 : (map & 1) ? 127 : 0, (map & 8) ? 128 : (map & 4) ? 127 : 0); diff --git a/user_io.h b/user_io.h index 3d90c2f..d143d25 100644 --- a/user_io.h +++ b/user_io.h @@ -210,6 +210,8 @@ char* user_io_create_config_name(); int user_io_get_joy_transl(); void user_io_digital_joystick(unsigned char, uint16_t, int); void user_io_analog_joystick(unsigned char, char, char); +void user_io_set_joyswap(int swap); +int user_io_get_joyswap(); char user_io_osd_is_visible(); void user_io_send_buttons(char); void parse_video_mode();