From 5a33c5eb6d8f27f101437d32f38c9f4dcc1e9ea1 Mon Sep 17 00:00:00 2001 From: tim lindner Date: Wed, 26 May 2021 04:26:12 -0700 Subject: coco: fix disabling of joysticks (MT #7475) (#8099) --- src/mame/includes/coco.h | 3 ++- src/mame/machine/coco.cpp | 65 +++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 62 insertions(+), 6 deletions(-) diff --git a/src/mame/includes/coco.h b/src/mame/includes/coco.h index adb82421ac1..63b04da84cc 100644 --- a/src/mame/includes/coco.h +++ b/src/mame/includes/coco.h @@ -197,7 +197,8 @@ protected: soundmux_status_t soundmux_status(void); void update_sound(void); - void poll_joystick(bool *joyin, uint8_t *buttons); + bool poll_joystick(void); + uint8_t poll_joystick_buttons(void); void poll_keyboard(void); void poll_hires_joystick(void); void update_cassout(int cassout); diff --git a/src/mame/machine/coco.cpp b/src/mame/machine/coco.cpp index 3a3c51879c4..9b202c897a5 100644 --- a/src/mame/machine/coco.cpp +++ b/src/mame/machine/coco.cpp @@ -661,7 +661,7 @@ bool coco_state::is_joystick_hires(int joystick_index) // poll_joystick //------------------------------------------------- -void coco_state::poll_joystick(bool *joyin, uint8_t *buttons) +bool coco_state::poll_joystick(void) { static const analog_input_t s_empty = {}; static const int joy_rat_table[] = {15, 24, 42, 33 }; @@ -712,11 +712,65 @@ void coco_state::poll_joystick(bool *joyin, uint8_t *buttons) break; } - *joyin = joyin_value; - *buttons = analog->buttons(); + return joyin_value; } +//------------------------------------------------- +// poll_joystick_buttons +//------------------------------------------------- + +uint8_t coco_state::poll_joystick_buttons(void) +{ + static const analog_input_t s_empty = {}; + const analog_input_t *analog; + uint8_t joy0, joy1; + + switch(joystick_type(0)) + { + case JOYSTICK_NORMAL: + analog = &m_joystick; + break; + + case JOYSTICK_RAT_MOUSE: + analog = &m_rat_mouse; + break; + + case JOYSTICK_DIECOM_LIGHT_GUN: + analog = &m_diecom_lightgun; + break; + + default: /* None */ + analog = &s_empty; + break; + } + + joy0 = analog->buttons(); + + switch(joystick_type(1)) + { + case JOYSTICK_NORMAL: + analog = &m_joystick; + break; + + case JOYSTICK_RAT_MOUSE: + analog = &m_rat_mouse; + break; + + case JOYSTICK_DIECOM_LIGHT_GUN: + analog = &m_diecom_lightgun; + break; + + default: /* None */ + analog = &s_empty; + break; + } + + joy1 = analog->buttons(); + + return joy0 | joy1; +} + //------------------------------------------------- // poll_keyboard @@ -743,13 +797,14 @@ void coco_state::poll_keyboard(void) /* poll the joystick (*/ bool joyin; - uint8_t buttons; - poll_joystick(&joyin, &buttons); + joyin = poll_joystick(); /* PA7 comes from JOYIN */ pia0_pa |= joyin ? 0x80 : 0x00; /* mask out the buttons */ + uint8_t buttons; + buttons = poll_joystick_buttons(); pia0_pa &= ~buttons; /* and write the result to PIA0 */ -- cgit v1.2.3