Add keyboard input.
This commit is contained in:
@@ -112,6 +112,9 @@ typedef uint16 bpp_t;
|
||||
#define RETRO_DEVICE_FC_HYPERSHOT RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 3)
|
||||
#define RETRO_DEVICE_FC_FTRAINERA RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_KEYBOARD, 2)
|
||||
#define RETRO_DEVICE_FC_FTRAINERB RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_KEYBOARD, 3)
|
||||
#define RETRO_DEVICE_FC_FKB RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_KEYBOARD, 4)
|
||||
#define RETRO_DEVICE_FC_SUBORKB RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_KEYBOARD, 5)
|
||||
#define RETRO_DEVICE_FC_PEC586KB RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_KEYBOARD, 6)
|
||||
#define RETRO_DEVICE_FC_AUTO RETRO_DEVICE_JOYPAD
|
||||
|
||||
#define NES_WIDTH 256
|
||||
@@ -192,6 +195,30 @@ static const uint32_t powerpadmap[] = {
|
||||
RETROK_z, RETROK_x, RETROK_c, RETROK_v,
|
||||
};
|
||||
|
||||
static const uint32_t fkbmap[0x48] = {
|
||||
RETROK_F1,RETROK_F2,RETROK_F3,RETROK_F4,RETROK_F5,RETROK_F6,RETROK_F7,RETROK_F8,
|
||||
RETROK_1,RETROK_2,RETROK_3,RETROK_4,RETROK_5,RETROK_6,RETROK_7,RETROK_8,RETROK_9,RETROK_0,RETROK_MINUS,RETROK_EQUALS,RETROK_BACKSLASH,RETROK_BACKSPACE,
|
||||
RETROK_ESCAPE,RETROK_q,RETROK_w,RETROK_e,RETROK_r,RETROK_t,RETROK_y,RETROK_u,RETROK_i,RETROK_o,RETROK_p,RETROK_TILDE,RETROK_LEFTBRACKET,RETROK_RETURN,
|
||||
RETROK_LCTRL,RETROK_a,RETROK_s,RETROK_d,RETROK_f,RETROK_g,RETROK_h,RETROK_j,RETROK_k,RETROK_l,RETROK_SEMICOLON,RETROK_QUOTE,RETROK_RIGHTBRACKET,RETROK_INSERT,
|
||||
RETROK_LSHIFT,RETROK_z,RETROK_x,RETROK_c,RETROK_v,RETROK_b,RETROK_n,RETROK_m,RETROK_COMMA,RETROK_PERIOD,RETROK_SLASH,RETROK_RALT,RETROK_RSHIFT,RETROK_LALT,RETROK_SPACE,
|
||||
RETROK_DELETE,RETROK_END,RETROK_PAGEDOWN,
|
||||
RETROK_UP,RETROK_LEFT,RETROK_RIGHT,RETROK_DOWN
|
||||
};
|
||||
|
||||
static const uint32_t suborkbmap[0x65] = {
|
||||
RETROK_ESCAPE,RETROK_F1,RETROK_F2,RETROK_F3,RETROK_F4,RETROK_F5,RETROK_F6,RETROK_F7,RETROK_F8,RETROK_F9,
|
||||
RETROK_F10,RETROK_F11,RETROK_F12,RETROK_NUMLOCK,RETROK_CARET,RETROK_1,RETROK_2,RETROK_3,RETROK_4,RETROK_5,
|
||||
RETROK_6,RETROK_7,RETROK_8,RETROK_9,RETROK_0,RETROK_MINUS,RETROK_EQUALS,RETROK_BACKSPACE,RETROK_INSERT,RETROK_HOME,
|
||||
RETROK_PAGEUP,RETROK_PAUSE,RETROK_KP_DIVIDE,RETROK_KP_MULTIPLY,RETROK_KP_MINUS,RETROK_TAB,RETROK_q,RETROK_w,RETROK_e,RETROK_r,
|
||||
RETROK_t,RETROK_y,RETROK_u,RETROK_i,RETROK_o,RETROK_p,RETROK_LEFTBRACKET,RETROK_RIGHTBRACKET,RETROK_RETURN,RETROK_DELETE,
|
||||
RETROK_END,RETROK_PAGEDOWN,RETROK_KP7,RETROK_KP8,RETROK_KP9,RETROK_KP_PLUS,RETROK_CAPSLOCK,RETROK_a,RETROK_s,RETROK_d,
|
||||
RETROK_f,RETROK_g,RETROK_h,RETROK_j,RETROK_k,RETROK_l,RETROK_SEMICOLON,RETROK_QUOTE,RETROK_KP4,RETROK_KP5,
|
||||
RETROK_KP6,RETROK_LSHIFT,RETROK_z,RETROK_x,RETROK_c,RETROK_v,RETROK_b,RETROK_n,RETROK_m,RETROK_COMMA,
|
||||
RETROK_PERIOD,RETROK_SLASH,RETROK_BACKSLASH,RETROK_UP,RETROK_KP1,RETROK_KP2,RETROK_KP3,RETROK_LCTRL,RETROK_LALT,RETROK_SPACE,
|
||||
RETROK_LEFT,RETROK_DOWN,RETROK_RIGHT,RETROK_KP0,RETROK_KP_PERIOD,RETROK_UNKNOWN,RETROK_UNKNOWN,RETROK_UNKNOWN,RETROK_UNKNOWN,RETROK_UNKNOWN,
|
||||
RETROK_UNKNOWN
|
||||
};
|
||||
|
||||
|
||||
typedef struct {
|
||||
bool enable_4player; /* four-score / 4-player adapter used */
|
||||
@@ -208,6 +235,8 @@ typedef struct {
|
||||
uint32_t MouseData[MAX_PORTS][4]; /* nes mouse data */
|
||||
uint32_t FamicomData[3]; /* Famicom expansion port data */
|
||||
uint32_t PowerPadData;
|
||||
uint8_t FamilyKeyboardData[0x48];
|
||||
uint8_t SuborKeyboardData[0x65];
|
||||
} NES_INPUT_T;
|
||||
|
||||
static NES_INPUT_T nes_input = { 0 };
|
||||
@@ -1323,6 +1352,18 @@ static void update_nes_controllers(unsigned port, unsigned device)
|
||||
FCEUI_SetInputFC(SIFC_FTRAINERB, &nes_input.PowerPadData, 0);
|
||||
FCEU_printf(" Famicom Expansion: Family Trainer B\n");
|
||||
break;
|
||||
case RETRO_DEVICE_FC_FKB:
|
||||
FCEUI_SetInputFC(SIFC_FKB, &nes_input.FamilyKeyboardData, 0);
|
||||
FCEU_printf(" Famicom Expansion: Family BASIC Keyboard\n");
|
||||
break;
|
||||
case RETRO_DEVICE_FC_SUBORKB:
|
||||
FCEUI_SetInputFC(SIFC_SUBORKB, &nes_input.SuborKeyboardData, 0);
|
||||
FCEU_printf(" Famicom Expansion: Subor Keyboard\n");
|
||||
break;
|
||||
case RETRO_DEVICE_FC_PEC586KB:
|
||||
FCEUI_SetInputFC(SIFC_PEC586KB, &nes_input.SuborKeyboardData, 0);
|
||||
FCEU_printf(" Famicom Expansion: Dongda Keyboard\n");
|
||||
break;
|
||||
case RETRO_DEVICE_NONE:
|
||||
default:
|
||||
FCEUI_SetInputFC(SIFC_NONE, &Dummy, 0);
|
||||
@@ -1373,6 +1414,12 @@ static unsigned fc_to_libretro(int d)
|
||||
return RETRO_DEVICE_FC_FTRAINERA;
|
||||
case SIFC_FTRAINERB:
|
||||
return RETRO_DEVICE_FC_FTRAINERB;
|
||||
case SIFC_FKB:
|
||||
return RETRO_DEVICE_FC_FKB;
|
||||
case SIFC_SUBORKB:
|
||||
return RETRO_DEVICE_FC_SUBORKB;
|
||||
case SIFC_PEC586KB:
|
||||
return RETRO_DEVICE_FC_PEC586KB;
|
||||
}
|
||||
|
||||
return (RETRO_DEVICE_NONE);
|
||||
@@ -2390,8 +2437,7 @@ static void check_variables(bool startup)
|
||||
update_option_visibility();
|
||||
}
|
||||
|
||||
void add_powerpad_input(unsigned port, uint32 variant, uint32_t *ppdata)
|
||||
{
|
||||
void add_powerpad_input(unsigned port, uint32 variant, uint32_t *ppdata) {
|
||||
unsigned k;
|
||||
const uint32_t* map = powerpadmap;
|
||||
for (k = 0 ; k < 12 ; k++)
|
||||
@@ -2399,6 +2445,26 @@ void add_powerpad_input(unsigned port, uint32 variant, uint32_t *ppdata)
|
||||
*ppdata |= (1 << k);
|
||||
}
|
||||
|
||||
void add_fkb_input(unsigned port, uint32 variant, uint8_t *fkbkeys) {
|
||||
unsigned k;
|
||||
const uint32_t* map = fkbmap;
|
||||
for (k = 0 ; k < 0x48 ; k++)
|
||||
if (input_cb(0, RETRO_DEVICE_KEYBOARD, 0, map[k]))
|
||||
fkbkeys[k]=1;
|
||||
else
|
||||
fkbkeys[k]=0;
|
||||
}
|
||||
|
||||
void add_suborkey_input(unsigned port, uint32 variant, uint8_t *suborkeys) {
|
||||
unsigned k;
|
||||
const uint32_t* map = suborkbmap;
|
||||
for (k = 0 ; k < 0x65 ; k++)
|
||||
if (input_cb(0, RETRO_DEVICE_KEYBOARD, 0, map[k]))
|
||||
suborkeys[k]=1;
|
||||
else
|
||||
suborkeys[k]=0;
|
||||
}
|
||||
|
||||
static int mzx = 0, mzy = 0;
|
||||
|
||||
void get_mouse_input(unsigned port, uint32 variant, uint32_t *mousedata)
|
||||
@@ -2763,6 +2829,13 @@ static void FCEUD_UpdateInput(void)
|
||||
case RETRO_DEVICE_FC_FTRAINERA:
|
||||
add_powerpad_input(4, nes_input.type[4], &nes_input.PowerPadData);
|
||||
break;
|
||||
case RETRO_DEVICE_FC_FKB:
|
||||
add_fkb_input(4, nes_input.type[4], nes_input.FamilyKeyboardData);
|
||||
break;
|
||||
case RETRO_DEVICE_FC_SUBORKB:
|
||||
case RETRO_DEVICE_FC_PEC586KB:
|
||||
add_suborkey_input(4, nes_input.type[4], nes_input.SuborKeyboardData);
|
||||
break;
|
||||
}
|
||||
|
||||
if (input_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2))
|
||||
|
||||
Reference in New Issue
Block a user