diff --git a/src/config.c b/src/config.c index a2aa1b19d..29ecdf6bf 100644 --- a/src/config.c +++ b/src/config.c @@ -1,4 +1,4 @@ -/* +/* * 86Box A hypervisor and IBM PC system emulator that specializes in * running old operating systems and software designed for IBM * PC systems and compatibles from 1981 through fairly recent @@ -715,7 +715,20 @@ load_input_devices(void) else mouse_type = 0; - joystick_type = config_get_int(cat, "joystick_type", JOYSTICK_TYPE_NONE); + p = config_get_string(cat, "joystick_type", NULL); + if (p != NULL) { + joystick_type = joystick_get_from_internal_name(p); + if (!joystick_type) { + /* Try to read an integer for backwards compatibility with old configs */ + c = config_get_int(cat, "joystick_type", 8); + if ((c >= 0) && (c < 8)) + /* "None" was type 8 instead of 0 previously, shift the number accordingly */ + joystick_type = c + 1; + else + joystick_type = 0; + } + } else + joystick_type = 0; for (c=0; cname); + return((char *)joysticks[js].joystick->name); +} + + +char * +joystick_get_internal_name(int js) +{ + return((char *) joysticks[js].internal_name); +} + + +int +joystick_get_from_internal_name(char *s) +{ + int c = 0; + + while (strlen((char *) joysticks[c].internal_name)) + { + if (!strcmp((char *) joysticks[c].internal_name, s)) + return c; + c++; + } + + return 0; } int joystick_get_max_joysticks(int js) { - return(joystick_list[js]->max_joysticks); + return(joysticks[js].joystick->max_joysticks); } int joystick_get_axis_count(int js) { - return(joystick_list[js]->axis_count); + return(joysticks[js].joystick->axis_count); } int joystick_get_button_count(int js) { - return(joystick_list[js]->button_count); + return(joysticks[js].joystick->button_count); } int joystick_get_pov_count(int js) { - return(joystick_list[js]->pov_count); + return(joysticks[js].joystick->pov_count); } char * joystick_get_axis_name(int js, int id) { - return((char *)joystick_list[js]->axis_names[id]); + return((char *)joysticks[js].joystick->axis_names[id]); } char * joystick_get_button_name(int js, int id) { - return((char *)joystick_list[js]->button_names[id]); + return((char *)joysticks[js].joystick->button_names[id]); } char * joystick_get_pov_name(int js, int id) { - return (char *)joystick_list[js]->pov_names[id]; + return (char *)joysticks[js].joystick->pov_names[id]; } @@ -239,7 +265,7 @@ init_common(void) timer_add(&p->axis[2].timer, timer_over, &p->axis[2], 0); timer_add(&p->axis[3].timer, timer_over, &p->axis[3], 0); - p->joystick = joystick_list[joystick_type]; + p->joystick = joysticks[joystick_type].joystick; p->joystick_dat = p->joystick->init(); gameport_global = p; @@ -255,7 +281,7 @@ gameport_update_joystick_type(void) if (p != NULL) { p->joystick->close(p->joystick_dat); - p->joystick = joystick_list[joystick_type]; + p->joystick = joysticks[joystick_type].joystick; p->joystick_dat = p->joystick->init(); } } @@ -266,7 +292,7 @@ gameport_init(const device_t *info) { gameport_t *p = NULL; - if (joystick_type == JOYSTICK_TYPE_NONE) { + if (!joystick_type) { p = NULL; return(p); } @@ -285,7 +311,7 @@ gameport_201_init(const device_t *info) { gameport_t *p; - if (joystick_type == JOYSTICK_TYPE_NONE) { + if (!joystick_type) { p = NULL; return(p); } diff --git a/src/include/86box/gameport.h b/src/include/86box/gameport.h index a91a26232..105b6cd62 100644 --- a/src/include/86box/gameport.h +++ b/src/include/86box/gameport.h @@ -48,7 +48,6 @@ #define SLIDER 0x20000000 #define AXIS_NOT_PRESENT -99999 -#define JOYSTICK_TYPE_NONE 8 #define JOYSTICK_PRESENT(n) (joystick_state[n].plat_joystick_nr != 0) @@ -140,6 +139,8 @@ extern void joystick_close(void); extern void joystick_process(void); extern char *joystick_get_name(int js); +extern char *joystick_get_internal_name(int js); +extern int joystick_get_from_internal_name(char *s); extern int joystick_get_max_joysticks(int js); extern int joystick_get_axis_count(int js); extern int joystick_get_button_count(int js); diff --git a/src/machine/m_amstrad.c b/src/machine/m_amstrad.c index 87de506ef..ec0bff6ec 100644 --- a/src/machine/m_amstrad.c +++ b/src/machine/m_amstrad.c @@ -2507,7 +2507,7 @@ machine_amstrad_init(const machine_t *model, int type) mouse_set_poll(ms_poll, ams); } - if (joystick_type != JOYSTICK_TYPE_NONE) + if (joystick_type) device_add(&gameport_device); } diff --git a/src/machine/m_at.c b/src/machine/m_at.c index 53e0b4367..be5bc974e 100644 --- a/src/machine/m_at.c +++ b/src/machine/m_at.c @@ -74,7 +74,7 @@ machine_at_common_init_ex(const machine_t *model, int type) else if (type == 0) device_add(&at_nvr_device); - if (joystick_type != JOYSTICK_TYPE_NONE) + if (joystick_type) device_add(&gameport_device); } diff --git a/src/machine/m_europc.c b/src/machine/m_europc.c index f901f51a7..f98b4174c 100644 --- a/src/machine/m_europc.c +++ b/src/machine/m_europc.c @@ -615,7 +615,7 @@ europc_boot(const device_t *info) mouse_bus_set_irq(sys->mouse, 2); /* Configure the port for (Bus Mouse Compatible) Mouse. */ b |= 0x01; - } else if (joystick_type != JOYSTICK_TYPE_NONE) + } else if (joystick_type) b |= 0x02; /* enable port as joysticks */ sys->nvr.regs[MRTC_CONF_C] = b; diff --git a/src/machine/m_ps1.c b/src/machine/m_ps1.c index 539448c2e..ccad28139 100644 --- a/src/machine/m_ps1.c +++ b/src/machine/m_ps1.c @@ -517,7 +517,7 @@ ps1_common_init(const machine_t *model) device_add(&keyboard_ps2_ps1_device); /* Audio uses ports 200h and 202-207h, so only initialize gameport on 201h. */ - if (joystick_type != JOYSTICK_TYPE_NONE) + if (joystick_type) device_add(&gameport_201_device); } diff --git a/src/machine/m_tandy.c b/src/machine/m_tandy.c index f38f60767..470cd099c 100644 --- a/src/machine/m_tandy.c +++ b/src/machine/m_tandy.c @@ -1535,7 +1535,7 @@ machine_tandy1k_init(const machine_t *model, int type) break; } - if (joystick_type != JOYSTICK_TYPE_NONE) + if (joystick_type) device_add(&gameport_device); eep_data_out = 0x0000; diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c index fbf3f0891..ad136f105 100644 --- a/src/machine/m_xt.c +++ b/src/machine/m_xt.c @@ -29,7 +29,7 @@ machine_xt_common_init(const machine_t *model) device_add(&fdc_xt_device); nmi_init(); - if (joystick_type != JOYSTICK_TYPE_NONE) + if (joystick_type) device_add(&gameport_device); } diff --git a/src/machine/m_xt_compaq.c b/src/machine/m_xt_compaq.c index da41a4a41..765c626b2 100644 --- a/src/machine/m_xt_compaq.c +++ b/src/machine/m_xt_compaq.c @@ -56,7 +56,7 @@ machine_xt_compaq_deskpro_init(const machine_t *model) if (fdc_type == FDC_INTERNAL) device_add(&fdc_xt_device); nmi_init(); - if (joystick_type != JOYSTICK_TYPE_NONE) + if (joystick_type) device_add(&gameport_device); lpt1_remove(); @@ -85,7 +85,7 @@ machine_xt_compaq_portable_init(const machine_t *model) if (fdc_type == FDC_INTERNAL) device_add(&fdc_xt_device); nmi_init(); - if (joystick_type != JOYSTICK_TYPE_NONE) + if (joystick_type) device_add(&gameport_device); lpt1_remove(); diff --git a/src/machine/m_xt_laserxt.c b/src/machine/m_xt_laserxt.c index d0b0fdf81..20c0e21ff 100644 --- a/src/machine/m_xt_laserxt.c +++ b/src/machine/m_xt_laserxt.c @@ -171,7 +171,7 @@ machine_xt_lxt3_init(const machine_t *model) device_add(&keyboard_xt_lxt3_device); device_add(&fdc_xt_device); nmi_init(); - if (joystick_type != JOYSTICK_TYPE_NONE) + if (joystick_type) device_add(&gameport_device); laserxt_init(1); diff --git a/src/machine/m_xt_olivetti.c b/src/machine/m_xt_olivetti.c index fec71f8ff..dae03edba 100644 --- a/src/machine/m_xt_olivetti.c +++ b/src/machine/m_xt_olivetti.c @@ -717,7 +717,7 @@ machine_xt_olim24_init(const machine_t *model) /* FIXME: make sure this is correct?? */ device_add(&at_nvr_device); - if (joystick_type != JOYSTICK_TYPE_NONE) + if (joystick_type) device_add(&gameport_device); nmi_init(); @@ -760,7 +760,7 @@ machine_xt_olim240_init(const machine_t *model) if (fdc_type == FDC_INTERNAL) device_add(&fdc_xt_device); - if (joystick_type != JOYSTICK_TYPE_NONE) + if (joystick_type) device_add(&gameport_device); nmi_init(); @@ -833,7 +833,7 @@ machine_xt_olim15_init(const machine_t *model) if (fdc_type == FDC_INTERNAL) device_add(&fdc_xt_device); - if (joystick_type != JOYSTICK_TYPE_NONE) + if (joystick_type) device_add(&gameport_device); nmi_init(); diff --git a/src/machine/m_xt_xi8088.c b/src/machine/m_xt_xi8088.c index 6944d1b3a..39fe5e2cf 100644 --- a/src/machine/m_xt_xi8088.c +++ b/src/machine/m_xt_xi8088.c @@ -177,7 +177,7 @@ machine_xt_xi8088_init(const machine_t *model) nmi_init(); device_add(&ibmat_nvr_device); pic2_init(); - if (joystick_type != JOYSTICK_TYPE_NONE) + if (joystick_type) device_add(&gameport_device); return ret; diff --git a/src/pc.c b/src/pc.c index 31586a4b3..bea9d3781 100644 --- a/src/pc.c +++ b/src/pc.c @@ -809,7 +809,7 @@ pc_reset_hard_init(void) /* Reset and reconfigure the Network Card layer. */ network_reset(); - if (joystick_type != JOYSTICK_TYPE_NONE) + if (joystick_type) gameport_update_joystick_type(); ui_sb_update_panes(); diff --git a/src/win/win_joystick.cpp b/src/win/win_joystick.cpp index 1f9de5ee6..2615092d3 100644 --- a/src/win/win_joystick.cpp +++ b/src/win/win_joystick.cpp @@ -263,7 +263,7 @@ void joystick_process(void) { int c, d; - if (joystick_type == JOYSTICK_TYPE_NONE) return; + if (!joystick_type) return; for (c = 0; c < joysticks_present; c++) { diff --git a/src/win/win_joystick_xinput.c b/src/win/win_joystick_xinput.c index 0e3f5fdce..4b7643c43 100644 --- a/src/win/win_joystick_xinput.c +++ b/src/win/win_joystick_xinput.c @@ -217,7 +217,7 @@ void joystick_process(void) { int c, d; - if (joystick_type == JOYSTICK_TYPE_NONE) return; + if (!joystick_type) return; joystick_poll();