mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 15:27:46 -04:00
improve input handling
This commit is contained in:
parent
be7867d875
commit
531a8f3883
12 changed files with 170 additions and 108 deletions
|
@ -455,9 +455,11 @@ int emu_reload_rom(const char *rom_fname_in)
|
|||
// additional movie stuff
|
||||
if (movie_data)
|
||||
{
|
||||
if (movie_data[0x14] == '6')
|
||||
PicoOpt |= POPT_6BTN_PAD; // 6 button pad
|
||||
else PicoOpt &= ~POPT_6BTN_PAD;
|
||||
enum input_device indev = (movie_data[0x14] == '6') ?
|
||||
PICO_INPUT_PAD_6BTN : PICO_INPUT_PAD_3BTN;
|
||||
PicoSetInputDevice(0, indev);
|
||||
PicoSetInputDevice(1, indev);
|
||||
|
||||
PicoOpt |= POPT_DIS_VDP_FIFO; // no VDP fifo timing
|
||||
if (movie_data[0xF] >= 'A') {
|
||||
if (movie_data[0x16] & 0x80) {
|
||||
|
@ -550,6 +552,8 @@ void emu_prep_defconfig(void)
|
|||
defaultConfig.s_PicoCDBuffers = 0;
|
||||
defaultConfig.confirm_save = EOPT_CONFIRM_SAVE;
|
||||
defaultConfig.Frameskip = -1; // auto
|
||||
defaultConfig.input_dev0 = PICO_INPUT_PAD_3BTN;
|
||||
defaultConfig.input_dev1 = PICO_INPUT_PAD_3BTN;
|
||||
defaultConfig.volume = 50;
|
||||
defaultConfig.gamma = 100;
|
||||
defaultConfig.scaling = 0;
|
||||
|
|
|
@ -57,6 +57,8 @@ typedef struct _currentConfig_t {
|
|||
int s_PicoAutoRgnOrder;
|
||||
int s_PicoCDBuffers;
|
||||
int Frameskip;
|
||||
int input_dev0;
|
||||
int input_dev1;
|
||||
int confirm_save;
|
||||
int CPUclock;
|
||||
int volume;
|
||||
|
|
|
@ -355,12 +355,15 @@ static const char *mgn_dev_name(int id, int *offs)
|
|||
static int mh_saveloadcfg(int id, int keys);
|
||||
static const char *mgn_saveloadcfg(int id, int *offs);
|
||||
|
||||
const char *indev_names[] = { "none", "3 button pad", "6 button pad", NULL };
|
||||
|
||||
static menu_entry e_menu_keyconfig[] =
|
||||
{
|
||||
mee_handler_id("Player 1", MA_CTRL_PLAYER1, key_config_loop_wrap),
|
||||
mee_handler_id("Player 2", MA_CTRL_PLAYER2, key_config_loop_wrap),
|
||||
mee_handler_id("Emulator controls", MA_CTRL_EMU, key_config_loop_wrap),
|
||||
mee_onoff ("6 button pad", MA_OPT_6BUTTON_PAD, PicoOpt, POPT_6BTN_PAD),
|
||||
mee_enum ("Input device 1", MA_OPT_INPUT_DEV0, currentConfig.input_dev0, indev_names),
|
||||
mee_enum ("Input device 2", MA_OPT_INPUT_DEV1, currentConfig.input_dev1, indev_names),
|
||||
mee_range ("Turbo rate", MA_CTRL_TURBO_RATE, currentConfig.turbo_rate, 1, 30),
|
||||
mee_range ("Analog deadzone", MA_CTRL_DEADZONE, currentConfig.analog_deadzone, 1, 99),
|
||||
mee_cust_nosave("Save global config", MA_OPT_SAVECFG, mh_saveloadcfg, mgn_saveloadcfg),
|
||||
|
@ -383,6 +386,10 @@ static int menu_loop_keyconfig(int id, int keys)
|
|||
|
||||
me_enable(e_menu_keyconfig, MA_OPT_SAVECFG_GAME, PicoGameLoaded);
|
||||
me_loop(e_menu_keyconfig, &sel);
|
||||
|
||||
PicoSetInputDevice(0, currentConfig.input_dev0);
|
||||
PicoSetInputDevice(1, currentConfig.input_dev1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -24,7 +24,8 @@ typedef enum
|
|||
MA_OPT_ENABLE_SOUND,
|
||||
MA_OPT_SOUND_QUALITY,
|
||||
MA_OPT_ARM940_SOUND,
|
||||
MA_OPT_6BUTTON_PAD,
|
||||
MA_OPT_INPUT_DEV0,
|
||||
MA_OPT_INPUT_DEV1,
|
||||
MA_OPT_REGION,
|
||||
MA_OPT_SRAM_STATES,
|
||||
MA_OPT_CONFIRM_STATES,
|
||||
|
|
|
@ -183,6 +183,8 @@ void retro_set_environment(retro_environment_t cb)
|
|||
{
|
||||
static const struct retro_variable vars[] = {
|
||||
//{ "region", "Region; Auto|NTSC|PAL" },
|
||||
{ "picodrive_input1", "Input device 1; 3 button pad|6 button pad|None" },
|
||||
{ "picodrive_input2", "Input device 2; 3 button pad|6 button pad|None" },
|
||||
{ NULL, NULL },
|
||||
};
|
||||
|
||||
|
@ -545,7 +547,7 @@ bool retro_load_game(const struct retro_game_info *info)
|
|||
|
||||
enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_RGB565;
|
||||
if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) {
|
||||
lprintf("RGB565 suppot required, sorry\n");
|
||||
lprintf("RGB565 support required, sorry\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -660,13 +662,41 @@ static void snd_write(int len)
|
|||
audio_batch_cb(PsndOut, len / 4);
|
||||
}
|
||||
|
||||
static enum input_device input_name_to_val(const char *name)
|
||||
{
|
||||
if (strcmp(name, "3 button pad") == 0)
|
||||
return PICO_INPUT_PAD_3BTN;
|
||||
if (strcmp(name, "6 button pad") == 0)
|
||||
return PICO_INPUT_PAD_6BTN;
|
||||
if (strcmp(name, "None") == 0)
|
||||
return PICO_INPUT_NOTHING;
|
||||
|
||||
lprintf("invalid picodrive_input: '%s'\n", name);
|
||||
return PICO_INPUT_PAD_3BTN;
|
||||
}
|
||||
|
||||
static void update_variables(void)
|
||||
{
|
||||
struct retro_variable var;
|
||||
|
||||
var.value = NULL;
|
||||
var.key = "picodrive_input1";
|
||||
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
|
||||
PicoSetInputDevice(0, input_name_to_val(var.value));
|
||||
|
||||
var.value = NULL;
|
||||
var.key = "picodrive_input2";
|
||||
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
|
||||
PicoSetInputDevice(1, input_name_to_val(var.value));
|
||||
}
|
||||
|
||||
void retro_run(void)
|
||||
{
|
||||
bool updated = false;
|
||||
int pad, i;
|
||||
|
||||
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated)
|
||||
; //update_variables(true);
|
||||
update_variables();
|
||||
|
||||
input_poll_cb();
|
||||
|
||||
|
@ -720,6 +750,8 @@ void retro_init(void)
|
|||
//PicoMessage = plat_status_msg_busy_next;
|
||||
PicoMCDopenTray = disk_tray_open;
|
||||
PicoMCDcloseTray = disk_tray_close;
|
||||
|
||||
update_variables();
|
||||
}
|
||||
|
||||
void retro_deinit(void)
|
||||
|
|
|
@ -64,7 +64,6 @@ int plat_wait_event(int *fds_hnds, int count, int timeout_ms)
|
|||
void pemu_prep_defconfig(void)
|
||||
{
|
||||
memset(&defaultConfig, 0, sizeof(defaultConfig));
|
||||
defaultConfig.s_PicoOpt|= POPT_6BTN_PAD; // for xmen proto
|
||||
defaultConfig.s_PicoCDBuffers = 0;
|
||||
defaultConfig.Frameskip = 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue