Joystick swap option for Archie.

This commit is contained in:
sorgelig
2018-05-18 20:01:17 +08:00
parent 75248b562e
commit 02634edbdb
3 changed files with 33 additions and 8 deletions

View File

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

View File

@@ -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);

View File

@@ -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();