From 389d12b57c6f2e094a9fcff3d7f622d72d66d653 Mon Sep 17 00:00:00 2001 From: Scott Stone Date: Wed, 25 Apr 2012 01:05:53 +0000 Subject: [PATCH] Fixes for MT#00413 and MT#01232 Bugs [Mamesick] --- src/mame/drivers/aliens.c | 41 +++++++++++++++++++---------------- src/mame/drivers/crimfght.c | 43 ++++++++++++++++++++++++------------- 2 files changed, 50 insertions(+), 34 deletions(-) diff --git a/src/mame/drivers/aliens.c b/src/mame/drivers/aliens.c index 8eb0759189b..b0a1133720b 100644 --- a/src/mame/drivers/aliens.c +++ b/src/mame/drivers/aliens.c @@ -19,12 +19,15 @@ Preliminary driver by: /* prototypes */ static KONAMI_SETLINES_CALLBACK( aliens_banking ); -static INTERRUPT_GEN( aliens_interrupt ) +static TIMER_DEVICE_CALLBACK( aliens_scanline ) { - aliens_state *state = device->machine().driver_data(); + aliens_state *state = timer.machine().driver_data(); + int scanline = param; - if (k051960_is_irq_enabled(state->m_k051960)) - device_set_input_line(device, KONAMI_IRQ_LINE, HOLD_LINE); + if(scanline == 240 && k051960_is_irq_enabled(state->m_k051960)) // vblank irq + cputag_set_input_line(timer.machine(), "maincpu", KONAMI_IRQ_LINE, HOLD_LINE); + else if(((scanline % 32) == 0) && (k051960_is_nmi_enabled(state->m_k051960))) // timer irq + cputag_set_input_line(timer.machine(), "maincpu", INPUT_LINE_NMI, PULSE_LINE); } READ8_MEMBER(aliens_state::bankedram_r) @@ -70,7 +73,7 @@ WRITE8_MEMBER(aliens_state::aliens_sh_irqtrigger_w) { soundlatch_byte_w(space, offset, data); - device_set_input_line_and_vector(m_audiocpu, 0, HOLD_LINE, 0xff); + device_set_input_line(m_audiocpu, 0, HOLD_LINE); } static WRITE8_DEVICE_HANDLER( aliens_snd_bankswitch_w ) @@ -117,23 +120,23 @@ WRITE8_MEMBER(aliens_state::k052109_051960_w) static ADDRESS_MAP_START( aliens_map, AS_PROGRAM, 8, aliens_state ) AM_RANGE(0x0000, 0x03ff) AM_READWRITE(bankedram_r, bankedram_w) AM_SHARE("ram") /* palette + work RAM */ AM_RANGE(0x0400, 0x1fff) AM_RAM - AM_RANGE(0x2000, 0x3fff) AM_ROMBANK("bank1") /* banked ROM */ + AM_RANGE(0x2000, 0x3fff) AM_ROMBANK("bank1") /* banked ROM */ AM_RANGE(0x5f80, 0x5f80) AM_READ_PORT("DSW3") AM_RANGE(0x5f81, 0x5f81) AM_READ_PORT("P1") AM_RANGE(0x5f82, 0x5f82) AM_READ_PORT("P2") AM_RANGE(0x5f83, 0x5f83) AM_READ_PORT("DSW2") AM_RANGE(0x5f84, 0x5f84) AM_READ_PORT("DSW1") AM_RANGE(0x5f88, 0x5f88) AM_READ(watchdog_reset_r) AM_WRITE(aliens_coin_counter_w) /* coin counters */ - AM_RANGE(0x5f8c, 0x5f8c) AM_WRITE(aliens_sh_irqtrigger_w) /* cause interrupt on audio CPU */ + AM_RANGE(0x5f8c, 0x5f8c) AM_WRITE(aliens_sh_irqtrigger_w) /* cause interrupt on audio CPU */ AM_RANGE(0x4000, 0x7fff) AM_READWRITE(k052109_051960_r, k052109_051960_w) - AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM e24_j02.bin */ + AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM e24_j02.bin */ ADDRESS_MAP_END static ADDRESS_MAP_START( aliens_sound_map, AS_PROGRAM, 8, aliens_state ) - AM_RANGE(0x0000, 0x7fff) AM_ROM /* ROM g04_b03.bin */ - AM_RANGE(0x8000, 0x87ff) AM_RAM /* RAM */ + AM_RANGE(0x0000, 0x7fff) AM_ROM /* ROM g04_b03.bin */ + AM_RANGE(0x8000, 0x87ff) AM_RAM /* RAM */ AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w) - AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r) /* soundlatch_byte_r */ + AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r) /* soundlatch_byte_r */ AM_RANGE(0xe000, 0xe00d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r, k007232_w) ADDRESS_MAP_END @@ -257,15 +260,15 @@ static MACHINE_CONFIG_START( aliens, aliens_state ) /* basic machine hardware */ - /* external clock should be 12MHz probably, CPU internal divider and precise cycle timings */ - /* are unknown though. 3MHz is too low, sprites flicker in the pseudo-3D levels */ - MCFG_CPU_ADD("maincpu", KONAMI, 6000000) /* ? */ + MCFG_CPU_ADD("maincpu", KONAMI,XTAL_24MHz/8) /* 052001 (verified on pcb) */ MCFG_CPU_PROGRAM_MAP(aliens_map) - MCFG_CPU_VBLANK_INT("screen", aliens_interrupt) + MCFG_TIMER_ADD_SCANLINE("scantimer", aliens_scanline, "screen", 0, 1) - MCFG_CPU_ADD("audiocpu", Z80, 3579545) + MCFG_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz) /* verified on pcb */ MCFG_CPU_PROGRAM_MAP(aliens_sound_map) + MCFG_QUANTUM_TIME(attotime::from_hz(600)) + MCFG_MACHINE_START(aliens) MCFG_MACHINE_RESET(aliens) @@ -273,7 +276,7 @@ static MACHINE_CONFIG_START( aliens, aliens_state ) MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_REFRESH_RATE(59.17) /* verified on pcb */ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(14*8, (64-14)*8-1, 2*8, 30*8-1 ) @@ -289,12 +292,12 @@ static MACHINE_CONFIG_START( aliens, aliens_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SOUND_ADD("ymsnd", YM2151, 3579545) + MCFG_SOUND_ADD("ymsnd", YM2151, XTAL_3_579545MHz) /* verified on pcb */ MCFG_SOUND_CONFIG(ym2151_config) MCFG_SOUND_ROUTE(0, "mono", 0.60) MCFG_SOUND_ROUTE(1, "mono", 0.60) - MCFG_SOUND_ADD("k007232", K007232, 3579545) + MCFG_SOUND_ADD("k007232", K007232, XTAL_3_579545MHz) /* verified on pcb */ MCFG_SOUND_CONFIG(k007232_config) MCFG_SOUND_ROUTE(0, "mono", 0.20) MCFG_SOUND_ROUTE(1, "mono", 0.20) diff --git a/src/mame/drivers/crimfght.c b/src/mame/drivers/crimfght.c index 5d6ff258221..e88e0349bc2 100644 --- a/src/mame/drivers/crimfght.c +++ b/src/mame/drivers/crimfght.c @@ -24,6 +24,17 @@ static KONAMI_SETLINES_CALLBACK( crimfght_banking ); +static TIMER_DEVICE_CALLBACK( crimfght_scanline ) +{ + crimfght_state *state = timer.machine().driver_data(); + int scanline = param; + + if(scanline == 240 && k051960_is_irq_enabled(state->m_k051960)) // vblank irq + cputag_set_input_line(timer.machine(), "maincpu", KONAMI_IRQ_LINE, HOLD_LINE); + else if(((scanline % 32) == 0) && (k051960_is_nmi_enabled(state->m_k051960))) // timer irq + cputag_set_input_line(timer.machine(), "maincpu", INPUT_LINE_NMI, PULSE_LINE); +} + WRITE8_MEMBER(crimfght_state::crimfght_coin_w) { coin_counter_w(machine(), 0, data & 1); @@ -33,7 +44,7 @@ WRITE8_MEMBER(crimfght_state::crimfght_coin_w) WRITE8_MEMBER(crimfght_state::crimfght_sh_irqtrigger_w) { soundlatch_byte_w(space, offset, data); - device_set_input_line_and_vector(m_audiocpu, 0, HOLD_LINE, 0xff); + device_set_input_line(m_audiocpu, 0, HOLD_LINE); } static WRITE8_DEVICE_HANDLER( crimfght_snd_bankswitch_w ) @@ -78,8 +89,8 @@ WRITE8_MEMBER(crimfght_state::k052109_051960_w) /********************************************/ static ADDRESS_MAP_START( crimfght_map, AS_PROGRAM, 8, crimfght_state ) - AM_RANGE(0x0000, 0x03ff) AM_RAMBANK("bank1") /* banked RAM */ - AM_RANGE(0x0400, 0x1fff) AM_RAM /* RAM */ + AM_RANGE(0x0000, 0x03ff) AM_RAMBANK("bank1") /* banked RAM */ + AM_RANGE(0x0400, 0x1fff) AM_RAM /* RAM */ AM_RANGE(0x3f80, 0x3f80) AM_READ_PORT("SYSTEM") AM_RANGE(0x3f81, 0x3f81) AM_READ_PORT("P1") AM_RANGE(0x3f82, 0x3f82) AM_READ_PORT("P2") @@ -89,17 +100,17 @@ static ADDRESS_MAP_START( crimfght_map, AS_PROGRAM, 8, crimfght_state ) AM_RANGE(0x3f86, 0x3f86) AM_READ_PORT("P4") AM_RANGE(0x3f87, 0x3f87) AM_READ_PORT("DSW1") AM_RANGE(0x3f88, 0x3f88) AM_READ(watchdog_reset_r) AM_WRITE(crimfght_coin_w) /* watchdog reset */ - AM_RANGE(0x3f8c, 0x3f8c) AM_WRITE(crimfght_sh_irqtrigger_w) /* cause interrupt on audio CPU? */ + AM_RANGE(0x3f8c, 0x3f8c) AM_WRITE(crimfght_sh_irqtrigger_w) /* cause interrupt on audio CPU? */ AM_RANGE(0x2000, 0x5fff) AM_READWRITE(k052109_051960_r, k052109_051960_w) /* video RAM + sprite RAM */ AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank2") /* banked ROM */ - AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM */ + AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM */ ADDRESS_MAP_END static ADDRESS_MAP_START( crimfght_sound_map, AS_PROGRAM, 8, crimfght_state ) - AM_RANGE(0x0000, 0x7fff) AM_ROM /* ROM 821l01.h4 */ - AM_RANGE(0x8000, 0x87ff) AM_RAM /* RAM */ - AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w) /* YM2151 */ - AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r) /* soundlatch_byte_r */ + AM_RANGE(0x0000, 0x7fff) AM_ROM /* ROM 821l01.h4 */ + AM_RANGE(0x8000, 0x87ff) AM_RAM /* RAM */ + AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w) /* YM2151 */ + AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r) /* soundlatch_byte_r */ AM_RANGE(0xe000, 0xe00d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r, k007232_w) /* 007232 registers */ ADDRESS_MAP_END @@ -275,13 +286,15 @@ static MACHINE_RESET( crimfght ) static MACHINE_CONFIG_START( crimfght, crimfght_state ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", KONAMI, 3000000) /* ? */ + MCFG_CPU_ADD("maincpu", KONAMI,XTAL_24MHz/8) /* 052001 (verified on pcb) */ MCFG_CPU_PROGRAM_MAP(crimfght_map) - MCFG_CPU_VBLANK_INT("screen", irq0_line_hold) + MCFG_TIMER_ADD_SCANLINE("scantimer", crimfght_scanline, "screen", 0, 1) - MCFG_CPU_ADD("audiocpu", Z80, 3579545) /* verified with PCB */ + MCFG_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz) /* verified on pcb */ MCFG_CPU_PROGRAM_MAP(crimfght_sound_map) + MCFG_QUANTUM_TIME(attotime::from_hz(600)) + MCFG_MACHINE_START(crimfght) MCFG_MACHINE_RESET(crimfght) @@ -289,7 +302,7 @@ static MACHINE_CONFIG_START( crimfght, crimfght_state ) MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(54) /* adjusted - compared with PCB speed */ + MCFG_SCREEN_REFRESH_RATE(59.17) /* verified on pcb */ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(13*8, (64-13)*8-1, 2*8, 30*8-1 ) @@ -305,12 +318,12 @@ static MACHINE_CONFIG_START( crimfght, crimfght_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_SOUND_ADD("ymsnd", YM2151, 3579545) /* verified with PCB */ + MCFG_SOUND_ADD("ymsnd", YM2151, XTAL_3_579545MHz) /* verified on pcb */ MCFG_SOUND_CONFIG(ym2151_config) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) - MCFG_SOUND_ADD("k007232", K007232, 3579545) + MCFG_SOUND_ADD("k007232", K007232, XTAL_3_579545MHz) /* verified on pcb */ MCFG_SOUND_CONFIG(k007232_config) MCFG_SOUND_ROUTE(0, "lspeaker", 0.20) MCFG_SOUND_ROUTE(0, "rspeaker", 0.20)