From b3ba94ace1137f0ffdc8be67981c70312e02c3e4 Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 21 Aug 2017 00:29:10 -0400 Subject: combatscb: Hook up a second MSM5205 and improve interrupt handling --- src/mame/drivers/combatsc.cpp | 44 +++++++++++++++++++++++++++---------------- src/mame/includes/combatsc.h | 9 +++++---- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/src/mame/drivers/combatsc.cpp b/src/mame/drivers/combatsc.cpp index 3a2a48fb9e6..c618f072897 100644 --- a/src/mame/drivers/combatsc.cpp +++ b/src/mame/drivers/combatsc.cpp @@ -149,12 +149,6 @@ WRITE8_MEMBER(combatsc_state::combatsc_vreg_w) } } -WRITE8_MEMBER(combatsc_state::combatscb_sh_irqtrigger_w) -{ - m_soundlatch->write(space, offset, data); - m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); -} - READ8_MEMBER(combatsc_state::combatscb_io_r) { static const char *const portnames[] = { "IN0", "IN1", "DSW1", "DSW2" }; @@ -208,7 +202,7 @@ WRITE8_MEMBER(combatsc_state::combatscb_io_w) switch (offset) { case 0x400: combatscb_priority_w(space, 0, data); break; - case 0x800: combatscb_sh_irqtrigger_w(space, 0, data); break; + case 0x800: m_soundlatch->write(space, offset, data); break; case 0xc00: combatsc_vreg_w(space, 0, data); break; default: m_io_ram[offset] = data; break; } @@ -403,17 +397,27 @@ static ADDRESS_MAP_START( combatsc_sound_map, AS_PROGRAM, 8, combatsc_state ) AM_RANGE(0xe000, 0xe001) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write) /* YM 2203 intercepted */ ADDRESS_MAP_END -WRITE8_MEMBER(combatsc_state::combatscb_dac_w) +WRITE8_MEMBER(combatsc_state::combatscb_msm1_w) { if(data & 0x60) printf("%02x\n",data); membank("bl_abank")->set_entry((data & 0x80) >> 7); - //m_msm5205->reset_w(BIT(data, 4)); - m_msm5205->data_w(data & 0x0f); - m_msm5205->vclk_w(1); - m_msm5205->vclk_w(0); + m_msm[0]->reset_w(BIT(data, 4)); + m_msm[0]->data_w(data & 0x0f); +} + +WRITE8_MEMBER(combatsc_state::combatscb_msm2_w) +{ + m_msm[1]->reset_w(BIT(data, 4)); + m_msm[1]->data_w(data & 0x0f); +} + +IRQ_CALLBACK_MEMBER(combatsc_state::combatscb_sound_irq_ack) +{ + m_audiocpu->set_input_line(0, CLEAR_LINE); + return 0xff; } static ADDRESS_MAP_START( combatscb_sound_map, AS_PROGRAM, 8, combatsc_state ) @@ -421,8 +425,9 @@ static ADDRESS_MAP_START( combatscb_sound_map, AS_PROGRAM, 8, combatsc_state ) AM_RANGE(0x8000, 0x87ff) AM_RAM /* RAM */ AM_RANGE(0x9000, 0x9001) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write) /* YM 2203 */ AM_RANGE(0x9008, 0x9009) AM_DEVREAD("ymsnd", ym2203_device, read) /* ??? */ - AM_RANGE(0x9800, 0x9800) AM_WRITE(combatscb_dac_w) + AM_RANGE(0x9800, 0x9800) AM_WRITE(combatscb_msm1_w) AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) /* soundlatch read? */ + AM_RANGE(0xa800, 0xa800) AM_WRITE(combatscb_msm2_w) AM_RANGE(0xc000, 0xffff) AM_ROMBANK("bl_abank") ADDRESS_MAP_END @@ -760,7 +765,7 @@ static MACHINE_CONFIG_START( combatscb ) MCFG_CPU_ADD("audiocpu", Z80,3579545) /* 3.579545 MHz */ MCFG_CPU_PROGRAM_MAP(combatscb_sound_map) - MCFG_CPU_PERIODIC_INT_DRIVER(combatsc_state, irq0_line_hold, 3800) // controls BGM tempo + MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(combatsc_state, combatscb_sound_irq_ack) MCFG_QUANTUM_TIME(attotime::from_hz(1200)) @@ -786,12 +791,19 @@ static MACHINE_CONFIG_START( combatscb ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", INPUT_LINE_NMI)) MCFG_SOUND_ADD("ymsnd", YM2203, 3000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) - MCFG_SOUND_ADD("msm5205", MSM5205, 384000) - MCFG_MSM5205_PRESCALER_SELECTOR(SEX_4B) /* 8KHz playback ? */ + MCFG_SOUND_ADD("msm1", MSM5205, 384000) + MCFG_MSM5205_PRESCALER_SELECTOR(S96_4B) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) + MCFG_MSM5205_VCK_CALLBACK(ASSERTLINE("audiocpu", 0)) + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("msm2", msm5205_device, vclk_w)) + + MCFG_SOUND_ADD("msm2", MSM5205, 384000) + MCFG_MSM5205_PRESCALER_SELECTOR(SEX_4B) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) MACHINE_CONFIG_END diff --git a/src/mame/includes/combatsc.h b/src/mame/includes/combatsc.h index 225de7d2416..8b26a9f4631 100644 --- a/src/mame/includes/combatsc.h +++ b/src/mame/includes/combatsc.h @@ -22,7 +22,7 @@ public: m_k007121_1(*this, "k007121_1"), m_k007121_2(*this, "k007121_2"), m_upd7759(*this, "upd"), - m_msm5205(*this, "msm5205"), + m_msm(*this, "msm%u", 1), m_screen(*this, "screen"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), @@ -64,7 +64,7 @@ public: optional_device m_k007121_1; optional_device m_k007121_2; optional_device m_upd7759; - optional_device m_msm5205; + optional_device_array m_msm; required_device m_screen; required_device m_gfxdecode; required_device m_palette; @@ -73,7 +73,6 @@ public: optional_ioport_array<4> m_track_ports; DECLARE_WRITE8_MEMBER(combatsc_vreg_w); - DECLARE_WRITE8_MEMBER(combatscb_sh_irqtrigger_w); DECLARE_READ8_MEMBER(combatscb_io_r); DECLARE_WRITE8_MEMBER(combatscb_priority_w); DECLARE_WRITE8_MEMBER(combatsc_bankselect_w); @@ -95,7 +94,9 @@ public: DECLARE_WRITE8_MEMBER(combatsc_play_w); DECLARE_WRITE8_MEMBER(combatsc_voice_reset_w); DECLARE_WRITE8_MEMBER(combatsc_portA_w); - DECLARE_WRITE8_MEMBER(combatscb_dac_w); + DECLARE_WRITE8_MEMBER(combatscb_msm1_w); + DECLARE_WRITE8_MEMBER(combatscb_msm2_w); + IRQ_CALLBACK_MEMBER(combatscb_sound_irq_ack); DECLARE_DRIVER_INIT(combatsc); TILE_GET_INFO_MEMBER(get_tile_info0); TILE_GET_INFO_MEMBER(get_tile_info1); -- cgit v1.2.3