1
0
mirror of https://github.com/mist-devel/mist-firmware.git synced 2026-05-02 22:43:45 +00:00

Add analogue joystick scaling options

This commit is contained in:
Gyorgy Szombathelyi
2021-12-07 00:13:49 +01:00
parent 8970178445
commit ccdc083120
4 changed files with 24 additions and 12 deletions

View File

@@ -226,8 +226,8 @@ static void* ini_get_var(const ini_cfg_t* cfg, int cur_section, char* buf)
break;
case INT8:
*(int8_t*)(cfg->vars[var_id].var) = strtol(&(buf[i]), NULL, 0);
if (*(int8_t*)(cfg->vars[var_id].var) > cfg->vars[var_id].max) *(int8_t*)(cfg->vars[var_id].var) = cfg->vars[var_id].max;
if (*(int8_t*)(cfg->vars[var_id].var) < cfg->vars[var_id].min) *(int8_t*)(cfg->vars[var_id].var) = cfg->vars[var_id].min;
if (*(int8_t*)(cfg->vars[var_id].var) > (int8_t)cfg->vars[var_id].max) *(int8_t*)(cfg->vars[var_id].var) = cfg->vars[var_id].max;
if (*(int8_t*)(cfg->vars[var_id].var) < (int8_t)cfg->vars[var_id].min) *(int8_t*)(cfg->vars[var_id].var) = cfg->vars[var_id].min;
break;
case UINT16:
*(uint16_t*)(cfg->vars[var_id].var) = strtoul(&(buf[i]), NULL, 0);
@@ -236,8 +236,8 @@ static void* ini_get_var(const ini_cfg_t* cfg, int cur_section, char* buf)
break;
case INT16:
*(int16_t*)(cfg->vars[var_id].var) = strtol(&(buf[i]), NULL, 0);
if (*(int16_t*)(cfg->vars[var_id].var) > cfg->vars[var_id].max) *(int16_t*)(cfg->vars[var_id].var) = cfg->vars[var_id].max;
if (*(int16_t*)(cfg->vars[var_id].var) < cfg->vars[var_id].min) *(int16_t*)(cfg->vars[var_id].var) = cfg->vars[var_id].min;
if (*(int16_t*)(cfg->vars[var_id].var) > (int16_t)cfg->vars[var_id].max) *(int16_t*)(cfg->vars[var_id].var) = cfg->vars[var_id].max;
if (*(int16_t*)(cfg->vars[var_id].var) < (int16_t)cfg->vars[var_id].min) *(int16_t*)(cfg->vars[var_id].var) = cfg->vars[var_id].min;
break;
case UINT32:
*(uint32_t*)(cfg->vars[var_id].var) = strtoul(&(buf[i]), NULL, 0);
@@ -246,8 +246,8 @@ static void* ini_get_var(const ini_cfg_t* cfg, int cur_section, char* buf)
break;
case INT32:
*(int32_t*)(cfg->vars[var_id].var) = strtol(&(buf[i]), NULL, 0);
if (*(int32_t*)(cfg->vars[var_id].var) > cfg->vars[var_id].max) *(int32_t*)(cfg->vars[var_id].var) = cfg->vars[var_id].max;
if (*(int32_t*)(cfg->vars[var_id].var) < cfg->vars[var_id].min) *(int32_t*)(cfg->vars[var_id].var) = cfg->vars[var_id].min;
if (*(int32_t*)(cfg->vars[var_id].var) > (int32_t)cfg->vars[var_id].max) *(int32_t*)(cfg->vars[var_id].var) = cfg->vars[var_id].max;
if (*(int32_t*)(cfg->vars[var_id].var) < (int32_t)cfg->vars[var_id].min) *(int32_t*)(cfg->vars[var_id].var) = cfg->vars[var_id].min;
break;
case UINT64:
*(uint64_t*)(cfg->vars[var_id].var) = strtoull(&(buf[i]), NULL, 0);
@@ -256,8 +256,8 @@ static void* ini_get_var(const ini_cfg_t* cfg, int cur_section, char* buf)
break;
case INT64:
*(int64_t*)(cfg->vars[var_id].var) = strtoll(&(buf[i]), NULL, 0);
if (*(int64_t*)(cfg->vars[var_id].var) > cfg->vars[var_id].max) *(int64_t*)(cfg->vars[var_id].var) = cfg->vars[var_id].max;
if (*(int64_t*)(cfg->vars[var_id].var) < cfg->vars[var_id].min) *(int64_t*)(cfg->vars[var_id].var) = cfg->vars[var_id].min;
if (*(int64_t*)(cfg->vars[var_id].var) > (int64_t)cfg->vars[var_id].max) *(int64_t*)(cfg->vars[var_id].var) = cfg->vars[var_id].max;
if (*(int64_t*)(cfg->vars[var_id].var) < (int64_t)cfg->vars[var_id].min) *(int64_t*)(cfg->vars[var_id].var) = cfg->vars[var_id].min;
break;
#ifdef INI_ENABLE_FLOAT
case FLOAT:

