summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author tim lindner <tlindner@macmess.org>2021-05-26 04:26:12 -0700
committer GitHub <noreply@github.com>2021-05-26 07:26:12 -0400
commit5a33c5eb6d8f27f101437d32f38c9f4dcc1e9ea1 (patch)
tree40a8768bdef7dbf31a2fa216780b97382e5f9359
parente43e9b68f62797e5366e6fe904fa205bfa8d2042 (diff)
coco: fix disabling of joysticks (MT #7475) (#8099)
-rw-r--r--src/mame/includes/coco.h3
-rw-r--r--src/mame/machine/coco.cpp65
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 */