diff options
-rw-r--r-- | src/devices/machine/74157.cpp | 41 | ||||
-rw-r--r-- | src/devices/machine/74157.h | 27 | ||||
-rw-r--r-- | src/mame/drivers/taito_l.cpp | 30 | ||||
-rw-r--r-- | src/mame/drivers/williams.cpp | 96 | ||||
-rw-r--r-- | src/mame/includes/taito_l.h | 4 |
5 files changed, 117 insertions, 81 deletions
diff --git a/src/devices/machine/74157.cpp b/src/devices/machine/74157.cpp index 18f1a240b65..6321e9c88dd 100644 --- a/src/devices/machine/74157.cpp +++ b/src/devices/machine/74157.cpp @@ -20,22 +20,24 @@ // 74LS157 DEVICE //************************************************************************** -DEFINE_DEVICE_TYPE(LS157, ls157_device, "74ls157", "74LS157 Quad 2-to-1 Multiplexer") +DEFINE_DEVICE_TYPE(LS157, ls157_device, "ls157", "74LS157 Quad 2-to-1 Multiplexer") +DEFINE_DEVICE_TYPE(LS157_X2, ls157_x2_device, "ls157_x2", "74LS157 Quad 2-to-1 Multiplexer (x2)") //------------------------------------------------- // ls157_device - constructor //------------------------------------------------- ls157_device::ls157_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : ls157_device(mconfig, LS157, tag, owner, clock) + : ls157_device(mconfig, LS157, tag, owner, clock, 0x0f) { } -ls157_device::ls157_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) +ls157_device::ls157_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 mask) : device_t(mconfig, type, tag, owner, clock) , m_a_in_cb(*this) , m_b_in_cb(*this) , m_out_cb(*this) + , m_data_mask(mask) { m_a = 0; m_b = 0; @@ -45,6 +47,16 @@ ls157_device::ls157_device(const machine_config &mconfig, device_type type, cons //------------------------------------------------- +// ls157_x2_device - constructor +//------------------------------------------------- + +ls157_x2_device::ls157_x2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : ls157_device(mconfig, LS157_X2, tag, owner, clock, 0xff) +{ +} + + +//------------------------------------------------- // device_start - perform device-specific // startup //------------------------------------------------- @@ -79,7 +91,7 @@ WRITE8_MEMBER(ls157_device::a_w) void ls157_device::a_w(u8 data) { - m_a = data & 0xf; + m_a = data & m_data_mask; update_output(); } @@ -95,7 +107,7 @@ WRITE8_MEMBER(ls157_device::b_w) void ls157_device::b_w(u8 data) { - m_b = data & 0xf; + m_b = data & m_data_mask; update_output(); } @@ -112,6 +124,7 @@ WRITE8_MEMBER(ls157_device::ab_w) void ls157_device::ab_w(u8 data) { + assert(m_data_mask == 0x0f); m_a = data >> 4; m_b = data & 0xf; update_output(); @@ -130,6 +143,7 @@ WRITE8_MEMBER(ls157_device::ba_w) void ls157_device::ba_w(u8 data) { + assert(m_data_mask == 0x0f); m_b = data >> 4; m_a = data & 0xf; update_output(); @@ -148,6 +162,7 @@ WRITE8_MEMBER(ls157_device::interleave_w) void ls157_device::interleave_w(u8 data) { + assert(m_data_mask == 0x0f); m_b = bitswap<4>(data, 7, 5, 3, 1); m_a = bitswap<4>(data, 6, 4, 2, 0); update_output(); @@ -251,9 +266,9 @@ void ls157_device::update_output() if (!m_strobe && !m_out_cb.isnull()) { if (m_select) - m_out_cb(m_b_in_cb.isnull() ? m_b : (m_b_in_cb() & 0xf)); + m_out_cb(m_b_in_cb.isnull() ? m_b : (m_b_in_cb() & m_data_mask)); else - m_out_cb(m_a_in_cb.isnull() ? m_a : (m_a_in_cb() & 0xf)); + m_out_cb(m_a_in_cb.isnull() ? m_a : (m_a_in_cb() & m_data_mask)); } } @@ -267,9 +282,9 @@ READ8_MEMBER(ls157_device::output_r) if (m_strobe) return 0; else if (m_select) - return m_b_in_cb.isnull() ? m_b : (m_b_in_cb() & 0xf); + return m_b_in_cb.isnull() ? m_b : (m_b_in_cb() & m_data_mask); else - return m_a_in_cb.isnull() ? m_a : (m_a_in_cb() & 0xf); + return m_a_in_cb.isnull() ? m_a : (m_a_in_cb() & m_data_mask); } @@ -277,10 +292,10 @@ READ8_MEMBER(ls157_device::output_r) // 74HC157 DEVICE //************************************************************************** -DEFINE_DEVICE_TYPE(HC157, hc157_device, "74hc157", "74HC157 Quad 2-to-1 Multiplexer") +DEFINE_DEVICE_TYPE(HC157, hc157_device, "hc157", "74HC157 Quad 2-to-1 Multiplexer") hc157_device::hc157_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : ls157_device(mconfig, HC157, tag, owner, clock) + : ls157_device(mconfig, HC157, tag, owner, clock, 0x0f) { } @@ -289,9 +304,9 @@ hc157_device::hc157_device(const machine_config &mconfig, const char *tag, devic // 74HCT157 DEVICE //************************************************************************** -DEFINE_DEVICE_TYPE(HCT157, hct157_device, "74hct157", "74HCT157 Quad 2-to-1 Multiplexer") +DEFINE_DEVICE_TYPE(HCT157, hct157_device, "hct157", "74HCT157 Quad 2-to-1 Multiplexer") hct157_device::hct157_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : ls157_device(mconfig, HCT157, tag, owner, clock) + : ls157_device(mconfig, HCT157, tag, owner, clock, 0x0f) { } diff --git a/src/devices/machine/74157.h b/src/devices/machine/74157.h index 736e8dafb84..788c52fe41f 100644 --- a/src/devices/machine/74157.h +++ b/src/devices/machine/74157.h @@ -86,7 +86,7 @@ public: DECLARE_READ8_MEMBER(output_r); protected: - ls157_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); + ls157_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 mask); // device-level overrides virtual void device_start() override; @@ -97,10 +97,11 @@ private: void write_b_bit(int bit, bool state); void update_output(); - // callbacks + // callbacks & configuration devcb_read8 m_a_in_cb; devcb_read8 m_b_in_cb; devcb_write8 m_out_cb; + u8 m_data_mask; // internal state u8 m_a; @@ -109,6 +110,17 @@ private: bool m_strobe; }; +// ======================> ls157_x2_device + +class ls157_x2_device : public ls157_device +{ +public: + // construction/destruction + ls157_x2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); +}; + +// ======================> hc157_device + class hc157_device : public ls157_device { public: @@ -116,6 +128,8 @@ public: hc157_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); }; +// ======================> hct157_device + class hct157_device : public ls157_device { public: @@ -128,9 +142,10 @@ public: // GLOBAL VARIABLES //************************************************************************** -// device type definition -DECLARE_DEVICE_TYPE(LS157, ls157_device) -DECLARE_DEVICE_TYPE(HC157, hc157_device) -DECLARE_DEVICE_TYPE(HCT157, hct157_device) +// device type definitions +DECLARE_DEVICE_TYPE(LS157, ls157_device) +DECLARE_DEVICE_TYPE(LS157_X2, ls157_x2_device) +DECLARE_DEVICE_TYPE(HC157, hc157_device) +DECLARE_DEVICE_TYPE(HCT157, hct157_device) #endif // MAME_MACHINE_74157_H diff --git a/src/mame/drivers/taito_l.cpp b/src/mame/drivers/taito_l.cpp index c8a92b41c96..c3b2bb5a874 100644 --- a/src/mame/drivers/taito_l.cpp +++ b/src/mame/drivers/taito_l.cpp @@ -1723,30 +1723,20 @@ static MACHINE_CONFIG_START( plotting ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_13_33056MHz/4) /* verified on pcb */ - MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("dswmuxl", ls157_device, output_r)) MCFG_DEVCB_MASK(0x0f) - MCFG_DEVCB_CHAIN_INPUT(DEVREAD8("dswmuxh", ls157_device, output_r)) MCFG_DEVCB_RSHIFT(-4) MCFG_DEVCB_MASK(0xf0) - MCFG_AY8910_PORT_B_READ_CB(DEVREAD8("inmuxl", ls157_device, output_r)) MCFG_DEVCB_MASK(0x0f) - MCFG_DEVCB_CHAIN_INPUT(DEVREAD8("inmuxh", ls157_device, output_r)) MCFG_DEVCB_RSHIFT(-4) MCFG_DEVCB_MASK(0xf0) + MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("dswmux", ls157_x2_device, output_r)) + MCFG_AY8910_PORT_B_READ_CB(DEVREAD8("inmux", ls157_x2_device, output_r)) MCFG_SOUND_ROUTE(0, "mono", 0.20) MCFG_SOUND_ROUTE(1, "mono", 0.20) MCFG_SOUND_ROUTE(2, "mono", 0.20) MCFG_SOUND_ROUTE(3, "mono", 0.80) - MCFG_DEVICE_ADD("dswmuxl", LS157, 0) + MCFG_DEVICE_ADD("dswmux", LS157_X2, 0) MCFG_74157_A_IN_CB(IOPORT("DSWA")) MCFG_74157_B_IN_CB(IOPORT("DSWB")) - MCFG_DEVICE_ADD("dswmuxh", LS157, 0) - MCFG_74157_A_IN_CB(IOPORT("DSWA")) MCFG_DEVCB_RSHIFT(4) - MCFG_74157_B_IN_CB(IOPORT("DSWB")) MCFG_DEVCB_RSHIFT(4) - - MCFG_DEVICE_ADD("inmuxl", LS157, 0) + MCFG_DEVICE_ADD("inmux", LS157_X2, 0) MCFG_74157_A_IN_CB(IOPORT("IN0")) MCFG_74157_B_IN_CB(IOPORT("IN1")) - - MCFG_DEVICE_ADD("inmuxh", LS157, 0) - MCFG_74157_A_IN_CB(IOPORT("IN0")) MCFG_DEVCB_RSHIFT(4) - MCFG_74157_B_IN_CB(IOPORT("IN1")) MCFG_DEVCB_RSHIFT(4) MACHINE_CONFIG_END @@ -1794,10 +1784,8 @@ static MACHINE_CONFIG_DERIVED( palamed, plotting ) MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSWA")) MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSWB")) - MCFG_DEVICE_REMOVE("dswmuxl") - MCFG_DEVICE_REMOVE("dswmuxh") - MCFG_DEVICE_REMOVE("inmuxl") - MCFG_DEVICE_REMOVE("inmuxh") + MCFG_DEVICE_REMOVE("dswmux") + MCFG_DEVICE_REMOVE("inmux") MACHINE_CONFIG_END @@ -1816,10 +1804,8 @@ static MACHINE_CONFIG_DERIVED( cachat, plotting ) MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSWA")) MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSWB")) - MCFG_DEVICE_REMOVE("dswmuxl") - MCFG_DEVICE_REMOVE("dswmuxh") - MCFG_DEVICE_REMOVE("inmuxl") - MCFG_DEVICE_REMOVE("inmuxh") + MCFG_DEVICE_REMOVE("dswmux") + MCFG_DEVICE_REMOVE("inmux") MACHINE_CONFIG_END static MACHINE_CONFIG_START( evilston ) diff --git a/src/mame/drivers/williams.cpp b/src/mame/drivers/williams.cpp index 4e5bcd76e76..e9beb64455c 100644 --- a/src/mame/drivers/williams.cpp +++ b/src/mame/drivers/williams.cpp @@ -503,6 +503,7 @@ Reference video: https://www.youtube.com/watch?v=R5OeC6Wc_yI #include "emu.h" #include "includes/williams.h" +#include "machine/74157.h" #include "machine/nvram.h" #include "sound/dac.h" #include "sound/volt_reg.h" @@ -924,13 +925,14 @@ INPUT_PORTS_END static INPUT_PORTS_START( joust ) PORT_START("IN0") - PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, williams_state,williams_mux_r, "INP2\0INP1") + // 0x0f muxed from INP1/INP2 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START2 ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 ) - PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED ) + // 0xc0 muxed from INP1A/INP2A PORT_START("IN1") - PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) + // 0x03 muxed from INP1A/INP2A + PORT_BIT( 0xfc, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Auto Up / Manual Down") PORT_TOGGLE PORT_CODE(KEYCODE_F1) @@ -942,17 +944,23 @@ static INPUT_PORTS_START( joust ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_TILT ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_START("INP2") /* muxed into IN0 */ + PORT_START("INP2") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_START("INP1") /* muxed into IN0 */ + PORT_START("INP1") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(1) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(1) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("INP2A") + PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("INP1A") + PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED ) INPUT_PORTS_END @@ -983,12 +991,13 @@ INPUT_PORTS_END static INPUT_PORTS_START( splat ) PORT_START("IN0") + // 0x0f muxed from INP1/INP2 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START1 ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START2 ) - PORT_BIT( 0xcf, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, williams_state,williams_mux_r, "INP2\0INP1") + // 0xc0 muxed from INP1A/INP2A PORT_START("IN1") - PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, williams_state,williams_mux_r, "INP2A\0INP1A") + // 0x03 muxed from INP1A/INP2A PORT_BIT( 0xfc, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_START("IN2") @@ -1000,34 +1009,29 @@ static INPUT_PORTS_START( splat ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_TILT ) - PORT_START("INP2") /* muxed into IN0 */ + PORT_START("INP2") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_DOWN ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_LEFT ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_RIGHT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_8WAY PORT_PLAYER(2) - PORT_START("INP1") /* muxed into IN0 */ + PORT_START("INP1") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_DOWN ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_LEFT ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_RIGHT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_8WAY PORT_PLAYER(1) - - PORT_START("INP2A") /* muxed into IN1 */ - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_LEFT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_RIGHT ) PORT_8WAY PORT_PLAYER(2) - - PORT_START("INP1A") /* muxed into IN1 */ - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_LEFT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_START("INP2A") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_RIGHT ) PORT_8WAY PORT_PLAYER(2) + + PORT_START("INP1A") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_RIGHT ) PORT_8WAY PORT_PLAYER(1) INPUT_PORTS_END @@ -1200,12 +1204,14 @@ INPUT_PORTS_END static INPUT_PORTS_START( alienar ) PORT_START("IN0") + // 0x0f muxed from INP1/INP2 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START1 ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START2 ) - PORT_BIT( 0xcf, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, williams_state,williams_mux_r, "INP2\0INP1") + // 0xc0 muxed from INP1A/INP2A PORT_START("IN1") - PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) + // 0x03 muxed from INP1A/INP2A + PORT_BIT( 0xfc, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Auto Up / Manual Down") PORT_TOGGLE PORT_CODE(KEYCODE_F1) @@ -1217,25 +1223,25 @@ static INPUT_PORTS_START( alienar ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_TILT ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_START("INP2") /* muxed into IN0 */ + PORT_START("INP2") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_START("INP1") /* muxed into IN0 */ + PORT_START("INP1") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) + + PORT_START("INP2A") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) + + PORT_START("INP1A") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) INPUT_PORTS_END @@ -1521,7 +1527,21 @@ static MACHINE_CONFIG_DERIVED( williams_muxed, williams ) /* pia */ MCFG_DEVICE_MODIFY("pia_0") - MCFG_PIA_CB2_HANDLER(WRITELINE(williams_state, williams_port_select_w)) + MCFG_PIA_READPA_HANDLER(IOPORT("IN0")) MCFG_DEVCB_MASK(0x30) + MCFG_DEVCB_CHAIN_INPUT(DEVREAD8("mux_0", ls157_device, output_r)) MCFG_DEVCB_MASK(0x0f) + MCFG_DEVCB_CHAIN_INPUT(DEVREAD8("mux_1", ls157_device, output_r)) MCFG_DEVCB_RSHIFT(-6) MCFG_DEVCB_MASK(0xc0) + MCFG_PIA_READPB_HANDLER(IOPORT("IN1")) MCFG_DEVCB_MASK(0xfc) + MCFG_DEVCB_CHAIN_INPUT(DEVREAD8("mux_1", ls157_device, output_r)) MCFG_DEVCB_RSHIFT(2) MCFG_DEVCB_MASK(0x03) + MCFG_PIA_CB2_HANDLER(DEVWRITELINE("mux_0", ls157_device, select_w)) + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("mux_1", ls157_device, select_w)) + + MCFG_DEVICE_ADD("mux_0", LS157, 0) // IC3 on interface board (actually LS257 with OC tied low) + MCFG_74157_A_IN_CB(IOPORT("INP2")) + MCFG_74157_B_IN_CB(IOPORT("INP1")) + + MCFG_DEVICE_ADD("mux_1", LS157, 0) // IC4 on interface board (actually LS257 with OC tied low) + MCFG_74157_A_IN_CB(IOPORT("INP2A")) + MCFG_74157_B_IN_CB(IOPORT("INP1A")) MACHINE_CONFIG_END diff --git a/src/mame/includes/taito_l.h b/src/mame/includes/taito_l.h index d1ae6ae89e4..ef95cc1c104 100644 --- a/src/mame/includes/taito_l.h +++ b/src/mame/includes/taito_l.h @@ -200,7 +200,7 @@ public: taitol_1cpu_state(const machine_config &mconfig, device_type type, const char *tag) : taitol_state(mconfig, type, tag) , m_ymsnd(*this, "ymsnd") - , m_mux(*this, {"dswmuxl", "dswmuxh", "inmuxl", "inmuxh"}) + , m_mux(*this, {"dswmux", "inmux"}) { } @@ -218,7 +218,7 @@ protected: virtual void taito_machine_reset() override; required_device<ym2203_device> m_ymsnd; - optional_device_array<ls157_device, 4> m_mux; + optional_device_array<ls157_x2_device, 2> m_mux; }; |