support PowerPad via keyboard qwer/asdf/zxcv
This commit is contained in:
@@ -51,6 +51,8 @@
|
|||||||
#define RETRO_DEVICE_GAMEPAD RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 1)
|
#define RETRO_DEVICE_GAMEPAD RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 1)
|
||||||
#define RETRO_DEVICE_ZAPPER RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_MOUSE, 0)
|
#define RETRO_DEVICE_ZAPPER RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_MOUSE, 0)
|
||||||
#define RETRO_DEVICE_ARKANOID RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_MOUSE, 1)
|
#define RETRO_DEVICE_ARKANOID RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_MOUSE, 1)
|
||||||
|
#define RETRO_DEVICE_POWERPADA RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_KEYBOARD, 0)
|
||||||
|
#define RETRO_DEVICE_POWERPADB RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_KEYBOARD, 1)
|
||||||
|
|
||||||
#define RETRO_DEVICE_FC_ARKANOID RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_MOUSE, 2)
|
#define RETRO_DEVICE_FC_ARKANOID RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_MOUSE, 2)
|
||||||
#define RETRO_DEVICE_FC_OEKAKIDS RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_MOUSE, 3)
|
#define RETRO_DEVICE_FC_OEKAKIDS RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_MOUSE, 3)
|
||||||
@@ -130,6 +132,19 @@ static const keymap bindmap[] = {
|
|||||||
{ RETRO_DEVICE_ID_JOYPAD_RIGHT, JOY_RIGHT },
|
{ RETRO_DEVICE_ID_JOYPAD_RIGHT, JOY_RIGHT },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const uint32_t powerpadamap[] = {
|
||||||
|
RETROK_r, RETROK_e, RETROK_w, RETROK_q,
|
||||||
|
RETROK_f, RETROK_d, RETROK_s, RETROK_a,
|
||||||
|
RETROK_v, RETROK_c, RETROK_x, RETROK_z,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint32_t powerpadbmap[] = {
|
||||||
|
RETROK_q, RETROK_w, RETROK_e, RETROK_r,
|
||||||
|
RETROK_a, RETROK_s, RETROK_d, RETROK_f,
|
||||||
|
RETROK_z, RETROK_x, RETROK_c, RETROK_v,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool enable_4player; /* four-score / 4-player adapter used */
|
bool enable_4player; /* four-score / 4-player adapter used */
|
||||||
bool up_down_allowed; /* disabled simultaneous up+down and left+right dpad combinations */
|
bool up_down_allowed; /* disabled simultaneous up+down and left+right dpad combinations */
|
||||||
@@ -144,6 +159,7 @@ typedef struct {
|
|||||||
uint32_t JSReturn; /* player input data, 1 byte per player (1-4) */
|
uint32_t JSReturn; /* player input data, 1 byte per player (1-4) */
|
||||||
uint32_t MouseData[MAX_PORTS][4]; /* nes mouse data */
|
uint32_t MouseData[MAX_PORTS][4]; /* nes mouse data */
|
||||||
uint32_t FamicomData[3]; /* Famicom expansion port data */
|
uint32_t FamicomData[3]; /* Famicom expansion port data */
|
||||||
|
uint32_t PowerPadData;
|
||||||
} NES_INPUT_T;
|
} NES_INPUT_T;
|
||||||
|
|
||||||
static NES_INPUT_T nes_input = { 0 };
|
static NES_INPUT_T nes_input = { 0 };
|
||||||
@@ -1182,6 +1198,16 @@ static void update_nes_controllers(unsigned port, unsigned device)
|
|||||||
FCEUI_SetInput(port, SI_ARKANOID, nes_input.MouseData[port], 0);
|
FCEUI_SetInput(port, SI_ARKANOID, nes_input.MouseData[port], 0);
|
||||||
FCEU_printf(" Player %u: Arkanoid\n", port + 1);
|
FCEU_printf(" Player %u: Arkanoid\n", port + 1);
|
||||||
break;
|
break;
|
||||||
|
case RETRO_DEVICE_POWERPADA:
|
||||||
|
nes_input.type[port] = RETRO_DEVICE_POWERPADA;
|
||||||
|
FCEUI_SetInput(port, SI_POWERPADA, &nes_input.PowerPadData, 0);
|
||||||
|
FCEU_printf(" Player %u: Powerpad\n", port + 1);
|
||||||
|
break;
|
||||||
|
case RETRO_DEVICE_POWERPADB:
|
||||||
|
nes_input.type[port] = RETRO_DEVICE_POWERPADB;
|
||||||
|
FCEUI_SetInput(port, SI_POWERPADB, &nes_input.PowerPadData, 0);
|
||||||
|
FCEU_printf(" Player %u: Powerpad\n", port + 1);
|
||||||
|
break;
|
||||||
case RETRO_DEVICE_GAMEPAD:
|
case RETRO_DEVICE_GAMEPAD:
|
||||||
default:
|
default:
|
||||||
nes_input.type[port] = RETRO_DEVICE_GAMEPAD;
|
nes_input.type[port] = RETRO_DEVICE_GAMEPAD;
|
||||||
@@ -1237,6 +1263,8 @@ static unsigned nes_to_libretro(int d)
|
|||||||
return RETRO_DEVICE_ZAPPER;
|
return RETRO_DEVICE_ZAPPER;
|
||||||
case SI_ARKANOID:
|
case SI_ARKANOID:
|
||||||
return RETRO_DEVICE_ARKANOID;
|
return RETRO_DEVICE_ARKANOID;
|
||||||
|
case SI_POWERPADB:
|
||||||
|
return RETRO_DEVICE_POWERPADB;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (RETRO_DEVICE_GAMEPAD);
|
return (RETRO_DEVICE_GAMEPAD);
|
||||||
@@ -1530,6 +1558,8 @@ void retro_set_environment(retro_environment_t cb)
|
|||||||
{ "Gamepad", RETRO_DEVICE_GAMEPAD },
|
{ "Gamepad", RETRO_DEVICE_GAMEPAD },
|
||||||
{ "Arkanoid", RETRO_DEVICE_ARKANOID },
|
{ "Arkanoid", RETRO_DEVICE_ARKANOID },
|
||||||
{ "Zapper", RETRO_DEVICE_ZAPPER },
|
{ "Zapper", RETRO_DEVICE_ZAPPER },
|
||||||
|
{ "PowerPad A", RETRO_DEVICE_POWERPADA },
|
||||||
|
{ "PowerPad B", RETRO_DEVICE_POWERPADB },
|
||||||
{ 0, 0 },
|
{ 0, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1557,7 +1587,7 @@ void retro_set_environment(retro_environment_t cb)
|
|||||||
|
|
||||||
static const struct retro_controller_info ports[] = {
|
static const struct retro_controller_info ports[] = {
|
||||||
{ pads1, 3 },
|
{ pads1, 3 },
|
||||||
{ pads2, 4 },
|
{ pads2, 6 },
|
||||||
{ pads3, 2 },
|
{ pads3, 2 },
|
||||||
{ pads4, 2 },
|
{ pads4, 2 },
|
||||||
{ pads5, 6 },
|
{ pads5, 6 },
|
||||||
@@ -2206,6 +2236,15 @@ static void check_variables(bool startup)
|
|||||||
update_option_visibility();
|
update_option_visibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void get_powerpad_input(unsigned port, uint32 variant, uint32_t *ppdata)
|
||||||
|
{
|
||||||
|
*ppdata = 0;
|
||||||
|
const uint32_t* map = (variant == RETRO_DEVICE_POWERPADA) ? powerpadamap : powerpadbmap;
|
||||||
|
for (unsigned k = 0 ; k < 12 ; k++)
|
||||||
|
if (input_cb(0, RETRO_DEVICE_KEYBOARD, 0, map[k]))
|
||||||
|
*ppdata |= (1 << k);
|
||||||
|
}
|
||||||
|
|
||||||
static int mzx = 0, mzy = 0;
|
static int mzx = 0, mzy = 0;
|
||||||
|
|
||||||
void get_mouse_input(unsigned port, uint32_t *zapdata)
|
void get_mouse_input(unsigned port, uint32_t *zapdata)
|
||||||
@@ -2462,6 +2501,17 @@ static void FCEUD_UpdateInput(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (port = 0; port < MAX_PORTS; port++)
|
||||||
|
{
|
||||||
|
switch (nes_input.type[port])
|
||||||
|
{
|
||||||
|
case RETRO_DEVICE_POWERPADB:
|
||||||
|
case RETRO_DEVICE_POWERPADA:
|
||||||
|
get_powerpad_input(port, nes_input.type[port], &nes_input.PowerPadData);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* famicom inputs */
|
/* famicom inputs */
|
||||||
switch (nes_input.type[4])
|
switch (nes_input.type[4])
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user