summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/m72.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/m72.c')
-rw-r--r--src/mame/drivers/m72.c463
1 files changed, 125 insertions, 338 deletions
diff --git a/src/mame/drivers/m72.c b/src/mame/drivers/m72.c
index c2b767a6c45..ac1f92a19be 100644
--- a/src/mame/drivers/m72.c
+++ b/src/mame/drivers/m72.c
@@ -101,7 +101,7 @@ other supported games as well.
/***************************************************************************/
-MACHINE_START_MEMBER(m72_state,m72)
+void m72_state::machine_start()
{
m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m72_state::m72_scanline_interrupt),this));
@@ -123,7 +123,7 @@ TIMER_CALLBACK_MEMBER(m72_state::synch_callback)
machine().scheduler().boost_interleave(attotime::from_hz(MASTER_CLOCK/4/12), attotime::from_seconds(25));
}
-MACHINE_RESET_MEMBER(m72_state,m72)
+void m72_state::machine_reset()
{
m_irq_base = 0x20;
m_mcu_sample_addr = 0;
@@ -135,8 +135,8 @@ MACHINE_RESET_MEMBER(m72_state,m72)
MACHINE_RESET_MEMBER(m72_state,xmultipl)
{
+ m72_state::machine_reset();
m_irq_base = 0x08;
- m_scanline_timer->adjust(m_screen->time_until_pos(0));
}
MACHINE_RESET_MEMBER(m72_state,kengo)
@@ -1774,6 +1774,21 @@ static GFXDECODE_START( majtitle )
GFXDECODE_END
+static MACHINE_CONFIG_FRAGMENT( m72_audio_chips )
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+
+ MCFG_SOUND_ADD("m72", M72, 0);
+
+ MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK)
+ MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler))
+ MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
+ MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+
+ MCFG_DAC_ADD("dac")
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40)
+MACHINE_CONFIG_END
static MACHINE_CONFIG_START( m72_base, m72_state )
@@ -1785,9 +1800,7 @@ static MACHINE_CONFIG_START( m72_base, m72_state )
MCFG_CPU_ADD("soundcpu",Z80, SOUND_CLOCK)
MCFG_CPU_PROGRAM_MAP(sound_ram_map)
MCFG_CPU_IO_MAP(sound_portmap)
-
- MCFG_MACHINE_START_OVERRIDE(m72_state,m72)
- MCFG_MACHINE_RESET_OVERRIDE(m72_state,m72)
+
/* video hardware */
MCFG_GFXDECODE_ADD("gfxdecode", "palette", m72)
@@ -1800,23 +1813,11 @@ static MACHINE_CONFIG_START( m72_base, m72_state )
MCFG_VIDEO_START_OVERRIDE(m72_state,m72)
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
-
- MCFG_SOUND_ADD("m72", M72, 0);
-
- MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK)
- MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler))
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-
- MCFG_DAC_ADD("dac")
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40)
+ MCFG_FRAGMENT_ADD(m72_audio_chips)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( m72, m72_base )
- MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_MODIFY("soundcpu")
MCFG_CPU_PERIODIC_INT_DRIVER(m72_state, fake_nmi, 128*55) /* clocked by V1? (Vigilante) */
/* IRQs are generated by main Z80 and YM2151 */
MACHINE_CONFIG_END
@@ -1830,211 +1831,97 @@ static MACHINE_CONFIG_DERIVED( m72_8751, m72_base )
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( rtype, m72_state )
-
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu",V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */
+static MACHINE_CONFIG_DERIVED( rtype, m72_base )
+ MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(rtype_map)
- MCFG_CPU_IO_MAP(m72_portmap)
- MCFG_CPU_ADD("soundcpu",Z80, SOUND_CLOCK)
- MCFG_CPU_PROGRAM_MAP(sound_ram_map)
+ MCFG_CPU_MODIFY("soundcpu")
MCFG_CPU_IO_MAP(rtype_sound_portmap)
- /* IRQs are generated by main Z80 and YM2151 */
-
- MCFG_MACHINE_START_OVERRIDE(m72_state,m72)
- MCFG_MACHINE_RESET_OVERRIDE(m72_state,m72)
-
- /* video hardware */
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", m72)
- MCFG_PALETTE_ADD("palette", 512)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/4, 512, 64, 448, 284, 0, 256)
- MCFG_SCREEN_UPDATE_DRIVER(m72_state, screen_update_m72)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_VIDEO_START_OVERRIDE(m72_state,m72)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
-
- MCFG_SOUND_ADD("m72", M72, 0);
-
- MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK)
- MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler))
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+ MCFG_DEVICE_REMOVE("dac")
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( xmultipl, m72_state )
-
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu",V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */
- MCFG_CPU_PROGRAM_MAP(xmultipl_map)
- MCFG_CPU_IO_MAP(hharry_portmap)
+static MACHINE_CONFIG_DERIVED( xmultiplm72, m72_base )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(xmultiplm72_map)
- MCFG_CPU_ADD("soundcpu",Z80, SOUND_CLOCK)
- MCFG_CPU_PROGRAM_MAP(sound_rom_map)
- MCFG_CPU_IO_MAP(rtype2_sound_portmap)
+ MCFG_CPU_MODIFY("soundcpu")
MCFG_CPU_PERIODIC_INT_DRIVER(m72_state, nmi_line_pulse, 128*55) /* clocked by V1? (Vigilante) */
/* IRQs are generated by main Z80 and YM2151 */
- MCFG_MACHINE_START_OVERRIDE(m72_state,m72)
+
MCFG_MACHINE_RESET_OVERRIDE(m72_state,xmultipl)
-
- /* video hardware */
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", m72)
- MCFG_PALETTE_ADD("palette", 512)
-
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/4, 512, 64, 448, 284, 0, 256)
- MCFG_SCREEN_UPDATE_DRIVER(m72_state, screen_update_m72)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_VIDEO_START_OVERRIDE(m72_state,xmultipl)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
-
- MCFG_SOUND_ADD("m72", M72, 0);
-
- MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK)
- MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler))
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-
- MCFG_DAC_ADD("dac")
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( xmultiplm72, m72_state )
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu",V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */
- MCFG_CPU_PROGRAM_MAP(xmultiplm72_map)
- MCFG_CPU_IO_MAP(m72_portmap)
+static MACHINE_CONFIG_DERIVED( dbreedm72, m72_base )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(dbreedm72_map)
- MCFG_CPU_ADD("soundcpu",Z80, SOUND_CLOCK)
- MCFG_CPU_PROGRAM_MAP(sound_ram_map)
- MCFG_CPU_IO_MAP(sound_portmap)
+ MCFG_CPU_MODIFY("soundcpu")
MCFG_CPU_PERIODIC_INT_DRIVER(m72_state, nmi_line_pulse, 128*55) /* clocked by V1? (Vigilante) */
/* IRQs are generated by main Z80 and YM2151 */
- MCFG_MACHINE_START_OVERRIDE(m72_state,m72)
MCFG_MACHINE_RESET_OVERRIDE(m72_state,xmultipl)
+MACHINE_CONFIG_END
- /* video hardware */
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", m72)
- MCFG_PALETTE_ADD("palette", 512)
-
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/4, 512, 64, 448, 284, 0, 256)
- MCFG_SCREEN_UPDATE_DRIVER(m72_state, screen_update_m72)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_VIDEO_START_OVERRIDE(m72_state,m72)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
-
- MCFG_SOUND_ADD("m72", M72, 0);
-
- MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK)
- MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler))
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
- MCFG_DAC_ADD("dac")
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40)
+static MACHINE_CONFIG_DERIVED( dkgenm72, m72 ) // dervices from 'm72' because we use 'fake nmi' on the soundcpu
+
+ MCFG_MACHINE_RESET_OVERRIDE(m72_state,xmultipl)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( dbreed, m72_state )
+
+// not m72
+static MACHINE_CONFIG_DERIVED( xmultipl, m72 )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu",V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */
- MCFG_CPU_PROGRAM_MAP(dbreed_map)
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(xmultipl_map)
MCFG_CPU_IO_MAP(hharry_portmap)
- MCFG_CPU_ADD("soundcpu",Z80, SOUND_CLOCK)
+ MCFG_CPU_MODIFY("soundcpu")
MCFG_CPU_PROGRAM_MAP(sound_rom_map)
MCFG_CPU_IO_MAP(rtype2_sound_portmap)
MCFG_CPU_PERIODIC_INT_DRIVER(m72_state, nmi_line_pulse, 128*55) /* clocked by V1? (Vigilante) */
/* IRQs are generated by main Z80 and YM2151 */
- MCFG_MACHINE_START_OVERRIDE(m72_state,m72)
+
MCFG_MACHINE_RESET_OVERRIDE(m72_state,xmultipl)
- /* video hardware */
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", rtype2)
- MCFG_PALETTE_ADD("palette", 512)
-
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/4, 512, 64, 448, 284, 0, 256)
- MCFG_SCREEN_UPDATE_DRIVER(m72_state, screen_update_m72)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_VIDEO_START_OVERRIDE(m72_state,hharry)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
-
- MCFG_SOUND_ADD("m72", M72, 0);
-
- MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK)
- MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler))
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-
- MCFG_DAC_ADD("dac")
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40)
+ MCFG_VIDEO_START_OVERRIDE(m72_state,xmultipl)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( dbreedm72, m72_state )
+
+// not m72, different video system (more sprites)
+static MACHINE_CONFIG_START( majtitle, m72_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */
- MCFG_CPU_PROGRAM_MAP(dbreedm72_map)
- MCFG_CPU_IO_MAP(m72_portmap)
+ MCFG_CPU_PROGRAM_MAP(majtitle_map)
+ MCFG_CPU_IO_MAP(majtitle_portmap)
MCFG_CPU_ADD("soundcpu", Z80, SOUND_CLOCK)
- MCFG_CPU_PROGRAM_MAP(sound_ram_map)
- MCFG_CPU_IO_MAP(sound_portmap)
+ MCFG_CPU_PROGRAM_MAP(sound_rom_map)
+ MCFG_CPU_IO_MAP(rtype2_sound_portmap)
MCFG_CPU_PERIODIC_INT_DRIVER(m72_state, nmi_line_pulse, 128*55) /* clocked by V1? (Vigilante) */
/* IRQs are generated by main Z80 and YM2151 */
- MCFG_MACHINE_START_OVERRIDE(m72_state,m72)
- MCFG_MACHINE_RESET_OVERRIDE(m72_state,xmultipl)
-
/* video hardware */
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", m72)
+ MCFG_GFXDECODE_ADD("gfxdecode", "palette", majtitle)
MCFG_PALETTE_ADD("palette", 512)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/4, 512, 64, 448, 284, 0, 256)
- MCFG_SCREEN_UPDATE_DRIVER(m72_state, screen_update_m72)
+ MCFG_SCREEN_UPDATE_DRIVER(m72_state, screen_update_majtitle)
MCFG_SCREEN_PALETTE("palette")
- MCFG_VIDEO_START_OVERRIDE(m72_state,m72)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
-
- MCFG_SOUND_ADD("m72", M72, 0);
-
- MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK)
- MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler))
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+ MCFG_VIDEO_START_OVERRIDE(m72_state,majtitle)
- MCFG_DAC_ADD("dac")
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40)
+ MCFG_FRAGMENT_ADD(m72_audio_chips)
MACHINE_CONFIG_END
+// not m72, different video system (less tiles regions?)
static MACHINE_CONFIG_START( rtype2, m72_state )
/* basic machine hardware */
@@ -2048,9 +1935,6 @@ static MACHINE_CONFIG_START( rtype2, m72_state )
MCFG_CPU_PERIODIC_INT_DRIVER(m72_state, nmi_line_pulse, 128*55) /* clocked by V1? (Vigilante) */
/* IRQs are generated by main Z80 and YM2151 */
- MCFG_MACHINE_START_OVERRIDE(m72_state,m72)
- MCFG_MACHINE_RESET_OVERRIDE(m72_state,m72)
-
/* video hardware */
MCFG_GFXDECODE_ADD("gfxdecode", "palette", rtype2)
MCFG_PALETTE_ADD("palette", 512)
@@ -2062,63 +1946,41 @@ static MACHINE_CONFIG_START( rtype2, m72_state )
MCFG_VIDEO_START_OVERRIDE(m72_state,rtype2)
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
-
- MCFG_SOUND_ADD("m72", M72, 0);
-
- MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK)
- MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler))
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-
- MCFG_DAC_ADD("dac")
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40)
+ MCFG_FRAGMENT_ADD(m72_audio_chips)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( majtitle, m72_state )
+// not m72, different video system (less tiles regions?)
+static MACHINE_CONFIG_START( dbreed, m72_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */
- MCFG_CPU_PROGRAM_MAP(majtitle_map)
- MCFG_CPU_IO_MAP(majtitle_portmap)
+ MCFG_CPU_ADD("maincpu",V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */
+ MCFG_CPU_PROGRAM_MAP(dbreed_map)
+ MCFG_CPU_IO_MAP(hharry_portmap)
- MCFG_CPU_ADD("soundcpu", Z80, SOUND_CLOCK)
+ MCFG_CPU_ADD("soundcpu",Z80, SOUND_CLOCK)
MCFG_CPU_PROGRAM_MAP(sound_rom_map)
MCFG_CPU_IO_MAP(rtype2_sound_portmap)
MCFG_CPU_PERIODIC_INT_DRIVER(m72_state, nmi_line_pulse, 128*55) /* clocked by V1? (Vigilante) */
/* IRQs are generated by main Z80 and YM2151 */
- MCFG_MACHINE_START_OVERRIDE(m72_state,m72)
- MCFG_MACHINE_RESET_OVERRIDE(m72_state,m72)
+
+ MCFG_MACHINE_RESET_OVERRIDE(m72_state,xmultipl)
/* video hardware */
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", majtitle)
+ MCFG_GFXDECODE_ADD("gfxdecode", "palette", rtype2)
MCFG_PALETTE_ADD("palette", 512)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/4, 512, 64, 448, 284, 0, 256)
- MCFG_SCREEN_UPDATE_DRIVER(m72_state, screen_update_majtitle)
+ MCFG_SCREEN_UPDATE_DRIVER(m72_state, screen_update_m72)
MCFG_SCREEN_PALETTE("palette")
- MCFG_VIDEO_START_OVERRIDE(m72_state,majtitle)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
-
- MCFG_SOUND_ADD("m72", M72, 0);
-
- MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK)
- MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler))
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+ MCFG_VIDEO_START_OVERRIDE(m72_state,hharry)
- MCFG_DAC_ADD("dac")
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40)
+ MCFG_FRAGMENT_ADD(m72_audio_chips)
MACHINE_CONFIG_END
+// not m72, different video system (less tiles regions?)
static MACHINE_CONFIG_START( hharry, m72_state )
/* basic machine hardware */
@@ -2132,7 +1994,7 @@ static MACHINE_CONFIG_START( hharry, m72_state )
MCFG_CPU_PERIODIC_INT_DRIVER(m72_state, nmi_line_pulse, 128*55) /* clocked by V1? (Vigilante) */
/* IRQs are generated by main Z80 and YM2151 */
- MCFG_MACHINE_START_OVERRIDE(m72_state,m72)
+
MCFG_MACHINE_RESET_OVERRIDE(m72_state,xmultipl)
/* video hardware */
@@ -2146,21 +2008,11 @@ static MACHINE_CONFIG_START( hharry, m72_state )
MCFG_VIDEO_START_OVERRIDE(m72_state,hharry)
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
-
- MCFG_SOUND_ADD("m72", M72, 0);
+ MCFG_FRAGMENT_ADD(m72_audio_chips)
- MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK)
- MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler))
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-
- MCFG_DAC_ADD("dac")
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40)
MACHINE_CONFIG_END
+// not m72, different video system (less tiles regions?)
static MACHINE_CONFIG_START( hharryu, m72_state )
/* basic machine hardware */
@@ -2174,7 +2026,7 @@ static MACHINE_CONFIG_START( hharryu, m72_state )
MCFG_CPU_PERIODIC_INT_DRIVER(m72_state, nmi_line_pulse, 128*55) /* clocked by V1? (Vigilante) */
/* IRQs are generated by main Z80 and YM2151 */
- MCFG_MACHINE_START_OVERRIDE(m72_state,m72)
+
MCFG_MACHINE_RESET_OVERRIDE(m72_state,xmultipl)
/* video hardware */
@@ -2188,63 +2040,11 @@ static MACHINE_CONFIG_START( hharryu, m72_state )
MCFG_VIDEO_START_OVERRIDE(m72_state,hharryu)
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
-
- MCFG_SOUND_ADD("m72", M72, 0);
+ MCFG_FRAGMENT_ADD(m72_audio_chips)
- MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK)
- MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler))
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-
- MCFG_DAC_ADD("dac")
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40)
-MACHINE_CONFIG_END
-
-static MACHINE_CONFIG_START( dkgenm72, m72_state )
-
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu",V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */
- MCFG_CPU_PROGRAM_MAP(m72_map)
- MCFG_CPU_IO_MAP(m72_portmap)
-
- MCFG_CPU_ADD("soundcpu",Z80, SOUND_CLOCK)
- MCFG_CPU_PROGRAM_MAP(sound_ram_map)
- MCFG_CPU_IO_MAP(sound_portmap)
- MCFG_CPU_PERIODIC_INT_DRIVER(m72_state, fake_nmi, 128*55) /* clocked by V1? (Vigilante) */
- /* IRQs are generated by main Z80 and YM2151 */
-
- MCFG_MACHINE_START_OVERRIDE(m72_state,m72)
- MCFG_MACHINE_RESET_OVERRIDE(m72_state,xmultipl)
-
- /* video hardware */
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", m72)
- MCFG_PALETTE_ADD("palette", 512)
-
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/4, 512, 64, 448, 284, 0, 256)
- MCFG_SCREEN_UPDATE_DRIVER(m72_state, screen_update_m72)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_VIDEO_START_OVERRIDE(m72_state,m72)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
-
- MCFG_SOUND_ADD("m72", M72, 0);
-
- MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK)
- MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler))
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-
- MCFG_DAC_ADD("dac")
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40)
MACHINE_CONFIG_END
+// not m72, different video system (less tiles regions?)
static MACHINE_CONFIG_START( poundfor, m72_state )
/* basic machine hardware */
@@ -2258,9 +2058,6 @@ static MACHINE_CONFIG_START( poundfor, m72_state )
MCFG_CPU_PERIODIC_INT_DRIVER(m72_state, fake_nmi, 128*55) /* clocked by V1? (Vigilante) */
/* IRQs are generated by main Z80 and YM2151 */
- MCFG_MACHINE_START_OVERRIDE(m72_state,m72)
- MCFG_MACHINE_RESET_OVERRIDE(m72_state,m72)
-
/* video hardware */
MCFG_GFXDECODE_ADD("gfxdecode", "palette", rtype2)
MCFG_PALETTE_ADD("palette", 512)
@@ -2272,21 +2069,10 @@ static MACHINE_CONFIG_START( poundfor, m72_state )
MCFG_VIDEO_START_OVERRIDE(m72_state,poundfor)
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
-
- MCFG_SOUND_ADD("m72", M72, 0);
-
- MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK)
- MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler))
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-
- MCFG_DAC_ADD("dac")
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40)
+ MCFG_FRAGMENT_ADD(m72_audio_chips)
MACHINE_CONFIG_END
+// not m72, different video system (less tiles regions?)
static MACHINE_CONFIG_START( cosmccop, m72_state )
/* basic machine hardware */
@@ -2314,19 +2100,7 @@ static MACHINE_CONFIG_START( cosmccop, m72_state )
MCFG_VIDEO_START_OVERRIDE(m72_state,poundfor)
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
-
- MCFG_SOUND_ADD("m72", M72, 0);
-
- MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK)
- MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler))
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-
- MCFG_DAC_ADD("dac")
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40)
+ MCFG_FRAGMENT_ADD(m72_audio_chips)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( kengo, cosmccop )
@@ -3740,38 +3514,51 @@ ROM_END
// the program roms failing their tests. This is why we still have simulation code for many games
// despite having Japanese version MCU roms for several of them. See notes next to the sets
-GAME( 1987, rtype, 0, rtype, rtype, driver_device, 0, ROT0, "Irem", "R-Type (World)", GAME_NO_COCKTAIL )
-GAME( 1987, rtypej, rtype, rtype, rtype, driver_device, 0, ROT0, "Irem", "R-Type (Japan)", GAME_NO_COCKTAIL )
-GAME( 1987, rtypejp, rtype, rtype, rtypep, driver_device, 0, ROT0, "Irem", "R-Type (Japan prototype)", GAME_NO_COCKTAIL )
-GAME( 1987, rtypeu, rtype, rtype, rtype, driver_device, 0, ROT0, "Irem (Nintendo of America license)", "R-Type (US)", GAME_NO_COCKTAIL )
-GAME( 1987, rtypeb, rtype, rtype, rtype, driver_device, 0, ROT0, "bootleg", "R-Type (World bootleg)", GAME_NO_COCKTAIL )
-GAME( 1987, bchopper, 0, m72, bchopper, m72_state, bchopper, ROT0, "Irem", "Battle Chopper", GAME_NO_COCKTAIL )
-GAME( 1987, mrheli, bchopper, m72_8751, bchopper, m72_state, m72_8751, ROT0, "Irem", "Mr. HELI no Daibouken (Japan)", GAME_NO_COCKTAIL )
-GAME( 1988, nspirit, 0, m72, nspirit, m72_state, nspirit, ROT0, "Irem", "Ninja Spirit", GAME_NO_COCKTAIL ) // doesn't wait / check for japan warning string.. fails rom check if used with japanese mcu rom (World version?)
-GAME( 1988, nspiritj, nspirit, m72_8751, nspirit, m72_state, m72_8751, ROT0, "Irem", "Saigo no Nindou (Japan)", GAME_NO_COCKTAIL ) // waits for japan warning screen, works with our mcu dump, corrupt warning screen due to priority / mixing errors (Japan Version)
-GAME( 1988, imgfight, 0, m72, imgfight, m72_state, imgfight, ROT270, "Irem", "Image Fight (World, revision A)", 0 ) // doesn't wait / check for japan warning string.. fails rom check if used with japanese mcu rom (World version?)
-GAME( 1988, imgfightj, imgfight, m72_8751, imgfight, m72_state, m72_8751, ROT270, "Irem", "Image Fight (Japan)", 0 ) // waits for japan warning screen, works with our mcu dump, can't actually see warning screen due to priority / mixing errors, check tilemap viewer (Japan Version)
-GAME( 1989, loht, 0, m72, loht, m72_state, loht, ROT0, "Irem", "Legend of Hero Tonma", GAME_NO_COCKTAIL ) // fails rom check if used with Japan MCU rom (World version?)
-GAME( 1989, lohtj, loht, m72_8751, loht, m72_state, m72_8751, ROT0, "Irem", "Legend of Hero Tonma (Japan)", GAME_NO_COCKTAIL ) // waits for japan warning screen, works with our mcu dump (Japan Version)
-GAME( 1989, lohtb2, loht, m72_8751, loht, m72_state, m72_8751, ROT0, "bootleg", "Legend of Hero Tonma (Japan, bootleg with i8751)", GAME_NO_COCKTAIL ) // works like above, mcu code is the same as the real code, probably just an alt revision on a bootleg board
-GAME( 1989, lohtb, loht, m72, loht, driver_device, 0, ROT0, "bootleg", "Legend of Hero Tonma (unprotected bootleg)", GAME_NOT_WORKING| GAME_NO_COCKTAIL )
+GAME( 1987, rtype, 0, rtype, rtype, driver_device, 0, ROT0, "Irem", "R-Type (World)", GAME_NO_COCKTAIL )
+GAME( 1987, rtypej, rtype, rtype, rtype, driver_device, 0, ROT0, "Irem", "R-Type (Japan)", GAME_NO_COCKTAIL )
+GAME( 1987, rtypejp, rtype, rtype, rtypep, driver_device, 0, ROT0, "Irem", "R-Type (Japan prototype)", GAME_NO_COCKTAIL )
+GAME( 1987, rtypeu, rtype, rtype, rtype, driver_device, 0, ROT0, "Irem (Nintendo of America license)", "R-Type (US)", GAME_NO_COCKTAIL )
+GAME( 1987, rtypeb, rtype, rtype, rtype, driver_device, 0, ROT0, "bootleg", "R-Type (World bootleg)", GAME_NO_COCKTAIL )
+
+GAME( 1987, bchopper, 0, m72, bchopper, m72_state, bchopper, ROT0, "Irem", "Battle Chopper", GAME_NO_COCKTAIL )
+GAME( 1987, mrheli, bchopper, m72_8751, bchopper, m72_state, m72_8751, ROT0, "Irem", "Mr. HELI no Daibouken (Japan)", GAME_NO_COCKTAIL )
+
+GAME( 1988, nspirit, 0, m72, nspirit, m72_state, nspirit, ROT0, "Irem", "Ninja Spirit", GAME_NO_COCKTAIL ) // doesn't wait / check for japan warning string.. fails rom check if used with japanese mcu rom (World version?)
+GAME( 1988, nspiritj, nspirit, m72_8751, nspirit, m72_state, m72_8751, ROT0, "Irem", "Saigo no Nindou (Japan)", GAME_NO_COCKTAIL ) // waits for japan warning screen, works with our mcu dump, corrupt warning screen due to priority / mixing errors (Japan Version)
+
+GAME( 1988, imgfight, 0, m72, imgfight, m72_state, imgfight, ROT270, "Irem", "Image Fight (World, revision A)", 0 ) // doesn't wait / check for japan warning string.. fails rom check if used with japanese mcu rom (World version?)
+GAME( 1988, imgfightj, imgfight, m72_8751, imgfight, m72_state, m72_8751, ROT270, "Irem", "Image Fight (Japan)", 0 ) // waits for japan warning screen, works with our mcu dump, can't actually see warning screen due to priority / mixing errors, check tilemap viewer (Japan Version)
+
+GAME( 1989, loht, 0, m72, loht, m72_state, loht, ROT0, "Irem", "Legend of Hero Tonma", GAME_NO_COCKTAIL ) // fails rom check if used with Japan MCU rom (World version?)
+GAME( 1989, lohtj, loht, m72_8751, loht, m72_state, m72_8751, ROT0, "Irem", "Legend of Hero Tonma (Japan)", GAME_NO_COCKTAIL ) // waits for japan warning screen, works with our mcu dump (Japan Version)
+GAME( 1989, lohtb2, loht, m72_8751, loht, m72_state, m72_8751, ROT0, "bootleg", "Legend of Hero Tonma (Japan, bootleg with i8751)", GAME_NO_COCKTAIL ) // works like above, mcu code is the same as the real code, probably just an alt revision on a bootleg board
+GAME( 1989, lohtb, loht, m72, loht, driver_device, 0, ROT0, "bootleg", "Legend of Hero Tonma (unprotected bootleg)", GAME_NOT_WORKING| GAME_NO_COCKTAIL )
+
GAME( 1989, xmultipl, 0, xmultipl, xmultipl, driver_device, 0, ROT0, "Irem", "X Multiply (World, M81)", GAME_NO_COCKTAIL )
-GAME( 1989, xmultiplm72, xmultipl, xmultiplm72, xmultipl, m72_state, xmultiplm72, ROT0, "Irem", "X Multiply (Japan, M72)", GAME_NO_COCKTAIL )
-GAME( 1989, dbreed, 0, dbreed, dbreed, driver_device, 0, ROT0, "Irem", "Dragon Breed (M81 PCB version)", GAME_NO_COCKTAIL )
-GAME( 1989, dbreedm72, dbreed, dbreedm72, dbreed, m72_state, dbreedm72, ROT0, "Irem", "Dragon Breed (M72 PCB version)", GAME_NO_COCKTAIL )
-GAME( 1989, rtype2, 0, rtype2, rtype2, driver_device, 0, ROT0, "Irem", "R-Type II", GAME_NO_COCKTAIL )
-GAME( 1989, rtype2j, rtype2, rtype2, rtype2, driver_device, 0, ROT0, "Irem", "R-Type II (Japan)", GAME_NO_COCKTAIL )
-GAME( 1989, rtype2jc, rtype2, rtype2, rtype2, driver_device, 0, ROT0, "Irem", "R-Type II (Japan, revision C)", GAME_NO_COCKTAIL )
-GAME( 1990, majtitle, 0, majtitle, rtype2, driver_device, 0, ROT0, "Irem", "Major Title (World)", GAME_NO_COCKTAIL )
-GAME( 1990, majtitlej, majtitle, majtitle, rtype2, driver_device, 0, ROT0, "Irem", "Major Title (Japan)", GAME_NO_COCKTAIL )
-GAME( 1990, hharry, 0, hharry, hharry, driver_device, 0, ROT0, "Irem", "Hammerin' Harry (World)", GAME_NO_COCKTAIL )
-GAME( 1990, hharryu, hharry, hharryu, hharry, driver_device, 0, ROT0, "Irem America", "Hammerin' Harry (US)", GAME_NO_COCKTAIL )
-GAME( 1990, dkgensan, hharry, hharryu, hharry, driver_device, 0, ROT0, "Irem", "Daiku no Gensan (Japan, M82)", GAME_NO_COCKTAIL )
-GAME( 1990, dkgensanm72, hharry, dkgenm72, hharry, m72_state, dkgenm72, ROT0, "Irem", "Daiku no Gensan (Japan, M72)", GAME_NO_COCKTAIL )
+GAME( 1989, xmultiplm72, xmultipl, xmultiplm72, xmultipl, m72_state, xmultiplm72, ROT0, "Irem", "X Multiply (Japan, M72)", GAME_NO_COCKTAIL )
+
+GAME( 1989, dbreed, 0, dbreed, dbreed, driver_device, 0, ROT0, "Irem", "Dragon Breed (M81 PCB version)", GAME_NO_COCKTAIL )
+GAME( 1989, dbreedm72, dbreed, dbreedm72, dbreed, m72_state, dbreedm72, ROT0, "Irem", "Dragon Breed (M72 PCB version)", GAME_NO_COCKTAIL )
+
+GAME( 1989, rtype2, 0, rtype2, rtype2, driver_device, 0, ROT0, "Irem", "R-Type II", GAME_NO_COCKTAIL )
+GAME( 1989, rtype2j, rtype2, rtype2, rtype2, driver_device, 0, ROT0, "Irem", "R-Type II (Japan)", GAME_NO_COCKTAIL )
+GAME( 1989, rtype2jc, rtype2, rtype2, rtype2, driver_device, 0, ROT0, "Irem", "R-Type II (Japan, revision C)", GAME_NO_COCKTAIL )
+
+GAME( 1990, majtitle, 0, majtitle, rtype2, driver_device, 0, ROT0, "Irem", "Major Title (World)", GAME_NO_COCKTAIL )
+GAME( 1990, majtitlej, majtitle, majtitle, rtype2, driver_device, 0, ROT0, "Irem", "Major Title (Japan)", GAME_NO_COCKTAIL )
+
+GAME( 1990, hharry, 0, hharry, hharry, driver_device, 0, ROT0, "Irem", "Hammerin' Harry (World)", GAME_NO_COCKTAIL )
+GAME( 1990, hharryu, hharry, hharryu, hharry, driver_device, 0, ROT0, "Irem America", "Hammerin' Harry (US)", GAME_NO_COCKTAIL )
+GAME( 1990, dkgensan, hharry, hharryu, hharry, driver_device, 0, ROT0, "Irem", "Daiku no Gensan (Japan, M82)", GAME_NO_COCKTAIL )
+GAME( 1990, dkgensanm72, hharry, dkgenm72, hharry, m72_state, dkgenm72, ROT0, "Irem", "Daiku no Gensan (Japan, M72)", GAME_NO_COCKTAIL )
+
GAME( 1990, poundfor, 0, poundfor, poundfor, driver_device, 0, ROT270, "Irem", "Pound for Pound (World)", GAME_NO_COCKTAIL )
GAME( 1990, poundforj, poundfor, poundfor, poundfor, driver_device, 0, ROT270, "Irem", "Pound for Pound (Japan)", GAME_NO_COCKTAIL )
GAME( 1990, poundforu, poundfor, poundfor, poundfor, driver_device, 0, ROT270, "Irem America", "Pound for Pound (US)", GAME_NO_COCKTAIL )
-GAME( 1990, airduel, 0, m72, airduel, m72_state, airduel, ROT270, "Irem", "Air Duel (Japan)", 0 )
-GAME( 1991, cosmccop, 0, cosmccop, gallop, driver_device, 0, ROT0, "Irem", "Cosmic Cop (World)", GAME_NO_COCKTAIL )
-GAME( 1991, gallop, cosmccop, m72, gallop, m72_state, gallop, ROT0, "Irem", "Gallop - Armed Police Unit (Japan)", GAME_NO_COCKTAIL )
-GAME( 1991, kengo, 0, kengo, kengo, driver_device, 0, ROT0, "Irem", "Ken-Go", GAME_NO_COCKTAIL )
+
+GAME( 1990, airduel, 0, m72, airduel, m72_state, airduel, ROT270, "Irem", "Air Duel (Japan)", 0 )
+
+GAME( 1991, cosmccop, 0, cosmccop, gallop, driver_device, 0, ROT0, "Irem", "Cosmic Cop (World)", GAME_NO_COCKTAIL )
+GAME( 1991, gallop, cosmccop, m72, gallop, m72_state, gallop, ROT0, "Irem", "Gallop - Armed Police Unit (Japan)", GAME_NO_COCKTAIL )
+
+GAME( 1991, kengo, 0, kengo, kengo, driver_device, 0, ROT0, "Irem", "Ken-Go", GAME_NO_COCKTAIL )