diff --git a/config.h b/config.h index e775145b09..3a6aa8ff13 100644 --- a/config.h +++ b/config.h @@ -90,7 +90,7 @@ static const bool audio_enable = true; static const unsigned out_rate = 48000; // Input samplerate from libSNES. -// Lower this (slightly) if you are experiencing frequent audio dropouts and vsync is enabled. +// Lower this (slightly) if you are experiencing frequent audio dropouts while vsync is enabled. static const unsigned in_rate = 31950; // Audio device (e.g. hw:0,0 or /dev/audio). If NULL, will use defaults. @@ -114,6 +114,7 @@ static const bool audio_sync = true; // To figure out which joypad buttons to use, check jstest or similar. +// Player 1 static const struct snes_keybind snes_keybinds_1[] = { // SNES button | keyboard key | joypad button | { SNES_DEVICE_ID_JOYPAD_A, 'X', 1 }, @@ -132,6 +133,7 @@ static const struct snes_keybind snes_keybinds_1[] = { { -1 } }; +// Player 2 static const struct snes_keybind snes_keybinds_2[] = { // SNES button | keyboard key | joypad button | { SNES_DEVICE_ID_JOYPAD_A, 'B', 1 }, @@ -140,14 +142,13 @@ static const struct snes_keybind snes_keybinds_2[] = { { SNES_DEVICE_ID_JOYPAD_Y, 'F', 2 }, { SNES_DEVICE_ID_JOYPAD_L, 'R', 4 }, { SNES_DEVICE_ID_JOYPAD_R, 'T', 5 }, - { SNES_DEVICE_ID_JOYPAD_LEFT, 'J', 12 }, - { SNES_DEVICE_ID_JOYPAD_RIGHT, 'L', 13 }, - { SNES_DEVICE_ID_JOYPAD_UP, 'I', 10 }, - { SNES_DEVICE_ID_JOYPAD_DOWN, 'K', 11 }, - { SNES_DEVICE_ID_JOYPAD_START, 'P', 6 }, - { SNES_DEVICE_ID_JOYPAD_SELECT, 'O', 14 }, + { SNES_DEVICE_ID_JOYPAD_LEFT, 'J', 12 }, + { SNES_DEVICE_ID_JOYPAD_RIGHT, 'L', 13 }, + { SNES_DEVICE_ID_JOYPAD_UP, 'I', 10 }, + { SNES_DEVICE_ID_JOYPAD_DOWN, 'K', 11 }, + { SNES_DEVICE_ID_JOYPAD_START, 'P', 6 }, + { SNES_DEVICE_ID_JOYPAD_SELECT, 'O', 14 }, { -1 } - //{ SNES_FAST_FORWARD_KEY, GLFW_KEY_SPACE, 9 }, }; ///// Save state diff --git a/gl.c b/gl.c index 245fd36807..01f51fa4d4 100644 --- a/gl.c +++ b/gl.c @@ -42,6 +42,8 @@ static void glfw_input_poll(void *data) glfwPollEvents(); } +#define BUTTONS_MAX 128 + static int joypad_id[2]; static int joypad_buttons[2]; static bool joypad_inited = false; @@ -51,12 +53,14 @@ static int init_joypads(int max_pads) { // Finds the first (two) joypads that are alive int count = 0; - for ( int i = GLFW_JOYSTICK_1; i <= GLFW_JOYSTICK_LAST && count < max_pads; i++ ) + for ( int i = GLFW_JOYSTICK_1; (i <= GLFW_JOYSTICK_LAST) && (count < max_pads); i++ ) { if ( glfwGetJoystickParam(i, GLFW_PRESENT) == GL_TRUE ) { joypad_id[count] = i; joypad_buttons[count] = glfwGetJoystickParam(i, GLFW_BUTTONS); + if (joypad_buttons[count] > BUTTONS_MAX) + joypad_buttons[count] = BUTTONS_MAX; count++; } } @@ -74,7 +78,7 @@ static int16_t glfw_input_state(void *data, const struct snes_keybind **binds, b joypad_count = init_joypads(2); int port_num = port ? 1 : 0; - unsigned char buttons[joypad_buttons[port_num]]; + unsigned char buttons[BUTTONS_MAX]; if ( joypad_count > id ) glfwGetJoystickButtons(joypad_id[port_num], buttons, joypad_buttons[port_num]);