From f39d7df5fee0ff360bc127403c0a6d20131bf0e0 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 28 Mar 2018 15:04:11 -0400 Subject: xyonix: Acknowledge main interrupt (nw) --- src/mame/drivers/xyonix.cpp | 23 +++++++++++++++++++++-- src/mame/includes/xyonix.h | 4 ++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/mame/drivers/xyonix.cpp b/src/mame/drivers/xyonix.cpp index 5da65c3d129..5a23a6186a8 100644 --- a/src/mame/drivers/xyonix.cpp +++ b/src/mame/drivers/xyonix.cpp @@ -36,6 +36,12 @@ void xyonix_state::machine_start() save_item(NAME(m_credits)); save_item(NAME(m_coins)); save_item(NAME(m_prev_coin)); + save_item(NAME(m_nmi_mask)); +} + +void xyonix_state::machine_reset() +{ + m_nmi_mask = false; } WRITE8_MEMBER(xyonix_state::irqack_w) @@ -43,6 +49,19 @@ WRITE8_MEMBER(xyonix_state::irqack_w) m_maincpu->set_input_line(0, CLEAR_LINE); } +WRITE_LINE_MEMBER(xyonix_state::nmiclk_w) +{ + if (state && m_nmi_mask) + m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); +} + +WRITE8_MEMBER(xyonix_state::nmiack_w) +{ + m_nmi_mask = BIT(data, 0); + if (!m_nmi_mask) + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); +} + /* Inputs ********************************************************************/ @@ -155,7 +174,7 @@ void xyonix_state::port_map(address_map &map) map.global_mask(0xff); map(0x20, 0x20).nopr().w("sn1", FUNC(sn76496_device::write)); /* SN76496 ready signal */ map(0x21, 0x21).nopr().w("sn2", FUNC(sn76496_device::write)); - map(0x40, 0x40).nopw(); /* NMI ack? */ + map(0x40, 0x40).w(this, FUNC(xyonix_state::nmiack_w)); map(0x50, 0x50).w(this, FUNC(xyonix_state::irqack_w)); map(0x60, 0x61).nopw(); /* mc6845 */ map(0xe0, 0xe0).rw(this, FUNC(xyonix_state::io_r), FUNC(xyonix_state::io_w)); @@ -232,7 +251,6 @@ MACHINE_CONFIG_START(xyonix_state::xyonix) MCFG_CPU_ADD("maincpu", Z80,16000000 / 4) /* 4 MHz ? */ MCFG_CPU_PROGRAM_MAP(main_map) MCFG_CPU_IO_MAP(port_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", xyonix_state, nmi_line_pulse) MCFG_CPU_PERIODIC_INT_DRIVER(xyonix_state, irq0_line_assert, 4*60) /* ?? controls music tempo */ /* video hardware */ @@ -243,6 +261,7 @@ MACHINE_CONFIG_START(xyonix_state::xyonix) MCFG_SCREEN_VISIBLE_AREA(0, 80*4-1, 0, 28*8-1) MCFG_SCREEN_UPDATE_DRIVER(xyonix_state, screen_update) MCFG_SCREEN_PALETTE("palette") + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(xyonix_state, nmiclk_w)) MCFG_GFXDECODE_ADD("gfxdecode", "palette", xyonix) MCFG_PALETTE_ADD("palette", 256) diff --git a/src/mame/includes/xyonix.h b/src/mame/includes/xyonix.h index d215abc1aa5..9ad40662e13 100644 --- a/src/mame/includes/xyonix.h +++ b/src/mame/includes/xyonix.h @@ -20,13 +20,17 @@ public: int m_credits; int m_coins; int m_prev_coin; + bool m_nmi_mask; + DECLARE_WRITE_LINE_MEMBER(nmiclk_w); DECLARE_WRITE8_MEMBER(irqack_w); + DECLARE_WRITE8_MEMBER(nmiack_w); DECLARE_READ8_MEMBER(io_r); DECLARE_WRITE8_MEMBER(io_w); DECLARE_WRITE8_MEMBER(vidram_w); virtual void machine_start() override; + virtual void machine_reset() override; virtual void video_start() override; TILE_GET_INFO_MEMBER(get_tile_info); DECLARE_PALETTE_INIT(xyonix); -- cgit v1.2.3