summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2018-03-28 15:04:11 -0400
committer AJR <ajrhacker@users.noreply.github.com>2018-03-28 15:04:11 -0400
commitf39d7df5fee0ff360bc127403c0a6d20131bf0e0 (patch)
tree0eb46b0c26f3d731724743a733082778603d5970
parent3a0f55c31d78e2ddc3ca194d48ceaa8b6cfb0e6c (diff)
xyonix: Acknowledge main interrupt (nw)
-rw-r--r--src/mame/drivers/xyonix.cpp23
-rw-r--r--src/mame/includes/xyonix.h4
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);