From 1968228bedd0e19ca08fa096f055fcb4abef1430 Mon Sep 17 00:00:00 2001 From: mahlemiut Date: Wed, 26 Dec 2012 05:54:23 +0000 Subject: [PATCH] s11,s11a,s11b: Improved background music board communications, and adjusted clock of the 68B09E. Some music can now play in System 11B games. --- src/mame/drivers/s11.c | 32 ++++++++++++++++++++++-------- src/mame/drivers/s11a.c | 38 ++++++++++++++++++++++++++++-------- src/mame/drivers/s11b.c | 43 +++++++++++++++++++++++++++++++---------- 3 files changed, 87 insertions(+), 26 deletions(-) diff --git a/src/mame/drivers/s11.c b/src/mame/drivers/s11.c index 1f22ec4526d..c315ed202cc 100644 --- a/src/mame/drivers/s11.c +++ b/src/mame/drivers/s11.c @@ -42,7 +42,8 @@ public: m_pia2c(*this, "pia2c"), m_pia30(*this, "pia30"), m_pia34(*this, "pia34"), - m_pia40(*this, "pia40") + m_pia40(*this, "pia40"), + m_ym(*this, "ym2151") { } DECLARE_READ8_MEMBER(dac_r); @@ -61,6 +62,8 @@ public: DECLARE_WRITE8_MEMBER(pia34_pb_w); DECLARE_WRITE_LINE_MEMBER(pia34_cb2_w); DECLARE_WRITE8_MEMBER(pia40_pa_w); + DECLARE_WRITE_LINE_MEMBER(pia40_ca2_w); + DECLARE_WRITE_LINE_MEMBER(pia40_cb2_w); DECLARE_READ8_MEMBER(dips_r); DECLARE_READ8_MEMBER(switch_r); DECLARE_WRITE8_MEMBER(switch_w); @@ -100,6 +103,7 @@ protected: required_device m_pia30; required_device m_pia34; required_device m_pia40; + required_device m_ym; private: UINT8 m_sound_data; UINT8 m_strobe; @@ -433,13 +437,11 @@ WRITE8_MEMBER( s11_state::pia34_pa_w ) WRITE8_MEMBER( s11_state::pia34_pb_w ) { m_pia40->portb_w(data); - m_pia40->cb1_w(1); - m_pia40->cb1_w(0); } WRITE_LINE_MEMBER( s11_state::pia34_cb2_w ) { - + m_pia40->cb1_w(state); // MCB2 through CPU interface } static const pia6821_interface pia34_intf = @@ -514,7 +516,21 @@ WRITE8_MEMBER( s11_state::pia40_pa_w ) WRITE_LINE_MEMBER( s11_state::ym2151_irq_w) { - m_pia40->ca1_w(!state); + if(state == CLEAR_LINE) + m_pia40->ca1_w(1); + else + m_pia40->ca1_w(0); +} + +WRITE_LINE_MEMBER( s11_state::pia40_ca2_w) +{ + if(state == ASSERT_LINE) + m_ym->reset(); +} + +WRITE_LINE_MEMBER( s11_state::pia40_cb2_w) +{ + m_pia34->cb1_w(state); // To Widget MCB1 through CPU Data interface } static const pia6821_interface pia40_intf = @@ -527,8 +543,8 @@ static const pia6821_interface pia40_intf = DEVCB_NULL, /* line CB2 in */ DEVCB_DRIVER_MEMBER(s11_state, pia40_pa_w), /* port A out */ DEVCB_DRIVER_MEMBER(s11_state, dac_w), /* port B out */ - DEVCB_DRIVER_LINE_MEMBER(s11_state, pias_ca2_w), /* line CA2 out */ - DEVCB_DRIVER_LINE_MEMBER(s11_state, pias_cb2_w), /* line CB2 out */ + DEVCB_DRIVER_LINE_MEMBER(s11_state, pia40_ca2_w), /* line CA2 out */ + DEVCB_DRIVER_LINE_MEMBER(s11_state, pia40_cb2_w), /* line CB2 out */ DEVCB_CPU_INPUT_LINE("bgcpu", M6809_FIRQ_LINE), /* IRQA */ DEVCB_CPU_INPUT_LINE("bgcpu", INPUT_LINE_NMI) /* IRQB */ }; @@ -585,7 +601,7 @@ static MACHINE_CONFIG_START( s11, s11_state ) MCFG_PIA6821_ADD("pias", pias_intf) /* Add the background music card */ - MCFG_CPU_ADD("bgcpu", M6809E, 4000000) // MC68B09E + MCFG_CPU_ADD("bgcpu", M6809E, 8000000) // MC68B09E MCFG_CPU_PROGRAM_MAP(s11_bg_map) MCFG_SPEAKER_STANDARD_MONO("bg") diff --git a/src/mame/drivers/s11a.c b/src/mame/drivers/s11a.c index 3c39bfb34fa..ecec2a08d55 100644 --- a/src/mame/drivers/s11a.c +++ b/src/mame/drivers/s11a.c @@ -47,7 +47,8 @@ public: m_pia2c(*this, "pia2c"), m_pia30(*this, "pia30"), m_pia34(*this, "pia34"), - m_pia40(*this, "pia40") + m_pia40(*this, "pia40"), + m_ym(*this, "ym2151") { } DECLARE_READ8_MEMBER(dac_r); @@ -65,7 +66,10 @@ public: DECLARE_WRITE8_MEMBER(pia2c_pb_w); DECLARE_WRITE8_MEMBER(pia34_pa_w); DECLARE_WRITE8_MEMBER(pia34_pb_w); + DECLARE_WRITE_LINE_MEMBER(pia34_cb2_w); DECLARE_WRITE8_MEMBER(pia40_pa_w); + DECLARE_WRITE_LINE_MEMBER(pia40_ca2_w); + DECLARE_WRITE_LINE_MEMBER(pia40_cb2_w); DECLARE_READ8_MEMBER(dips_r); DECLARE_READ8_MEMBER(switch_r); DECLARE_WRITE8_MEMBER(switch_w); @@ -105,6 +109,7 @@ protected: required_device m_pia30; required_device m_pia34; required_device m_pia40; + required_device m_ym; private: UINT8 m_sound_data; UINT8 m_strobe; @@ -441,8 +446,11 @@ WRITE8_MEMBER( s11a_state::pia34_pa_w ) WRITE8_MEMBER( s11a_state::pia34_pb_w ) { m_pia40->portb_w(data); - m_pia40->cb1_w(1); - m_pia40->cb1_w(0); +} + +WRITE_LINE_MEMBER( s11a_state::pia34_cb2_w ) +{ + m_pia40->cb1_w(state); // MCB2 through CPU interface } static const pia6821_interface pia34_intf = @@ -456,7 +464,7 @@ static const pia6821_interface pia34_intf = DEVCB_DRIVER_MEMBER(s11a_state, pia34_pa_w), /* port A out */ DEVCB_DRIVER_MEMBER(s11a_state, pia34_pb_w), /* port B out */ DEVCB_NULL, /* line CA2 out */ - DEVCB_NULL, /* line CB2 out */ + DEVCB_DRIVER_LINE_MEMBER(s11a_state, pia34_cb2_w), /* line CB2 out */ DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE), /* IRQA */ DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE) /* IRQB */ }; @@ -499,6 +507,17 @@ WRITE8_MEMBER( s11a_state::dac_w ) m_dac->write_unsigned8(data); } +WRITE_LINE_MEMBER( s11a_state::pia40_ca2_w) +{ + if(state == ASSERT_LINE) + m_ym->reset(); +} + +WRITE_LINE_MEMBER( s11a_state::pia40_cb2_w) +{ + m_pia34->cb1_w(state); // To Widget MCB1 through CPU Data interface +} + static const pia6821_interface pias_intf = { DEVCB_DRIVER_MEMBER(s11a_state, dac_r), /* port A in */ @@ -509,8 +528,8 @@ static const pia6821_interface pias_intf = DEVCB_NULL, /* line CB2 in */ DEVCB_DRIVER_MEMBER(s11a_state, sound_w), /* port A out */ DEVCB_DRIVER_MEMBER(s11a_state, dac_w), /* port B out */ - DEVCB_DRIVER_LINE_MEMBER(s11a_state, pias_ca2_w), /* line CA2 out */ - DEVCB_DRIVER_LINE_MEMBER(s11a_state, pias_cb2_w), /* line CB2 out */ + DEVCB_DRIVER_LINE_MEMBER(s11a_state, pia40_ca2_w), /* line CA2 out */ + DEVCB_DRIVER_LINE_MEMBER(s11a_state, pia40_cb2_w), /* line CB2 out */ DEVCB_CPU_INPUT_LINE("audiocpu", M6800_IRQ_LINE), /* IRQA */ DEVCB_CPU_INPUT_LINE("audiocpu", M6800_IRQ_LINE) /* IRQB */ }; @@ -522,7 +541,10 @@ WRITE8_MEMBER( s11a_state::pia40_pa_w ) WRITE_LINE_MEMBER( s11a_state::ym2151_irq_w) { - m_pia40->ca1_w(!state); + if(state == CLEAR_LINE) + m_pia40->ca1_w(1); + else + m_pia40->ca1_w(0); } static const pia6821_interface pia40_intf = @@ -596,7 +618,7 @@ static MACHINE_CONFIG_START( s11a, s11a_state ) MCFG_PIA6821_ADD("pias", pias_intf) /* Add the background music card */ - MCFG_CPU_ADD("bgcpu", M6809E, 4000000) // MC68B09E + MCFG_CPU_ADD("bgcpu", M6809E, 8000000) // MC68B09E MCFG_CPU_PROGRAM_MAP(s11a_bg_map) MCFG_SPEAKER_STANDARD_MONO("bg") diff --git a/src/mame/drivers/s11b.c b/src/mame/drivers/s11b.c index d433c25761b..1b69b56cb31 100644 --- a/src/mame/drivers/s11b.c +++ b/src/mame/drivers/s11b.c @@ -36,7 +36,8 @@ public: m_pia2c(*this, "pia2c"), m_pia30(*this, "pia30"), m_pia34(*this, "pia34"), - m_pia40(*this, "pia40") + m_pia40(*this, "pia40"), + m_ym(*this, "ym2151") { } DECLARE_READ8_MEMBER(dac_r); @@ -54,7 +55,10 @@ public: DECLARE_WRITE8_MEMBER(pia2c_pb_w); DECLARE_WRITE8_MEMBER(pia34_pa_w); DECLARE_WRITE8_MEMBER(pia34_pb_w); + DECLARE_WRITE_LINE_MEMBER(pia34_cb2_w); DECLARE_WRITE8_MEMBER(pia40_pa_w); + DECLARE_WRITE_LINE_MEMBER(pia40_ca2_w); + DECLARE_WRITE_LINE_MEMBER(pia40_cb2_w); DECLARE_READ8_MEMBER(dips_r); DECLARE_READ8_MEMBER(switch_r); DECLARE_WRITE8_MEMBER(switch_w); @@ -95,6 +99,7 @@ protected: required_device m_pia30; required_device m_pia34; required_device m_pia40; + required_device m_ym; private: UINT8 m_sound_data; UINT8 m_strobe; @@ -446,9 +451,12 @@ WRITE8_MEMBER( s11b_state::pia34_pa_w ) WRITE8_MEMBER( s11b_state::pia34_pb_w ) { - m_pia40->portb_w(data); - m_pia40->cb1_w(1); - m_pia40->cb1_w(0); + m_pia40->portb_w(data); // MD1-8 through CPU interface +} + +WRITE_LINE_MEMBER( s11b_state::pia34_cb2_w ) +{ + m_pia40->cb1_w(state); // MCB2 through CPU interface } static const pia6821_interface pia34_intf = @@ -462,7 +470,7 @@ static const pia6821_interface pia34_intf = DEVCB_DRIVER_MEMBER(s11b_state, pia34_pa_w), /* port A out */ DEVCB_DRIVER_MEMBER(s11b_state, pia34_pb_w), /* port B out */ DEVCB_NULL, /* line CA2 out */ - DEVCB_NULL, /* line CB2 out */ + DEVCB_DRIVER_LINE_MEMBER(s11b_state, pia34_cb2_w), /* line CB2 out */ DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE), /* IRQA */ DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE) /* IRQB */ }; @@ -475,7 +483,7 @@ WRITE8_MEMBER( s11b_state::bank_w ) WRITE8_MEMBER( s11b_state::bgbank_w ) { - membank("bgbank")->set_entry(BIT(data, 0)); + membank("bgbank")->set_entry(data & 0x03); } READ_LINE_MEMBER( s11b_state::pias_ca1_r ) @@ -528,7 +536,21 @@ WRITE8_MEMBER( s11b_state::pia40_pa_w ) WRITE_LINE_MEMBER( s11b_state::ym2151_irq_w) { - m_pia40->ca1_w(!state); + if(state == CLEAR_LINE) + m_pia40->ca1_w(1); + else + m_pia40->ca1_w(0); +} + +WRITE_LINE_MEMBER( s11b_state::pia40_ca2_w) +{ + if(state == ASSERT_LINE) + m_ym->reset(); +} + +WRITE_LINE_MEMBER( s11b_state::pia40_cb2_w) +{ + m_pia34->cb1_w(state); // To Widget MCB1 through CPU Data interface } static const pia6821_interface pia40_intf = @@ -541,8 +563,8 @@ static const pia6821_interface pia40_intf = DEVCB_NULL, /* line CB2 in */ DEVCB_DRIVER_MEMBER(s11b_state, pia40_pa_w), /* port A out */ DEVCB_DRIVER_MEMBER(s11b_state, dac_w), /* port B out */ - DEVCB_DRIVER_LINE_MEMBER(s11b_state, pias_ca2_w), /* line CA2 out */ - DEVCB_DRIVER_LINE_MEMBER(s11b_state, pias_cb2_w), /* line CB2 out */ + DEVCB_DRIVER_LINE_MEMBER(s11b_state, pia40_ca2_w), /* line CA2 out */ + DEVCB_DRIVER_LINE_MEMBER(s11b_state, pia40_cb2_w), /* line CB2 out */ DEVCB_CPU_INPUT_LINE("bgcpu", M6809_FIRQ_LINE), /* IRQA */ DEVCB_CPU_INPUT_LINE("bgcpu", INPUT_LINE_NMI) /* IRQB */ }; @@ -616,8 +638,9 @@ static MACHINE_CONFIG_START( s11b, s11b_state ) MCFG_PIA6821_ADD("pias", pias_intf) /* Add the background music card */ - MCFG_CPU_ADD("bgcpu", M6809E, 4000000) // MC68B09E + MCFG_CPU_ADD("bgcpu", M6809E, 8000000) // MC68B09E MCFG_CPU_PROGRAM_MAP(s11b_bg_map) + MCFG_QUANTUM_TIME(attotime::from_hz(50)) MCFG_SPEAKER_STANDARD_MONO("bg") MCFG_YM2151_ADD("ym2151", 3580000)