From 9566d90a12979773cf7769271a7bf7182613f230 Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 9 Jan 2017 12:57:42 -0500 Subject: [PATCH] chinagat.cpp, ddragon.cpp: More IRQ cleanups (nw) --- src/mame/drivers/chinagat.cpp | 39 +++++++++++++++++++++-------------- src/mame/drivers/ddragon.cpp | 20 +++++------------- src/mame/includes/ddragon.h | 2 -- 3 files changed, 28 insertions(+), 33 deletions(-) diff --git a/src/mame/drivers/chinagat.cpp b/src/mame/drivers/chinagat.cpp index e8cc1b1cf2b..cf794a7eea5 100644 --- a/src/mame/drivers/chinagat.cpp +++ b/src/mame/drivers/chinagat.cpp @@ -96,10 +96,11 @@ public: DECLARE_MACHINE_START(chinagat); DECLARE_MACHINE_RESET(chinagat); DECLARE_VIDEO_START(chinagat); - DECLARE_WRITE8_MEMBER( chinagat_interrupt_w ); - DECLARE_WRITE8_MEMBER( chinagat_video_ctrl_w ); - DECLARE_WRITE8_MEMBER( chinagat_bankswitch_w ); - DECLARE_WRITE8_MEMBER( chinagat_sub_bankswitch_w ); + DECLARE_WRITE8_MEMBER(interrupt_w); + DECLARE_WRITE8_MEMBER(video_ctrl_w); + DECLARE_WRITE8_MEMBER(bankswitch_w); + DECLARE_WRITE8_MEMBER(sub_bankswitch_w); + DECLARE_WRITE8_MEMBER(sub_irq_ack_w); DECLARE_READ8_MEMBER( saiyugoub1_mcu_command_r ); DECLARE_WRITE8_MEMBER( saiyugoub1_mcu_command_w ); DECLARE_WRITE8_MEMBER( saiyugoub1_adpcm_rom_addr_w ); @@ -159,13 +160,12 @@ TIMER_DEVICE_CALLBACK_MEMBER(chinagat_state::chinagat_scanline) scanline = 0; } -WRITE8_MEMBER(chinagat_state::chinagat_interrupt_w ) +WRITE8_MEMBER(chinagat_state::interrupt_w) { switch (offset) { case 0: /* 3e00 - SND irq */ m_soundlatch->write(space, 0, data); - m_soundcpu->set_input_line(m_sound_irq, (m_sound_irq == INPUT_LINE_NMI) ? PULSE_LINE : HOLD_LINE ); break; case 1: /* 3e01 - NMI ack */ @@ -181,12 +181,12 @@ WRITE8_MEMBER(chinagat_state::chinagat_interrupt_w ) break; case 4: /* 3e04 - sub CPU IRQ ack */ - m_subcpu->set_input_line(m_sprite_irq, (m_sprite_irq == INPUT_LINE_NMI) ? PULSE_LINE : HOLD_LINE ); + m_subcpu->set_input_line(m_sprite_irq, ASSERT_LINE); break; } } -WRITE8_MEMBER(chinagat_state::chinagat_video_ctrl_w ) +WRITE8_MEMBER(chinagat_state::video_ctrl_w) { /*************************** ---- ---x X Scroll MSB @@ -200,16 +200,21 @@ WRITE8_MEMBER(chinagat_state::chinagat_video_ctrl_w ) flip_screen_set(~data & 0x04); } -WRITE8_MEMBER(chinagat_state::chinagat_bankswitch_w ) +WRITE8_MEMBER(chinagat_state::bankswitch_w) { membank("bank1")->set_entry(data & 0x07); // shall we check (data & 7) < 6 (# of banks)? } -WRITE8_MEMBER(chinagat_state::chinagat_sub_bankswitch_w ) +WRITE8_MEMBER(chinagat_state::sub_bankswitch_w) { membank("bank4")->set_entry(data & 0x07); // shall we check (data & 7) < 6 (# of banks)? } +WRITE8_MEMBER(chinagat_state::sub_irq_ack_w) +{ + m_subcpu->set_input_line(m_sprite_irq, CLEAR_LINE); +} + READ8_MEMBER(chinagat_state::saiyugoub1_mcu_command_r ) { #if 0 @@ -325,11 +330,11 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, chinagat_state ) AM_RANGE(0x3000, 0x317f) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0x3400, 0x357f) AM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext") AM_RANGE(0x3800, 0x397f) AM_WRITE_BANK("bank3") AM_SHARE("spriteram") - AM_RANGE(0x3e00, 0x3e04) AM_WRITE(chinagat_interrupt_w) + AM_RANGE(0x3e00, 0x3e04) AM_WRITE(interrupt_w) AM_RANGE(0x3e06, 0x3e06) AM_WRITEONLY AM_SHARE("scrolly_lo") AM_RANGE(0x3e07, 0x3e07) AM_WRITEONLY AM_SHARE("scrollx_lo") - AM_RANGE(0x3f00, 0x3f00) AM_WRITE(chinagat_video_ctrl_w) - AM_RANGE(0x3f01, 0x3f01) AM_WRITE(chinagat_bankswitch_w) + AM_RANGE(0x3f00, 0x3f00) AM_WRITE(video_ctrl_w) + AM_RANGE(0x3f01, 0x3f01) AM_WRITE(bankswitch_w) AM_RANGE(0x3f00, 0x3f00) AM_READ_PORT("SYSTEM") AM_RANGE(0x3f01, 0x3f01) AM_READ_PORT("DSW1") AM_RANGE(0x3f02, 0x3f02) AM_READ_PORT("DSW2") @@ -341,8 +346,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sub_map, AS_PROGRAM, 8, chinagat_state ) AM_RANGE(0x0000, 0x1fff) AM_RAM AM_SHARE("share1") - AM_RANGE(0x2000, 0x2000) AM_WRITE(chinagat_sub_bankswitch_w) - AM_RANGE(0x2800, 0x2800) AM_WRITEONLY /* Called on CPU start and after return from jump table */ + AM_RANGE(0x2000, 0x2000) AM_WRITE(sub_bankswitch_w) + AM_RANGE(0x2800, 0x2800) AM_WRITE(sub_irq_ack_w) /* Called on CPU start and after return from jump table */ // AM_RANGE(0x2a2b, 0x2a2b) AM_READNOP /* What lives here? */ // AM_RANGE(0x2a30, 0x2a30) AM_READNOP /* What lives here? */ AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank4") @@ -577,6 +582,7 @@ static MACHINE_CONFIG_START( chinagat, chinagat_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("soundcpu", INPUT_LINE_NMI)) MCFG_YM2151_ADD("ymsnd", 3579545) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) @@ -625,6 +631,7 @@ static MACHINE_CONFIG_START( saiyugoub1, chinagat_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("soundcpu", INPUT_LINE_NMI)) MCFG_YM2151_ADD("ymsnd", 3579545) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) @@ -671,6 +678,7 @@ static MACHINE_CONFIG_START( saiyugoub2, chinagat_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("soundcpu", INPUT_LINE_NMI)) MCFG_SOUND_ADD("ym1", YM2203, 3579545) MCFG_YM2203_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) @@ -904,7 +912,6 @@ DRIVER_INIT_MEMBER(chinagat_state,chinagat) m_technos_video_hw = 1; m_sprite_irq = M6809_IRQ_LINE; - m_sound_irq = INPUT_LINE_NMI; membank("bank1")->configure_entries(0, 6, &MAIN[0x10000], 0x4000); membank("bank4")->configure_entries(0, 6, &SUB[0x10000], 0x4000); diff --git a/src/mame/drivers/ddragon.cpp b/src/mame/drivers/ddragon.cpp index 1e10f36d7cd..945f41d8e1b 100644 --- a/src/mame/drivers/ddragon.cpp +++ b/src/mame/drivers/ddragon.cpp @@ -281,7 +281,6 @@ void ddragon_state::ddragon_interrupt_ack(address_space &space, offs_t offset, u case 3: /* 380e - SND IRQ and latch */ m_soundlatch->write(space, 0, data); - m_soundcpu->set_input_line(m_sound_irq, ASSERT_LINE); break; case 4: /* 380f - MCU IRQ */ @@ -323,13 +322,6 @@ WRITE_LINE_MEMBER(ddragon_state::irq_handler) } -READ8_MEMBER(ddragon_state::soundlatch_ack_r) -{ - m_soundcpu->set_input_line(m_sound_irq, CLEAR_LINE); - return m_soundlatch->read(space, 0); -} - - WRITE8_MEMBER(ddragon_state::ddragonba_port_w) { if ((data & 0x8) == 0) @@ -582,7 +574,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, ddragon_state ) AM_RANGE(0x0000, 0x0fff) AM_RAM - AM_RANGE(0x1000, 0x1000) AM_READ(soundlatch_ack_r) + AM_RANGE(0x1000, 0x1000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x1800, 0x1800) AM_READ(dd_adpcm_status_r) AM_RANGE(0x2800, 0x2801) AM_DEVREADWRITE("fmsnd", ym2151_device, read, write) AM_RANGE(0x3800, 0x3807) AM_WRITE(dd_adpcm_w) @@ -595,7 +587,7 @@ static ADDRESS_MAP_START( dd2_sound_map, AS_PROGRAM, 8, ddragon_state ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x8800, 0x8801) AM_DEVREADWRITE("fmsnd", ym2151_device, read, write) AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_ack_r) + AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -977,6 +969,7 @@ static MACHINE_CONFIG_START( ddragon, ddragon_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("soundcpu", M6809_IRQ_LINE)) MCFG_YM2151_ADD("fmsnd", SOUND_CLOCK) MCFG_YM2151_IRQ_HANDLER(WRITELINE(ddragon_state, irq_handler)) @@ -1046,6 +1039,7 @@ static MACHINE_CONFIG_START( ddragon6809, ddragon_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("soundcpu", M6809_IRQ_LINE)) MCFG_YM2151_ADD("fmsnd", SOUND_CLOCK) MCFG_YM2151_IRQ_HANDLER(WRITELINE(ddragon_state,irq_handler)) @@ -1098,6 +1092,7 @@ static MACHINE_CONFIG_START( ddragon2, ddragon_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("soundcpu", INPUT_LINE_NMI)) MCFG_YM2151_ADD("fmsnd", SOUND_CLOCK) MCFG_YM2151_IRQ_HANDLER(WRITELINE(ddragon_state,irq_handler)) @@ -2082,7 +2077,6 @@ ROM_END DRIVER_INIT_MEMBER(ddragon_state,ddragon) { m_sprite_irq = INPUT_LINE_NMI; - m_sound_irq = M6809_IRQ_LINE; m_ym_irq = M6809_FIRQ_LINE; m_technos_video_hw = 0; } @@ -2091,7 +2085,6 @@ DRIVER_INIT_MEMBER(ddragon_state,ddragon) DRIVER_INIT_MEMBER(ddragon_state,ddragon2) { m_sprite_irq = INPUT_LINE_NMI; - m_sound_irq = INPUT_LINE_NMI; m_ym_irq = 0; m_technos_video_hw = 2; } @@ -2100,7 +2093,6 @@ DRIVER_INIT_MEMBER(ddragon_state,ddragon2) DRIVER_INIT_MEMBER(ddragon_state,darktowr) { m_sprite_irq = INPUT_LINE_NMI; - m_sound_irq = M6809_IRQ_LINE; m_ym_irq = M6809_FIRQ_LINE; m_technos_video_hw = 0; m_maincpu->space(AS_PROGRAM).install_write_handler(0x3808, 0x3808, write8_delegate(FUNC(ddragon_state::darktowr_bankswitch_w),this)); @@ -2112,7 +2104,6 @@ DRIVER_INIT_MEMBER(ddragon_state,toffy) int i, length; uint8_t *rom; - m_sound_irq = M6809_IRQ_LINE; m_ym_irq = M6809_FIRQ_LINE; m_technos_video_hw = 0; m_maincpu->space(AS_PROGRAM).install_write_handler(0x3808, 0x3808, write8_delegate(FUNC(ddragon_state::toffy_bankswitch_w),this)); @@ -2167,7 +2158,6 @@ DRIVER_INIT_MEMBER(ddragon_state,ddragon6809) } m_sprite_irq = INPUT_LINE_NMI; - m_sound_irq = M6809_IRQ_LINE; m_ym_irq = M6809_FIRQ_LINE; m_technos_video_hw = 0; } diff --git a/src/mame/includes/ddragon.h b/src/mame/includes/ddragon.h index 3737d035ac9..775c4bd3e55 100644 --- a/src/mame/includes/ddragon.h +++ b/src/mame/includes/ddragon.h @@ -52,7 +52,6 @@ public: /* misc */ uint8_t m_ddragon_sub_port; uint8_t m_sprite_irq; - uint8_t m_sound_irq; uint8_t m_ym_irq; uint8_t m_adpcm_sound_irq; uint32_t m_adpcm_pos[2]; @@ -108,7 +107,6 @@ public: DECLARE_WRITE8_MEMBER(ddragon_bankswitch_w); DECLARE_WRITE8_MEMBER(toffy_bankswitch_w); DECLARE_READ8_MEMBER(darktowr_mcu_bank_r); - DECLARE_READ8_MEMBER(soundlatch_ack_r); DECLARE_WRITE8_MEMBER(darktowr_mcu_bank_w); DECLARE_WRITE8_MEMBER(darktowr_bankswitch_w); DECLARE_READ8_MEMBER(ddragon_interrupt_r);