View File

@@ -35,6 +35,7 @@ void mist_ini_parse()
data_io_rom_upload(NULL, 0); // prepare upload
memset(&mist_cfg, 0, sizeof(mist_cfg));
mist_cfg.mouse_speed = 100;
mist_cfg.joystick_analog_mult = 128;
minimig_cfg.kick1x_memory_detection_patch = 1;
ini_parse(&mist_ini_cfg, user_io_get_core_name());
data_io_rom_upload(NULL, 2); // upload done
@@ -55,6 +56,8 @@ mist_cfg_t mist_cfg = {
.joystick0_prefer_db9 = 0,
.joystick_db9_fixed_index = 0,
.joystick_emu_fixed_index = 0,
.joystick_analog_mult = 128,
.joystick_analog_offset = 0,
.key_menu_as_rgui = 0,
.keyrah_mode = 0,
.reset_combo = 0,
@@ -99,6 +102,8 @@ const ini_var_t mist_ini_vars[] = {
{"JOYSTICK0_PREFER_DB9", (void*)(&(mist_cfg.joystick0_prefer_db9)), UINT8, 0, 1, 1},
{"JOYSTICK_DB9_FIXED_INDEX", (void*)(&(mist_cfg.joystick_db9_fixed_index)), UINT8, 0, 1, 1},
{"JOYSTICK_EMU_FIXED_INDEX", (void*)(&(mist_cfg.joystick_emu_fixed_index)), UINT8, 0, 1, 1},
{"JOYSTICK_ANALOG_MULTIPLIER", (void*)(&(mist_cfg.joystick_analog_mult)), UINT8, 1, 128, 1},
{"JOYSTICK_ANALOG_OFFSET", (void*)(&(mist_cfg.joystick_analog_offset)), INT8, -127, 127, 1},
{"KEY_MENU_AS_RGUI", (void*)(&(mist_cfg.key_menu_as_rgui)), UINT8, 0, 1, 1},
{"SDRAM64", (void*)(&(mist_cfg.sdram64)), UINT8, 0, 1, 1},
#ifndef INI_PARSER_TEST

View File

@@ -25,6 +25,8 @@ typedef struct {
uint8_t joystick0_prefer_db9;
uint8_t joystick_db9_fixed_index;
uint8_t joystick_emu_fixed_index;
uint8_t joystick_analog_mult;
int8_t joystick_analog_offset;
uint8_t key_menu_as_rgui;
uint8_t reset_combo;
uint8_t ypbpr;

View File

@@ -410,11 +410,16 @@ static unsigned short usb2ps2code( unsigned char k) {
void user_io_analog_joystick(unsigned char joystick, char valueX, char valueY, char valueX2, char valueY2) {
if(core_type == CORE_TYPE_8BIT || core_type == CORE_TYPE_MINIMIG2) {
int16_t valueXX = valueX*mist_cfg.joystick_analog_mult/128 + mist_cfg.joystick_analog_offset;
int16_t valueYY = valueY*mist_cfg.joystick_analog_mult/128 + mist_cfg.joystick_analog_offset;
int16_t valueXX2 = valueX2*mist_cfg.joystick_analog_mult/128 + mist_cfg.joystick_analog_offset;
int16_t valueYY2 = valueY2*mist_cfg.joystick_analog_mult/128 + mist_cfg.joystick_analog_offset;
//iprintf("analog: x=%d, y=%d, xx=%d, yy=%d, mult=%d, offs=%d\n", valueX, valueY, valueXX, valueYY, mist_cfg.joystick_analog_mult, mist_cfg.joystick_analog_offset);
spi_uio_cmd8_cont(UIO_ASTICK, joystick);
spi8(valueX);
spi8(valueY);
spi8(valueX2);
spi8(valueY2);
spi8(valueXX);
spi8(valueYY);
spi8(valueXX2);
spi8(valueYY2);
DisableIO();
}
}