From 02203fedfa63a97b93be754d3e0d820e01f6bd9f Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Tue, 29 Nov 2011 17:08:30 +0000 Subject: 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 ... -.-" --- src/emu/machine/generic.c | 22 ------------- src/emu/machine/generic.h | 2 -- src/mame/drivers/appoooh.c | 10 +++++- src/mame/drivers/bagman.c | 28 +++++++++++------ src/mame/drivers/bankp.c | 10 +++++- src/mame/drivers/bombjack.c | 19 +++++++++-- src/mame/drivers/carjmbre.c | 20 ++++++++++-- src/mame/drivers/cclimber.c | 29 ++++++++++++----- src/mame/drivers/cheekyms.c | 11 ++++++- src/mame/drivers/circusc.c | 17 ++++++++-- src/mame/drivers/dkong.c | 24 +++++++++++--- src/mame/drivers/espial.c | 10 +++--- src/mame/drivers/fastfred.c | 41 ++++++++++++++++++++---- src/mame/drivers/galaxold.c | 23 +++++++++++--- src/mame/drivers/gei.c | 18 +++++++++-- src/mame/drivers/gng.c | 18 +++++++++++ src/mame/drivers/gyruss.c | 37 +++++++++++++++++++--- src/mame/drivers/hyperspt.c | 19 +++++++++-- src/mame/drivers/jrpacman.c | 17 ++++++++-- src/mame/drivers/kyugo.c | 19 +++++++++-- src/mame/drivers/lwings.c | 8 +++-- src/mame/drivers/m63.c | 25 +++++++++++++-- src/mame/drivers/mainevt.c | 26 ++++++++++++--- src/mame/drivers/marineb.c | 39 +++++++++++++++-------- src/mame/drivers/mario.c | 20 ++++++++++-- src/mame/drivers/megazone.c | 19 +++++++++-- src/mame/drivers/mermaid.c | 20 ++++++++++-- src/mame/drivers/mikie.c | 19 +++++++++-- src/mame/drivers/mjkjidai.c | 9 +++++- src/mame/drivers/pacman.c | 60 ++++++++++++++++++++++++----------- src/mame/drivers/pbaction.c | 18 +++++++++-- src/mame/drivers/pengo.c | 21 +++++++++++-- src/mame/drivers/popper.c | 21 +++++++++++-- src/mame/drivers/punchout.c | 19 +++++++++-- src/mame/drivers/rocnrope.c | 19 +++++++++-- src/mame/drivers/rollrace.c | 39 ++++++++++++++++++++--- src/mame/drivers/sbasketb.c | 17 ++++++++-- src/mame/drivers/shootout.c | 3 +- src/mame/drivers/slapfght.c | 17 +++++++--- src/mame/drivers/snk6502.c | 4 ++- src/mame/drivers/solomon.c | 20 ++++++++++-- src/mame/drivers/spcforce.c | 19 +++++++++-- src/mame/drivers/ssozumo.c | 20 ++++++++++-- src/mame/drivers/superqix.c | 30 ++++++++++++------ src/mame/drivers/tagteam.c | 23 +++++++++++--- src/mame/drivers/tankbatt.c | 2 -- src/mame/drivers/tankbust.c | 24 ++++++++------ src/mame/drivers/thepit.c | 20 ++++++++++-- src/mame/drivers/tmnt.c | 16 ++++++++-- src/mame/drivers/tp84.c | 19 +++++++++-- src/mame/drivers/trackfld.c | 68 ++++++++++++++++++++++++--------------- src/mame/drivers/trucocl.c | 14 ++++++--- src/mame/drivers/vastar.c | 21 +++++++++---- src/mame/drivers/wiping.c | 75 ++++++++++++++++++++++---------------------- src/mame/drivers/wiz.c | 32 ++++++++++++++----- src/mame/drivers/yiear.c | 12 +++++-- src/mame/drivers/zaccaria.c | 19 +++++++---- src/mame/etc/jrcrypt.c | 6 ++-- src/mame/includes/appoooh.h | 2 ++ src/mame/includes/bagman.h | 2 ++ src/mame/includes/bankp.h | 2 ++ src/mame/includes/bombjack.h | 20 ++++++------ src/mame/includes/carjmbre.h | 2 ++ src/mame/includes/cclimber.h | 1 + src/mame/includes/cheekyms.h | 2 ++ src/mame/includes/circusc.h | 2 ++ src/mame/includes/dkong.h | 1 + src/mame/includes/fastfred.h | 3 ++ src/mame/includes/galaxold.h | 2 ++ src/mame/includes/gyruss.h | 3 ++ src/mame/includes/hyperspt.h | 2 ++ src/mame/includes/kyugo.h | 2 ++ src/mame/includes/lwings.h | 1 + src/mame/includes/mainevt.h | 1 + src/mame/includes/marineb.h | 2 ++ src/mame/includes/mario.h | 2 ++ src/mame/includes/megazone.h | 2 ++ src/mame/includes/mermaid.h | 2 ++ src/mame/includes/mikie.h | 2 ++ src/mame/includes/mjkjidai.h | 2 ++ src/mame/includes/pacman.h | 1 + src/mame/includes/pbaction.h | 2 ++ src/mame/includes/popper.h | 2 ++ src/mame/includes/punchout.h | 2 ++ src/mame/includes/rocnrope.h | 2 ++ src/mame/includes/rollrace.h | 3 ++ src/mame/includes/sbasketb.h | 2 ++ src/mame/includes/slapfght.h | 1 + src/mame/includes/snk6502.h | 2 ++ src/mame/includes/solomon.h | 2 ++ src/mame/includes/spcforce.h | 2 ++ src/mame/includes/ssozumo.h | 2 ++ src/mame/includes/superqix.h | 1 + src/mame/includes/tagteam.h | 2 ++ src/mame/includes/tankbust.h | 2 ++ src/mame/includes/thepit.h | 1 + src/mame/includes/tmnt.h | 2 ++ src/mame/includes/tp84.h | 2 ++ src/mame/includes/trackfld.h | 2 ++ src/mame/includes/trucocl.h | 2 ++ src/mame/includes/vastar.h | 2 ++ src/mame/includes/wiping.h | 5 +-- src/mame/includes/wiz.h | 1 + src/mame/includes/yiear.h | 3 +- src/mame/includes/zaccaria.h | 1 + src/mame/machine/slapfght.c | 8 +++-- src/mame/video/appoooh.c | 2 +- src/mame/video/bankp.c | 2 +- src/mame/video/cheekyms.c | 2 +- src/mame/video/mjkjidai.c | 2 +- src/mame/video/snk6502.c | 8 ++--- src/mame/video/superqix.c | 5 +-- src/mame/video/tmnt.c | 2 +- src/mame/video/yiear.c | 2 +- 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + 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(); + + 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(); + 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(); + + 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(); + + 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(); + + 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(); 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(); 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(); + + state->m_nmi_mask = data & 1; +} + +static WRITE8_HANDLER( sound_nmi_mask_w ) +{ + fastfred_state *state = space->machine().driver_data(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); /* 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(); /* 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(); + + 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(); + + state->m_master_nmi_mask = data & 1; +} + +static WRITE8_HANDLER( slave_irq_mask_w ) +{ + gyruss_state *state = space->machine().driver_data(); + + 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("audio2"); } +static INTERRUPT_GEN( master_vblank_irq ) +{ + gyruss_state *state = device->machine().driver_data(); + + 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(); + + 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(); + + 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(); + + 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(); + 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(); + + 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(); + + 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(); + + 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(); + /* 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); - //interrupt_enable = 0; - cpu_interrupt_enable(state->m_maincpu, 0); -} - static MACHINE_RESET( marineb ) { marineb_state *state = machine.driver_data(); @@ -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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + state->m_nmi_mask = data & 1; +} + +static WRITE8_HANDLER( sound_nmi_mask_w ) +{ + rollrace_state *state = space->machine().driver_data(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + 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(); + /* 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(); + /* 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(); + + 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(); + + 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(); 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + 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(); - return state->m_sharedram1[offset]; -} - -static READ8_HANDLER( shared2_r ) -{ - wiping_state *state = space->machine().driver_data(); - return state->m_sharedram2[offset]; -} - -static WRITE8_HANDLER( shared1_w ) -{ - wiping_state *state = space->machine().driver_data(); - state->m_sharedram1[offset] = data; -} - -static WRITE8_HANDLER( shared2_w ) -{ - wiping_state *state = space->machine().driver_data(); - 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(); + + state->m_main_irq_mask = data & 1; +} + +static WRITE8_HANDLER( sound_irq_mask_w ) +{ + wiping_state *state = space->machine().driver_data(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); + + 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(); - /* 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(); + 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(); + + 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 -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(); + + 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(); + + 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(); /* 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(); /* 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(); /* -------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); -- cgit v1.2.3