Libretro: Cleanup controller layout binds

This commit is contained in:
retro-wertz 2018-06-13 22:39:25 +08:00
parent 319a4869c7
commit 01c5f465fe
1 changed files with 49 additions and 55 deletions

View File

@ -40,9 +40,8 @@ static retro_environment_t environ_cb;
static bool enableRtc; static bool enableRtc;
static bool can_dupe; static bool can_dupe;
unsigned device_type = 0;
int emulating = 0; int emulating = 0;
static int controller_layout[2] = { 0, 0 }; static unsigned controller_layout = 0;
uint8_t libretro_save_buf[0x20000 + 0x2000]; /* Workaround for broken-by-design GBA save semantics. */ uint8_t libretro_save_buf[0x20000 + 0x2000]; /* Workaround for broken-by-design GBA save semantics. */
@ -169,16 +168,16 @@ void retro_set_controller_port_device(unsigned port, unsigned device)
case RETRO_DEVICE_JOYPAD: case RETRO_DEVICE_JOYPAD:
case RETRO_DEVICE_GBA: case RETRO_DEVICE_GBA:
default: default:
controller_layout[port] = 0; controller_layout = 0;
break; break;
case RETRO_DEVICE_GBA_ALT1: case RETRO_DEVICE_GBA_ALT1:
controller_layout[port] = 1; controller_layout = 1;
break; break;
case RETRO_DEVICE_GBA_ALT2: case RETRO_DEVICE_GBA_ALT2:
controller_layout[port] = 2; controller_layout = 2;
break; break;
case RETRO_DEVICE_NONE: case RETRO_DEVICE_NONE:
controller_layout[port] = -1; controller_layout = -1;
break; break;
} }
} }
@ -445,6 +444,7 @@ static void gba_init(void)
flashSize = 0x10000; flashSize = 0x10000;
enableRtc = false; enableRtc = false;
mirroringEnable = false; mirroringEnable = false;
#ifdef FRONTEND_SUPPORTS_RGB565 #ifdef FRONTEND_SUPPORTS_RGB565
systemColorDepth = 16; systemColorDepth = 16;
systemRedShift = 11; systemRedShift = 11;
@ -503,43 +503,44 @@ void retro_reset(void)
CPUReset(); CPUReset();
} }
static const unsigned binds[] = { #define MAX_BUTTONS 10
RETRO_DEVICE_ID_JOYPAD_A, static const unsigned binds[3][MAX_BUTTONS] = {
RETRO_DEVICE_ID_JOYPAD_B, {
RETRO_DEVICE_ID_JOYPAD_SELECT, RETRO_DEVICE_ID_JOYPAD_A,
RETRO_DEVICE_ID_JOYPAD_START, RETRO_DEVICE_ID_JOYPAD_B,
RETRO_DEVICE_ID_JOYPAD_RIGHT, RETRO_DEVICE_ID_JOYPAD_SELECT,
RETRO_DEVICE_ID_JOYPAD_LEFT, RETRO_DEVICE_ID_JOYPAD_START,
RETRO_DEVICE_ID_JOYPAD_UP, RETRO_DEVICE_ID_JOYPAD_RIGHT,
RETRO_DEVICE_ID_JOYPAD_DOWN, RETRO_DEVICE_ID_JOYPAD_LEFT,
RETRO_DEVICE_ID_JOYPAD_R, RETRO_DEVICE_ID_JOYPAD_UP,
RETRO_DEVICE_ID_JOYPAD_L RETRO_DEVICE_ID_JOYPAD_DOWN,
}; RETRO_DEVICE_ID_JOYPAD_R,
RETRO_DEVICE_ID_JOYPAD_L
static const unsigned binds1[] = { },
RETRO_DEVICE_ID_JOYPAD_B, {
RETRO_DEVICE_ID_JOYPAD_Y, RETRO_DEVICE_ID_JOYPAD_B,
RETRO_DEVICE_ID_JOYPAD_SELECT, RETRO_DEVICE_ID_JOYPAD_Y,
RETRO_DEVICE_ID_JOYPAD_START, RETRO_DEVICE_ID_JOYPAD_SELECT,
RETRO_DEVICE_ID_JOYPAD_RIGHT, RETRO_DEVICE_ID_JOYPAD_START,
RETRO_DEVICE_ID_JOYPAD_LEFT, RETRO_DEVICE_ID_JOYPAD_RIGHT,
RETRO_DEVICE_ID_JOYPAD_UP, RETRO_DEVICE_ID_JOYPAD_LEFT,
RETRO_DEVICE_ID_JOYPAD_DOWN, RETRO_DEVICE_ID_JOYPAD_UP,
RETRO_DEVICE_ID_JOYPAD_R, RETRO_DEVICE_ID_JOYPAD_DOWN,
RETRO_DEVICE_ID_JOYPAD_L RETRO_DEVICE_ID_JOYPAD_R,
}; RETRO_DEVICE_ID_JOYPAD_L
},
static const unsigned binds2[] = { {
RETRO_DEVICE_ID_JOYPAD_B, RETRO_DEVICE_ID_JOYPAD_B,
RETRO_DEVICE_ID_JOYPAD_A, RETRO_DEVICE_ID_JOYPAD_A,
RETRO_DEVICE_ID_JOYPAD_SELECT, RETRO_DEVICE_ID_JOYPAD_SELECT,
RETRO_DEVICE_ID_JOYPAD_START, RETRO_DEVICE_ID_JOYPAD_START,
RETRO_DEVICE_ID_JOYPAD_RIGHT, RETRO_DEVICE_ID_JOYPAD_RIGHT,
RETRO_DEVICE_ID_JOYPAD_LEFT, RETRO_DEVICE_ID_JOYPAD_LEFT,
RETRO_DEVICE_ID_JOYPAD_UP, RETRO_DEVICE_ID_JOYPAD_UP,
RETRO_DEVICE_ID_JOYPAD_DOWN, RETRO_DEVICE_ID_JOYPAD_DOWN,
RETRO_DEVICE_ID_JOYPAD_R, RETRO_DEVICE_ID_JOYPAD_R,
RETRO_DEVICE_ID_JOYPAD_L RETRO_DEVICE_ID_JOYPAD_L
}
}; };
static void systemUpdateSolarSensor(int level); static void systemUpdateSolarSensor(int level);
@ -762,8 +763,8 @@ bool retro_load_game(const struct retro_game_info *game)
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "R" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "R" },
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" },
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" },
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "Solar Sensor (Darker)" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "Solar Sensor (Darker)" },
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2, "Solar Sensor (Lighter)" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2, "Solar Sensor (Lighter)" },
{ 0 }, { 0 },
}; };
@ -901,18 +902,11 @@ uint32_t systemReadJoypad(int which)
if (which == -1) if (which == -1)
which = 0; which = 0;
unsigned ControllerLayout = controller_layout;
uint32_t J = 0; uint32_t J = 0;
for (unsigned i = 0; i < 10; i++) { for (unsigned i = 0; i < MAX_BUTTONS; i++)
if (controller_layout[0] == 1) J |= input_cb(which, RETRO_DEVICE_JOYPAD, 0, binds[ControllerLayout][i]) << i;
J |= input_cb(which, RETRO_DEVICE_JOYPAD, 0, binds1[i]) << i;
else if (controller_layout[0] == 2)
J |= input_cb(which, RETRO_DEVICE_JOYPAD, 0, binds2[i]) << i;
else if (controller_layout[0] == -1)
break;
else
J |= input_cb(which, RETRO_DEVICE_JOYPAD, 0, binds[i]) << i;
}
// Do not allow opposing directions // Do not allow opposing directions
if ((J & 0x30) == 0x30) if ((J & 0x30) == 0x30)