summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Angelo Salese <angelosa@users.noreply.github.com>2011-12-02 18:41:58 +0000
committer Angelo Salese <angelosa@users.noreply.github.com>2011-12-02 18:41:58 +0000
commita5a10c2e76d479ff53f16f3404d999c618ba3ded (patch)
treebab707c5c240b89def836d42419437ffe93edb47
parent2376785be26856576830189490b743c861fe7c39 (diff)
Removed deprecat.h from astrocorp.c / Added Sound NMI mask to Alpha68k II / V HW games
-rw-r--r--src/mame/drivers/alpha68k.c67
-rw-r--r--src/mame/drivers/astrocorp.c16
-rw-r--r--src/mame/includes/alpha68k.h2
3 files changed, 54 insertions, 31 deletions
diff --git a/src/mame/drivers/alpha68k.c b/src/mame/drivers/alpha68k.c
index de35c73fde6..3a42e212dac 100644
--- a/src/mame/drivers/alpha68k.c
+++ b/src/mame/drivers/alpha68k.c
@@ -23,6 +23,7 @@
TODO:
- Super Stingray MCU irq controls timer speed, needs the MCU to be hooked up.
- Super Champion Baseball "ball speed" protection
+- Fix sound CPU crashes properly on Alpha 68k II / V HW games (nested NMIs)
General notes:
@@ -1833,13 +1834,36 @@ static const ay8910_interface ay8910_config =
DEVCB_MEMORY_HANDLER("audiocpu", PROGRAM, soundlatch_r)
};
+static WRITE8_HANDLER( porta_w )
+{
+ alpha68k_state *state = space->machine().driver_data<alpha68k_state>();
+
+ printf("%02x\n",data);
+
+ if(data == 0xff)
+ return; // skip
+
+ /* guess */
+ if(data == 0 && state->m_sound_pa_latch) // 1 -> 0 transition = enables NMI
+ state->m_sound_nmi_mask = 1;
+
+ if(data && state->m_sound_pa_latch == 0) // 0 -> 1 transition = disables NMI
+ state->m_sound_nmi_mask = 0;
+
+ state->m_sound_pa_latch = data & 1;
+}
+
static const ym2203_interface ym2203_config =
{
{
AY8910_LEGACY_OUTPUT,
AY8910_DEFAULT_LOADS,
- DEVCB_MEMORY_HANDLER("audiocpu", PROGRAM, soundlatch_r)
- }
+ DEVCB_MEMORY_HANDLER("audiocpu", PROGRAM, soundlatch_r),
+ DEVCB_NULL,
+ DEVCB_MEMORY_HANDLER("audiocpu", PROGRAM, porta_w),
+ DEVCB_NULL
+ },
+ NULL
};
static void YM3812_irq( device_t *device, int param )
@@ -1951,10 +1975,8 @@ static MACHINE_CONFIG_START( sstingry, alpha68k_state )
MCFG_CPU_ADD("audiocpu", Z80, 3579545)
MCFG_CPU_PROGRAM_MAP(sstingry_sound_map)
MCFG_CPU_IO_MAP(kyros_sound_portmap)
-//AT
- MCFG_CPU_VBLANK_INT_HACK(irq0_line_hold, 2)
+ MCFG_CPU_PERIODIC_INT(irq0_line_hold, 2*60)
MCFG_CPU_PERIODIC_INT(nmi_line_pulse, 4000)
-//ZT
MCFG_MACHINE_START(common)
MCFG_MACHINE_RESET(common)
@@ -1970,12 +1992,9 @@ static MACHINE_CONFIG_START( sstingry, alpha68k_state )
MCFG_GFXDECODE(sstingry)
MCFG_PALETTE_LENGTH(256 + 1)
-//AT
MCFG_PALETTE_INIT(kyros)
-//ZT
/* sound hardware */
-//AT
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ym1", YM2203, 3000000)
@@ -1989,7 +2008,6 @@ static MACHINE_CONFIG_START( sstingry, alpha68k_state )
MCFG_SOUND_ADD("dac", DAC, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
-//ZT
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( kyros, alpha68k_state )
@@ -2003,10 +2021,8 @@ static MACHINE_CONFIG_START( kyros, alpha68k_state )
MCFG_CPU_ADD("audiocpu", Z80, XTAL_24MHz/6) /* Verified on bootleg PCB */
MCFG_CPU_PROGRAM_MAP(kyros_sound_map)
MCFG_CPU_IO_MAP(kyros_sound_portmap)
-//AT
- MCFG_CPU_VBLANK_INT_HACK(irq0_line_hold, 2)
+ MCFG_CPU_PERIODIC_INT(irq0_line_hold, 2*60)
MCFG_CPU_PERIODIC_INT(nmi_line_pulse, 4000)
-//ZT
MCFG_MACHINE_START(common)
MCFG_MACHINE_RESET(common)
@@ -2026,7 +2042,6 @@ static MACHINE_CONFIG_START( kyros, alpha68k_state )
MCFG_PALETTE_INIT(kyros)
/* sound hardware */
-//AT
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ym1", YM2203, XTAL_24MHz/12) /* Verified on bootleg PCB */
@@ -2040,7 +2055,6 @@ static MACHINE_CONFIG_START( kyros, alpha68k_state )
MCFG_SOUND_ADD("dac", DAC, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
-//ZT
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( jongbou, alpha68k_state )
@@ -2054,7 +2068,7 @@ static MACHINE_CONFIG_START( jongbou, alpha68k_state )
MCFG_CPU_ADD("audiocpu", Z80, 4000000)
MCFG_CPU_PROGRAM_MAP(jongbou_sound_map)
MCFG_CPU_IO_MAP(jongbou_sound_portmap)
- MCFG_CPU_VBLANK_INT_HACK(irq0_line_hold, 160) // guess, controls sound speed
+ MCFG_CPU_PERIODIC_INT(irq0_line_hold, 160*60)
MCFG_MACHINE_START(common)
MCFG_MACHINE_RESET(common)
@@ -2105,10 +2119,8 @@ static MACHINE_CONFIG_START( alpha68k_I, alpha68k_state )
MCFG_GFXDECODE(paddle)
-//AT
MCFG_PALETTE_LENGTH(1024)
MCFG_PALETTE_INIT(paddlem)
-//ZT
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -2118,6 +2130,14 @@ static MACHINE_CONFIG_START( alpha68k_I, alpha68k_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
+static INTERRUPT_GEN( alpha68k_sound_nmi )
+{
+ alpha68k_state *state = device->machine().driver_data<alpha68k_state>();
+
+ if(state->m_sound_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
static MACHINE_CONFIG_START( alpha68k_II, alpha68k_state )
/* basic machine hardware */
@@ -2125,10 +2145,10 @@ static MACHINE_CONFIG_START( alpha68k_II, alpha68k_state )
MCFG_CPU_PROGRAM_MAP(alpha68k_II_map)
MCFG_CPU_VBLANK_INT("screen", irq3_line_hold)/* VBL */
- MCFG_CPU_ADD("audiocpu", Z80, /*3579545*/3579545*2) /* Unlikely but needed to stop nested NMI's */
+ MCFG_CPU_ADD("audiocpu", Z80, 3579545*2) /* Unlikely but needed to stop nested NMI's */
MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_CPU_IO_MAP(sound_portmap)
- MCFG_CPU_PERIODIC_INT(nmi_line_pulse, 7500) //AT
+ MCFG_CPU_PERIODIC_INT(alpha68k_sound_nmi, 7500)
MCFG_MACHINE_START(alpha68k_II)
MCFG_MACHINE_RESET(alpha68k_II)
@@ -2167,7 +2187,6 @@ static MACHINE_CONFIG_DERIVED( btlfieldb, alpha68k_II )
MCFG_CPU_PERIODIC_INT(irq2_line_hold,60*4) // MCU irq
MACHINE_CONFIG_END
-//AT
static MACHINE_CONFIG_START( alpha68k_II_gm, alpha68k_state )
/* basic machine hardware */
@@ -2176,10 +2195,10 @@ static MACHINE_CONFIG_START( alpha68k_II_gm, alpha68k_state )
MCFG_CPU_VBLANK_INT("screen",irq1_line_hold)
MCFG_CPU_PERIODIC_INT(irq2_line_hold,60*3) // MCU irq
- MCFG_CPU_ADD("audiocpu", Z80, 4000000*2)
+ MCFG_CPU_ADD("audiocpu", Z80, 4000000*2) // TODO: fix this
MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_CPU_IO_MAP(sound_portmap)
- MCFG_CPU_PERIODIC_INT(nmi_line_pulse, 7500)
+ MCFG_CPU_PERIODIC_INT(alpha68k_sound_nmi, 7500)
MCFG_MACHINE_START(alpha68k_II)
MCFG_MACHINE_RESET(alpha68k_II)
@@ -2223,7 +2242,7 @@ static MACHINE_CONFIG_START( alpha68k_V, alpha68k_state )
MCFG_CPU_ADD("audiocpu", Z80, /*3579545*/3579545*2) /* Unlikely but needed to stop nested NMI's */
MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_CPU_IO_MAP(sound_portmap)
- MCFG_CPU_PERIODIC_INT(nmi_line_pulse, 8500) //AT
+ MCFG_CPU_PERIODIC_INT(alpha68k_sound_nmi, 8500)
MCFG_MACHINE_START(alpha68k_V)
MCFG_MACHINE_RESET(alpha68k_V)
@@ -2266,7 +2285,7 @@ static MACHINE_CONFIG_START( alpha68k_V_sb, alpha68k_state )
MCFG_CPU_ADD("audiocpu", Z80, /*3579545*/3579545*2) /* Unlikely but needed to stop nested NMI's */
MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_CPU_IO_MAP(sound_portmap)
- MCFG_CPU_PERIODIC_INT(nmi_line_pulse, 8500) //AT
+ MCFG_CPU_PERIODIC_INT(alpha68k_sound_nmi, 8500)
MCFG_MACHINE_START(alpha68k_V)
MCFG_MACHINE_RESET(alpha68k_V)
diff --git a/src/mame/drivers/astrocorp.c b/src/mame/drivers/astrocorp.c
index 3e44e764ea5..f637fd3b6ba 100644
--- a/src/mame/drivers/astrocorp.c
+++ b/src/mame/drivers/astrocorp.c
@@ -499,13 +499,15 @@ static MACHINE_CONFIG_DERIVED( showhanc, showhand )
MACHINE_CONFIG_END
-static INTERRUPT_GEN( skilldrp_irq )
+static TIMER_DEVICE_CALLBACK( skilldrp_scanline )
{
- switch (cpu_getiloops(device))
- {
- case 0: device_set_input_line(device, 4, HOLD_LINE); break; // sprites, sound, i/o
- case 1: device_set_input_line(device, 2, HOLD_LINE); break; // palette
- }
+ int scanline = param;
+
+ if(scanline == 240) // vblank-out irq. controls sprites, sound, i/o
+ cputag_set_input_line(timer.machine(), "maincpu", 4, HOLD_LINE);
+
+ if(scanline == 0) // vblank-in? controls palette
+ cputag_set_input_line(timer.machine(), "maincpu", 2, HOLD_LINE);
}
static MACHINE_CONFIG_START( skilldrp, astrocorp_state )
@@ -513,7 +515,7 @@ static MACHINE_CONFIG_START( skilldrp, astrocorp_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, XTAL_24MHz / 2) // JX-1689F1028N GRX586.V5
MCFG_CPU_PROGRAM_MAP(skilldrp_map)
- MCFG_CPU_VBLANK_INT_HACK(skilldrp_irq, 2)
+ MCFG_TIMER_ADD_SCANLINE("scantimer", skilldrp_scanline, "screen", 0, 1)
MCFG_NVRAM_ADD_0FILL("nvram")
MCFG_EEPROM_93C46_ADD("eeprom")
diff --git a/src/mame/includes/alpha68k.h b/src/mame/includes/alpha68k.h
index b104fbe4e18..af591063dd0 100644
--- a/src/mame/includes/alpha68k.h
+++ b/src/mame/includes/alpha68k.h
@@ -40,6 +40,8 @@ public:
/* devices */
device_t *m_audiocpu;
+ UINT8 m_sound_nmi_mask;
+ UINT8 m_sound_pa_latch;
};
/* game_id - used to deal with a few game specific situations */