+ // Query digital inputs
+ //
+ // > Pad-Up
+ if (input_state_cb(i, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP)){
+ in_keystate[i] |= (1 << DKEY_UP);
+ }
+ // > Pad-Right
+ if (input_state_cb(i, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT)){
+ in_keystate[i] |= (1 << DKEY_RIGHT);
+ }
+ // > Pad-Down
+ if (input_state_cb(i, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN)){
+ in_keystate[i] |= (1 << DKEY_DOWN);
+ }
+ // > Pad-Left
+ if (input_state_cb(i, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT)){
+ in_keystate[i] |= (1 << DKEY_LEFT);
+ }
+ // > Start
+ if (input_state_cb(i, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START)){
+ in_keystate[i] |= (1 << DKEY_START);
+ }
+ // > neGcon A
+ if (input_state_cb(i, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A)){
+ in_keystate[i] |= (1 << DKEY_CIRCLE);
+ }
+ // > neGcon B
+ if (input_state_cb(i, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X)){
+ in_keystate[i] |= (1 << DKEY_TRIANGLE);
+ }
+ // > neGcon R shoulder (digital)
+ if (input_state_cb(i, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R)){
+ in_keystate[i] |= (1 << DKEY_R1);
+ }
+ // Query analog inputs
+ //
+ // From studying 'libpcsxcore/plugins.c' and 'frontend/plugin.c':
+ // >> pad->leftJoyX == in_analog_left[i][0] == NeGcon II
+ // >> pad->leftJoyY == in_analog_left[i][1] == NeGcon L
+ // >> pad->rightJoyX == in_analog_right[i][0] == NeGcon twist
+ // >> pad->rightJoyY == in_analog_right[i][1] == NeGcon I
+ // So we just have to map in_analog_left/right to more
+ // appropriate inputs...
+ //
+ // > NeGcon twist
+ in_analog_right[i][0] = MIN((input_state_cb(i, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X) / 255) + 128, 255);
+ // > NeGcon I
+ in_analog_right[i][1] = MAX(
+ get_analog_button(input_state_cb, i, RETRO_DEVICE_ID_JOYPAD_R2),
+ get_analog_button(input_state_cb, i, RETRO_DEVICE_ID_JOYPAD_B)
+ );
+ // > NeGcon II
+ in_analog_left[i][0] = MAX(
+ get_analog_button(input_state_cb, i, RETRO_DEVICE_ID_JOYPAD_L2),
+ get_analog_button(input_state_cb, i, RETRO_DEVICE_ID_JOYPAD_Y)
+ );
+ // > NeGcon L
+ in_analog_left[i][1] = get_analog_button(input_state_cb, i, RETRO_DEVICE_ID_JOYPAD_L);
+ }
+ else
+ {
+ // Query digital inputs
+ for (j = 0; j < RETRO_PSX_MAP_LEN; j++){
+ if (input_state_cb(i, RETRO_DEVICE_JOYPAD, 0, j)){
+ in_keystate[i] |= retro_psx_map[j];
+ }
+ }
+ // Query analog inputs
+ if (in_type[i] == PSE_PAD_TYPE_ANALOGPAD)
+ {
+ in_analog_left[i][0] = MIN((input_state_cb(i, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X) / 255) + 128, 255);
+ in_analog_left[i][1] = MIN((input_state_cb(i, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y) / 255) + 128, 255);
+ in_analog_right[i][0] = MIN((input_state_cb(i, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X) / 255) + 128, 255);
+ in_analog_right[i][1] = MIN((input_state_cb(i, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y) / 255) + 128, 255);
+ }