diff options
author | AJR <ajrhacker@users.noreply.github.com> | 2017-09-01 00:43:51 -0400 |
---|---|---|
committer | AJR <ajrhacker@users.noreply.github.com> | 2017-09-01 00:43:51 -0400 |
commit | 4f331f8e63b4da250b45e1de9b3402f517664ebc (patch) | |
tree | 4c48f4d4766f17e54f96b7ba416d529607c3dff0 | |
parent | a6682d49f1a00ab3a0b1ce4bb3580d39845082c7 (diff) |
lkage: Soundlatch modernization (nw)
-rw-r--r-- | src/mame/drivers/lkage.cpp | 39 | ||||
-rw-r--r-- | src/mame/includes/lkage.h | 11 |
2 files changed, 16 insertions, 34 deletions
diff --git a/src/mame/drivers/lkage.cpp b/src/mame/drivers/lkage.cpp index 46a9b723d3b..62fbf1fdad2 100644 --- a/src/mame/drivers/lkage.cpp +++ b/src/mame/drivers/lkage.cpp @@ -101,34 +101,14 @@ TODO: #define MCU_CLOCK (XTAL_12MHz/4) -TIMER_CALLBACK_MEMBER(lkage_state::nmi_callback) -{ - if (m_sound_nmi_enable) - m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); - else - m_pending_nmi = 1; -} - -WRITE8_MEMBER(lkage_state::lkage_sound_command_w) -{ - m_soundlatch->write(space, offset, data); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(lkage_state::nmi_callback),this), data); -} - WRITE8_MEMBER(lkage_state::lkage_sh_nmi_disable_w) { - m_sound_nmi_enable = 0; + m_soundnmi->in_w<1>(0); } WRITE8_MEMBER(lkage_state::lkage_sh_nmi_enable_w) { - m_sound_nmi_enable = 1; - if (m_pending_nmi) - { - /* probably wrong but commands may go lost otherwise */ - m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); - m_pending_nmi = 0; - } + m_soundnmi->in_w<1>(1); } READ8_MEMBER(lkage_state::sound_status_r) @@ -141,7 +121,7 @@ static ADDRESS_MAP_START( lkage_map, AS_PROGRAM, 8, lkage_state ) AM_RANGE(0xe000, 0xe7ff) AM_RAM /* work ram */ AM_RANGE(0xe800, 0xefff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0xf000, 0xf003) AM_RAM AM_SHARE("vreg") /* video registers */ - AM_RANGE(0xf060, 0xf060) AM_WRITE(lkage_sound_command_w) + AM_RANGE(0xf060, 0xf060) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xf061, 0xf061) AM_WRITENOP AM_READ(sound_status_r) AM_RANGE(0xf063, 0xf063) AM_WRITENOP /* pulsed; nmi on sound cpu? */ AM_RANGE(0xf080, 0xf080) AM_READ_PORT("DSW1") @@ -490,8 +470,6 @@ void lkage_state::machine_start() save_item(NAME(m_mcu_ready)); save_item(NAME(m_mcu_val)); - save_item(NAME(m_sound_nmi_enable)); - save_item(NAME(m_pending_nmi)); } void lkage_state::machine_reset() @@ -500,9 +478,8 @@ void lkage_state::machine_reset() m_mcu_ready = 3; m_mcu_val = 0; - m_sound_nmi_enable = 0; - m_pending_nmi = 0; + m_soundnmi->in_w<1>(0); } static MACHINE_CONFIG_START( lkage ) @@ -538,6 +515,10 @@ static MACHINE_CONFIG_START( lkage ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_DATA_PENDING_CB(DEVWRITELINE("soundnmi", input_merger_device, in_w<0>)) + + MCFG_INPUT_MERGER_ALL_HIGH("soundnmi") + MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI)) MCFG_SOUND_ADD("ym1", YM2203, AUDIO_CLOCK ) MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) @@ -585,6 +566,10 @@ static MACHINE_CONFIG_START( lkageb ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_DATA_PENDING_CB(DEVWRITELINE("soundnmi", input_merger_device, in_w<0>)) + + MCFG_INPUT_MERGER_ALL_HIGH("soundnmi") + MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI)) MCFG_SOUND_ADD("ym1", YM2203, AUDIO_CLOCK) MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) diff --git a/src/mame/includes/lkage.h b/src/mame/includes/lkage.h index 2dacf312d04..c0291989da9 100644 --- a/src/mame/includes/lkage.h +++ b/src/mame/includes/lkage.h @@ -2,6 +2,7 @@ // copyright-holders:Phil Stroffolino #include "machine/gen_latch.h" +#include "machine/input_merger.h" #include "machine/taito68705interface.h" class lkage_state : public driver_device @@ -18,7 +19,8 @@ public: m_bmcu(*this, "bmcu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), - m_soundlatch(*this, "soundlatch") { } + m_soundlatch(*this, "soundlatch"), + m_soundnmi(*this, "soundnmi") { } required_shared_ptr<uint8_t> m_vreg; required_shared_ptr<uint8_t> m_scroll; @@ -35,10 +37,6 @@ public: int m_sprite_dx; - /* misc */ - int m_sound_nmi_enable; - int m_pending_nmi; - /* lkageb fake mcu */ uint8_t m_mcu_val; int m_mcu_ready; /* cpu data/mcu ready status */ @@ -50,8 +48,8 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; required_device<generic_latch_8_device> m_soundlatch; + required_device<input_merger_device> m_soundnmi; - DECLARE_WRITE8_MEMBER(lkage_sound_command_w); DECLARE_WRITE8_MEMBER(lkage_sh_nmi_disable_w); DECLARE_WRITE8_MEMBER(lkage_sh_nmi_enable_w); DECLARE_READ8_MEMBER(sound_status_r); @@ -71,6 +69,5 @@ public: virtual void machine_reset() override; virtual void video_start() override; uint32_t screen_update_lkage(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - TIMER_CALLBACK_MEMBER(nmi_callback); void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ); }; |