summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Angelo Salese <angelosa@users.noreply.github.com>2011-11-29 17:08:30 +0000
committer Angelo Salese <angelosa@users.noreply.github.com>2011-11-29 17:08:30 +0000
commit02203fedfa63a97b93be754d3e0d820e01f6bd9f (patch)
treedaef2bed3715662797549eb082334247cc168c03
parent24ee0f0d2f651465a37b54f1127148de90bc339b (diff)
Removed ugly function interrupt_enable_w from the core, and updated all the drivers that used it accordingly [Angelo Salese]
Fixed scratchy sound in Birdiy, unlike all other Pac-Man HW games irq mask is at $5001 instead of $5000, so fixing that fixed the sound as well [Angelo Salese] Fixed bogus irq/nmi mask bit in Yie Ar Kung-Fu (IRQ mask bit was masking BOTH lines before) [Angelo Salese] Fixed bogus irq mask to sound CPU in Syusse Oozumou [Angelo Salese] Fixed bogus irq mask bit in SNK6502 HW games (IRQ mask bit was masking BOTH lines before) [Angelo Salese] Marked Truco Clemente as GNW since it never really worked (coin chutes stops working after one play), nw Out of whatsnew: And then I've realized that there's also cpu_interrupt_enable() function, another 19 instances to kill ... -.-"
-rw-r--r--src/emu/machine/generic.c22
-rw-r--r--src/emu/machine/generic.h2
-rw-r--r--src/mame/drivers/appoooh.c10
-rw-r--r--src/mame/drivers/bagman.c28
-rw-r--r--src/mame/drivers/bankp.c10
-rw-r--r--src/mame/drivers/bombjack.c19
-rw-r--r--src/mame/drivers/carjmbre.c20
-rw-r--r--src/mame/drivers/cclimber.c29
-rw-r--r--src/mame/drivers/cheekyms.c11
-rw-r--r--src/mame/drivers/circusc.c17
-rw-r--r--src/mame/drivers/dkong.c24
-rw-r--r--src/mame/drivers/espial.c10
-rw-r--r--src/mame/drivers/fastfred.c41
-rw-r--r--src/mame/drivers/galaxold.c23
-rw-r--r--src/mame/drivers/gei.c18
-rw-r--r--src/mame/drivers/gng.c18
-rw-r--r--src/mame/drivers/gyruss.c37
-rw-r--r--src/mame/drivers/hyperspt.c19
-rw-r--r--src/mame/drivers/jrpacman.c17
-rw-r--r--src/mame/drivers/kyugo.c19
-rw-r--r--src/mame/drivers/lwings.c8
-rw-r--r--src/mame/drivers/m63.c25
-rw-r--r--src/mame/drivers/mainevt.c26
-rw-r--r--src/mame/drivers/marineb.c39
-rw-r--r--src/mame/drivers/mario.c20
-rw-r--r--src/mame/drivers/megazone.c19
-rw-r--r--src/mame/drivers/mermaid.c20
-rw-r--r--src/mame/drivers/mikie.c19
-rw-r--r--src/mame/drivers/mjkjidai.c9
-rw-r--r--src/mame/drivers/pacman.c60
-rw-r--r--src/mame/drivers/pbaction.c18
-rw-r--r--src/mame/drivers/pengo.c21
-rw-r--r--src/mame/drivers/popper.c21
-rw-r--r--src/mame/drivers/punchout.c19
-rw-r--r--src/mame/drivers/rocnrope.c19
-rw-r--r--src/mame/drivers/rollrace.c39
-rw-r--r--src/mame/drivers/sbasketb.c17
-rw-r--r--src/mame/drivers/shootout.c3
-rw-r--r--src/mame/drivers/slapfght.c17
-rw-r--r--src/mame/drivers/snk6502.c4
-rw-r--r--src/mame/drivers/solomon.c20
-rw-r--r--src/mame/drivers/spcforce.c19
-rw-r--r--src/mame/drivers/ssozumo.c20
-rw-r--r--src/mame/drivers/superqix.c30
-rw-r--r--src/mame/drivers/tagteam.c23
-rw-r--r--src/mame/drivers/tankbatt.c2
-rw-r--r--src/mame/drivers/tankbust.c24
-rw-r--r--src/mame/drivers/thepit.c20
-rw-r--r--src/mame/drivers/tmnt.c16
-rw-r--r--src/mame/drivers/tp84.c19
-rw-r--r--src/mame/drivers/trackfld.c68
-rw-r--r--src/mame/drivers/trucocl.c14
-rw-r--r--src/mame/drivers/vastar.c21
-rw-r--r--src/mame/drivers/wiping.c75
-rw-r--r--src/mame/drivers/wiz.c32
-rw-r--r--src/mame/drivers/yiear.c12
-rw-r--r--src/mame/drivers/zaccaria.c19
-rw-r--r--src/mame/etc/jrcrypt.c6
-rw-r--r--src/mame/includes/appoooh.h2
-rw-r--r--src/mame/includes/bagman.h2
-rw-r--r--src/mame/includes/bankp.h2
-rw-r--r--src/mame/includes/bombjack.h20
-rw-r--r--src/mame/includes/carjmbre.h2
-rw-r--r--src/mame/includes/cclimber.h1
-rw-r--r--src/mame/includes/cheekyms.h2
-rw-r--r--src/mame/includes/circusc.h2
-rw-r--r--src/mame/includes/dkong.h1
-rw-r--r--src/mame/includes/fastfred.h3
-rw-r--r--src/mame/includes/galaxold.h2
-rw-r--r--src/mame/includes/gyruss.h3
-rw-r--r--src/mame/includes/hyperspt.h2
-rw-r--r--src/mame/includes/kyugo.h2
-rw-r--r--src/mame/includes/lwings.h1
-rw-r--r--src/mame/includes/mainevt.h1
-rw-r--r--src/mame/includes/marineb.h2
-rw-r--r--src/mame/includes/mario.h2
-rw-r--r--src/mame/includes/megazone.h2
-rw-r--r--src/mame/includes/mermaid.h2
-rw-r--r--src/mame/includes/mikie.h2
-rw-r--r--src/mame/includes/mjkjidai.h2
-rw-r--r--src/mame/includes/pacman.h1
-rw-r--r--src/mame/includes/pbaction.h2
-rw-r--r--src/mame/includes/popper.h2
-rw-r--r--src/mame/includes/punchout.h2
-rw-r--r--src/mame/includes/rocnrope.h2
-rw-r--r--src/mame/includes/rollrace.h3
-rw-r--r--src/mame/includes/sbasketb.h2
-rw-r--r--src/mame/includes/slapfght.h1
-rw-r--r--src/mame/includes/snk6502.h2
-rw-r--r--src/mame/includes/solomon.h2
-rw-r--r--src/mame/includes/spcforce.h2
-rw-r--r--src/mame/includes/ssozumo.h2
-rw-r--r--src/mame/includes/superqix.h1
-rw-r--r--src/mame/includes/tagteam.h2
-rw-r--r--src/mame/includes/tankbust.h2
-rw-r--r--src/mame/includes/thepit.h1
-rw-r--r--src/mame/includes/tmnt.h2
-rw-r--r--src/mame/includes/tp84.h2
-rw-r--r--src/mame/includes/trackfld.h2
-rw-r--r--src/mame/includes/trucocl.h2
-rw-r--r--src/mame/includes/vastar.h2
-rw-r--r--src/mame/includes/wiping.h5
-rw-r--r--src/mame/includes/wiz.h1
-rw-r--r--src/mame/includes/yiear.h3
-rw-r--r--src/mame/includes/zaccaria.h1
-rw-r--r--src/mame/machine/slapfght.c8
-rw-r--r--src/mame/video/appoooh.c2
-rw-r--r--src/mame/video/bankp.c2
-rw-r--r--src/mame/video/cheekyms.c2
-rw-r--r--src/mame/video/mjkjidai.c2
-rw-r--r--src/mame/video/snk6502.c8
-rw-r--r--src/mame/video/superqix.c5
-rw-r--r--src/mame/video/tmnt.c2
-rw-r--r--src/mame/video/yiear.c2
114 files changed, 1083 insertions, 316 deletions
diff --git a/src/emu/machine/generic.c b/src/emu/machine/generic.c
index 3cac27e18f9..cc8d68bdb69 100644
--- a/src/emu/machine/generic.c
+++ b/src/emu/machine/generic.c
@@ -676,28 +676,6 @@ void cpu_interrupt_enable(device_t *device, int enabled)
}
-/*-------------------------------------------------
- interrupt_enable_w - set the global interrupt
- enable
--------------------------------------------------*/
-
-WRITE8_HANDLER( interrupt_enable_w )
-{
- cpu_interrupt_enable(&space->device(), data);
-}
-
-
-/*-------------------------------------------------
- interrupt_enable_r - read the global interrupt
- enable
--------------------------------------------------*/
-
-READ8_HANDLER( interrupt_enable_r )
-{
- return interrupt_enabled(&space->device());
-}
-
-
/***************************************************************************
INTERRUPT GENERATION CALLBACK HELPERS
diff --git a/src/emu/machine/generic.h b/src/emu/machine/generic.h
index 3cc006c5e5e..f932506856b 100644
--- a/src/emu/machine/generic.h
+++ b/src/emu/machine/generic.h
@@ -109,8 +109,6 @@ void set_led_status(running_machine &machine, int num, int value);
void generic_pulse_irq_line(device_t *device, int irqline);
void generic_pulse_irq_line_and_vector(device_t *device, int irqline, int vector);
void cpu_interrupt_enable(device_t *device, int enabled);
-READ8_HANDLER( interrupt_enable_r );
-WRITE8_HANDLER( interrupt_enable_w );
diff --git a/src/mame/drivers/appoooh.c b/src/mame/drivers/appoooh.c
index fac2bd69c35..8d33f7682cf 100644
--- a/src/mame/drivers/appoooh.c
+++ b/src/mame/drivers/appoooh.c
@@ -421,13 +421,21 @@ static MACHINE_RESET( appoooh )
state->m_priority = 0;
}
+static INTERRUPT_GEN( vblank_irq )
+{
+ appoooh_state *state = device->machine().driver_data<appoooh_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
static MACHINE_CONFIG_START( appoooh_common, appoooh_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80,18432000/6) /* ??? the main xtal is 18.432 MHz */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_IO_MAP(main_portmap)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_MACHINE_START(appoooh)
MCFG_MACHINE_RESET(appoooh)
diff --git a/src/mame/drivers/bagman.c b/src/mame/drivers/bagman.c
index 132994c3e1b..48a90c1b5c8 100644
--- a/src/mame/drivers/bagman.c
+++ b/src/mame/drivers/bagman.c
@@ -102,12 +102,11 @@ static WRITE8_HANDLER( bagman_coin_counter_w )
coin_counter_w(space->machine(), offset,data);
}
-static WRITE8_DEVICE_HANDLER( bagman_interrupt_w )
+static WRITE8_HANDLER( irq_mask_w )
{
- data &= 1;
- if (!data)
- device_set_input_line(device, 0, CLEAR_LINE);
- cpu_interrupt_enable(device, data);
+ bagman_state *state = space->machine().driver_data<bagman_state>();
+
+ state->m_irq_mask = data & 1;
}
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8 )
@@ -118,7 +117,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8 )
AM_RANGE(0x9c00, 0x9fff) AM_WRITENOP /* written to, but unused */
AM_RANGE(0xa000, 0xa000) AM_READ(bagman_pal16r6_r)
//AM_RANGE(0xa800, 0xa805) AM_READ(bagman_ls259_r) /*just for debugging purposes*/
- AM_RANGE(0xa000, 0xa000) AM_DEVWRITE("maincpu", bagman_interrupt_w)
+ AM_RANGE(0xa000, 0xa000) AM_WRITE(irq_mask_w)
AM_RANGE(0xa001, 0xa002) AM_WRITE(bagman_flipscreen_w)
AM_RANGE(0xa003, 0xa003) AM_WRITEONLY AM_BASE_MEMBER(bagman_state, m_video_enable)
AM_RANGE(0xc000, 0xffff) AM_ROM /* Super Bagman only */
@@ -148,7 +147,7 @@ static ADDRESS_MAP_START( pickin_map, AS_PROGRAM, 8 )
/* here only to initialize the pointer, */
/* writes are handled by bagman_colorram_w */
AM_RANGE(0x9c00, 0x9fff) AM_WRITENOP /* written to, but unused */
- AM_RANGE(0xa000, 0xa000) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xa000, 0xa000) AM_WRITE(irq_mask_w)
AM_RANGE(0xa001, 0xa002) AM_WRITE(bagman_flipscreen_w)
AM_RANGE(0xa003, 0xa003) AM_WRITEONLY AM_BASE_MEMBER(bagman_state, m_video_enable)
AM_RANGE(0xa004, 0xa004) AM_WRITE(bagman_coin_counter_w)
@@ -467,13 +466,22 @@ static const tms5110_interface bagman_tms5110_interface =
DEVCB_NULL /* rom clock - Only used to drive the data lines */
};
+static INTERRUPT_GEN( vblank_irq )
+{
+ bagman_state *state = device->machine().driver_data<bagman_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
+
static MACHINE_CONFIG_START( bagman, bagman_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, BAGMAN_H0)
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_IO_MAP(main_portmap)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_assert)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_MACHINE_RESET(bagman)
@@ -510,7 +518,7 @@ static MACHINE_CONFIG_START( pickin, bagman_state )
MCFG_CPU_ADD("maincpu", Z80, BAGMAN_H0)
MCFG_CPU_PROGRAM_MAP(pickin_map)
MCFG_CPU_IO_MAP(main_portmap)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_MACHINE_RESET(bagman)
@@ -563,7 +571,7 @@ static MACHINE_CONFIG_START( botanic, bagman_state )
MCFG_CPU_ADD("maincpu", Z80, BAGMAN_H0)
MCFG_CPU_PROGRAM_MAP(pickin_map)
MCFG_CPU_IO_MAP(main_portmap)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_MACHINE_RESET(bagman)
diff --git a/src/mame/drivers/bankp.c b/src/mame/drivers/bankp.c
index e681c02f3bc..0df49a86c2d 100644
--- a/src/mame/drivers/bankp.c
+++ b/src/mame/drivers/bankp.c
@@ -267,13 +267,21 @@ static MACHINE_RESET( bankp )
state->m_priority = 0;
}
+static INTERRUPT_GEN( vblank_irq )
+{
+ bankp_state *state = device->machine().driver_data<bankp_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
static MACHINE_CONFIG_START( bankp, bankp_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, BANKP_CPU_CLOCK)
MCFG_CPU_PROGRAM_MAP(bankp_map)
MCFG_CPU_IO_MAP(bankp_io_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_MACHINE_RESET(bankp)
diff --git a/src/mame/drivers/bombjack.c b/src/mame/drivers/bombjack.c
index edd13b0cc9b..a7f98eb1b6b 100644
--- a/src/mame/drivers/bombjack.c
+++ b/src/mame/drivers/bombjack.c
@@ -130,6 +130,13 @@ static READ8_HANDLER( bombjack_soundlatch_r )
*
*************************************/
+static WRITE8_HANDLER( irq_mask_w )
+{
+ bombjack_state *state = space->machine().driver_data<bombjack_state>();
+
+ state->m_nmi_mask = data & 1;
+}
+
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x8fff) AM_RAM
@@ -140,7 +147,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8 )
AM_RANGE(0x9c00, 0x9cff) AM_WRITE(paletteram_xxxxBBBBGGGGRRRR_le_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x9e00, 0x9e00) AM_WRITE(bombjack_background_w)
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("P1")
- AM_RANGE(0xb000, 0xb000) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xb000, 0xb000) AM_WRITE(irq_mask_w)
AM_RANGE(0xb001, 0xb001) AM_READ_PORT("P2")
AM_RANGE(0xb002, 0xb002) AM_READ_PORT("SYSTEM")
AM_RANGE(0xb003, 0xb003) AM_READNOP /* watchdog reset? */
@@ -344,12 +351,20 @@ static MACHINE_RESET( bombjack )
}
+static INTERRUPT_GEN( vblank_irq )
+{
+ bombjack_state *state = device->machine().driver_data<bombjack_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
static MACHINE_CONFIG_START( bombjack, bombjack_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_4MHz) /* Confirmed from PCB */
MCFG_CPU_PROGRAM_MAP(main_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80, XTAL_12MHz/4) /* Confirmed from PCB */
MCFG_CPU_PROGRAM_MAP(audio_map)
diff --git a/src/mame/drivers/carjmbre.c b/src/mame/drivers/carjmbre.c
index c42cb3f83be..5c3535db625 100644
--- a/src/mame/drivers/carjmbre.c
+++ b/src/mame/drivers/carjmbre.c
@@ -50,11 +50,19 @@ Notes:
*
*************************************/
+static WRITE8_HANDLER( nmi_mask_w )
+{
+ carjmbre_state *state = space->machine().driver_data<carjmbre_state>();
+
+ state->m_nmi_mask = data & 1;
+}
+
+
static ADDRESS_MAP_START( carjmbre_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM
// AM_RANGE(0x8800, 0x8800) AM_READNOP // watchdog?
- AM_RANGE(0x8803, 0x8803) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x8803, 0x8803) AM_WRITE(nmi_mask_w)
AM_RANGE(0x8805, 0x8805) AM_WRITE(carjmbre_bgcolor_w) // guessed
AM_RANGE(0x8806, 0x8806) AM_WRITE(carjmbre_8806_w) // video related?
AM_RANGE(0x8807, 0x8807) AM_WRITE(carjmbre_flipscreen_w)
@@ -184,12 +192,20 @@ static MACHINE_RESET( carjmbre )
state->m_bgcolor = 0;
}
+static INTERRUPT_GEN( vblank_irq )
+{
+ carjmbre_state *state = device->machine().driver_data<carjmbre_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
static MACHINE_CONFIG_START( carjmbre, carjmbre_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_18_432MHz/6)
MCFG_CPU_PROGRAM_MAP(carjmbre_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_MACHINE_RESET(carjmbre)
diff --git a/src/mame/drivers/cclimber.c b/src/mame/drivers/cclimber.c
index 3438d4c4686..bf4a629f20a 100644
--- a/src/mame/drivers/cclimber.c
+++ b/src/mame/drivers/cclimber.c
@@ -276,6 +276,13 @@ static MACHINE_RESET( cclimber )
}
+static WRITE8_HANDLER( nmi_mask_w )
+{
+ cclimber_state *state = space->machine().driver_data<cclimber_state>();
+
+ state->m_nmi_mask = data & 1;
+}
+
/* Note that River Patrol reads/writes to a000-a4f0. This is a bug in the code.
The instruction at 0x0593 should say LD DE,$8000 */
@@ -294,9 +301,9 @@ static ADDRESS_MAP_START( cclimber_map, AS_PROGRAM, 8 )
AM_RANGE(0x98dc, 0x98df) AM_RAM AM_BASE_MEMBER(cclimber_state, m_bigsprite_control)
AM_RANGE(0x9800, 0x9bff) AM_RAM /* not used, but initialized */
AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_BASE_MEMBER(cclimber_state, m_colorram)
- AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w)
AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_BASE_MEMBER(cclimber_state, m_flip_screen)
- AM_RANGE(0xa003, 0xa003) AM_WRITE(interrupt_enable_w) //used by Crazy Kong Bootleg with alt levels and speed up
+ AM_RANGE(0xa003, 0xa003) AM_WRITE(nmi_mask_w) //used by Crazy Kong Bootleg with alt levels and speed up
AM_RANGE(0xa004, 0xa004) AM_WRITE(cclimber_sample_trigger_w)
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2") AM_WRITE(cclimber_sample_rate_w)
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(cclimber_sample_volume_w)
@@ -318,7 +325,7 @@ static ADDRESS_MAP_START( cannonb_map, AS_PROGRAM, 8 )
AM_RANGE(0x98dc, 0x98df) AM_RAM AM_BASE_MEMBER(cclimber_state, m_bigsprite_control)
AM_RANGE(0x9800, 0x9bff) AM_RAM /* not used, but initialized */
AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_BASE_MEMBER(cclimber_state, m_colorram)
- AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w)
AM_RANGE(0xa001, 0xa002) AM_WRITE(cannonb_flip_screen_w) AM_BASE_MEMBER(cclimber_state, m_flip_screen)
AM_RANGE(0xa004, 0xa004) AM_WRITE(cclimber_sample_trigger_w)
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2") AM_WRITE(cclimber_sample_rate_w)
@@ -335,7 +342,7 @@ static ADDRESS_MAP_START( swimmer_map, AS_PROGRAM, 8 )
AM_RANGE(0x9880, 0x989f) AM_WRITEONLY AM_BASE_MEMBER(cclimber_state, m_spriteram)
AM_RANGE(0x98fc, 0x98ff) AM_WRITEONLY AM_BASE_MEMBER(cclimber_state, m_bigsprite_control)
AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_BASE_MEMBER(cclimber_state, m_colorram)
- AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2") AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2") AM_WRITE(nmi_mask_w)
AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_BASE_MEMBER(cclimber_state, m_flip_screen)
AM_RANGE(0xa003, 0xa003) AM_WRITEONLY AM_BASE_MEMBER(cclimber_state, m_swimmer_side_background_enabled)
AM_RANGE(0xa004, 0xa004) AM_WRITEONLY AM_BASE_MEMBER(cclimber_state, m_swimmer_palettebank)
@@ -361,7 +368,7 @@ static ADDRESS_MAP_START( yamato_map, AS_PROGRAM, 8 )
AM_RANGE(0x98dc, 0x98df) AM_RAM AM_BASE_MEMBER(cclimber_state, m_bigsprite_control)
AM_RANGE(0x9800, 0x9bff) AM_RAM /* not used, but initialized */
AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_BASE_MEMBER(cclimber_state, m_colorram)
- AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w)
AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_BASE_MEMBER(cclimber_state, m_flip_screen)
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2")
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW")
@@ -380,7 +387,7 @@ static ADDRESS_MAP_START( toprollr_map, AS_PROGRAM, 8 )
AM_RANGE(0x9880, 0x995f) AM_RAM AM_BASE_MEMBER(cclimber_state, m_spriteram)
AM_RANGE(0x99dc, 0x99df) AM_RAM AM_BASE_MEMBER(cclimber_state, m_bigsprite_control)
AM_RANGE(0x9c00, 0x9fff) AM_RAM AM_BASE_MEMBER(cclimber_state, m_colorram)
- AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w)
AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_BASE_MEMBER(cclimber_state, m_flip_screen)
AM_RANGE(0xa004, 0xa004) AM_WRITE(cclimber_sample_trigger_w)
AM_RANGE(0xa005, 0xa006) AM_WRITE(toprollr_rombank_w)
@@ -982,7 +989,13 @@ static GFXDECODE_START( toprollr )
GFXDECODE_ENTRY( "gfx3", 0x0000, cclimber_charlayout, 24*4, 16 )
GFXDECODE_END
+static INTERRUPT_GEN( vblank_irq )
+{
+ cclimber_state *state = device->machine().driver_data<cclimber_state>();
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
static MACHINE_CONFIG_START( root, cclimber_state )
@@ -990,7 +1003,7 @@ static MACHINE_CONFIG_START( root, cclimber_state )
MCFG_CPU_ADD("maincpu", Z80, MASTER_CLOCK/3/2) /* 3.072 MHz */
MCFG_CPU_PROGRAM_MAP(cclimber_map)
MCFG_CPU_IO_MAP(cclimber_portmap)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_MACHINE_RESET(cclimber)
@@ -1087,7 +1100,7 @@ static MACHINE_CONFIG_START( swimmer, cclimber_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_18_432MHz/6) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(swimmer_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80,XTAL_4MHz/2) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(swimmer_audio_map)
diff --git a/src/mame/drivers/cheekyms.c b/src/mame/drivers/cheekyms.c
index 2a77e7a353f..520de0a76a8 100644
--- a/src/mame/drivers/cheekyms.c
+++ b/src/mame/drivers/cheekyms.c
@@ -117,13 +117,22 @@ static MACHINE_START( cheekyms )
state->m_dac = machine.device("dac");
}
+static INTERRUPT_GEN( vblank_irq )
+{
+ cheekyms_state *state = device->machine().driver_data<cheekyms_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
+
static MACHINE_CONFIG_START( cheekyms, cheekyms_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80,5000000/2) /* 2.5 MHz */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_IO_MAP(io_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_MACHINE_START(cheekyms)
diff --git a/src/mame/drivers/circusc.c b/src/mame/drivers/circusc.c
index 63a2cbb5529..1275e120e68 100644
--- a/src/mame/drivers/circusc.c
+++ b/src/mame/drivers/circusc.c
@@ -143,11 +143,16 @@ static WRITE8_HANDLER(circusc_sound_w)
}
}
+static WRITE8_HANDLER( irq_mask_w )
+{
+ circusc_state *state = space->machine().driver_data<circusc_state>();
+ state->m_irq_mask = data & 1;
+}
static ADDRESS_MAP_START( circusc_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x0000) AM_MIRROR(0x03f8) AM_WRITE(circusc_flipscreen_w) /* FLIP */
- AM_RANGE(0x0001, 0x0001) AM_MIRROR(0x03f8) AM_WRITE(interrupt_enable_w) /* INTST */
+ AM_RANGE(0x0001, 0x0001) AM_MIRROR(0x03f8) AM_WRITE(irq_mask_w) /* INTST */
// AM_RANGE(0x0002, 0x0002) AM_MIRROR(0x03f8) AM_WRITENOP /* MUT - not used /*
AM_RANGE(0x0003, 0x0004) AM_MIRROR(0x03f8) AM_WRITE(circusc_coin_counter_w) /* COIN1, COIN2 */
AM_RANGE(0x0005, 0x0005) AM_MIRROR(0x03f8) AM_WRITEONLY AM_BASE_MEMBER(circusc_state, m_spritebank) /* OBJ CHENG */
@@ -331,12 +336,20 @@ static DISCRETE_SOUND_START( circusc )
DISCRETE_SOUND_END
+static INTERRUPT_GEN( vblank_irq )
+{
+ circusc_state *state = device->machine().driver_data<circusc_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
static MACHINE_CONFIG_START( circusc, circusc_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6809, 2048000) /* 2 MHz */
MCFG_CPU_PROGRAM_MAP(circusc_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_WATCHDOG_VBLANK_INIT(8)
MCFG_CPU_ADD("audiocpu", Z80,14318180/4) /* Z80 Clock is derived from a 14.31818 MHz crystal */
diff --git a/src/mame/drivers/dkong.c b/src/mame/drivers/dkong.c
index 3673a29887d..de7550fd8b3 100644
--- a/src/mame/drivers/dkong.c
+++ b/src/mame/drivers/dkong.c
@@ -765,6 +765,12 @@ static WRITE8_DEVICE_HANDLER( dkong_z80dma_rdy_w )
z80dma_rdy_w(device, data & 0x01);
}
+static WRITE8_HANDLER( nmi_mask_w )
+{
+ dkong_state *state = space->machine().driver_data<dkong_state>();
+
+ state->m_nmi_mask = data & 1;
+}
/*************************************
*
@@ -788,7 +794,7 @@ static ADDRESS_MAP_START( dkong_map, AS_PROGRAM, 8 )
AM_RANGE(0x7d81, 0x7d81) AM_WRITE(radarscp_grid_enable_w)
AM_RANGE(0x7d82, 0x7d82) AM_WRITE(dkong_flipscreen_w)
AM_RANGE(0x7d83, 0x7d83) AM_WRITE(dkong_spritebank_w) /* 2 PSL Signal */
- AM_RANGE(0x7d84, 0x7d84) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x7d84, 0x7d84) AM_WRITE(nmi_mask_w)
AM_RANGE(0x7d85, 0x7d85) AM_DEVWRITE("dma8257", p8257_drq_w) /* P8257 ==> /DRQ0 /DRQ1 */
AM_RANGE(0x7d86, 0x7d87) AM_WRITE(dkong_palettebank_w)
ADDRESS_MAP_END
@@ -812,7 +818,7 @@ static ADDRESS_MAP_START( dkongjr_map, AS_PROGRAM, 8 )
AM_RANGE(0x7d80, 0x7d80) AM_READ_PORT("DSW0") AM_WRITE(dkong_audio_irq_w) /* DSW0 */
AM_RANGE(0x7d82, 0x7d82) AM_WRITE(dkong_flipscreen_w)
AM_RANGE(0x7d83, 0x7d83) AM_WRITE(dkong_spritebank_w) /* 2 PSL Signal */
- AM_RANGE(0x7d84, 0x7d84) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x7d84, 0x7d84) AM_WRITE(nmi_mask_w)
AM_RANGE(0x7d85, 0x7d85) AM_DEVWRITE("dma8257", p8257_drq_w) /* P8257 ==> /DRQ0 /DRQ1 */
AM_RANGE(0x7d86, 0x7d87) AM_WRITE(dkong_palettebank_w)
AM_RANGE(0x7d80, 0x7d87) AM_DEVWRITE("ls259.5h", latch8_bit0_w) /* latch for sound and signals above*/
@@ -836,7 +842,7 @@ static ADDRESS_MAP_START( dkong3_map, AS_PROGRAM, 8 )
AM_RANGE(0x7e81, 0x7e81) AM_WRITE(dkong3_gfxbank_w)
AM_RANGE(0x7e82, 0x7e82) AM_WRITE(dkong_flipscreen_w)
AM_RANGE(0x7e83, 0x7e83) AM_WRITE(dkong_spritebank_w) /* 2 PSL Signal */
- AM_RANGE(0x7e84, 0x7e84) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x7e84, 0x7e84) AM_WRITE(nmi_mask_w)
AM_RANGE(0x7e85, 0x7e85) AM_DEVWRITE("z80dma", dkong_z80dma_rdy_w) /* ==> DMA Chip */
AM_RANGE(0x7e86, 0x7e87) AM_WRITE(dkong_palettebank_w)
AM_RANGE(0x8000, 0x9fff) AM_ROM /* DK3 and bootleg DKjr only */
@@ -1660,12 +1666,20 @@ static void braze_decrypt_rom(running_machine &machine, UINT8 *dest)
*
*************************************/
+static INTERRUPT_GEN( vblank_irq )
+{
+ dkong_state *state = device->machine().driver_data<dkong_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
static MACHINE_CONFIG_START( dkong_base, dkong_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, CLOCK_1H)
MCFG_CPU_PROGRAM_MAP(dkong_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_MACHINE_START(dkong2b)
MCFG_MACHINE_RESET(dkong)
@@ -1730,7 +1744,7 @@ static MACHINE_CONFIG_START( dkong3, dkong_state )
MCFG_CPU_ADD("maincpu", Z80, XTAL_8MHz / 2) /* verified in schematics */
MCFG_CPU_PROGRAM_MAP(dkong3_map)
MCFG_CPU_IO_MAP(dkong3_io_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_MACHINE_START(dkong3)
diff --git a/src/mame/drivers/espial.c b/src/mame/drivers/espial.c
index 8808ff2e018..1d3a34e67ac 100644
--- a/src/mame/drivers/espial.c
+++ b/src/mame/drivers/espial.c
@@ -66,14 +66,14 @@ static MACHINE_START( espial )
}
-static WRITE8_HANDLER( espial_master_interrupt_enable_w )
+static WRITE8_HANDLER( espial_master_interrupt_mask_w )
{
espial_state *state = space->machine().driver_data<espial_state>();
state->m_main_nmi_enabled = ~(data & 1);
}
-WRITE8_HANDLER( espial_sound_nmi_enable_w )
+WRITE8_HANDLER( espial_sound_nmi_mask_w )
{
espial_state *state = space->machine().driver_data<espial_state>();
state->m_sound_nmi_enabled = data & 1;
@@ -118,7 +118,7 @@ static ADDRESS_MAP_START( espial_map, AS_PROGRAM, 8 )
AM_RANGE(0x6084, 0x6084) AM_READ_PORT("IN2")
AM_RANGE(0x6090, 0x6090) AM_READWRITE(soundlatch2_r, espial_master_soundlatch_w)
AM_RANGE(0x7000, 0x7000) AM_READWRITE(watchdog_reset_r, watchdog_reset_w)
- AM_RANGE(0x7100, 0x7100) AM_WRITE(espial_master_interrupt_enable_w)
+ AM_RANGE(0x7100, 0x7100) AM_WRITE(espial_master_interrupt_mask_w)
AM_RANGE(0x7200, 0x7200) AM_WRITE(espial_flipscreen_w)
AM_RANGE(0x8000, 0x801f) AM_RAM AM_BASE_MEMBER(espial_state, m_spriteram_1)
AM_RANGE(0x8020, 0x803f) AM_READONLY
@@ -143,7 +143,7 @@ static ADDRESS_MAP_START( netwars_map, AS_PROGRAM, 8 )
AM_RANGE(0x6084, 0x6084) AM_READ_PORT("IN2")
AM_RANGE(0x6090, 0x6090) AM_READWRITE(soundlatch2_r, espial_master_soundlatch_w)
AM_RANGE(0x7000, 0x7000) AM_READWRITE(watchdog_reset_r, watchdog_reset_w)
- AM_RANGE(0x7100, 0x7100) AM_WRITE(espial_master_interrupt_enable_w)
+ AM_RANGE(0x7100, 0x7100) AM_WRITE(espial_master_interrupt_mask_w)
AM_RANGE(0x7200, 0x7200) AM_WRITE(espial_flipscreen_w)
AM_RANGE(0x8000, 0x801f) AM_RAM AM_BASE_MEMBER(espial_state, m_spriteram_1)
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(espial_videoram_w) AM_BASE_MEMBER(espial_state, m_videoram)
@@ -158,7 +158,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( espial_sound_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x2000, 0x23ff) AM_RAM
- AM_RANGE(0x4000, 0x4000) AM_WRITE(espial_sound_nmi_enable_w)
+ AM_RANGE(0x4000, 0x4000) AM_WRITE(espial_sound_nmi_mask_w)
AM_RANGE(0x6000, 0x6000) AM_READWRITE(soundlatch_r, soundlatch2_w)
ADDRESS_MAP_END
diff --git a/src/mame/drivers/fastfred.c b/src/mame/drivers/fastfred.c
index 3e1639a5b25..24780bbc187 100644
--- a/src/mame/drivers/fastfred.c
+++ b/src/mame/drivers/fastfred.c
@@ -166,6 +166,20 @@ static READ8_HANDLER( imago_sprites_offset_r )
return 0xff; //not really used
}
+static WRITE8_HANDLER( nmi_mask_w )
+{
+ fastfred_state *state = space->machine().driver_data<fastfred_state>();
+
+ state->m_nmi_mask = data & 1;
+}
+
+static WRITE8_HANDLER( sound_nmi_mask_w )
+{
+ fastfred_state *state = space->machine().driver_data<fastfred_state>();
+
+ state->m_sound_nmi_mask = data & 1;
+}
+
static ADDRESS_MAP_START( fastfred_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xc7ff) AM_RAM
@@ -176,7 +190,7 @@ static ADDRESS_MAP_START( fastfred_map, AS_PROGRAM, 8 )
AM_RANGE(0xe000, 0xe000) AM_READ_PORT("BUTTONS") AM_WRITEONLY AM_BASE_MEMBER(fastfred_state, m_background_color)
AM_RANGE(0xe800, 0xe800) AM_READ_PORT("JOYS")
AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW") AM_WRITENOP
- AM_RANGE(0xf001, 0xf001) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xf001, 0xf001) AM_WRITE(nmi_mask_w)
AM_RANGE(0xf002, 0xf002) AM_WRITE(fastfred_colorbank1_w)
AM_RANGE(0xf003, 0xf003) AM_WRITE(fastfred_colorbank2_w)
AM_RANGE(0xf004, 0xf004) AM_WRITE(fastfred_charbank1_w)
@@ -202,7 +216,7 @@ static ADDRESS_MAP_START( jumpcoas_map, AS_PROGRAM, 8 )
AM_RANGE(0xe802, 0xe802) AM_READ_PORT("BUTTONS")
AM_RANGE(0xe803, 0xe803) AM_READ_PORT("JOYS")
AM_RANGE(0xf000, 0xf000) AM_WRITENOP // Unused, but initialized
- AM_RANGE(0xf001, 0xf001) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xf001, 0xf001) AM_WRITE(nmi_mask_w)
AM_RANGE(0xf002, 0xf002) AM_WRITE(fastfred_colorbank1_w)
AM_RANGE(0xf003, 0xf003) AM_WRITE(fastfred_colorbank2_w)
AM_RANGE(0xf004, 0xf004) AM_WRITE(fastfred_charbank1_w)
@@ -231,7 +245,7 @@ static ADDRESS_MAP_START( imago_map, AS_PROGRAM, 8 )
AM_RANGE(0xe000, 0xe000) AM_READ_PORT("BUTTONS")
AM_RANGE(0xe800, 0xe800) AM_READ_PORT("JOYS")
AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW") AM_WRITENOP // writes 1 when level starts, 0 when game over
- AM_RANGE(0xf001, 0xf001) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xf001, 0xf001) AM_WRITE(nmi_mask_w)
AM_RANGE(0xf002, 0xf002) AM_WRITE(fastfred_colorbank1_w)
AM_RANGE(0xf003, 0xf003) AM_WRITE(fastfred_colorbank2_w)
AM_RANGE(0xf004, 0xf004) AM_WRITE(imago_dma_irq_w)
@@ -246,7 +260,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x2000, 0x23ff) AM_RAM
- AM_RANGE(0x3000, 0x3000) AM_READWRITE(soundlatch_r, interrupt_enable_w)
+ AM_RANGE(0x3000, 0x3000) AM_READWRITE(soundlatch_r, sound_nmi_mask_w)
AM_RANGE(0x4000, 0x4000) AM_WRITEONLY // Reset PSG's
AM_RANGE(0x5000, 0x5001) AM_DEVWRITE("ay8910.1", ay8910_address_data_w)
AM_RANGE(0x6000, 0x6001) AM_DEVWRITE("ay8910.2", ay8910_address_data_w)
@@ -618,17 +632,32 @@ GFXDECODE_END
#define CLOCK 18432000 /* The crystal is 18.432MHz */
+static INTERRUPT_GEN( vblank_irq )
+{
+ fastfred_state *state = device->machine().driver_data<fastfred_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
+static INTERRUPT_GEN( sound_timer_irq )
+{
+ fastfred_state *state = device->machine().driver_data<fastfred_state>();
+
+ if(state->m_sound_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
static MACHINE_CONFIG_START( fastfred, fastfred_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, CLOCK/6) /* 3.072 MHz */
MCFG_CPU_PROGRAM_MAP(fastfred_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80, CLOCK/12) /* 1.536 MHz */
MCFG_CPU_PROGRAM_MAP(sound_map)
- MCFG_CPU_PERIODIC_INT(nmi_line_pulse,4*60)
+ MCFG_CPU_PERIODIC_INT(sound_timer_irq,4*60)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/galaxold.c b/src/mame/drivers/galaxold.c
index 37d95e1a0a9..d9a9122f6d4 100644
--- a/src/mame/drivers/galaxold.c
+++ b/src/mame/drivers/galaxold.c
@@ -762,13 +762,20 @@ static ADDRESS_MAP_START( ozon1_io_map, AS_IO, 8 )
ADDRESS_MAP_END
+static WRITE8_HANDLER( harem_nmi_mask_w )
+{
+ galaxold_state *state = space->machine().driver_data<galaxold_state>();
+
+ state->m_nmi_mask = data & 1;
+}
+
static ADDRESS_MAP_START( harem_cpu1, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x2000, 0x27ff) AM_RAM
AM_RANGE(0x4000, 0x47ff) AM_RAM
AM_RANGE(0x4800, 0x4fff) AM_READWRITE(galaxold_videoram_r, galaxold_videoram_w) AM_BASE_MEMBER(galaxold_state, m_videoram)
AM_RANGE(0x5000, 0x5000) AM_WRITENOP
- AM_RANGE(0x5800, 0x5800) AM_READNOP AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x5800, 0x5800) AM_READNOP AM_WRITE(harem_nmi_mask_w)
AM_RANGE(0x5801, 0x5807) AM_WRITENOP
AM_RANGE(0x6101, 0x6101) AM_READ_PORT("IN0")
AM_RANGE(0x6102, 0x6102) AM_READ_PORT("IN1")
@@ -2335,12 +2342,20 @@ static MACHINE_CONFIG_DERIVED( hunchbkg, galaxold_base )
MCFG_FRAGMENT_ADD(galaxian_audio)
MACHINE_CONFIG_END
+static INTERRUPT_GEN( vblank_irq )
+{
+ galaxold_state *state = device->machine().driver_data<galaxold_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
static MACHINE_CONFIG_DERIVED( harem, galaxold_base )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(harem_cpu1)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80, 1620000) //?
MCFG_CPU_PROGRAM_MAP(harem_cpu2)
@@ -2892,13 +2907,13 @@ ROM_END
ROM_START( harem )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "p0_ic85.bin", 0x0000, 0x2000, CRC(4521b753) SHA1(9033f9c3be8fec1e5ff251e9f60faaf3848a1a1e) )
- ROM_LOAD( "p1_ic87.bin", 0x8000, 0x2000, BAD_DUMP CRC(3cc5d1e8) SHA1(827e2d20de2a00ec016ead249ed3afdccd0c856c) )
+ ROM_LOAD( "p1_ic87.bin", 0x8000, 0x2000, BAD_DUMP CRC(3cc5d1e8) SHA1(827e2d20de2a00ec016ead249ed3afdccd0c856c) ) // encrypted?
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "s1_ic12.bin", 0x0000, 0x2000, CRC(b54799dd) SHA1(b6aeb010257cba48a52afd33b4f8031c7d99550c) )
ROM_LOAD( "s2_ic13.bin", 0x2000, 0x1000, CRC(2d5573a4) SHA1(1fdcd99d89e078509634742b2116a35bb199fe4b) )
- ROM_REGION( 0x2000, "unknown", 0 )
+ ROM_REGION( 0x2000, "unknown", 0 ) /* TMS-based ROM? */
ROM_LOAD( "a1_ic25.bin", 0x0000, 0x2000, CRC(279f923a) SHA1(166b1b625997766f0de7cc18af52c42268022fcb) )
ROM_REGION( 0x4000, "gfx1", 0 )
diff --git a/src/mame/drivers/gei.c b/src/mame/drivers/gei.c
index 90cbefdcb41..2616ded57a1 100644
--- a/src/mame/drivers/gei.c
+++ b/src/mame/drivers/gei.c
@@ -85,6 +85,7 @@ public:
int m_yadd;
int m_signature_answer;
int m_signature_pos;
+ UINT8 m_nmi_mask;
};
@@ -157,6 +158,7 @@ static WRITE8_DEVICE_HANDLER( lamps_w )
static WRITE8_DEVICE_HANDLER( sound_w )
{
address_space *space = device->machine().device("maincpu")->memory().space(AS_PROGRAM);
+ gei_state *state = space->machine().driver_data<gei_state>();
/* bit 3 - coin lockout, lamp10 in poker / lamp6 in trivia test modes */
coin_lockout_global_w(device->machine(), ~data & 0x08);
@@ -166,7 +168,7 @@ static WRITE8_DEVICE_HANDLER( sound_w )
ticket_dispenser_w(device->machine().device("ticket"), 0, (data & 0x20)<< 2);
/* bit 6 enables NMI */
- interrupt_enable_w(space, 0, data & 0x40);
+ state->m_nmi_mask = data & 0x40;
/* bit 7 goes directly to the sound amplifier */
dac_data_w(device->machine().device("dac"), ((data & 0x80) >> 7) * 255);
@@ -198,12 +200,13 @@ static WRITE8_DEVICE_HANDLER( lamps2_w )
static WRITE8_DEVICE_HANDLER( nmi_w )
{
address_space *space = device->machine().device("maincpu")->memory().space(AS_PROGRAM);
+ gei_state *state = space->machine().driver_data<gei_state>();
/* bit 4 - play/raise button lamp, lamp 9 in selection test mode */
set_led_status(device->machine(), 8,data & 0x10);
/* bit 6 enables NMI */
- interrupt_enable_w(space, 0, data & 0x40);
+ state->m_nmi_mask = data & 0x40;
}
static READ8_HANDLER( catchall )
@@ -1063,10 +1066,19 @@ static const ppi8255_interface findout_ppi8255_intf[2] =
}
};
+static INTERRUPT_GEN( vblank_irq )
+{
+ gei_state *state = device->machine().driver_data<gei_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
+
static MACHINE_CONFIG_START( getrivia, gei_state )
MCFG_CPU_ADD("maincpu",Z80,4000000) /* 4 MHz */
MCFG_CPU_PROGRAM_MAP(getrivia_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/gng.c b/src/mame/drivers/gng.c
index cf02619d1e2..645420a19df 100644
--- a/src/mame/drivers/gng.c
+++ b/src/mame/drivers/gng.c
@@ -320,6 +320,24 @@ static MACHINE_RESET( gng )
state->m_scrollx[1] = 0;
state->m_scrolly[0] = 0;
state->m_scrolly[1] = 0;
+
+ {
+ int i;
+
+ /* TODO: PCB reference clearly shows that the POST has random/filled data on the paletteram.
+ For now let's fill everything with white colors until we have better info about it */
+ for(i=0;i<0x100;i+=4)
+ {
+ machine.generic.paletteram.u8[i] = machine.generic.paletteram2.u8[i] = 0x00;
+ machine.generic.paletteram.u8[i+1] = machine.generic.paletteram2.u8[i+1] = 0x55;
+ machine.generic.paletteram.u8[i+2] = machine.generic.paletteram2.u8[i+2] = 0xaa;
+ machine.generic.paletteram.u8[i+3] = machine.generic.paletteram2.u8[i+3] = 0xff;
+ palette_set_color_rgb(machine,i+0,0x00,0x00,0x00);
+ palette_set_color_rgb(machine,i+1,0x55,0x55,0x55);
+ palette_set_color_rgb(machine,i+2,0xaa,0xaa,0xaa);
+ palette_set_color_rgb(machine,i+3,0xff,0xff,0xff);
+ }
+ }
}
static MACHINE_CONFIG_START( gng, gng_state )
diff --git a/src/mame/drivers/gyruss.c b/src/mame/drivers/gyruss.c
index 567346922b7..566e2510cd9 100644
--- a/src/mame/drivers/gyruss.c
+++ b/src/mame/drivers/gyruss.c
@@ -143,6 +143,19 @@ static WRITE8_HANDLER( gyruss_i8039_irq_w )
device_set_input_line(state->m_audiocpu_2, 0, ASSERT_LINE);
}
+static WRITE8_HANDLER( master_nmi_mask_w )
+{
+ gyruss_state *state = space->machine().driver_data<gyruss_state>();
+
+ state->m_master_nmi_mask = data & 1;
+}
+
+static WRITE8_HANDLER( slave_irq_mask_w )
+{
+ gyruss_state *state = space->machine().driver_data<gyruss_state>();
+
+ state->m_slave_irq_mask = data & 1;
+}
static ADDRESS_MAP_START( main_cpu1_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
@@ -156,13 +169,13 @@ static ADDRESS_MAP_START( main_cpu1_map, AS_PROGRAM, 8 )
AM_RANGE(0xc0c0, 0xc0c0) AM_READ_PORT("P2")
AM_RANGE(0xc0e0, 0xc0e0) AM_READ_PORT("DSW1")
AM_RANGE(0xc100, 0xc100) AM_READ_PORT("DSW3") AM_WRITE(soundlatch_w)
- AM_RANGE(0xc180, 0xc180) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xc180, 0xc180) AM_WRITE(master_nmi_mask_w)
AM_RANGE(0xc185, 0xc185) AM_WRITEONLY AM_BASE_MEMBER(gyruss_state, m_flipscreen)
ADDRESS_MAP_END
static ADDRESS_MAP_START( main_cpu2_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x0000) AM_READ(gyruss_scanline_r)
- AM_RANGE(0x2000, 0x2000) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x2000, 0x2000) AM_WRITE(slave_irq_mask_w)
AM_RANGE(0x4000, 0x403f) AM_RAM
AM_RANGE(0x4040, 0x40ff) AM_RAM_WRITE(gyruss_spriteram_w) AM_BASE_MEMBER(gyruss_state, m_spriteram)
AM_RANGE(0x4100, 0x47ff) AM_RAM
@@ -505,16 +518,32 @@ static MACHINE_START( gyruss )
state->m_audiocpu_2 = machine.device<cpu_device>("audio2");
}
+static INTERRUPT_GEN( master_vblank_irq )
+{
+ gyruss_state *state = device->machine().driver_data<gyruss_state>();
+
+ if(state->m_master_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
+static INTERRUPT_GEN( slave_vblank_irq )
+{
+ gyruss_state *state = device->machine().driver_data<gyruss_state>();
+
+ if(state->m_slave_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
static MACHINE_CONFIG_START( gyruss, gyruss_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, 3072000) /* 3.072 MHz (?) */
MCFG_CPU_PROGRAM_MAP(main_cpu1_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", master_vblank_irq)
MCFG_CPU_ADD("sub", M6809, 2000000) /* 2 MHz ??? */
MCFG_CPU_PROGRAM_MAP(main_cpu2_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", slave_vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80,14318180/4) /* 3.579545 MHz */
MCFG_CPU_PROGRAM_MAP(audio_cpu1_map)
diff --git a/src/mame/drivers/hyperspt.c b/src/mame/drivers/hyperspt.c
index d00b266ce78..e24699bc63d 100644
--- a/src/mame/drivers/hyperspt.c
+++ b/src/mame/drivers/hyperspt.c
@@ -26,6 +26,12 @@ static WRITE8_HANDLER( hyperspt_coin_counter_w )
coin_counter_w(space->machine(), offset, data);
}
+static WRITE8_HANDLER( irq_mask_w )
+{
+ hyperspt_state *state = space->machine().driver_data<hyperspt_state>();
+
+ state->m_irq_mask = data & 1;
+}
static ADDRESS_MAP_START( hyperspt_map, AS_PROGRAM, 8 )
AM_RANGE(0x1000, 0x10bf) AM_RAM AM_BASE_SIZE_MEMBER(hyperspt_state, m_spriteram, m_spriteram_size)
@@ -34,7 +40,7 @@ static ADDRESS_MAP_START( hyperspt_map, AS_PROGRAM, 8 )
AM_RANGE(0x1480, 0x1480) AM_WRITE(hyperspt_flipscreen_w)
AM_RANGE(0x1481, 0x1481) AM_WRITE(konami_sh_irqtrigger_w) /* cause interrupt on audio CPU */
AM_RANGE(0x1483, 0x1484) AM_WRITE(hyperspt_coin_counter_w)
- AM_RANGE(0x1487, 0x1487) AM_WRITE(interrupt_enable_w) /* Interrupt enable */
+ AM_RANGE(0x1487, 0x1487) AM_WRITE(irq_mask_w) /* Interrupt enable */
AM_RANGE(0x1500, 0x1500) AM_WRITE(soundlatch_w)
AM_RANGE(0x1600, 0x1600) AM_READ_PORT("DSW2")
AM_RANGE(0x1680, 0x1680) AM_READ_PORT("SYSTEM")
@@ -55,7 +61,7 @@ static ADDRESS_MAP_START( roadf_map, AS_PROGRAM, 8 )
AM_RANGE(0x1480, 0x1480) AM_WRITE(hyperspt_flipscreen_w)
AM_RANGE(0x1481, 0x1481) AM_WRITE(konami_sh_irqtrigger_w) /* cause interrupt on audio CPU */
AM_RANGE(0x1483, 0x1484) AM_WRITE(hyperspt_coin_counter_w)
- AM_RANGE(0x1487, 0x1487) AM_WRITE(interrupt_enable_w) /* Interrupt enable */
+ AM_RANGE(0x1487, 0x1487) AM_WRITE(irq_mask_w) /* Interrupt enable */
AM_RANGE(0x1500, 0x1500) AM_WRITE(soundlatch_w)
AM_RANGE(0x1600, 0x1600) AM_READ_PORT("DSW2")
AM_RANGE(0x1680, 0x1680) AM_READ_PORT("SYSTEM")
@@ -267,6 +273,13 @@ static GFXDECODE_START( roadf )
GFXDECODE_ENTRY( "gfx2", 0, roadf_charlayout, 16*16, 16 )
GFXDECODE_END
+static INTERRUPT_GEN( vblank_irq )
+{
+ hyperspt_state *state = device->machine().driver_data<hyperspt_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
static MACHINE_CONFIG_START( hyperspt, hyperspt_state )
@@ -274,7 +287,7 @@ static MACHINE_CONFIG_START( hyperspt, hyperspt_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6809, XTAL_18_432MHz/12) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(hyperspt_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80,XTAL_14_31818MHz/4) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(sound_map)
diff --git a/src/mame/drivers/jrpacman.c b/src/mame/drivers/jrpacman.c
index 0a46f70d5de..9db7a6530be 100644
--- a/src/mame/drivers/jrpacman.c
+++ b/src/mame/drivers/jrpacman.c
@@ -119,7 +119,12 @@ static WRITE8_HANDLER( jrpacman_interrupt_vector_w )
cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
}
+static WRITE8_HANDLER( irq_mask_w )
+{
+ jrpacman_state *state = space->machine().driver_data<jrpacman_state>();
+ state->m_irq_mask = data & 1;
+}
/*************************************
*
@@ -133,7 +138,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8 )
AM_RANGE(0x4800, 0x4fef) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
AM_RANGE(0x5000, 0x503f) AM_READ_PORT("P1")
- AM_RANGE(0x5000, 0x5000) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x5000, 0x5000) AM_WRITE(irq_mask_w)
AM_RANGE(0x5001, 0x5001) AM_DEVWRITE("namco", pacman_sound_enable_w)
AM_RANGE(0x5003, 0x5003) AM_WRITE(pacman_flipscreen_w)
AM_RANGE(0x5040, 0x507f) AM_READ_PORT("P2")
@@ -272,13 +277,21 @@ static const namco_interface namco_config =
*
*************************************/
+static INTERRUPT_GEN( vblank_irq )
+{
+ jrpacman_state *state = device->machine().driver_data<jrpacman_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
static MACHINE_CONFIG_START( jrpacman, jrpacman_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, 18432000/6) /* 3.072 MHz */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_IO_MAP(port_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/kyugo.c b/src/mame/drivers/kyugo.c
index 31f192acce3..270ea0ddcf0 100644
--- a/src/mame/drivers/kyugo.c
+++ b/src/mame/drivers/kyugo.c
@@ -67,10 +67,17 @@ ADDRESS_MAP_END
*
*************************************/
+static WRITE8_HANDLER( nmi_mask_w )
+{
+ kyugo_state *state = space->machine().driver_data<kyugo_state>();
+
+ state->m_nmi_mask = data & 1;
+}
+
#define Main_PortMap( name, base ) \
static ADDRESS_MAP_START( name##_portmap, AS_IO, 8 ) \
ADDRESS_MAP_GLOBAL_MASK(0xff) \
- AM_RANGE(base+0, base+0) AM_WRITE(interrupt_enable_w) \
+ AM_RANGE(base+0, base+0) AM_WRITE(nmi_mask_w) \
AM_RANGE(base+1, base+1) AM_WRITE(kyugo_flipscreen_w) \
AM_RANGE(base+2, base+2) AM_WRITE(kyugo_sub_cpu_control_w) \
ADDRESS_MAP_END
@@ -477,6 +484,14 @@ static MACHINE_RESET( kyugo )
state->m_flipscreen = 0;
}
+static INTERRUPT_GEN( vblank_irq )
+{
+ kyugo_state *state = device->machine().driver_data<kyugo_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
static MACHINE_CONFIG_START( gyrodine, kyugo_state )
@@ -484,7 +499,7 @@ static MACHINE_CONFIG_START( gyrodine, kyugo_state )
MCFG_CPU_ADD("maincpu", Z80, XTAL_18_432MHz/6) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_IO_MAP(gyrodine_portmap)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("sub", Z80, XTAL_18_432MHz/6) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(gyrodine_sub_map)
diff --git a/src/mame/drivers/lwings.c b/src/mame/drivers/lwings.c
index 04afef3db9e..e51e4573b35 100644
--- a/src/mame/drivers/lwings.c
+++ b/src/mame/drivers/lwings.c
@@ -74,6 +74,8 @@ static READ8_HANDLER( avengers_adpcm_r )
static WRITE8_HANDLER( lwings_bankswitch_w )
{
+ lwings_state *state = space->machine().driver_data<lwings_state>();
+
/* bit 0 is flip screen */
flip_screen_set(space->machine(), ~data & 0x01);
@@ -81,7 +83,7 @@ static WRITE8_HANDLER( lwings_bankswitch_w )
memory_set_bank(space->machine(), "bank1", (data & 0x06) >> 1);
/* bit 3 enables NMI */
- interrupt_enable_w(space, 0, data & 0x08);
+ state->m_nmi_mask = data & 8;
/* bits 6 and 7 are coin counters */
coin_counter_w(space->machine(), 1, data & 0x40);
@@ -90,7 +92,9 @@ static WRITE8_HANDLER( lwings_bankswitch_w )
static INTERRUPT_GEN( lwings_interrupt )
{
- if (interrupt_enable_r(device->memory().space(AS_PROGRAM), 0))
+ lwings_state *state = device->machine().driver_data<lwings_state>();
+
+ if(state->m_nmi_mask)
device_set_input_line_and_vector(device, 0, HOLD_LINE, 0xd7); /* RST 10h */
}
diff --git a/src/mame/drivers/m63.c b/src/mame/drivers/m63.c
index 743b87cf93e..fcda7760651 100644
--- a/src/mame/drivers/m63.c
+++ b/src/mame/drivers/m63.c
@@ -134,6 +134,8 @@ public:
UINT8 * m_scrollram;
size_t m_spriteram_size;
+ UINT8 m_nmi_mask;
+
/* video-related */
tilemap_t *m_bg_tilemap;
tilemap_t *m_fg_tilemap;
@@ -434,6 +436,14 @@ static WRITE8_HANDLER( fghtbskt_samples_w )
sample_start_raw(state->m_samples, 0, state->m_samplebuf + ((data & 0xf0) << 8), 0x2000, 8000, 0);
}
+static WRITE8_HANDLER( nmi_mask_w )
+{
+ m63_state *state = space->machine().driver_data<m63_state>();
+
+ state->m_nmi_mask = data & 1;
+}
+
+
static ADDRESS_MAP_START( m63_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xd000, 0xdfff) AM_RAM
@@ -443,7 +453,7 @@ static ADDRESS_MAP_START( m63_map, AS_PROGRAM, 8 )
AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(m63_videoram2_w) AM_BASE_MEMBER(m63_state, m_videoram2)
AM_RANGE(0xe800, 0xebff) AM_RAM_WRITE(m63_videoram_w) AM_BASE_MEMBER(m63_state, m_videoram)
AM_RANGE(0xec00, 0xefff) AM_RAM_WRITE(m63_colorram_w) AM_BASE_MEMBER(m63_state, m_colorram)
- AM_RANGE(0xf000, 0xf000) AM_WRITE(interrupt_enable_w) /* NMI enable */
+ AM_RANGE(0xf000, 0xf000) AM_WRITE(nmi_mask_w)
AM_RANGE(0xf002, 0xf002) AM_WRITE(m63_flipscreen_w)
AM_RANGE(0xf003, 0xf003) AM_WRITE(m63_palbank_w)
AM_RANGE(0xf006, 0xf007) AM_WRITE(coin_w)
@@ -472,7 +482,7 @@ static ADDRESS_MAP_START( fghtbskt_map, AS_PROGRAM, 8 )
AM_RANGE(0xf001, 0xf001) AM_WRITENOP
AM_RANGE(0xf002, 0xf002) AM_WRITE(soundlatch_w)
AM_RANGE(0xf800, 0xf800) AM_WRITENOP
- AM_RANGE(0xf801, 0xf801) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xf801, 0xf801) AM_WRITE(nmi_mask_w)
AM_RANGE(0xf802, 0xf802) AM_WRITE(fghtbskt_flipscreen_w)
AM_RANGE(0xf803, 0xf803) AM_WRITENOP
AM_RANGE(0xf804, 0xf804) AM_WRITENOP
@@ -734,12 +744,21 @@ static MACHINE_RESET( m63 )
state->m_p2 = 0;
}
+
+static INTERRUPT_GEN( vblank_irq )
+{
+ m63_state *state = device->machine().driver_data<m63_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
static MACHINE_CONFIG_START( m63, m63_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu",Z80,XTAL_12MHz/4) /* 3 MHz */
MCFG_CPU_PROGRAM_MAP(m63_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("soundcpu",I8039,XTAL_12MHz/4) /* ????? */
MCFG_CPU_PROGRAM_MAP(i8039_map)
diff --git a/src/mame/drivers/mainevt.c b/src/mame/drivers/mainevt.c
index b0abcfb04e6..1559e8e2e37 100644
--- a/src/mame/drivers/mainevt.c
+++ b/src/mame/drivers/mainevt.c
@@ -100,12 +100,14 @@ static WRITE8_HANDLER( mainevt_sh_irqcontrol_w )
upd7759_reset_w(state->m_upd, data & 2);
upd7759_start_w(state->m_upd, data & 1);
- interrupt_enable_w(space, 0, data & 4);
+ state->m_sound_irq_mask = data & 4;
}
static WRITE8_HANDLER( devstor_sh_irqcontrol_w )
{
- interrupt_enable_w(space, 0, data & 4);
+ mainevt_state *state = space->machine().driver_data<mainevt_state>();
+
+ state->m_sound_irq_mask = data & 4;
}
static WRITE8_HANDLER( mainevt_sh_bankswitch_w )
@@ -439,6 +441,22 @@ static MACHINE_RESET( mainevt )
state->m_nmi_enable = 0;
}
+static INTERRUPT_GEN( mainevt_sound_timer_irq )
+{
+ mainevt_state *state = device->machine().driver_data<mainevt_state>();
+
+ if(state->m_sound_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
+static INTERRUPT_GEN( devstors_sound_timer_irq )
+{
+ mainevt_state *state = device->machine().driver_data<mainevt_state>();
+
+ if(state->m_sound_irq_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
static MACHINE_CONFIG_START( mainevt, mainevt_state )
/* basic machine hardware */
@@ -448,7 +466,7 @@ static MACHINE_CONFIG_START( mainevt, mainevt_state )
MCFG_CPU_ADD("audiocpu", Z80, 3579545) /* 3.579545 MHz */
MCFG_CPU_PROGRAM_MAP(mainevt_sound_map)
- MCFG_CPU_PERIODIC_INT(nmi_line_pulse,8*60) /* ??? */
+ MCFG_CPU_PERIODIC_INT(mainevt_sound_timer_irq,8*60) /* ??? */
MCFG_MACHINE_START(mainevt)
MCFG_MACHINE_RESET(mainevt)
@@ -509,7 +527,7 @@ static MACHINE_CONFIG_START( devstors, mainevt_state )
MCFG_CPU_ADD("audiocpu", Z80, 3579545) /* 3.579545 MHz */
MCFG_CPU_PROGRAM_MAP(devstors_sound_map)
- MCFG_CPU_PERIODIC_INT(irq0_line_hold,4*60) /* ??? */
+ MCFG_CPU_PERIODIC_INT(devstors_sound_timer_irq,4*60) /* ??? */
MCFG_MACHINE_START(mainevt)
MCFG_MACHINE_RESET(mainevt)
diff --git a/src/mame/drivers/marineb.c b/src/mame/drivers/marineb.c
index 77b8cf420a0..6921fd09ab1 100644
--- a/src/mame/drivers/marineb.c
+++ b/src/mame/drivers/marineb.c
@@ -41,13 +41,6 @@ write
#include "includes/marineb.h"
-static TIMER_CALLBACK( interrupt_disable )
-{
- marineb_state *state = machine.driver_data<marineb_state>();
- //interrupt_enable = 0;
- cpu_interrupt_enable(state->m_maincpu, 0);
-}
-
static MACHINE_RESET( marineb )
{
marineb_state *state = machine.driver_data<marineb_state>();
@@ -57,9 +50,6 @@ static MACHINE_RESET( marineb )
state->m_flipscreen_x = 0;
state->m_flipscreen_y = 0;
state->m_marineb_active_low_flipscreen = 0;
-
- /* we must start with NMI interrupts disabled */
- machine.scheduler().synchronize(FUNC(interrupt_disable));
}
static MACHINE_RESET( springer )
@@ -81,6 +71,13 @@ static MACHINE_START( marineb )
state->save_item(NAME(state->m_marineb_active_low_flipscreen));
}
+static WRITE8_HANDLER( irq_mask_w )
+{
+ marineb_state *state = space->machine().driver_data<marineb_state>();
+
+ state->m_irq_mask = data & 1;
+}
+
static ADDRESS_MAP_START( marineb_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM
@@ -90,7 +87,7 @@ static ADDRESS_MAP_START( marineb_map, AS_PROGRAM, 8 )
AM_RANGE(0x9800, 0x9800) AM_WRITE(marineb_column_scroll_w)
AM_RANGE(0x9a00, 0x9a00) AM_WRITE(marineb_palette_bank_0_w)
AM_RANGE(0x9c00, 0x9c00) AM_WRITE(marineb_palette_bank_1_w)
- AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2") AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2") AM_WRITE(irq_mask_w)
AM_RANGE(0xa001, 0xa001) AM_WRITE(marineb_flipscreen_y_w)
AM_RANGE(0xa002, 0xa002) AM_WRITE(marineb_flipscreen_x_w)
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P1")
@@ -530,6 +527,22 @@ static GFXDECODE_START( hopprobo )
GFXDECODE_ENTRY( "gfx2", 0x0000, marineb_big_spritelayout, 0, 64 )
GFXDECODE_END
+static INTERRUPT_GEN( marineb_vblank_irq )
+{
+ marineb_state *state = device->machine().driver_data<marineb_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
+static INTERRUPT_GEN( wanted_vblank_irq )
+{
+ marineb_state *state = device->machine().driver_data<marineb_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
static MACHINE_CONFIG_START( marineb, marineb_state )
@@ -537,7 +550,7 @@ static MACHINE_CONFIG_START( marineb, marineb_state )
MCFG_CPU_ADD("maincpu", Z80, 3072000) /* 3.072 MHz */
MCFG_CPU_PROGRAM_MAP(marineb_map)
MCFG_CPU_IO_MAP(marineb_io_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", marineb_vblank_irq)
MCFG_MACHINE_START(marineb)
MCFG_MACHINE_RESET(marineb)
@@ -602,7 +615,7 @@ static MACHINE_CONFIG_DERIVED( wanted, marineb )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_IO_MAP(wanted_io_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", wanted_vblank_irq)
/* video hardware */
MCFG_GFXDECODE(wanted)
diff --git a/src/mame/drivers/mario.c b/src/mame/drivers/mario.c
index 8a238d61fe1..6822c161b52 100644
--- a/src/mame/drivers/mario.c
+++ b/src/mame/drivers/mario.c
@@ -120,6 +120,12 @@ static WRITE8_DEVICE_HANDLER( mario_z80dma_rdy_w )
z80dma_rdy_w(device, data & 0x01);
}
+static WRITE8_HANDLER( nmi_mask_w )
+{
+ mario_state *state = space->machine().driver_data<mario_state>();
+
+ state->m_nmi_mask = data & 1;
+}
/*************************************
*
@@ -138,7 +144,7 @@ static ADDRESS_MAP_START( mario_map, AS_PROGRAM, 8 )
AM_RANGE(0x7e80, 0x7e80) AM_WRITE(mario_gfxbank_w)
AM_RANGE(0x7e82, 0x7e82) AM_WRITE(mario_flip_w)
AM_RANGE(0x7e83, 0x7e83) AM_WRITE(mario_palettebank_w)
- AM_RANGE(0x7e84, 0x7e84) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x7e84, 0x7e84) AM_WRITE(nmi_mask_w)
AM_RANGE(0x7e85, 0x7e85) AM_DEVWRITE("z80dma", mario_z80dma_rdy_w) /* ==> DMA Chip */
AM_RANGE(0x7f00, 0x7f07) AM_WRITE(mario_sh3_w) /* Sound port */
AM_RANGE(0x7f80, 0x7f80) AM_READ_PORT("DSW") /* DSW */
@@ -158,7 +164,7 @@ static ADDRESS_MAP_START( masao_map, AS_PROGRAM, 8 )
AM_RANGE(0x7e80, 0x7e80) AM_WRITE(mario_gfxbank_w)
AM_RANGE(0x7e82, 0x7e82) AM_WRITE(mario_flip_w)
AM_RANGE(0x7e83, 0x7e83) AM_WRITE(mario_palettebank_w)
- AM_RANGE(0x7e84, 0x7e84) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x7e84, 0x7e84) AM_WRITE(nmi_mask_w)
AM_RANGE(0x7e85, 0x7e85) AM_DEVWRITE("z80dma", mario_z80dma_rdy_w) /* ==> DMA Chip */
AM_RANGE(0x7f00, 0x7f00) AM_WRITE(masao_sh_irqtrigger_w)
AM_RANGE(0x7f80, 0x7f80) AM_READ_PORT("DSW") /* DSW */
@@ -317,13 +323,21 @@ GFXDECODE_END
*
*************************************/
+static INTERRUPT_GEN( vblank_irq )
+{
+ mario_state *state = device->machine().driver_data<mario_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
static MACHINE_CONFIG_START( mario_base, mario_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, Z80_CLOCK) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(mario_map)
MCFG_CPU_IO_MAP(mario_io_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
/* devices */
MCFG_Z80DMA_ADD("z80dma", Z80_CLOCK, mario_dma)
diff --git a/src/mame/drivers/megazone.c b/src/mame/drivers/megazone.c
index 61f441cb7f2..6c2161d3549 100644
--- a/src/mame/drivers/megazone.c
+++ b/src/mame/drivers/megazone.c
@@ -76,12 +76,18 @@ static WRITE8_HANDLER( megazone_coin_counter_w )
coin_counter_w(space->machine(), 1 - offset, data); /* 1-offset, because coin counters are in reversed order */
}
+static WRITE8_HANDLER( irq_mask_w )
+{
+ megazone_state *state = space->machine().driver_data<megazone_state>();
+
+ state->m_irq_mask = data & 1;
+}
static ADDRESS_MAP_START( megazone_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x0001) AM_WRITE(megazone_coin_counter_w) /* coin counter 2, coin counter 1 */
AM_RANGE(0x0005, 0x0005) AM_WRITE(megazone_flipscreen_w)
- AM_RANGE(0x0007, 0x0007) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x0007, 0x0007) AM_WRITE(irq_mask_w)
AM_RANGE(0x0800, 0x0800) AM_WRITE(watchdog_reset_w)
AM_RANGE(0x1000, 0x1000) AM_WRITEONLY AM_BASE_MEMBER(megazone_state, m_scrolly)
AM_RANGE(0x1800, 0x1800) AM_WRITEONLY AM_BASE_MEMBER(megazone_state, m_scrollx)
@@ -244,12 +250,21 @@ static MACHINE_RESET( megazone )
state->m_i8039_status = 0;
}
+static INTERRUPT_GEN( vblank_irq )
+{
+ megazone_state *state = device->machine().driver_data<megazone_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
+
static MACHINE_CONFIG_START( megazone, megazone_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6809, 18432000/9) /* 2 MHz */
MCFG_CPU_PROGRAM_MAP(megazone_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80,18432000/6) /* Z80 Clock is derived from the H1 signal */
MCFG_CPU_PROGRAM_MAP(megazone_sound_map)
diff --git a/src/mame/drivers/mermaid.c b/src/mame/drivers/mermaid.c
index ccae38980a3..92219f2b109 100644
--- a/src/mame/drivers/mermaid.c
+++ b/src/mame/drivers/mermaid.c
@@ -136,6 +136,14 @@ static WRITE8_HANDLER( mermaid_ay8910_control_port_w )
if (state->m_ay8910_enable[1]) ay8910_address_w(state->m_ay2, offset, data);
}
+
+static WRITE8_HANDLER( nmi_mask_w )
+{
+ mermaid_state *state = space->machine().driver_data<mermaid_state>();
+
+ state->m_nmi_mask = data & 1;
+}
+
/* Memory Map */
static ADDRESS_MAP_START( mermaid_map, AS_PROGRAM, 8 )
@@ -152,7 +160,7 @@ static ADDRESS_MAP_START( mermaid_map, AS_PROGRAM, 8 )
AM_RANGE(0xe002, 0xe004) AM_WRITENOP // ???
AM_RANGE(0xe005, 0xe005) AM_WRITE(mermaid_flip_screen_x_w)
AM_RANGE(0xe006, 0xe006) AM_WRITE(mermaid_flip_screen_y_w)
- AM_RANGE(0xe007, 0xe007) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xe007, 0xe007) AM_WRITE(nmi_mask_w)
AM_RANGE(0xe800, 0xe800) AM_READ_PORT("P1") AM_WRITENOP // ???
AM_RANGE(0xe801, 0xe801) AM_WRITENOP // ???
AM_RANGE(0xe802, 0xe802) AM_WRITENOP // ???
@@ -439,12 +447,20 @@ static const msm5205_interface msm5205_config =
};
+static INTERRUPT_GEN( vblank_irq )
+{
+ mermaid_state *state = device->machine().driver_data<mermaid_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
static MACHINE_CONFIG_START( mermaid, mermaid_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, 4000000) // ???
MCFG_CPU_PROGRAM_MAP(mermaid_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_MACHINE_START(mermaid)
MCFG_MACHINE_RESET(mermaid)
diff --git a/src/mame/drivers/mikie.c b/src/mame/drivers/mikie.c
index c680924462c..51a1dfca825 100644
--- a/src/mame/drivers/mikie.c
+++ b/src/mame/drivers/mikie.c
@@ -83,6 +83,13 @@ static WRITE8_HANDLER( mikie_coin_counter_w )
coin_counter_w(space->machine(), offset, data);
}
+static WRITE8_HANDLER( irq_mask_w )
+{
+ mikie_state *state = space->machine().driver_data<mikie_state>();
+
+ state->m_irq_mask = data & 1;
+}
+
/*************************************
*
* Address maps
@@ -94,7 +101,7 @@ static ADDRESS_MAP_START( mikie_map, AS_PROGRAM, 8 )
AM_RANGE(0x2000, 0x2001) AM_WRITE(mikie_coin_counter_w)
AM_RANGE(0x2002, 0x2002) AM_WRITE(mikie_sh_irqtrigger_w)
AM_RANGE(0x2006, 0x2006) AM_WRITE(mikie_flipscreen_w)
- AM_RANGE(0x2007, 0x2007) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x2007, 0x2007) AM_WRITE(irq_mask_w)
AM_RANGE(0x2100, 0x2100) AM_WRITE(watchdog_reset_w)
AM_RANGE(0x2200, 0x2200) AM_WRITE(mikie_palettebank_w)
AM_RANGE(0x2300, 0x2300) AM_WRITENOP // ???
@@ -244,12 +251,20 @@ static MACHINE_RESET( mikie )
state->m_last_irq = 0;
}
+static INTERRUPT_GEN( vblank_irq )
+{
+ mikie_state *state = device->machine().driver_data<mikie_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
static MACHINE_CONFIG_START( mikie, mikie_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6809, OSC/12)
MCFG_CPU_PROGRAM_MAP(mikie_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80, CLK)
MCFG_CPU_PROGRAM_MAP(sound_map)
diff --git a/src/mame/drivers/mjkjidai.c b/src/mame/drivers/mjkjidai.c
index 61740ffe742..9780bdcbda9 100644
--- a/src/mame/drivers/mjkjidai.c
+++ b/src/mame/drivers/mjkjidai.c
@@ -371,6 +371,13 @@ static GFXDECODE_START( mjkjidai )
GFXDECODE_ENTRY( "gfx1", 0, spritelayout, 0, 16 )
GFXDECODE_END
+static INTERRUPT_GEN( vblank_irq )
+{
+ mjkjidai_state *state = device->machine().driver_data<mjkjidai_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
static MACHINE_CONFIG_START( mjkjidai, mjkjidai_state )
@@ -378,7 +385,7 @@ static MACHINE_CONFIG_START( mjkjidai, mjkjidai_state )
MCFG_CPU_ADD("maincpu", Z80,10000000/2) /* 5 MHz ??? */
MCFG_CPU_PROGRAM_MAP(mjkjidai_map)
MCFG_CPU_IO_MAP(mjkjidai_io_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_NVRAM_HANDLER(mjkjidai)
diff --git a/src/mame/drivers/pacman.c b/src/mame/drivers/pacman.c
index ab0d6732f37..99bb5e344b5 100644
--- a/src/mame/drivers/pacman.c
+++ b/src/mame/drivers/pacman.c
@@ -875,6 +875,13 @@ static WRITE8_HANDLER( mspacman_enable_decode_w ) { mspacman_enable_deco
*
*************************************/
+static WRITE8_HANDLER( irq_mask_w )
+{
+ pacman_state *state = space->machine().driver_data<pacman_state>();
+
+ state->m_irq_mask = data & 1;
+}
+
static ADDRESS_MAP_START( pacman_map, AS_PROGRAM, 8 )
//A lot of games don't have an a15 at the cpu. Generally only games with a cpu daughter board can access the full 32k of romspace.
AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x8000) AM_ROM
@@ -883,7 +890,7 @@ static ADDRESS_MAP_START( pacman_map, AS_PROGRAM, 8 )
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
- AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", pacman_sound_enable_w)
AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
@@ -910,8 +917,8 @@ static ADDRESS_MAP_START( birdiy_map, AS_PROGRAM, 8 )
// AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
-// AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(interrupt_enable_w)
- AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", pacman_sound_enable_w)
+ AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
+// AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", pacman_sound_enable_w)
// AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
// AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
@@ -934,7 +941,7 @@ static ADDRESS_MAP_START( mspacman_map, AS_PROGRAM, 8 )
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
- AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", pacman_sound_enable_w)
AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
@@ -974,7 +981,7 @@ static ADDRESS_MAP_START( woodpek_map, AS_PROGRAM, 8 )
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
- AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", pacman_sound_enable_w)
AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
@@ -1012,7 +1019,7 @@ static ADDRESS_MAP_START( alibaba_map, AS_PROGRAM, 8 )
AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_WRITENOP
AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", pacman_sound_enable_w)
AM_RANGE(0x50c1, 0x50c1) AM_MIRROR(0xaf00) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x50c2, 0x50c2) AM_MIRROR(0xaf00) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x50c2, 0x50c2) AM_MIRROR(0xaf00) AM_WRITE(irq_mask_w)
AM_RANGE(0x50c3, 0x50ff) AM_MIRROR(0xaf00) AM_WRITENOP
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf3f) AM_READ_PORT("IN0") /* IN0 */
AM_RANGE(0x5040, 0x5040) AM_MIRROR(0xaf3f) AM_READ_PORT("IN1") /* IN1 */
@@ -1032,7 +1039,7 @@ static ADDRESS_MAP_START( dremshpr_map, AS_PROGRAM, 8 )
AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_BASE_MEMBER(pacman_state, m_colorram)
AM_RANGE(0x4800, 0x4fef) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
- AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
// AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", pacman_sound_enable_w)
AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP /* unknown */
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
@@ -1063,7 +1070,7 @@ static ADDRESS_MAP_START( epos_map, AS_PROGRAM, 8 )
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
- AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", pacman_sound_enable_w)
AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
@@ -1117,7 +1124,7 @@ static ADDRESS_MAP_START( rocktrv2_map, AS_PROGRAM, 8 )
AM_RANGE(0x4000, 0x43ff) AM_RAM_WRITE(pacman_videoram_w) AM_BASE_MEMBER(pacman_state, m_videoram)
AM_RANGE(0x4400, 0x47ff) AM_RAM_WRITE(pacman_colorram_w) AM_BASE_MEMBER(pacman_state, m_colorram)
AM_RANGE(0x4c00, 0x4fff) AM_RAM
- AM_RANGE(0x5000, 0x5000) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x5000, 0x5000) AM_WRITE(irq_mask_w)
AM_RANGE(0x5001, 0x5001) AM_DEVWRITE("namco", pacman_sound_enable_w)
AM_RANGE(0x5003, 0x5003) AM_WRITE(pacman_flipscreen_w)
AM_RANGE(0x5007, 0x5007) AM_WRITE(pacman_coin_counter_w)
@@ -1144,7 +1151,7 @@ static ADDRESS_MAP_START( bigbucks_map, AS_PROGRAM, 8 )
AM_RANGE(0x4000, 0x43ff) AM_RAM_WRITE(pacman_videoram_w) AM_BASE_MEMBER(pacman_state, m_videoram)
AM_RANGE(0x4400, 0x47ff) AM_RAM_WRITE(pacman_colorram_w) AM_BASE_MEMBER(pacman_state, m_colorram)
AM_RANGE(0x4c00, 0x4fff) AM_RAM
- AM_RANGE(0x5000, 0x5000) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x5000, 0x5000) AM_WRITE(irq_mask_w)
AM_RANGE(0x5001, 0x5001) AM_DEVWRITE("namco", pacman_sound_enable_w)
AM_RANGE(0x5003, 0x5003) AM_WRITE(pacman_flipscreen_w)
AM_RANGE(0x5007, 0x5007) AM_WRITENOP /*?*/
@@ -1167,7 +1174,7 @@ static ADDRESS_MAP_START( mschamp_map, AS_PROGRAM, 8 )
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
- AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", pacman_sound_enable_w)
AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
@@ -1194,7 +1201,7 @@ static ADDRESS_MAP_START( crushs_map, AS_PROGRAM, 8 )
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
- AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", pacman_sound_enable_w)
AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
@@ -3130,13 +3137,29 @@ static const namco_interface namco_config =
*
*************************************/
+static INTERRUPT_GEN( vblank_irq )
+{
+ pacman_state *state = device->machine().driver_data<pacman_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
+static INTERRUPT_GEN( vblank_nmi )
+{
+ pacman_state *state = device->machine().driver_data<pacman_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
static MACHINE_CONFIG_START( pacman, pacman_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, MASTER_CLOCK/6)
MCFG_CPU_PROGRAM_MAP(pacman_map)
MCFG_CPU_IO_MAP(writeport)
- MCFG_CPU_VBLANK_INT("screen",irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen",vblank_irq)
MCFG_WATCHDOG_VBLANK_INIT(16)
/* video hardware */
@@ -3209,7 +3232,6 @@ static MACHINE_CONFIG_DERIVED( alibaba, pacman )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(alibaba_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
MACHINE_CONFIG_END
@@ -3219,7 +3241,7 @@ static MACHINE_CONFIG_DERIVED( dremshpr, pacman )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(dremshpr_map)
MCFG_CPU_IO_MAP(dremshpr_portmap)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_nmi)
/* sound hardware */
MCFG_SOUND_REPLACE("namco", AY8910, 14318000/8)
@@ -3257,7 +3279,7 @@ static MACHINE_CONFIG_DERIVED( vanvan, pacman )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(dremshpr_map)
MCFG_CPU_IO_MAP(vanvan_portmap)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_nmi)
/* video hardware */
MCFG_SCREEN_MODIFY("screen")
@@ -3277,7 +3299,7 @@ static MACHINE_CONFIG_DERIVED( bigbucks, pacman )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(bigbucks_map)
MCFG_CPU_IO_MAP(bigbucks_portmap)
- MCFG_CPU_PERIODIC_INT(irq0_line_hold,20*60)
+ MCFG_CPU_PERIODIC_INT(vblank_irq,20*60)
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1)
@@ -3350,7 +3372,7 @@ static MACHINE_CONFIG_DERIVED( mschamp, pacman )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(mschamp_map)
MCFG_CPU_IO_MAP(mschamp_portmap)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_MACHINE_RESET(mschamp)
MACHINE_CONFIG_END
@@ -5860,7 +5882,7 @@ GAME( 1982, ctrpllrp, puckman, pacman, pacman, 0, ROT90, "hack", "C
GAME( 1982, eyes, 0, pacman, eyes, eyes, ROT90, "Digitrex Techstar (Rock-Ola license)", "Eyes (Digitrex Techstar)", GAME_SUPPORTS_SAVE )
GAME( 1982, eyes2, eyes, pacman, eyes, eyes, ROT90, "Techstar (Rock-Ola license)", "Eyes (Techstar)", GAME_SUPPORTS_SAVE )
GAME( 1982, eyeszac, eyes, pacman, eyes, 0, ROT90, "bootleg (Zaccaria)", "Eyes (Zaccaria)", GAME_SUPPORTS_SAVE )
-GAME( 1983, birdiy, 0, birdiy, pacman, 0, ROT270, "Mama Top", "Birdiy", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_SOUND | GAME_WRONG_COLORS ) // missing proms
+GAME( 1983, birdiy, 0, birdiy, pacman, 0, ROT270, "Mama Top", "Birdiy", GAME_SUPPORTS_SAVE | GAME_WRONG_COLORS ) // missing proms
GAME( 1983, mrtnt, 0, pacman, mrtnt, eyes, ROT90, "Techstar (Telko license)", "Mr. TNT", GAME_SUPPORTS_SAVE )
GAME( 1983, gorkans, mrtnt, pacman, mrtnt, 0, ROT90, "Techstar", "Gorkans", GAME_SUPPORTS_SAVE )
GAME( 1983, eggor, 0, pacman, mrtnt, eyes, ROT90, "Telko", "Eggor", GAME_WRONG_COLORS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/pbaction.c b/src/mame/drivers/pbaction.c
index 76618009aa0..4a7140ac371 100644
--- a/src/mame/drivers/pbaction.c
+++ b/src/mame/drivers/pbaction.c
@@ -78,6 +78,12 @@ static WRITE8_HANDLER( pbaction_sh_command_w )
device_set_input_line_and_vector(state->m_audiocpu, 0, HOLD_LINE, 0x00);
}
+static WRITE8_HANDLER( nmi_mask_w )
+{
+ pbaction_state *state = space->machine().driver_data<pbaction_state>();
+
+ state->m_nmi_mask = data & 1;
+}
static ADDRESS_MAP_START( pbaction_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
@@ -89,7 +95,7 @@ static ADDRESS_MAP_START( pbaction_map, AS_PROGRAM, 8 )
AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(pbaction_colorram_w) AM_BASE_MEMBER(pbaction_state, m_colorram)
AM_RANGE(0xe000, 0xe07f) AM_RAM AM_BASE_SIZE_MEMBER(pbaction_state, m_spriteram, m_spriteram_size)
AM_RANGE(0xe400, 0xe5ff) AM_RAM_WRITE(paletteram_xxxxBBBBGGGGRRRR_le_w) AM_BASE_GENERIC(paletteram)
- AM_RANGE(0xe600, 0xe600) AM_READ_PORT("P1") AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xe600, 0xe600) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w)
AM_RANGE(0xe601, 0xe601) AM_READ_PORT("P2")
AM_RANGE(0xe602, 0xe602) AM_READ_PORT("SYSTEM")
AM_RANGE(0xe604, 0xe604) AM_READ_PORT("DSW1") AM_WRITE(pbaction_flipscreen_w)
@@ -269,12 +275,20 @@ static MACHINE_RESET( pbaction )
state->m_scroll = 0;
}
+static INTERRUPT_GEN( vblank_irq )
+{
+ pbaction_state *state = device->machine().driver_data<pbaction_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
static MACHINE_CONFIG_START( pbaction, pbaction_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, 4000000) /* 4 MHz? */
MCFG_CPU_PROGRAM_MAP(pbaction_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80, 3072000)
MCFG_CPU_PROGRAM_MAP(pbaction_sound_map)
diff --git a/src/mame/drivers/pengo.c b/src/mame/drivers/pengo.c
index 425d1b22012..2ffee382ca5 100644
--- a/src/mame/drivers/pengo.c
+++ b/src/mame/drivers/pengo.c
@@ -110,6 +110,12 @@ static WRITE8_HANDLER( pengo_coin_counter_w )
coin_counter_w(space->machine(), offset, data & 1);
}
+static WRITE8_HANDLER( irq_mask_w )
+{
+ pengo_state *state = space->machine().driver_data<pengo_state>();
+
+ state->m_irq_mask = data & 1;
+}
static ADDRESS_MAP_START( pengo_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
@@ -121,7 +127,7 @@ static ADDRESS_MAP_START( pengo_map, AS_PROGRAM, 8 )
AM_RANGE(0x9020, 0x902f) AM_WRITEONLY AM_BASE_GENERIC(spriteram2)
AM_RANGE(0x9000, 0x903f) AM_READ_PORT("DSW1")
AM_RANGE(0x9040, 0x907f) AM_READ_PORT("DSW0")
- AM_RANGE(0x9040, 0x9040) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x9040, 0x9040) AM_WRITE(irq_mask_w)
AM_RANGE(0x9041, 0x9041) AM_DEVWRITE("namco", pacman_sound_enable_w)
AM_RANGE(0x9042, 0x9042) AM_WRITE(pengo_palettebank_w)
AM_RANGE(0x9043, 0x9043) AM_WRITE(pacman_flipscreen_w)
@@ -143,7 +149,7 @@ static ADDRESS_MAP_START( jrpacmbl_map, AS_PROGRAM, 8 )
AM_RANGE(0x9020, 0x902f) AM_WRITEONLY AM_BASE_GENERIC(spriteram2)
AM_RANGE(0x9030, 0x9030) AM_WRITE(jrpacman_scroll_w)
AM_RANGE(0x9040, 0x904f) AM_READ_PORT("DSW")
- AM_RANGE(0x9040, 0x9040) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x9040, 0x9040) AM_WRITE(irq_mask_w)
AM_RANGE(0x9041, 0x9041) AM_DEVWRITE("namco", pacman_sound_enable_w)
AM_RANGE(0x9042, 0x9042) AM_WRITE(pengo_palettebank_w)
AM_RANGE(0x9043, 0x9043) AM_WRITE(pacman_flipscreen_w)
@@ -359,12 +365,21 @@ static const namco_interface namco_config =
*
*************************************/
+static INTERRUPT_GEN( vblank_irq )
+{
+ pengo_state *state = device->machine().driver_data<pengo_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
+
static MACHINE_CONFIG_START( pengo, pengo_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, MASTER_CLOCK/6)
MCFG_CPU_PROGRAM_MAP(pengo_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
/* video hardware */
MCFG_GFXDECODE(pengo)
diff --git a/src/mame/drivers/popper.c b/src/mame/drivers/popper.c
index dc08f3dc5a0..037db1f971e 100644
--- a/src/mame/drivers/popper.c
+++ b/src/mame/drivers/popper.c
@@ -145,6 +145,14 @@ static READ8_HANDLER( popper_soundcpu_nmi_r )
return 0;
}
+static WRITE8_HANDLER( nmi_mask_w )
+{
+ popper_state *state = space->machine().driver_data<popper_state>();
+
+ state->m_nmi_mask = data & 1;
+}
+
+
/*************************************
*
* Memory maps
@@ -163,7 +171,7 @@ static ADDRESS_MAP_START( popper_map, AS_PROGRAM, 8 )
AM_RANGE(0xd000, 0xd7ff) AM_RAM AM_BASE_SIZE_MEMBER(popper_state, m_spriteram, m_spriteram_size)
AM_RANGE(0xd800, 0xdfff) AM_RAM AM_SHARE("share1")
AM_RANGE(0xe000, 0xe007) AM_READ(popper_input_ports_r)
- AM_RANGE(0xe000, 0xe000) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xe000, 0xe000) AM_WRITE(nmi_mask_w)
AM_RANGE(0xe001, 0xe001) AM_WRITE(popper_flipscreen_w)
AM_RANGE(0xe002, 0xe002) AM_WRITE(popper_e002_w) //?? seems to be graphic related
AM_RANGE(0xe003, 0xe003) AM_WRITE(popper_gfx_bank_w)
@@ -324,12 +332,21 @@ static MACHINE_RESET( popper )
state->m_gfx_bank = 0;
}
+static INTERRUPT_GEN( vblank_irq )
+{
+ popper_state *state = device->machine().driver_data<popper_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
+
static MACHINE_CONFIG_START( popper, popper_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80,18432000/6)
MCFG_CPU_PROGRAM_MAP(popper_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80,18432000/12)
MCFG_CPU_PROGRAM_MAP(popper_sound_map)
diff --git a/src/mame/drivers/punchout.c b/src/mame/drivers/punchout.c
index 2f50e93b817..ae67a413e4e 100644
--- a/src/mame/drivers/punchout.c
+++ b/src/mame/drivers/punchout.c
@@ -341,6 +341,12 @@ static ADDRESS_MAP_START( armwrest_map, AS_PROGRAM, 8 )
AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(punchout_bg_top_videoram_w) AM_BASE_MEMBER(punchout_state, m_bg_top_videoram)
ADDRESS_MAP_END
+static WRITE8_HANDLER( nmi_mask_w )
+{
+ punchout_state *state = space->machine().driver_data<punchout_state>();
+
+ state->m_nmi_mask = data & 1;
+}
static ADDRESS_MAP_START( punchout_io_map, AS_IO, 8 )
ADDRESS_MAP_GLOBAL_MASK(0xff)
@@ -352,7 +358,7 @@ static ADDRESS_MAP_START( punchout_io_map, AS_IO, 8 )
AM_RANGE(0x04, 0x04) AM_DEVWRITE("vlm", vlm5030_data_w) /* VLM5030 */
// AM_RANGE(0x05, 0x05) AM_WRITENOP /* unused */
// AM_RANGE(0x06, 0x06) AM_WRITENOP
- AM_RANGE(0x08, 0x08) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x08, 0x08) AM_WRITE(nmi_mask_w)
AM_RANGE(0x09, 0x09) AM_WRITENOP /* watchdog reset, seldom used because 08 clears the watchdog as well */
AM_RANGE(0x0a, 0x0a) AM_WRITENOP /* ?? */
AM_RANGE(0x0b, 0x0b) AM_WRITE(punchout_2a03_reset_w)
@@ -923,6 +929,15 @@ static MACHINE_RESET( punchout )
memset(state->m_rp5c01_mem, 0, sizeof(state->m_rp5c01_mem));
}
+static INTERRUPT_GEN( vblank_irq )
+{
+ punchout_state *state = device->machine().driver_data<punchout_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
+
static MACHINE_CONFIG_START( punchout, punchout_state )
@@ -930,7 +945,7 @@ static MACHINE_CONFIG_START( punchout, punchout_state )
MCFG_CPU_ADD("maincpu", Z80, 8000000/2) /* 4 MHz */
MCFG_CPU_PROGRAM_MAP(punchout_map)
MCFG_CPU_IO_MAP(punchout_io_map)
- MCFG_CPU_VBLANK_INT("top", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("top", vblank_irq)
MCFG_CPU_ADD("audiocpu", N2A03, N2A03_DEFAULTCLOCK)
MCFG_CPU_PROGRAM_MAP(punchout_sound_map)
diff --git a/src/mame/drivers/rocnrope.c b/src/mame/drivers/rocnrope.c
index 03dc1530168..2cc13aa2a74 100644
--- a/src/mame/drivers/rocnrope.c
+++ b/src/mame/drivers/rocnrope.c
@@ -30,6 +30,12 @@ static WRITE8_HANDLER( rocnrope_interrupt_vector_w )
RAM[0xfff2 + offset] = data;
}
+static WRITE8_HANDLER( irq_mask_w )
+{
+ rocnrope_state *state = space->machine().driver_data<rocnrope_state>();
+
+ state->m_irq_mask = data & 1;
+}
/*************************************
*
@@ -56,7 +62,7 @@ static ADDRESS_MAP_START( rocnrope_map, AS_PROGRAM, 8 )
AM_RANGE(0x8082, 0x8082) AM_WRITENOP /* interrupt acknowledge??? */
AM_RANGE(0x8083, 0x8083) AM_WRITENOP /* Coin counter 1 */
AM_RANGE(0x8084, 0x8084) AM_WRITENOP /* Coin counter 2 */
- AM_RANGE(0x8087, 0x8087) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x8087, 0x8087) AM_WRITE(irq_mask_w)
AM_RANGE(0x8100, 0x8100) AM_WRITE(soundlatch_w)
AM_RANGE(0x8182, 0x818d) AM_WRITE(rocnrope_interrupt_vector_w)
AM_RANGE(0x6000, 0xffff) AM_ROM
@@ -184,12 +190,21 @@ GFXDECODE_END
*
*************************************/
+static INTERRUPT_GEN( vblank_irq )
+{
+ rocnrope_state *state = device->machine().driver_data<rocnrope_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
+
static MACHINE_CONFIG_START( rocnrope, rocnrope_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6809, MASTER_CLOCK / 3 / 4) /* Verified in schematics */
MCFG_CPU_PROGRAM_MAP(rocnrope_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/rollrace.c b/src/mame/drivers/rollrace.c
index 9768f27d594..c48669aa501 100644
--- a/src/mame/drivers/rollrace.c
+++ b/src/mame/drivers/rollrace.c
@@ -22,6 +22,21 @@ static WRITE8_HANDLER( ra_fake_d800_w )
/* logerror("d900: %02X\n",data);*/
}
+static WRITE8_HANDLER( nmi_mask_w )
+{
+ rollrace_state *state = space->machine().driver_data<rollrace_state>();
+
+ state->m_nmi_mask = data & 1;
+}
+
+static WRITE8_HANDLER( sound_nmi_mask_w )
+{
+ rollrace_state *state = space->machine().driver_data<rollrace_state>();
+
+ state->m_sound_nmi_mask = data & 1;
+}
+
+
static ADDRESS_MAP_START( rollrace_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x9fff) AM_ROM /* only rollace2 */
@@ -41,7 +56,7 @@ static ADDRESS_MAP_START( rollrace_map, AS_PROGRAM, 8 )
AM_RANGE(0xf804, 0xf804) AM_READ_PORT("DSW1")
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("DSW2")
AM_RANGE(0xfc00, 0xfc00) AM_WRITE(rollrace_flipx_w)
- AM_RANGE(0xfc01, 0xfc01) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xfc01, 0xfc01) AM_WRITE(nmi_mask_w)
AM_RANGE(0xfc02, 0xfc03) AM_WRITENOP /* coin counters */
AM_RANGE(0xfc04, 0xfc05) AM_WRITE(rollrace_charbank_w)
AM_RANGE(0xfc06, 0xfc06) AM_WRITE(rollrace_spritebank_w)
@@ -51,7 +66,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( rollrace_sound_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x0fff) AM_ROM
AM_RANGE(0x2000, 0x2fff) AM_RAM
- AM_RANGE(0x3000, 0x3000) AM_READWRITE(soundlatch_r,interrupt_enable_w) /* TODO: check me ... */
+ AM_RANGE(0x3000, 0x3000) AM_READWRITE(soundlatch_r,sound_nmi_mask_w)
AM_RANGE(0x4000, 0x4001) AM_DEVWRITE("ay1", ay8910_address_data_w)
AM_RANGE(0x5000, 0x5001) AM_DEVWRITE("ay2", ay8910_address_data_w)
AM_RANGE(0x6000, 0x6001) AM_DEVWRITE("ay3", ay8910_address_data_w)
@@ -195,16 +210,32 @@ static GFXDECODE_START( rollrace )
GFXDECODE_ENTRY( "gfx5", 0x0000, spritelayout, 0, 32 )
GFXDECODE_END
+static INTERRUPT_GEN( vblank_irq )
+{
+ rollrace_state *state = device->machine().driver_data<rollrace_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
+static INTERRUPT_GEN( sound_timer_irq )
+{
+ rollrace_state *state = device->machine().driver_data<rollrace_state>();
+
+ if(state->m_sound_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
static MACHINE_CONFIG_START( rollrace, rollrace_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80,XTAL_24MHz/8) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(rollrace_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80,XTAL_24MHz/16) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(rollrace_sound_map)
- MCFG_CPU_PERIODIC_INT(nmi_line_pulse,4*60)
+ MCFG_CPU_PERIODIC_INT(sound_timer_irq,4*60)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/sbasketb.c b/src/mame/drivers/sbasketb.c
index b832f5c6c8b..dc246bb9f83 100644
--- a/src/mame/drivers/sbasketb.c
+++ b/src/mame/drivers/sbasketb.c
@@ -60,6 +60,12 @@ static WRITE8_HANDLER( sbasketb_coin_counter_w )
coin_counter_w(space->machine(), offset, data);
}
+static WRITE8_HANDLER( irq_mask_w )
+{
+ sbasketb_state *state = space->machine().driver_data<sbasketb_state>();
+
+ state->m_irq_mask = data & 1;
+}
static ADDRESS_MAP_START( sbasketb_map, AS_PROGRAM, 8 )
AM_RANGE(0x2000, 0x2fff) AM_RAM
@@ -71,7 +77,7 @@ static ADDRESS_MAP_START( sbasketb_map, AS_PROGRAM, 8 )
AM_RANGE(0x3c10, 0x3c10) AM_READNOP /* ???? */
AM_RANGE(0x3c20, 0x3c20) AM_WRITEONLY AM_BASE_MEMBER(sbasketb_state, m_palettebank)
AM_RANGE(0x3c80, 0x3c80) AM_WRITE(sbasketb_flipscreen_w)
- AM_RANGE(0x3c81, 0x3c81) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x3c81, 0x3c81) AM_WRITE(irq_mask_w)
AM_RANGE(0x3c83, 0x3c84) AM_WRITE(sbasketb_coin_counter_w)
AM_RANGE(0x3c85, 0x3c85) AM_WRITEONLY AM_BASE_MEMBER(sbasketb_state, m_spriteram_select)
AM_RANGE(0x3d00, 0x3d00) AM_WRITE(soundlatch_w)
@@ -171,13 +177,20 @@ static GFXDECODE_START( sbasketb )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 16*16, 16*16 )
GFXDECODE_END
+static INTERRUPT_GEN( vblank_irq )
+{
+ sbasketb_state *state = device->machine().driver_data<sbasketb_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
static MACHINE_CONFIG_START( sbasketb, sbasketb_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6809, 1400000) /* 1.400 MHz ??? */
MCFG_CPU_PROGRAM_MAP(sbasketb_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80, XTAL_14_31818MHz / 4) /* 3.5795 MHz */
MCFG_CPU_PROGRAM_MAP(sbasketb_sound_map)
diff --git a/src/mame/drivers/shootout.c b/src/mame/drivers/shootout.c
index fe96ec8c915..e74620612d3 100644
--- a/src/mame/drivers/shootout.c
+++ b/src/mame/drivers/shootout.c
@@ -95,12 +95,13 @@ ADDRESS_MAP_END
/*******************************************************************************/
+/* same as Tryout */
static ADDRESS_MAP_START( shootout_sound_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x07ff) AM_RAM
AM_RANGE(0x4000, 0x4001) AM_DEVREADWRITE("ymsnd", ym2203_r,ym2203_w)
AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_r)
AM_RANGE(0xc000, 0xffff) AM_ROM
- AM_RANGE(0xd000, 0xd000) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xd000, 0xd000) AM_WRITENOP // unknown, NOT irq/nmi mask
ADDRESS_MAP_END
/*******************************************************************************/
diff --git a/src/mame/drivers/slapfght.c b/src/mame/drivers/slapfght.c
index 12ecfc5b4b4..98a314a2d66 100644
--- a/src/mame/drivers/slapfght.c
+++ b/src/mame/drivers/slapfght.c
@@ -741,13 +741,22 @@ static SCREEN_EOF( perfrman )
buffer_spriteram_w(space, 0, 0);
}
+static INTERRUPT_GEN( vblank_irq )
+{
+ slapfght_state *state = device->machine().driver_data<slapfght_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
+
static MACHINE_CONFIG_START( perfrman, slapfght_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80,16000000/4) /* 4MHz ???, 16MHz Oscillator */
MCFG_CPU_PROGRAM_MAP(perfrman_map)
MCFG_CPU_IO_MAP(slapfght_io_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80,16000000/8) /* 2MHz ???, 16MHz Oscillator */
MCFG_CPU_PROGRAM_MAP(perfrman_sound_map)
@@ -794,7 +803,7 @@ static MACHINE_CONFIG_START( tigerhb, slapfght_state )
MCFG_CPU_ADD("maincpu", Z80, 6000000)
MCFG_CPU_PROGRAM_MAP(tigerh_map)
MCFG_CPU_IO_MAP(tigerhb_io_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80, 6000000)
MCFG_CPU_PROGRAM_MAP(slapfght_sound_map)
@@ -840,7 +849,7 @@ static MACHINE_CONFIG_START( tigerh, slapfght_state )
MCFG_CPU_ADD("maincpu", Z80, XTAL_36MHz/6) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(tigerh_map)
MCFG_CPU_IO_MAP(tigerh_io_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80, XTAL_36MHz/12) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(slapfght_sound_map)
@@ -890,7 +899,7 @@ static MACHINE_CONFIG_START( slapfigh, slapfght_state )
MCFG_CPU_ADD("maincpu",Z80, XTAL_36MHz/6) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(slapfght_map)
MCFG_CPU_IO_MAP(slapfght_io_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80, XTAL_36MHz/12) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(slapfght_sound_map)
diff --git a/src/mame/drivers/snk6502.c b/src/mame/drivers/snk6502.c
index 4f2e39b1a4c..df73d9d8dc2 100644
--- a/src/mame/drivers/snk6502.c
+++ b/src/mame/drivers/snk6502.c
@@ -741,6 +741,8 @@ GFXDECODE_END
static INTERRUPT_GEN( satansat_interrupt )
{
+ snk6502_state *state = device->machine().driver_data<snk6502_state>();
+
if (cpu_getiloops(device) != 0)
{
UINT8 val = input_port_read(device->machine(), "IN2"); /* TODO: use CUSTOM_INPUT */
@@ -751,7 +753,7 @@ static INTERRUPT_GEN( satansat_interrupt )
if (val & 0x01)
device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
}
- else
+ else if(state->m_irq_mask)
device_set_input_line(device, M6502_IRQ_LINE, HOLD_LINE); /* one IRQ per frame */
}
diff --git a/src/mame/drivers/solomon.c b/src/mame/drivers/solomon.c
index 78960cf6782..d1a1900ca1f 100644
--- a/src/mame/drivers/solomon.c
+++ b/src/mame/drivers/solomon.c
@@ -38,6 +38,12 @@ static READ8_HANDLER( solomon_0xe603_r )
}
}
+static WRITE8_HANDLER( nmi_mask_w )
+{
+ solomon_state *state = space->machine().driver_data<solomon_state>();
+
+ state->m_nmi_mask = data & 1;
+}
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0xbfff) AM_ROM
@@ -55,7 +61,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8 )
AM_RANGE(0xe604, 0xe604) AM_READ_PORT("DSW1")
AM_RANGE(0xe605, 0xe605) AM_READ_PORT("DSW2")
AM_RANGE(0xe606, 0xe606) AM_READNOP /* watchdog? */
- AM_RANGE(0xe600, 0xe600) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xe600, 0xe600) AM_WRITE(nmi_mask_w)
AM_RANGE(0xe604, 0xe604) AM_WRITE(solomon_flipscreen_w)
AM_RANGE(0xe800, 0xe800) AM_WRITE(solomon_sh_command_w)
AM_RANGE(0xf000, 0xffff) AM_ROM
@@ -188,12 +194,22 @@ static GFXDECODE_START( solomon )
GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 0, 8 ) /* colors 0-127 */
GFXDECODE_END
+static INTERRUPT_GEN( vblank_irq )
+{
+ solomon_state *state = device->machine().driver_data<solomon_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
+
+
static MACHINE_CONFIG_START( solomon, solomon_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, 4000000) /* 4.0 MHz (?????) */
MCFG_CPU_PROGRAM_MAP(main_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80, 3072000)
MCFG_CPU_PROGRAM_MAP(sound_map)
diff --git a/src/mame/drivers/spcforce.c b/src/mame/drivers/spcforce.c
index cc5a20b34b2..91839135dfa 100644
--- a/src/mame/drivers/spcforce.c
+++ b/src/mame/drivers/spcforce.c
@@ -28,6 +28,8 @@ driver by Zsolt Vasvari
a000-a3ff R/W X/Y scroll position of each character (can be scrolled up
to 7 pixels in each direction)
+TODO:
+- fix cliprect for sprites that goes out of screen if possible
***************************************************************************/
@@ -79,6 +81,12 @@ static WRITE8_HANDLER( spcforce_soundtrigger_w )
cputag_set_input_line(space->machine(), "audiocpu", 0, (~data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
}
+static WRITE8_HANDLER( irq_mask_w )
+{
+ spcforce_state *state = space->machine().driver_data<spcforce_state>();
+
+ state->m_irq_mask = data & 1;
+}
static ADDRESS_MAP_START( spcforce_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x3fff) AM_ROM
@@ -87,7 +95,7 @@ static ADDRESS_MAP_START( spcforce_map, AS_PROGRAM, 8 )
AM_RANGE(0x7001, 0x7001) AM_READ_PORT("P1") AM_WRITE(spcforce_soundtrigger_w)
AM_RANGE(0x7002, 0x7002) AM_READ_PORT("P2")
AM_RANGE(0x700b, 0x700b) AM_WRITE(spcforce_flip_screen_w)
- AM_RANGE(0x700e, 0x700e) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x700e, 0x700e) AM_WRITE(irq_mask_w)
AM_RANGE(0x700f, 0x700f) AM_WRITENOP
AM_RANGE(0x8000, 0x83ff) AM_RAM AM_BASE_MEMBER(spcforce_state, m_videoram)
AM_RANGE(0x9000, 0x93ff) AM_RAM AM_BASE_MEMBER(spcforce_state, m_colorram)
@@ -237,6 +245,13 @@ static PALETTE_INIT( spcforce )
}
}
+static INTERRUPT_GEN( vblank_irq )
+{
+ spcforce_state *state = device->machine().driver_data<spcforce_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, 3, HOLD_LINE);
+}
static MACHINE_CONFIG_START( spcforce, spcforce_state )
@@ -244,7 +259,7 @@ static MACHINE_CONFIG_START( spcforce, spcforce_state )
/* FIXME: The 8085A had a max clock of 6MHz, internally divided by 2! */
MCFG_CPU_ADD("maincpu", I8085A, 8000000 * 2) /* 4.00 MHz??? */
MCFG_CPU_PROGRAM_MAP(spcforce_map)
- MCFG_CPU_VBLANK_INT("screen", irq3_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", I8035, 6144000) /* divisor ??? */
MCFG_CPU_PROGRAM_MAP(spcforce_sound_map)
diff --git a/src/mame/drivers/ssozumo.c b/src/mame/drivers/ssozumo.c
index 5b3c7cf4b7d..bc3ccf66186 100644
--- a/src/mame/drivers/ssozumo.c
+++ b/src/mame/drivers/ssozumo.c
@@ -39,12 +39,21 @@ static ADDRESS_MAP_START( ssozumo_map, AS_PROGRAM, 8 )
AM_RANGE(0x6000, 0xffff) AM_ROM
ADDRESS_MAP_END
+
+static WRITE8_HANDLER( sound_nmi_mask_w )
+{
+ ssozumo_state *state = space->machine().driver_data<ssozumo_state>();
+
+ state->m_sound_nmi_mask = data & 1;
+}
+
+/* Same as Tag Team */
static ADDRESS_MAP_START( ssozumo_sound_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x01ff) AM_RAM
AM_RANGE(0x2000, 0x2001) AM_DEVWRITE("ay1", ay8910_data_address_w)
AM_RANGE(0x2002, 0x2003) AM_DEVWRITE("ay2", ay8910_data_address_w)
AM_RANGE(0x2004, 0x2004) AM_DEVWRITE("dac", dac_signed_w)
- AM_RANGE(0x2005, 0x2005) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x2005, 0x2005) AM_WRITE(sound_nmi_mask_w)
AM_RANGE(0x2007, 0x2007) AM_READ(soundlatch_r)
AM_RANGE(0x4000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -172,6 +181,13 @@ static GFXDECODE_START( ssozumo )
GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 8*8, 2 )
GFXDECODE_END
+static INTERRUPT_GEN( sound_timer_irq )
+{
+ ssozumo_state *state = device->machine().driver_data<ssozumo_state>();
+
+ if(state->m_sound_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
static MACHINE_CONFIG_START( ssozumo, ssozumo_state )
@@ -182,7 +198,7 @@ static MACHINE_CONFIG_START( ssozumo, ssozumo_state )
MCFG_CPU_ADD("audiocpu", M6502, 975000) /* 975 kHz ?? */
MCFG_CPU_PROGRAM_MAP(ssozumo_sound_map)
- MCFG_CPU_PERIODIC_INT(nmi_line_pulse,60*16) /* not accurate */
+ MCFG_CPU_PERIODIC_INT(sound_timer_irq,272/16*57) // guess, assume to be the same as tagteam
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/superqix.c b/src/mame/drivers/superqix.c
index d3d68973b84..5809d0e7f08 100644
--- a/src/mame/drivers/superqix.c
+++ b/src/mame/drivers/superqix.c
@@ -1014,20 +1014,30 @@ static const ay8910_interface bootleg_ay8910_interface_2 =
DEVCB_NULL
};
+static INTERRUPT_GEN( vblank_irq )
+{
+ superqix_state *state = device->machine().driver_data<superqix_state>();
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
-static INTERRUPT_GEN( sqix_interrupt )
+static INTERRUPT_GEN( sqix_timer_irq )
{
+ superqix_state *state = device->machine().driver_data<superqix_state>();
+
/* highly suspicious... */
- if (cpu_getiloops(device) <= 3)
- nmi_line_assert(device);
+ if (cpu_getiloops(device) <= 3 && state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, ASSERT_LINE);
}
-static INTERRUPT_GEN( bootleg_interrupt )
+static INTERRUPT_GEN( sqixbl_timer_irq )
{
+ superqix_state *state = device->machine().driver_data<superqix_state>();
+
/* highly suspicious... */
- if (cpu_getiloops(device) <= 3)
- nmi_line_pulse(device);
+ if (cpu_getiloops(device) <= 3 && state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
}
@@ -1036,7 +1046,7 @@ static MACHINE_CONFIG_START( pbillian, superqix_state )
MCFG_CPU_ADD("maincpu", Z80,12000000/2) /* 6 MHz */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_IO_MAP(pbillian_port_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_MACHINE_START(pbillian)
@@ -1069,7 +1079,7 @@ static MACHINE_CONFIG_START( hotsmash, superqix_state )
MCFG_CPU_ADD("maincpu", Z80,12000000/2) /* 6 MHz */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_IO_MAP(hotsmash_port_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("mcu", M68705, 4000000) /* ???? */
MCFG_CPU_PROGRAM_MAP(m68705_map)
@@ -1107,7 +1117,7 @@ static MACHINE_CONFIG_START( sqix, superqix_state )
MCFG_CPU_ADD("maincpu", Z80, 12000000/2) /* 6 MHz */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_IO_MAP(sqix_port_map)
- MCFG_CPU_VBLANK_INT_HACK(sqix_interrupt,6) /* ??? */
+ MCFG_CPU_VBLANK_INT_HACK(sqix_timer_irq,6) /* ??? */
MCFG_CPU_ADD("mcu", I8751, 12000000/3) /* ??? */
MCFG_CPU_IO_MAP(bootleg_mcu_io_map)
@@ -1156,7 +1166,7 @@ static MACHINE_CONFIG_START( sqixbl, superqix_state )
MCFG_CPU_ADD("maincpu", Z80, 12000000/2) /* 6 MHz */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_IO_MAP(bootleg_port_map)
- MCFG_CPU_VBLANK_INT_HACK(bootleg_interrupt,6) /* ??? */
+ MCFG_CPU_VBLANK_INT_HACK(sqixbl_timer_irq,6) /* ??? */
MCFG_MACHINE_START(superqix)
diff --git a/src/mame/drivers/tagteam.c b/src/mame/drivers/tagteam.c
index f85695c4c24..b4d4020f997 100644
--- a/src/mame/drivers/tagteam.c
+++ b/src/mame/drivers/tagteam.c
@@ -25,7 +25,6 @@ TODO:
***************************************************************************/
#include "emu.h"
-#include "deprecat.h"
#include "cpu/m6502/m6502.h"
#include "sound/ay8910.h"
#include "sound/dac.h"
@@ -56,12 +55,20 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8 )
AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
+static WRITE8_HANDLER( sound_nmi_mask_w )
+{
+ tagteam_state *state = space->machine().driver_data<tagteam_state>();
+
+ state->m_sound_nmi_mask = data & 1;
+}
+
+/* Same as Syusse Oozumou */
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x03ff) AM_RAM
AM_RANGE(0x2000, 0x2001) AM_DEVWRITE("ay1", ay8910_data_address_w)
AM_RANGE(0x2002, 0x2003) AM_DEVWRITE("ay2", ay8910_data_address_w)
AM_RANGE(0x2004, 0x2004) AM_DEVWRITE("dac", dac_w)
- AM_RANGE(0x2005, 0x2005) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x2005, 0x2005) AM_WRITE(sound_nmi_mask_w)
AM_RANGE(0x2007, 0x2007) AM_READ(soundlatch_r)
AM_RANGE(0x4000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -189,17 +196,25 @@ static GFXDECODE_START( tagteam )
GFXDECODE_END
+static INTERRUPT_GEN( sound_timer_irq )
+{
+ tagteam_state *state = device->machine().driver_data<tagteam_state>();
+
+ if(state->m_sound_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
static MACHINE_CONFIG_START( tagteam, tagteam_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6502, XTAL_12MHz/8)
MCFG_CPU_PROGRAM_MAP(main_map)
- MCFG_CPU_PERIODIC_INT(irq0_line_hold,272/16*57) // connected to bit 3 of vcount (basically once every 16 scanlines)
+ MCFG_CPU_PERIODIC_INT(irq0_line_assert,272/16*57) // connected to bit 4 of vcount (basically once every 16 scanlines)
MCFG_CPU_ADD("audiocpu", M6502, XTAL_12MHz/2/6) // daughterboard gets 12mhz/2 from mainboard, but how it's divided further is a guess
MCFG_CPU_PROGRAM_MAP(sound_map)
- MCFG_CPU_PERIODIC_INT(nmi_line_pulse,272/16*57) // same source as maincpu irq
+ MCFG_CPU_PERIODIC_INT(sound_timer_irq,272/16*57) // same source as maincpu irq
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/tankbatt.c b/src/mame/drivers/tankbatt.c
index 08c6098f042..869323f74bb 100644
--- a/src/mame/drivers/tankbatt.c
+++ b/src/mame/drivers/tankbatt.c
@@ -99,14 +99,12 @@ static WRITE8_HANDLER( tankbatt_interrupt_enable_w )
/* hack - turn off the engine noise if the normal game nmi's are disabled */
if (data) sample_stop (space->machine().device("samples"), 2);
-// interrupt_enable_w (offset, !data);
}
static WRITE8_HANDLER( tankbatt_demo_interrupt_enable_w )
{
tankbatt_state *state = space->machine().driver_data<tankbatt_state>();
state->m_nmi_enable = data;
-// interrupt_enable_w (offset, data);
}
static WRITE8_HANDLER( tankbatt_sh_expl_w )
diff --git a/src/mame/drivers/tankbust.c b/src/mame/drivers/tankbust.c
index 2a706ccf8c1..ae9799c69cf 100644
--- a/src/mame/drivers/tankbust.c
+++ b/src/mame/drivers/tankbust.c
@@ -78,16 +78,16 @@ static WRITE8_HANDLER( tankbust_e0xx_w )
switch (offset)
{
case 0: /* 0xe000 interrupt enable */
- interrupt_enable_w(space, 0, data);
- break;
+ state->m_irq_mask = data & 1;
+ break;
case 1: /* 0xe001 (value 0 then 1) written right after the soundlatch_w */
space->machine().scheduler().synchronize(FUNC(soundirqline_callback), data);
- break;
+ break;
case 2: /* 0xe002 coin counter */
coin_counter_w(space->machine(), 0, data&1);
- break;
+ break;
case 6: /* 0xe006 screen disable ?? or disable screen update */
/* program sets this to 0,
@@ -95,14 +95,14 @@ static WRITE8_HANDLER( tankbust_e0xx_w )
and sets this to 1 */
/* ???? */
- break;
+ break;
case 7: /* 0xe007 bankswitch */
/* bank 1 at 0x6000-9fff = from 0x10000 when bit0=0 else from 0x14000 */
/* bank 2 at 0xa000-bfff = from 0x18000 when bit0=0 else from 0x1a000 */
memory_set_bankptr(space->machine(), "bank1", space->machine().region("maincpu")->base() + 0x10000 + ((data&1) * 0x4000) );
memory_set_bankptr(space->machine(), "bank2", space->machine().region("maincpu")->base() + 0x18000 + ((data&1) * 0x2000) ); /* verified (the game will reset after the "game over" otherwise) */
- break;
+ break;
}
}
@@ -142,7 +142,6 @@ static PALETTE_INIT( tankbust )
//rr g g g r b b - bad but still close
-#if 1 //close one
/* blue component */
bit0 = (color_prom[i] >> 0) & 0x01;
bit1 = (color_prom[i] >> 1) & 0x01;
@@ -159,7 +158,6 @@ static PALETTE_INIT( tankbust )
bit0 = (color_prom[i] >> 6) & 0x01;
bit1 = (color_prom[i] >> 7) & 0x01;
r = 0x55 * bit0 + 0xaa * bit1;
-#endif
palette_set_color(machine,i,MAKE_RGB(r,g,b));
}
@@ -324,17 +322,23 @@ static MACHINE_RESET( tankbust )
state->m_variable_data = 0x11;
}
+static INTERRUPT_GEN( vblank_irq )
+{
+ tankbust_state *state = device->machine().driver_data<tankbust_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
static MACHINE_CONFIG_START( tankbust, tankbust_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_14_31818MHz/2) /* Verified on PCB */
MCFG_CPU_PROGRAM_MAP(main_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("sub", Z80, XTAL_14_31818MHz/4) /* Verified on PCB */
// MCFG_CPU_ADD("sub", Z80, XTAL_14_31818MHz/3) /* Accurate to audio recording, but apparently incorrect clock */
-
MCFG_CPU_PROGRAM_MAP(map_cpu2)
MCFG_CPU_IO_MAP(port_map_cpu2)
diff --git a/src/mame/drivers/thepit.c b/src/mame/drivers/thepit.c
index e8d29da6f52..9cb3fcbed15 100644
--- a/src/mame/drivers/thepit.c
+++ b/src/mame/drivers/thepit.c
@@ -146,6 +146,13 @@ static WRITE8_HANDLER( thepit_sound_enable_w )
space->machine().sound().system_enable(data);
}
+static WRITE8_HANDLER( nmi_mask_w )
+{
+ thepit_state *state = space->machine().driver_data<thepit_state>();
+
+ state->m_nmi_mask = data & 1;
+}
+
static ADDRESS_MAP_START( thepit_main_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x4fff) AM_ROM
@@ -157,7 +164,7 @@ static ADDRESS_MAP_START( thepit_main_map, AS_PROGRAM, 8 )
AM_RANGE(0x9860, 0x98ff) AM_RAM
AM_RANGE(0xa000, 0xa000) AM_READ(thepit_input_port_0_r) AM_WRITENOP // Not hooked up according to the schematics
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1")
- AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(nmi_mask_w)
AM_RANGE(0xb001, 0xb001) AM_WRITENOP // Unused, but initialized
AM_RANGE(0xb002, 0xb002) AM_WRITENOP // coin_lockout_w
AM_RANGE(0xb003, 0xb003) AM_WRITE(thepit_sound_enable_w)
@@ -178,7 +185,7 @@ static ADDRESS_MAP_START( intrepid_main_map, AS_PROGRAM, 8 )
AM_RANGE(0x9860, 0x98ff) AM_RAM
AM_RANGE(0xa000, 0xa000) AM_READ(thepit_input_port_0_r)
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1")
- AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(nmi_mask_w)
AM_RANGE(0xb001, 0xb001) AM_WRITENOP // Unused, but initialized
AM_RANGE(0xb002, 0xb002) AM_WRITENOP // coin_lockout_w
AM_RANGE(0xb003, 0xb003) AM_WRITE(thepit_sound_enable_w)
@@ -630,13 +637,20 @@ static const ay8910_interface ay8910_config =
DEVCB_NULL
};
+static INTERRUPT_GEN( vblank_irq )
+{
+ thepit_state *state = device->machine().driver_data<thepit_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
static MACHINE_CONFIG_START( thepit, thepit_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, PIXEL_CLOCK/2) /* 3.072 MHz */
MCFG_CPU_PROGRAM_MAP(thepit_main_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80, SOUND_CLOCK/4) /* 2.5 MHz */
MCFG_CPU_PROGRAM_MAP(audio_map)
diff --git a/src/mame/drivers/tmnt.c b/src/mame/drivers/tmnt.c
index c60366ac04d..2607123ab97 100644
--- a/src/mame/drivers/tmnt.c
+++ b/src/mame/drivers/tmnt.c
@@ -180,7 +180,8 @@ static INTERRUPT_GEN(cuebrick_interrupt)
switch (cpu_getiloops(device))
{
case 0:
- device_set_input_line(device, M68K_IRQ_5, HOLD_LINE);
+ if (state->m_irq5_mask)
+ device_set_input_line(device, M68K_IRQ_5, HOLD_LINE);
break;
default:
@@ -2326,6 +2327,15 @@ static MACHINE_RESET( common )
state->m_cuebrick_nvram_bank = 0;
}
+/* cuebrick, mia and tmnt */
+static INTERRUPT_GEN( tmnt_vblank_irq )
+{
+ tmnt_state *state = device->machine().driver_data<tmnt_state>();
+
+ if(state->m_irq5_mask)
+ device_set_input_line(device, 5, HOLD_LINE);
+}
+
static MACHINE_CONFIG_START( cuebrick, tmnt_state )
@@ -2371,7 +2381,7 @@ static MACHINE_CONFIG_START( mia, tmnt_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, XTAL_24MHz/3)
MCFG_CPU_PROGRAM_MAP(mia_main_map)
- MCFG_CPU_VBLANK_INT("screen", irq5_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", tmnt_vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz)
MCFG_CPU_PROGRAM_MAP(mia_audio_map)
@@ -2425,7 +2435,7 @@ static MACHINE_CONFIG_START( tmnt, tmnt_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, XTAL_24MHz/3)
MCFG_CPU_PROGRAM_MAP(tmnt_main_map)
- MCFG_CPU_VBLANK_INT("screen", irq5_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", tmnt_vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz)
MCFG_CPU_PROGRAM_MAP(tmnt_audio_map)
diff --git a/src/mame/drivers/tp84.c b/src/mame/drivers/tp84.c
index 4ab0c28ee05..545368791f4 100644
--- a/src/mame/drivers/tp84.c
+++ b/src/mame/drivers/tp84.c
@@ -169,10 +169,18 @@ static ADDRESS_MAP_START( tp84b_cpu1_map, AS_PROGRAM, 8 )
ADDRESS_MAP_END
+static WRITE8_HANDLER( sub_irq_mask_w )
+{
+ tp84_state *state = space->machine().driver_data<tp84_state>();
+
+ state->m_sub_irq_mask = data & 1;
+}
+
+
static ADDRESS_MAP_START( cpu2_map, AS_PROGRAM, 8 )
// AM_RANGE(0x0000, 0x0000) AM_RAM /* Watch dog ?*/
AM_RANGE(0x2000, 0x2000) AM_READ(tp84_scanline_r) /* beam position */
- AM_RANGE(0x4000, 0x4000) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x4000, 0x4000) AM_WRITE(sub_irq_mask_w)
AM_RANGE(0x6000, 0x679f) AM_RAM
AM_RANGE(0x67a0, 0x67ff) AM_RAM_WRITE(tp84_spriteram_w) AM_BASE_MEMBER(tp84_state, m_spriteram)
AM_RANGE(0x8000, 0x87ff) AM_RAM AM_SHARE("share1")
@@ -273,6 +281,13 @@ static GFXDECODE_START( tp84 )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 64*4*8, 16*8 )
GFXDECODE_END
+static INTERRUPT_GEN( sub_vblank_irq )
+{
+ tp84_state *state = device->machine().driver_data<tp84_state>();
+
+ if(state->m_sub_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
static MACHINE_CONFIG_START( tp84, tp84_state )
@@ -284,7 +299,7 @@ static MACHINE_CONFIG_START( tp84, tp84_state )
MCFG_CPU_ADD("sub", M6809, XTAL_18_432MHz/12) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(cpu2_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", sub_vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80,XTAL_14_31818MHz/4) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(audio_map)
diff --git a/src/mame/drivers/trackfld.c b/src/mame/drivers/trackfld.c
index 5597adc87ad..ae4a2ebf572 100644
--- a/src/mame/drivers/trackfld.c
+++ b/src/mame/drivers/trackfld.c
@@ -204,22 +204,23 @@ static WRITE8_HANDLER( coin_w )
static WRITE8_HANDLER( questions_bank_w )
{
- if (!(data & 0x01))
- memory_set_bank(space->machine(), "bank1", 0);
- else if (!(data & 0x02))
- memory_set_bank(space->machine(), "bank1", 1);
- else if (!(data & 0x04))
- memory_set_bank(space->machine(), "bank1", 2);
- else if (!(data & 0x08))
- memory_set_bank(space->machine(), "bank1", 3);
- else if (!(data & 0x10))
- memory_set_bank(space->machine(), "bank1", 4);
- else if (!(data & 0x20))
- memory_set_bank(space->machine(), "bank1", 5);
- else if (!(data & 0x40))
- memory_set_bank(space->machine(), "bank1", 6);
- else if (!(data & 0x80))
- memory_set_bank(space->machine(), "bank1", 7);
+ int i;
+
+ for(i=0;i<8;i++)
+ {
+ if((data & 1 << i) == 0) // check first bit active low, change ROM bank according to the correlated bit
+ {
+ memory_set_bank(space->machine(), "bank1", i);
+ return;
+ }
+ }
+}
+
+static WRITE8_HANDLER( irq_mask_w )
+{
+ trackfld_state *state = space->machine().driver_data<trackfld_state>();
+
+ state->m_irq_mask = data & 1;
}
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8 )
@@ -230,7 +231,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8 )
AM_RANGE(0x1083, 0x1084) AM_MIRROR(0x0078) AM_WRITE(coin_w) /* 24, 23 */
AM_RANGE(0x1085, 0x1085) AM_MIRROR(0x0078) AM_WRITENOP /* CN3.2 */
AM_RANGE(0x1086, 0x1086) AM_MIRROR(0x0078) AM_WRITENOP /* CN3.4 */
- AM_RANGE(0x1087, 0x1087) AM_MIRROR(0x0078) AM_WRITE(interrupt_enable_w) /* INT */
+ AM_RANGE(0x1087, 0x1087) AM_MIRROR(0x0078) AM_WRITE(irq_mask_w) /* INT */
AM_RANGE(0x1100, 0x1100) AM_MIRROR(0x007f) AM_WRITE(soundlatch_w) /* 32 */
AM_RANGE(0x1200, 0x1200) AM_MIRROR(0x007f) AM_READ_PORT("DSW2")
AM_RANGE(0x1280, 0x1280) AM_MIRROR(0x007c) AM_READ_PORT("SYSTEM")
@@ -259,7 +260,7 @@ static ADDRESS_MAP_START( yieartf_map, AS_PROGRAM, 8 )
AM_RANGE(0x1083, 0x1084) AM_MIRROR(0x0078) AM_WRITE(coin_w) /* 24, 23 */
AM_RANGE(0x1085, 0x1085) AM_MIRROR(0x0078) AM_WRITENOP /* CN3.2 */
AM_RANGE(0x1086, 0x1086) AM_MIRROR(0x0078) AM_WRITENOP /* CN3.4 */
- AM_RANGE(0x1087, 0x1087) AM_MIRROR(0x0078) AM_WRITE(interrupt_enable_w) /* INT */
+ AM_RANGE(0x1087, 0x1087) AM_MIRROR(0x0078) AM_WRITE(irq_mask_w) /* INT */
// AM_RANGE(0x1100, 0x1100) AM_MIRROR(0x007f) AM_WRITE(soundlatch_w) /* 32 */
AM_RANGE(0x1200, 0x1200) AM_MIRROR(0x007f) AM_READ_PORT("DSW2")
AM_RANGE(0x1280, 0x1280) AM_MIRROR(0x007c) AM_READ_PORT("SYSTEM")
@@ -286,7 +287,7 @@ static ADDRESS_MAP_START( reaktor_map, AS_PROGRAM, 8 )
AM_RANGE(0x9080, 0x9080) AM_WRITE(trackfld_flipscreen_w)
AM_RANGE(0x9081, 0x9081) AM_WRITE(konami_sh_irqtrigger_w) /* cause interrupt on audio CPU */
AM_RANGE(0x9083, 0x9084) AM_WRITE(coin_w)
- AM_RANGE(0x9087, 0x9087) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x9087, 0x9087) AM_WRITE(irq_mask_w)
AM_RANGE(0x9100, 0x9100) AM_WRITE(soundlatch_w)
AM_RANGE(0x9200, 0x9200) AM_READ_PORT("DSW2")
AM_RANGE(0x9280, 0x9280) AM_READ_PORT("SYSTEM")
@@ -319,7 +320,7 @@ static ADDRESS_MAP_START( mastkin_map, AS_PROGRAM, 8 )
AM_RANGE(0x10b0, 0x10b0) AM_WRITE(trackfld_flipscreen_w)
AM_RANGE(0x10b1, 0x10b1) AM_WRITE(konami_sh_irqtrigger_w)
AM_RANGE(0x1083, 0x1084) AM_WRITE(coin_w)
- AM_RANGE(0x1087, 0x1087) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x1087, 0x1087) AM_WRITE(irq_mask_w)
AM_RANGE(0x1100, 0x1100) AM_WRITE(soundlatch_w)
AM_RANGE(0x1200, 0x1200) AM_READ_PORT("DSW2")
AM_RANGE(0x1280, 0x1280) AM_READ_PORT("SYSTEM")
@@ -345,7 +346,7 @@ static ADDRESS_MAP_START( wizzquiz_map, AS_PROGRAM, 8 )
AM_RANGE(0x1080, 0x1080) AM_WRITE(trackfld_flipscreen_w)
AM_RANGE(0x1081, 0x1081) AM_WRITE(konami_sh_irqtrigger_w) /* cause interrupt on audio CPU */
AM_RANGE(0x1083, 0x1084) AM_WRITE(coin_w)
- AM_RANGE(0x1087, 0x1087) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x1087, 0x1087) AM_WRITE(irq_mask_w)
AM_RANGE(0x1100, 0x1100) AM_WRITE(soundlatch_w)
AM_RANGE(0x1200, 0x1200) AM_READ_PORT("DSW2")
AM_RANGE(0x1280, 0x1280) AM_READ_PORT("SYSTEM")
@@ -882,12 +883,29 @@ static MACHINE_RESET( trackfld )
state->m_old_gfx_bank = 0;
}
+static INTERRUPT_GEN( vblank_irq )
+{
+ trackfld_state *state = device->machine().driver_data<trackfld_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
+static INTERRUPT_GEN( vblank_nmi )
+{
+ trackfld_state *state = device->machine().driver_data<trackfld_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
+
static MACHINE_CONFIG_START( trackfld, trackfld_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6809, MASTER_CLOCK/6/2) /* a guess for now */
MCFG_CPU_PROGRAM_MAP(main_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80, SOUND_CLOCK/4)
MCFG_CPU_PROGRAM_MAP(sound_map)
@@ -932,7 +950,7 @@ static MACHINE_CONFIG_START( yieartf, trackfld_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6809, MASTER_CLOCK/6/2) /* a guess for now */
MCFG_CPU_PROGRAM_MAP(yieartf_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
// z80 isn't used
// MCFG_CPU_ADD("audiocpu", Z80, SOUND_CLOCK/4)
@@ -1006,7 +1024,7 @@ static MACHINE_CONFIG_DERIVED( wizzquiz, trackfld )
// right cpu?
MCFG_CPU_REPLACE("maincpu",M6800,2048000) /* 1.400 MHz ??? */
MCFG_CPU_PROGRAM_MAP(wizzquiz_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_nmi)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( reaktor, trackfld )
@@ -1015,7 +1033,7 @@ static MACHINE_CONFIG_DERIVED( reaktor, trackfld )
MCFG_CPU_REPLACE("maincpu",Z80,MASTER_CLOCK/6)
MCFG_CPU_PROGRAM_MAP(reaktor_map)
MCFG_CPU_IO_MAP(reaktor_io_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/trucocl.c b/src/mame/drivers/trucocl.c
index 8e49c87996b..50be1a53aa1 100644
--- a/src/mame/drivers/trucocl.c
+++ b/src/mame/drivers/trucocl.c
@@ -5,8 +5,8 @@ Truco Clemente (c) 1991 Miky SRL
driver by Ernesto Corvi
Notes:
-- Audio is almost there.
- After one game you can't play anymore.
+- Audio is almost there.
- I think this runs on a heavily modified PacMan type of board.
----------------------------------
@@ -39,7 +39,9 @@ Daughterboard: Custom made, plugged in the 2 roms and Z80 mainboard sockets.
static WRITE8_HANDLER( irq_enable_w )
{
- interrupt_enable_w( space, 0, (~data) & 1 );
+ trucocl_state *state = space->machine().driver_data<trucocl_state>();
+
+ state->m_irq_mask = (data & 1) ^ 1;
}
@@ -123,7 +125,11 @@ GFXDECODE_END
static INTERRUPT_GEN( trucocl_interrupt )
{
- irq0_line_hold(device);
+ trucocl_state *state = device->machine().driver_data<trucocl_state>();
+
+ if(state->m_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+
}
static MACHINE_CONFIG_START( trucocl, trucocl_state )
@@ -191,4 +197,4 @@ static DRIVER_INIT( trucocl )
/******************************************************************************/
/* YEAR NAME PARENT MACHINE INPUT INIT MONITOR */
-GAME( 1991, trucocl, 0, trucocl, trucocl, trucocl, ROT0, "Miky SRL", "Truco Clemente", GAME_IMPERFECT_SOUND )
+GAME( 1991, trucocl, 0, trucocl, trucocl, trucocl, ROT0, "Miky SRL", "Truco Clemente", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )
diff --git a/src/mame/drivers/vastar.c b/src/mame/drivers/vastar.c
index 78775cc630b..8ed50a62e7b 100644
--- a/src/mame/drivers/vastar.c
+++ b/src/mame/drivers/vastar.c
@@ -75,10 +75,7 @@ static MACHINE_RESET( vastar )
static WRITE8_HANDLER( vastar_hold_cpu2_w )
{
/* I'm not sure that this works exactly like this */
- if (data & 1)
- cputag_set_input_line(space->machine(), "sub", INPUT_LINE_RESET, CLEAR_LINE);
- else
- cputag_set_input_line(space->machine(), "sub", INPUT_LINE_RESET, ASSERT_LINE);
+ cputag_set_input_line(space->machine(), "sub", INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE);
}
static READ8_HANDLER( vastar_sharedram_r )
@@ -100,6 +97,12 @@ static WRITE8_HANDLER( flip_screen_w )
flip_screen_set(space->machine(), data);
}
+static WRITE8_HANDLER( nmi_mask_w )
+{
+ vastar_state *state = space->machine().driver_data<vastar_state>();
+
+ state->m_nmi_mask = data & 1;
+}
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8 )
@@ -124,7 +127,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( main_port_map, AS_IO, 8 )
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x00, 0x00) AM_WRITE(nmi_mask_w)
AM_RANGE(0x01, 0x01) AM_WRITE(flip_screen_w)
AM_RANGE(0x02, 0x02) AM_WRITE(vastar_hold_cpu2_w)
ADDRESS_MAP_END
@@ -289,7 +292,13 @@ static const ay8910_interface ay8910_config =
DEVCB_NULL
};
+static INTERRUPT_GEN( vblank_irq )
+{
+ vastar_state *state = device->machine().driver_data<vastar_state>();
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
static MACHINE_CONFIG_START( vastar, vastar_state )
@@ -297,7 +306,7 @@ static MACHINE_CONFIG_START( vastar, vastar_state )
MCFG_CPU_ADD("maincpu", Z80, 3072000) /* 3.072 MHz ???? */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_IO_MAP(main_port_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("sub", Z80, 3072000) /* 3.072 MHz ???? */
MCFG_CPU_PROGRAM_MAP(cpu2_map)
diff --git a/src/mame/drivers/wiping.c b/src/mame/drivers/wiping.c
index 69bf3dfa41b..b48982202b7 100644
--- a/src/mame/drivers/wiping.c
+++ b/src/mame/drivers/wiping.c
@@ -39,31 +39,6 @@ dip: 6.7 7.7
#include "includes/wiping.h"
-static READ8_HANDLER( shared1_r )
-{
- wiping_state *state = space->machine().driver_data<wiping_state>();
- return state->m_sharedram1[offset];
-}
-
-static READ8_HANDLER( shared2_r )
-{
- wiping_state *state = space->machine().driver_data<wiping_state>();
- return state->m_sharedram2[offset];
-}
-
-static WRITE8_HANDLER( shared1_w )
-{
- wiping_state *state = space->machine().driver_data<wiping_state>();
- state->m_sharedram1[offset] = data;
-}
-
-static WRITE8_HANDLER( shared2_w )
-{
- wiping_state *state = space->machine().driver_data<wiping_state>();
- state->m_sharedram2[offset] = data;
-}
-
-
/* input ports are rotated 90 degrees */
static READ8_HANDLER( ports_r )
{
@@ -79,12 +54,22 @@ static READ8_HANDLER( ports_r )
static WRITE8_HANDLER( subcpu_reset_w )
{
- if (data & 1)
- cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_RESET, CLEAR_LINE);
- else
- cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_RESET, ASSERT_LINE);
+ cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE);
}
+static WRITE8_HANDLER( main_irq_mask_w )
+{
+ wiping_state *state = space->machine().driver_data<wiping_state>();
+
+ state->m_main_irq_mask = data & 1;
+}
+
+static WRITE8_HANDLER( sound_irq_mask_w )
+{
+ wiping_state *state = space->machine().driver_data<wiping_state>();
+
+ state->m_sound_irq_mask = data & 1;
+}
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x5fff) AM_ROM
@@ -92,9 +77,9 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8 )
AM_RANGE(0x8400, 0x87ff) AM_BASE_MEMBER(wiping_state, m_colorram)
AM_RANGE(0x8800, 0x88ff) AM_BASE_SIZE_MEMBER(wiping_state, m_spriteram, m_spriteram_size)
AM_RANGE(0x8000, 0x8bff) AM_RAM
- AM_RANGE(0x9000, 0x93ff) AM_READWRITE(shared1_r,shared1_w) AM_BASE_MEMBER(wiping_state, m_sharedram1)
- AM_RANGE(0x9800, 0x9bff) AM_READWRITE(shared2_r,shared2_w) AM_BASE_MEMBER(wiping_state, m_sharedram2)
- AM_RANGE(0xa000, 0xa000) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE("share1")
+ AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("share2")
+ AM_RANGE(0xa000, 0xa000) AM_WRITE(main_irq_mask_w)
AM_RANGE(0xa002, 0xa002) AM_WRITE(wiping_flipscreen_w)
AM_RANGE(0xa003, 0xa003) AM_WRITE(subcpu_reset_w)
AM_RANGE(0xa800, 0xa807) AM_READ(ports_r)
@@ -105,9 +90,9 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x4000, 0x7fff) AM_DEVWRITE("wiping", wiping_sound_w)
- AM_RANGE(0x9000, 0x93ff) AM_READWRITE(shared1_r,shared1_w)
- AM_RANGE(0x9800, 0x9bff) AM_READWRITE(shared2_r,shared2_w)
- AM_RANGE(0xa001, 0xa001) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE("share1")
+ AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("share2")
+ AM_RANGE(0xa001, 0xa001) AM_WRITE(sound_irq_mask_w)
ADDRESS_MAP_END
@@ -279,6 +264,22 @@ static GFXDECODE_START( wiping )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 64*4, 64 )
GFXDECODE_END
+static INTERRUPT_GEN( vblank_irq )
+{
+ wiping_state *state = device->machine().driver_data<wiping_state>();
+
+ if(state->m_main_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
+static INTERRUPT_GEN( sound_timer_irq )
+{
+ wiping_state *state = device->machine().driver_data<wiping_state>();
+
+ if(state->m_sound_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
static MACHINE_CONFIG_START( wiping, wiping_state )
@@ -286,11 +287,11 @@ static MACHINE_CONFIG_START( wiping, wiping_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80,18432000/6) /* 3.072 MHz */
MCFG_CPU_PROGRAM_MAP(main_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80,18432000/6) /* 3.072 MHz */
MCFG_CPU_PROGRAM_MAP(sound_map)
- MCFG_CPU_PERIODIC_INT(irq0_line_hold,120) /* periodic interrupt, don't know about the frequency */
+ MCFG_CPU_PERIODIC_INT(sound_timer_irq,120) /* periodic interrupt, don't know about the frequency */
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/wiz.c b/src/mame/drivers/wiz.c
index a86c56f582f..759ca3bd65f 100644
--- a/src/mame/drivers/wiz.c
+++ b/src/mame/drivers/wiz.c
@@ -254,23 +254,32 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8 )
AM_RANGE(0xf818, 0xf818) AM_WRITE(wiz_bgcolor_w)
ADDRESS_MAP_END
+static WRITE8_HANDLER( sound_irq_mask_w )
+{
+ wiz_state *state = space->machine().driver_data<wiz_state>();
+
+ state->m_sound_irq_mask = data & 1;
+}
+
+
+/* TODO: clean this up! */
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x2000, 0x23ff) AM_RAM
- AM_RANGE(0x3000, 0x3000) AM_READWRITE(soundlatch_r,interrupt_enable_w) /* Stinger/Scion */
+ AM_RANGE(0x3000, 0x3000) AM_READWRITE(soundlatch_r,sound_irq_mask_w) /* Stinger/Scion */
AM_RANGE(0x4000, 0x4001) AM_DEVWRITE("8910.3", ay8910_address_data_w)
AM_RANGE(0x5000, 0x5001) AM_DEVWRITE("8910.1", ay8910_address_data_w)
- AM_RANGE(0x6000, 0x6001) AM_DEVWRITE("8910.2", ay8910_address_data_w) /* Wiz only */
- AM_RANGE(0x7000, 0x7000) AM_READWRITE(soundlatch_r,interrupt_enable_w) /* Wiz */
+ AM_RANGE(0x6000, 0x6001) AM_DEVWRITE("8910.2", ay8910_address_data_w) /* Wiz only */
+ AM_RANGE(0x7000, 0x7000) AM_READWRITE(soundlatch_r,sound_irq_mask_w) /* Wiz */
ADDRESS_MAP_END
static ADDRESS_MAP_START( stinger_sound_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x2000, 0x23ff) AM_RAM
- AM_RANGE(0x3000, 0x3000) AM_READWRITE(soundlatch_r,interrupt_enable_w) /* Stinger/Scion */
+ AM_RANGE(0x3000, 0x3000) AM_READWRITE(soundlatch_r,sound_irq_mask_w) /* Stinger/Scion */
AM_RANGE(0x5000, 0x5001) AM_DEVWRITE("8910.1", ay8910_address_data_w)
- AM_RANGE(0x6000, 0x6001) AM_DEVWRITE("8910.2", ay8910_address_data_w) /* Wiz only */
- AM_RANGE(0x7000, 0x7000) AM_READWRITE(soundlatch_r,interrupt_enable_w) /* Wiz */
+ AM_RANGE(0x6000, 0x6001) AM_DEVWRITE("8910.2", ay8910_address_data_w) /* Wiz only */
+ AM_RANGE(0x7000, 0x7000) AM_READWRITE(soundlatch_r,sound_irq_mask_w) /* Wiz */
ADDRESS_MAP_END
@@ -705,6 +714,15 @@ static INTERRUPT_GEN( wiz_vblank_irq )
device_set_input_line(device,INPUT_LINE_NMI,PULSE_LINE);
}
+static INTERRUPT_GEN( sound_timer_irq )
+{
+ wiz_state *state = device->machine().driver_data<wiz_state>();
+
+ if(state->m_sound_irq_mask)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
+
static MACHINE_CONFIG_START( wiz, wiz_state )
/* basic machine hardware */
@@ -714,7 +732,7 @@ static MACHINE_CONFIG_START( wiz, wiz_state )
MCFG_CPU_ADD("audiocpu", Z80, 14318000/8) /* ? */
MCFG_CPU_PROGRAM_MAP(sound_map)
- MCFG_CPU_PERIODIC_INT(nmi_line_pulse,4*60) /* ??? */
+ MCFG_CPU_PERIODIC_INT(sound_timer_irq,4*60) /* ??? */
MCFG_MACHINE_RESET( wiz )
diff --git a/src/mame/drivers/yiear.c b/src/mame/drivers/yiear.c
index 0d43d1b33e7..0014d5755ae 100644
--- a/src/mame/drivers/yiear.c
+++ b/src/mame/drivers/yiear.c
@@ -109,11 +109,19 @@ static WRITE8_DEVICE_HANDLER( yiear_VLM5030_control_w )
vlm5030_rst(device, (data >> 2) & 1);
}
+static INTERRUPT_GEN( yiear_vblank_interrupt )
+{
+ yiear_state *state = device->machine().driver_data<yiear_state>();
+
+ if (state->m_yiear_irq_enable)
+ device_set_input_line(device, 0, HOLD_LINE);
+}
+
+
static INTERRUPT_GEN( yiear_nmi_interrupt )
{
yiear_state *state = device->machine().driver_data<yiear_state>();
- /* can't use nmi_line_pulse() because interrupt_enable_w() effects it */
if (state->m_yiear_nmi_enable)
device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
}
@@ -261,7 +269,7 @@ static MACHINE_CONFIG_START( yiear, yiear_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6809,XTAL_18_432MHz/12) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(main_map)
- MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
+ MCFG_CPU_VBLANK_INT("screen", yiear_vblank_interrupt)
MCFG_CPU_PERIODIC_INT(yiear_nmi_interrupt,480) /* music tempo (correct frequency unknown) */
MCFG_MACHINE_START(yiear)
diff --git a/src/mame/drivers/zaccaria.c b/src/mame/drivers/zaccaria.c
index c48ccdfd304..c81d92bea7a 100644
--- a/src/mame/drivers/zaccaria.c
+++ b/src/mame/drivers/zaccaria.c
@@ -251,12 +251,12 @@ static WRITE8_HANDLER( coin_w )
coin_counter_w(space->machine(), 0,data & 1);
}
-static WRITE8_HANDLER( nmienable_w )
+static WRITE8_HANDLER( nmi_mask_w )
{
- interrupt_enable_w(space,0,data & 1);
-}
-
+ zaccaria_state *state = space->machine().driver_data<zaccaria_state>();
+ state->m_nmi_mask = data & 1;
+}
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x5fff) AM_ROM
@@ -270,7 +270,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8 )
AM_RANGE(0x6c01, 0x6c01) AM_WRITE(zaccaria_flip_screen_y_w)
AM_RANGE(0x6c02, 0x6c02) AM_WRITENOP /* sound reset */
AM_RANGE(0x6c06, 0x6c06) AM_WRITE(coin_w)
- AM_RANGE(0x6c07, 0x6c07) AM_WRITE(nmienable_w)
+ AM_RANGE(0x6c07, 0x6c07) AM_WRITE(nmi_mask_w)
AM_RANGE(0x6c00, 0x6c07) AM_READ(zaccaria_prot2_r)
AM_RANGE(0x6e00, 0x6e00) AM_READWRITE(zaccaria_dsw_r, sound_command_w)
AM_RANGE(0x7000, 0x77ff) AM_RAM
@@ -577,6 +577,13 @@ static const tms5220_interface tms5220_config =
DEVCB_DEVICE_LINE_MEMBER("pia1", pia6821_device, ca2_w) /* READYQ handler */
};
+static INTERRUPT_GEN( vblank_irq )
+{
+ zaccaria_state *state = device->machine().driver_data<zaccaria_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
static MACHINE_CONFIG_START( zaccaria, zaccaria_state )
@@ -584,7 +591,7 @@ static MACHINE_CONFIG_START( zaccaria, zaccaria_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80,XTAL_18_432MHz/6) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(main_map)
- MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MCFG_CPU_VBLANK_INT("screen", vblank_irq)
MCFG_QUANTUM_TIME(attotime::from_hz(1000000))
MCFG_CPU_ADD("audiocpu", M6802,XTAL_3_579545MHz) /* verified on pcb */
diff --git a/src/mame/etc/jrcrypt.c b/src/mame/etc/jrcrypt.c
index a32426db544..bd0d0ae001c 100644
--- a/src/mame/etc/jrcrypt.c
+++ b/src/mame/etc/jrcrypt.c
@@ -16,7 +16,7 @@
#include "emu.h"
#include <ctype.h>
-static int interrupt_enable;
+static int irq_mask;
typedef UINT16 word;
typedef UINT8 byte;
@@ -398,9 +398,9 @@ void write_rom_section(char *prefix,char *suffix,int start,int end)
}
#endif
-WRITE8_HANDLER( jrpacman_interrupt_enable_w )
+WRITE8_HANDLER( jrpacman_interrupt_mask_w )
{
- interrupt_enable = data;
+ irq_mask = data;
}
diff --git a/src/mame/includes/appoooh.h b/src/mame/includes/appoooh.h
index 769e7d78ed4..34244b2a65d 100644
--- a/src/mame/includes/appoooh.h
+++ b/src/mame/includes/appoooh.h
@@ -26,6 +26,8 @@ public:
/* devices */
device_t *m_adpcm;
+
+ UINT8 m_nmi_mask;
};
#define CHR1_OFST 0x00 /* palette page of char set #1 */
diff --git a/src/mame/includes/bagman.h b/src/mame/includes/bagman.h
index c24b888a11e..ca99791a435 100644
--- a/src/mame/includes/bagman.h
+++ b/src/mame/includes/bagman.h
@@ -26,6 +26,8 @@ public:
tilemap_t *m_bg_tilemap;
UINT8 *m_spriteram;
size_t m_spriteram_size;
+
+ UINT8 m_irq_mask;
};
diff --git a/src/mame/includes/bankp.h b/src/mame/includes/bankp.h
index 9633b478a33..0398f887fff 100644
--- a/src/mame/includes/bankp.h
+++ b/src/mame/includes/bankp.h
@@ -26,6 +26,8 @@ public:
tilemap_t *m_fg_tilemap;
int m_scroll_x;
int m_priority;
+
+ UINT8 m_nmi_mask;
};
diff --git a/src/mame/includes/bombjack.h b/src/mame/includes/bombjack.h
index 597f94cb9e0..40fc1565d1f 100644
--- a/src/mame/includes/bombjack.h
+++ b/src/mame/includes/bombjack.h
@@ -11,19 +11,21 @@ public:
: driver_device(mconfig, type, tag) { }
/* memory pointers */
- UINT8 * m_videoram;
- UINT8 * m_colorram;
- UINT8 * m_spriteram;
-// UINT8 * m_paletteram; // currently this uses generic palette handling
- size_t m_spriteram_size;
+ UINT8 * m_videoram;
+ UINT8 * m_colorram;
+ UINT8 * m_spriteram;
+// UINT8 * m_paletteram; // currently this uses generic palette handling
+ size_t m_spriteram_size;
/* video-related */
- tilemap_t *m_fg_tilemap;
- tilemap_t *m_bg_tilemap;
- UINT8 m_background_image;
+ tilemap_t *m_fg_tilemap;
+ tilemap_t *m_bg_tilemap;
+ UINT8 m_background_image;
/* sound-related */
- UINT8 m_latch;
+ UINT8 m_latch;
+
+ UINT8 m_nmi_mask;
};
diff --git a/src/mame/includes/carjmbre.h b/src/mame/includes/carjmbre.h
index 2bc73754d71..bcdadd0047e 100644
--- a/src/mame/includes/carjmbre.h
+++ b/src/mame/includes/carjmbre.h
@@ -19,6 +19,8 @@ public:
tilemap_t *m_cj_tilemap;
UINT8 m_flipscreen;
UINT16 m_bgcolor;
+
+ UINT8 m_nmi_mask;
};
diff --git a/src/mame/includes/cclimber.h b/src/mame/includes/cclimber.h
index 2f7d4de8300..9c373798471 100644
--- a/src/mame/includes/cclimber.h
+++ b/src/mame/includes/cclimber.h
@@ -19,6 +19,7 @@ public:
UINT8 m_yamato_p0;
UINT8 m_yamato_p1;
UINT8 m_toprollr_rombank;
+ UINT8 m_nmi_mask;
tilemap_t *m_pf_tilemap;
tilemap_t *m_bs_tilemap;
tilemap_t *m_toproller_bg_tilemap;
diff --git a/src/mame/includes/cheekyms.h b/src/mame/includes/cheekyms.h
index a2b76407e47..5b4c1e2ae84 100644
--- a/src/mame/includes/cheekyms.h
+++ b/src/mame/includes/cheekyms.h
@@ -23,6 +23,8 @@ public:
/* devices */
device_t *m_maincpu;
device_t *m_dac;
+
+ UINT8 m_irq_mask;
};
diff --git a/src/mame/includes/circusc.h b/src/mame/includes/circusc.h
index 823082b3649..8d06942f846 100644
--- a/src/mame/includes/circusc.h
+++ b/src/mame/includes/circusc.h
@@ -31,6 +31,8 @@ public:
device_t *m_sn2;
device_t *m_dac;
device_t *m_discrete;
+
+ UINT8 m_irq_mask;
};
diff --git a/src/mame/includes/dkong.h b/src/mame/includes/dkong.h
index 1ef30784c10..a806f2cf614 100644
--- a/src/mame/includes/dkong.h
+++ b/src/mame/includes/dkong.h
@@ -138,6 +138,7 @@ public:
#endif
/* machine states */
UINT8 m_hardware_type;
+ UINT8 m_nmi_mask;
/* sound state */
const UINT8 *m_snd_rom;
diff --git a/src/mame/includes/fastfred.h b/src/mame/includes/fastfred.h
index 110f67423d2..ba8af1ec900 100644
--- a/src/mame/includes/fastfred.h
+++ b/src/mame/includes/fastfred.h
@@ -28,6 +28,9 @@ public:
tilemap_t *m_bg_tilemap;
tilemap_t *m_fg_tilemap;
tilemap_t *m_web_tilemap;
+
+ UINT8 m_nmi_mask;
+ UINT8 m_sound_nmi_mask;
};
diff --git a/src/mame/includes/galaxold.h b/src/mame/includes/galaxold.h
index 4813fd36f0a..173c42cf0e2 100644
--- a/src/mame/includes/galaxold.h
+++ b/src/mame/includes/galaxold.h
@@ -80,6 +80,8 @@ public:
emu_timer *m_stars_blink_timer;
emu_timer *m_stars_scroll_timer;
struct star m_stars[STAR_COUNT];
+
+ UINT8 m_nmi_mask; /* Harem per-game specific */
};
diff --git a/src/mame/includes/gyruss.h b/src/mame/includes/gyruss.h
index 9665b65d7f0..84cc0eacb55 100644
--- a/src/mame/includes/gyruss.h
+++ b/src/mame/includes/gyruss.h
@@ -22,6 +22,9 @@ public:
/* devices */
cpu_device *m_audiocpu;
cpu_device *m_audiocpu_2;
+
+ UINT8 m_master_nmi_mask;
+ UINT8 m_slave_irq_mask;
};
diff --git a/src/mame/includes/hyperspt.h b/src/mame/includes/hyperspt.h
index a6639718564..52abc8fa0c3 100644
--- a/src/mame/includes/hyperspt.h
+++ b/src/mame/includes/hyperspt.h
@@ -16,6 +16,8 @@ public:
/* video-related */
tilemap_t *m_bg_tilemap;
int m_sprites_gfx_banked;
+
+ UINT8 m_irq_mask;
};
/*----------- defined in video/hyperspt.c -----------*/
diff --git a/src/mame/includes/kyugo.h b/src/mame/includes/kyugo.h
index 3d2bca6fbc6..ef67752f6af 100644
--- a/src/mame/includes/kyugo.h
+++ b/src/mame/includes/kyugo.h
@@ -32,6 +32,8 @@ public:
/* devices */
device_t *m_maincpu;
device_t *m_subcpu;
+
+ UINT8 m_nmi_mask;
};
diff --git a/src/mame/includes/lwings.h b/src/mame/includes/lwings.h
index 49b8f86698b..2f6b49bf413 100644
--- a/src/mame/includes/lwings.h
+++ b/src/mame/includes/lwings.h
@@ -27,6 +27,7 @@ public:
int m_palette_pen;
UINT8 m_soundstate;
UINT8 m_adpcm;
+ UINT8 m_nmi_mask;
};
diff --git a/src/mame/includes/mainevt.h b/src/mame/includes/mainevt.h
index 6f2f1ff4f22..ccaf56f1174 100644
--- a/src/mame/includes/mainevt.h
+++ b/src/mame/includes/mainevt.h
@@ -19,6 +19,7 @@ public:
/* misc */
int m_nmi_enable;
+ UINT8 m_sound_irq_mask;
/* devices */
device_t *m_maincpu;
diff --git a/src/mame/includes/marineb.h b/src/mame/includes/marineb.h
index 0f455d01414..dc1aaff80a0 100644
--- a/src/mame/includes/marineb.h
+++ b/src/mame/includes/marineb.h
@@ -20,6 +20,8 @@ public:
/* devices */
device_t *m_maincpu;
device_t *m_audiocpu;
+
+ UINT8 m_irq_mask;
};
diff --git a/src/mame/includes/mario.h b/src/mame/includes/mario.h
index 509d43ccf85..35513769f5a 100644
--- a/src/mame/includes/mario.h
+++ b/src/mame/includes/mario.h
@@ -58,6 +58,8 @@ public:
size_t m_spriteram_size;
tilemap_t *m_bg_tilemap;
int m_monitor;
+
+ UINT8 m_nmi_mask;
};
/*----------- defined in video/mario.c -----------*/
diff --git a/src/mame/includes/megazone.h b/src/mame/includes/megazone.h
index 8bf2caac6e0..e121d871df9 100644
--- a/src/mame/includes/megazone.h
+++ b/src/mame/includes/megazone.h
@@ -33,6 +33,8 @@ public:
cpu_device *m_maincpu;
cpu_device *m_audiocpu;
cpu_device *m_daccpu;
+
+ UINT8 m_irq_mask;
};
diff --git a/src/mame/includes/mermaid.h b/src/mame/includes/mermaid.h
index ab81f90d88d..0025966ff57 100644
--- a/src/mame/includes/mermaid.h
+++ b/src/mame/includes/mermaid.h
@@ -46,6 +46,8 @@ public:
device_t *m_maincpu;
device_t *m_ay1;
device_t *m_ay2;
+
+ UINT8 m_nmi_mask;
};
diff --git a/src/mame/includes/mikie.h b/src/mame/includes/mikie.h
index 690edb46ec1..49256723b1e 100644
--- a/src/mame/includes/mikie.h
+++ b/src/mame/includes/mikie.h
@@ -26,6 +26,8 @@ public:
/* devices */
cpu_device *m_maincpu;
cpu_device *m_audiocpu;
+
+ UINT8 m_irq_mask;
};
diff --git a/src/mame/includes/mjkjidai.h b/src/mame/includes/mjkjidai.h
index d84c108e90c..eaef623bba7 100644
--- a/src/mame/includes/mjkjidai.h
+++ b/src/mame/includes/mjkjidai.h
@@ -15,6 +15,8 @@ public:
size_t m_nvram_size;
int m_display_enable;
tilemap_t *m_bg_tilemap;
+
+ UINT8 m_nmi_mask;
};
diff --git a/src/mame/includes/pacman.h b/src/mame/includes/pacman.h
index 8a42268cd23..2fd5d348718 100644
--- a/src/mame/includes/pacman.h
+++ b/src/mame/includes/pacman.h
@@ -29,6 +29,7 @@ public:
UINT8 m_bgpriority;
int m_xoffsethack;
UINT8 m_inv_spr;
+ UINT8 m_irq_mask;
};
diff --git a/src/mame/includes/pbaction.h b/src/mame/includes/pbaction.h
index 14f0e89f76c..0c47e147dd0 100644
--- a/src/mame/includes/pbaction.h
+++ b/src/mame/includes/pbaction.h
@@ -28,6 +28,8 @@ public:
/* devices */
device_t *m_maincpu;
device_t *m_audiocpu;
+
+ UINT8 m_nmi_mask;
};
diff --git a/src/mame/includes/popper.h b/src/mame/includes/popper.h
index e3cae69dcdc..536314108a6 100644
--- a/src/mame/includes/popper.h
+++ b/src/mame/includes/popper.h
@@ -30,6 +30,8 @@ public:
/* devices */
device_t *m_audiocpu;
+
+ UINT8 m_nmi_mask;
};
diff --git a/src/mame/includes/punchout.h b/src/mame/includes/punchout.h
index 27b9abfd4dc..f83f10d7027 100644
--- a/src/mame/includes/punchout.h
+++ b/src/mame/includes/punchout.h
@@ -22,6 +22,8 @@ public:
tilemap_t *m_spr2_tilemap;
int m_palette_reverse_top;
int m_palette_reverse_bot;
+
+ UINT8 m_nmi_mask;
};
diff --git a/src/mame/includes/rocnrope.h b/src/mame/includes/rocnrope.h
index f2d970d1fb8..9a2fa3fb2b1 100644
--- a/src/mame/includes/rocnrope.h
+++ b/src/mame/includes/rocnrope.h
@@ -13,6 +13,8 @@ public:
/* video-related */
tilemap_t *m_bg_tilemap;
+
+ UINT8 m_irq_mask;
};
/*----------- defined in video/rocnrope.c -----------*/
diff --git a/src/mame/includes/rollrace.h b/src/mame/includes/rollrace.h
index 2d7b714f904..119f192a58b 100644
--- a/src/mame/includes/rollrace.h
+++ b/src/mame/includes/rollrace.h
@@ -17,6 +17,9 @@ public:
int m_ra_spritebank;
UINT8 *m_spriteram;
size_t m_spriteram_size;
+
+ UINT8 m_nmi_mask;
+ UINT8 m_sound_nmi_mask;
};
diff --git a/src/mame/includes/sbasketb.h b/src/mame/includes/sbasketb.h
index deb421761fe..dedb895dc6a 100644
--- a/src/mame/includes/sbasketb.h
+++ b/src/mame/includes/sbasketb.h
@@ -14,6 +14,8 @@ public:
/* video-related */
tilemap_t *m_bg_tilemap;
+
+ UINT8 m_irq_mask;
};
/*----------- defined in video/sbasketb.c -----------*/
diff --git a/src/mame/includes/slapfght.h b/src/mame/includes/slapfght.h
index 4e0ddcfe545..ecc2af7dca5 100644
--- a/src/mame/includes/slapfght.h
+++ b/src/mame/includes/slapfght.h
@@ -52,6 +52,7 @@ public:
int m_slapfight_palette_bank;
tilemap_t *m_pf1_tilemap;
tilemap_t *m_fix_tilemap;
+ UINT8 m_irq_mask;
};
diff --git a/src/mame/includes/snk6502.h b/src/mame/includes/snk6502.h
index a968658c605..908646deab9 100644
--- a/src/mame/includes/snk6502.h
+++ b/src/mame/includes/snk6502.h
@@ -29,6 +29,8 @@ public:
tilemap_t *m_fg_tilemap;
rgb_t m_palette[64];
+
+ UINT8 m_irq_mask;
};
diff --git a/src/mame/includes/solomon.h b/src/mame/includes/solomon.h
index 07c03ba6746..52c0c9a96a1 100644
--- a/src/mame/includes/solomon.h
+++ b/src/mame/includes/solomon.h
@@ -13,6 +13,8 @@ public:
tilemap_t *m_bg_tilemap;
tilemap_t *m_fg_tilemap;
+
+ UINT8 m_nmi_mask;
};
diff --git a/src/mame/includes/spcforce.h b/src/mame/includes/spcforce.h
index bab1ecbc7ac..30903374143 100644
--- a/src/mame/includes/spcforce.h
+++ b/src/mame/includes/spcforce.h
@@ -10,6 +10,8 @@ public:
int m_sn76496_latch;
int m_sn76496_select;
+
+ UINT8 m_irq_mask;
};
diff --git a/src/mame/includes/ssozumo.h b/src/mame/includes/ssozumo.h
index 80b4bddf10e..92e1f7f3d86 100644
--- a/src/mame/includes/ssozumo.h
+++ b/src/mame/includes/ssozumo.h
@@ -14,6 +14,8 @@ public:
tilemap_t *m_bg_tilemap;
tilemap_t *m_fg_tilemap;
+
+ UINT8 m_sound_nmi_mask;
};
diff --git a/src/mame/includes/superqix.h b/src/mame/includes/superqix.h
index 43b2e3c3f15..efb26812d88 100644
--- a/src/mame/includes/superqix.h
+++ b/src/mame/includes/superqix.h
@@ -30,6 +30,7 @@ public:
tilemap_t *m_bg_tilemap;
UINT8 *m_spriteram;
size_t m_spriteram_size;
+ UINT8 m_nmi_mask;
};
diff --git a/src/mame/includes/tagteam.h b/src/mame/includes/tagteam.h
index b0702d06641..87fb6b767df 100644
--- a/src/mame/includes/tagteam.h
+++ b/src/mame/includes/tagteam.h
@@ -8,6 +8,8 @@ public:
UINT8 *m_colorram;
int m_palettebank;
tilemap_t *m_bg_tilemap;
+
+ UINT8 m_sound_nmi_mask;
};
diff --git a/src/mame/includes/tankbust.h b/src/mame/includes/tankbust.h
index f641d887c34..967225a7438 100644
--- a/src/mame/includes/tankbust.h
+++ b/src/mame/includes/tankbust.h
@@ -17,6 +17,8 @@ public:
UINT8 m_yscroll[2];
UINT8 *m_spriteram;
size_t m_spriteram_size;
+
+ UINT8 m_irq_mask;
};
diff --git a/src/mame/includes/thepit.h b/src/mame/includes/thepit.h
index b435d7e6173..8ebfa124028 100644
--- a/src/mame/includes/thepit.h
+++ b/src/mame/includes/thepit.h
@@ -18,6 +18,7 @@ public:
tilemap_t *m_solid_tilemap;
tilemap_t *m_tilemap;
UINT8 *m_dummy_tile;
+ UINT8 m_nmi_mask;
};
diff --git a/src/mame/includes/tmnt.h b/src/mame/includes/tmnt.h
index ee4086b55b8..2dee8d888c8 100644
--- a/src/mame/includes/tmnt.h
+++ b/src/mame/includes/tmnt.h
@@ -58,6 +58,8 @@ public:
/* memory buffers */
INT16 m_sampledata[0x40000];
+
+ UINT8 m_irq5_mask;
};
diff --git a/src/mame/includes/tp84.h b/src/mame/includes/tp84.h
index e24ff5bb5b0..1720eb6b516 100644
--- a/src/mame/includes/tp84.h
+++ b/src/mame/includes/tp84.h
@@ -17,6 +17,8 @@ public:
UINT8 *m_flipscreen_y;
tilemap_t *m_bg_tilemap;
tilemap_t *m_fg_tilemap;
+
+ UINT8 m_sub_irq_mask;
};
diff --git a/src/mame/includes/trackfld.h b/src/mame/includes/trackfld.h
index 68e13a8a29c..67cc44f4c22 100644
--- a/src/mame/includes/trackfld.h
+++ b/src/mame/includes/trackfld.h
@@ -27,6 +27,8 @@ public:
int m_sprite_bank2;
int m_old_gfx_bank; // needed by atlantol
int m_sprites_gfx_banked;
+
+ UINT8 m_irq_mask;
};
diff --git a/src/mame/includes/trucocl.h b/src/mame/includes/trucocl.h
index 90698564cf2..331eb9acedf 100644
--- a/src/mame/includes/trucocl.h
+++ b/src/mame/includes/trucocl.h
@@ -9,6 +9,8 @@ public:
UINT8 *m_videoram;
UINT8 *m_colorram;
tilemap_t *m_bg_tilemap;
+
+ UINT8 m_irq_mask;
};
diff --git a/src/mame/includes/vastar.h b/src/mame/includes/vastar.h
index 1bb72043b3d..92c6634d7d9 100644
--- a/src/mame/includes/vastar.h
+++ b/src/mame/includes/vastar.h
@@ -20,6 +20,8 @@ public:
tilemap_t *m_bg2_tilemap;
UINT8 *m_sharedram;
+
+ UINT8 m_nmi_mask;
};
diff --git a/src/mame/includes/wiping.h b/src/mame/includes/wiping.h
index 8320702acbc..f79ed9ce697 100644
--- a/src/mame/includes/wiping.h
+++ b/src/mame/includes/wiping.h
@@ -4,14 +4,15 @@ public:
wiping_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag) { }
- UINT8 *m_sharedram1;
- UINT8 *m_sharedram2;
UINT8 *m_videoram;
UINT8 *m_colorram;
int m_flipscreen;
UINT8 *m_soundregs;
UINT8 *m_spriteram;
size_t m_spriteram_size;
+
+ UINT8 m_main_irq_mask;
+ UINT8 m_sound_irq_mask;
};
diff --git a/src/mame/includes/wiz.h b/src/mame/includes/wiz.h
index 84c06c6104c..fc45bab22df 100644
--- a/src/mame/includes/wiz.h
+++ b/src/mame/includes/wiz.h
@@ -22,6 +22,7 @@ public:
UINT8 *m_spriteram2;
size_t m_spriteram_size;
UINT8 m_nmi_mask;
+ UINT8 m_sound_irq_mask;
};
diff --git a/src/mame/includes/yiear.h b/src/mame/includes/yiear.h
index 9ad3bb0bbfa..3a078004768 100644
--- a/src/mame/includes/yiear.h
+++ b/src/mame/includes/yiear.h
@@ -13,7 +13,8 @@ public:
/* video-related */
tilemap_t *m_bg_tilemap;
- int m_yiear_nmi_enable;
+ UINT8 m_yiear_nmi_enable;
+ UINT8 m_yiear_irq_enable;
};
diff --git a/src/mame/includes/zaccaria.h b/src/mame/includes/zaccaria.h
index ebf9da1c263..1149b4b08b0 100644
--- a/src/mame/includes/zaccaria.h
+++ b/src/mame/includes/zaccaria.h
@@ -15,6 +15,7 @@ public:
tilemap_t *m_bg_tilemap;
UINT8 *m_spriteram;
UINT8 *m_spriteram2;
+ UINT8 m_nmi_mask;
};
diff --git a/src/mame/machine/slapfght.c b/src/mame/machine/slapfght.c
index 025a92ca90d..26c6385e415 100644
--- a/src/mame/machine/slapfght.c
+++ b/src/mame/machine/slapfght.c
@@ -53,13 +53,17 @@ WRITE8_HANDLER( slapfight_port_01_w )
/* Disable and clear hardware interrupt */
WRITE8_HANDLER( slapfight_port_06_w )
{
- interrupt_enable_w(space,0,0);
+ slapfght_state *state = space->machine().driver_data<slapfght_state>();
+
+ state->m_irq_mask = 0;
}
/* Enable hardware interrupt */
WRITE8_HANDLER( slapfight_port_07_w )
{
- interrupt_enable_w(space,0,1);
+ slapfght_state *state = space->machine().driver_data<slapfght_state>();
+
+ state->m_irq_mask = 1;
}
WRITE8_HANDLER( slapfight_port_08_w )
diff --git a/src/mame/video/appoooh.c b/src/mame/video/appoooh.c
index e9f38dc177e..8021149f3f4 100644
--- a/src/mame/video/appoooh.c
+++ b/src/mame/video/appoooh.c
@@ -184,7 +184,7 @@ WRITE8_HANDLER( appoooh_out_w )
{
appoooh_state *state = space->machine().driver_data<appoooh_state>();
/* bit 0 controls NMI */
- interrupt_enable_w(space,0,data & 0x01);
+ state->m_nmi_mask = data & 1;
/* bit 1 flip screen */
flip_screen_set(space->machine(), data & 0x02);
diff --git a/src/mame/video/bankp.c b/src/mame/video/bankp.c
index 5ac252fc636..d30db7515cd 100644
--- a/src/mame/video/bankp.c
+++ b/src/mame/video/bankp.c
@@ -129,7 +129,7 @@ WRITE8_HANDLER( bankp_out_w )
/* bits 2-3 unknown (2 is used) */
/* bit 4 controls NMI */
- interrupt_enable_w(space, 0, (data & 0x10) >> 4);
+ state->m_nmi_mask = (data & 0x10) >> 4;
/* bit 5 controls screen flip */
flip_screen_set(space->machine(), data & 0x20);
diff --git a/src/mame/video/cheekyms.c b/src/mame/video/cheekyms.c
index a2215828771..d0fb626178a 100644
--- a/src/mame/video/cheekyms.c
+++ b/src/mame/video/cheekyms.c
@@ -59,7 +59,7 @@ WRITE8_HANDLER( cheekyms_port_80_w )
*state->m_port_80 = data;
/* d2 - interrupt enable */
- interrupt_enable_w(space, offset, data & 0x04);
+ state->m_irq_mask = data & 4;
}
diff --git a/src/mame/video/mjkjidai.c b/src/mame/video/mjkjidai.c
index f6c02db4a91..4abadb752ab 100644
--- a/src/mame/video/mjkjidai.c
+++ b/src/mame/video/mjkjidai.c
@@ -56,7 +56,7 @@ WRITE8_HANDLER( mjkjidai_ctrl_w )
// logerror("%04x: port c0 = %02x\n",cpu_get_pc(&space->device()),data);
/* bit 0 = NMI enable */
- interrupt_enable_w(space,0,data & 1);
+ state->m_nmi_mask = data & 1;
/* bit 1 = flip screen */
flip_screen_set(space->machine(), data & 0x02);
diff --git a/src/mame/video/snk6502.c b/src/mame/video/snk6502.c
index 6d00762b00c..693cf34db87 100644
--- a/src/mame/video/snk6502.c
+++ b/src/mame/video/snk6502.c
@@ -268,6 +268,7 @@ PALETTE_INIT( satansat )
WRITE8_HANDLER( satansat_b002_w )
{
+ snk6502_state *state = space->machine().driver_data<snk6502_state>();
/* bit 0 flips screen */
if (flip_screen_get(space->machine()) != (data & 0x01))
@@ -276,11 +277,8 @@ WRITE8_HANDLER( satansat_b002_w )
tilemap_mark_all_tiles_dirty_all(space->machine());
}
- /* bit 1 enables interrups */
- /* it controls only IRQs, not NMIs. Here I am affecting both, which */
- /* is wrong. */
-
- interrupt_enable_w(space,0,data & 0x02);
+ /* bit 1 enables interrupts */
+ state->m_irq_mask = data & 2;
/* other bits unused */
}
diff --git a/src/mame/video/superqix.c b/src/mame/video/superqix.c
index 1b297a3b3d1..aa3a0dd4fd3 100644
--- a/src/mame/video/superqix.c
+++ b/src/mame/video/superqix.c
@@ -118,6 +118,7 @@ WRITE8_HANDLER( superqix_bitmapram2_w )
WRITE8_HANDLER( pbillian_0410_w )
{
+ superqix_state *state = space->machine().driver_data<superqix_state>();
/*
-------0 ? [not used]
------1- coin counter 1
@@ -132,7 +133,7 @@ WRITE8_HANDLER( pbillian_0410_w )
memory_set_bank(space->machine(), "bank1", (data & 0x08) >> 3);
- interrupt_enable_w(space,0,data & 0x10);
+ state->m_nmi_mask = data & 0x10;
flip_screen_set(space->machine(), data & 0x20);
}
@@ -150,7 +151,7 @@ WRITE8_HANDLER( superqix_0410_w )
state->m_show_bitmap = (data & 0x04) >> 2;
/* bit 3 enables NMI */
- interrupt_enable_w(space,offset,data & 0x08);
+ state->m_nmi_mask = data & 0x08;
/* bits 4-5 control ROM bank */
memory_set_bank(space->machine(), "bank1", (data & 0x30) >> 4);
diff --git a/src/mame/video/tmnt.c b/src/mame/video/tmnt.c
index 9db8f8e5be3..af381a939fb 100644
--- a/src/mame/video/tmnt.c
+++ b/src/mame/video/tmnt.c
@@ -341,7 +341,7 @@ WRITE16_HANDLER( tmnt_0a0000_w )
state->m_last = data & 0x08;
/* bit 5 = irq enable */
- interrupt_enable_w(space, 0, data & 0x20);
+ state->m_irq5_mask = data & 0x20;
/* bit 7 = enable char ROM reading through the video RAM */
k052109_set_rmrd_line(state->m_k052109, (data & 0x80) ? ASSERT_LINE : CLEAR_LINE);
diff --git a/src/mame/video/yiear.c b/src/mame/video/yiear.c
index b788e2ab5f2..cfad5195048 100644
--- a/src/mame/video/yiear.c
+++ b/src/mame/video/yiear.c
@@ -80,7 +80,7 @@ WRITE8_HANDLER( yiear_control_w )
state->m_yiear_nmi_enable = data & 0x02;
/* bit 2 is IRQ enable */
- interrupt_enable_w(space, 0, data & 0x04);
+ state->m_yiear_irq_enable = data & 0x04;
/* bits 3 and 4 are coin counters */
coin_counter_w(space->machine(), 0, data & 0x08);