From 674fcdc54834e0ffa076208d123c3e76855d557a Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Tue, 29 Dec 2009 20:35:04 +0000 Subject: [PATCH] Changed Caveman Ninja driver to use Partial Updates for Raster Effects instead of buffering scanline data [David Haywood] - Tested against Robocop 2 road stage Changed Deco32 driver to use Partial Updates for Raster Effects instead of buffering scanline data (but left Dragon Gun using the buffering, because the video rendering code is far too slow with 224 partial updates for now) [David Haywood] - Tested against Captain America intro Commented out some harmful and suspicious looking interrupt generation in NamcoND1 driver until it's being properly verified; fixes Game Options menu in NCV2 test mode. [David Haywood] new clones ----------- Cherry Master I (ver.1.01) (various bootleg? sets) [David Haywood] Block (Game Corporation bootleg, set 3) [David Haywood] --- src/mame/drivers/arkanoid.c | 25 +++- src/mame/drivers/cninja.c | 59 +++++----- src/mame/drivers/deco32.c | 54 ++++++--- src/mame/drivers/goldstar.c | 225 ++++++++++++++++++++++++++++++++++++ src/mame/drivers/namcond1.c | 8 +- src/mame/includes/cninja.h | 1 + src/mame/mamedriv.c | 11 +- src/mame/video/cninja.c | 180 +++++++++++++++++++---------- src/mame/video/deco32.c | 46 +------- 9 files changed, 451 insertions(+), 158 deletions(-) diff --git a/src/mame/drivers/arkanoid.c b/src/mame/drivers/arkanoid.c index 0fd19b939cf..012a710a862 100644 --- a/src/mame/drivers/arkanoid.c +++ b/src/mame/drivers/arkanoid.c @@ -1088,6 +1088,28 @@ ROM_START( block2 ) ROM_LOAD( "a75-09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */ ROM_END +// this set has the same 'space invader' scrambled block gfx, and unknown (sound?) rom as the one above +// sadly no mention of what chip it might be for in the readme. +ROM_START( arkbloc3 ) + ROM_REGION( 0x18000, "maincpu", 0 ) + ROM_LOAD( "blockbl.001", 0x00000, 0x8000, CRC(bf7197a0) SHA1(4fbc0cbc09d292ab0f2e4a35b30505b2f7e4dc0d) ) + ROM_LOAD( "blockbl.002", 0x08000, 0x8000, CRC(29dbe452) SHA1(b99cb98549bddf1e673e2e715c80664001581f9f) ) + + ROM_REGION( 0x8000, "unknown", 0 ) /* is it more data or something else like sound or palette ? not Z80 code nor levels anyway */ + ROM_LOAD( "blockbl.006", 0x00000, 0x8000, CRC(e336c219) SHA1(e1dce37727e7084a83e73f15a138312ab6224061) ) + + ROM_REGION( 0x18000, "gfx1", 0 ) + ROM_LOAD( "blockbl.003", 0x00000, 0x8000, CRC(6d2c6123) SHA1(26f32099d363ab2c8505722513638b827e49a8fc) ) + ROM_LOAD( "blockbl.004", 0x08000, 0x8000, CRC(09a1f9d9) SHA1(c7e21aba6efb51c5501aa1428f6d9a817cb86555) ) + ROM_LOAD( "blockbl.005", 0x10000, 0x8000, CRC(dfb9f7e2) SHA1(8d938ee6f8dcac0a564d5fa7cd5da34e0db07c71) ) + + // no proms were present in this set.. assumed to be the same + ROM_REGION( 0x0600, "proms", 0 ) + ROM_LOAD( "a75-07.bpr", 0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) ) /* red component */ + ROM_LOAD( "a75-08.bpr", 0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) ) /* green component */ + ROM_LOAD( "a75-09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */ +ROM_END + ROM_START( arkblock ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "ark-6.bin", 0x0000, 0x8000, CRC(0be015de) SHA1(f4209085b59d2c96a62ac9657c7bf097da55362b) ) @@ -1365,9 +1387,10 @@ GAME( 1986, arkmcubl, arkanoid, arkanoid, arknoidj, 0, ROT90, "bootleg" GAME( 1986, ark1ball, arkanoid, arkanoid, ark1ball, 0, ROT90, "bootleg", "Arkanoid (bootleg with MCU, harder)", GAME_SUPPORTS_SAVE ) GAME( 1986, arkangc, arkanoid, bootleg, arkangc, arkangc, ROT90, "bootleg", "Arkanoid (Game Corporation bootleg, set 1)", GAME_SUPPORTS_SAVE ) GAME( 1986, arkangc2, arkanoid, bootleg, arkangc2, arkangc2, ROT90, "bootleg", "Arkanoid (Game Corporation bootleg, set 2)", GAME_SUPPORTS_SAVE ) -GAME( 1986, block2, arkanoid, bootleg, block2, block2, ROT90, "bootleg", "Block 2 (S.P.A. CO. bootleg)", GAME_SUPPORTS_SAVE ) GAME( 1986, arkblock, arkanoid, bootleg, arkangc, arkblock, ROT90, "bootleg", "Block (Game Corporation bootleg, set 1)", GAME_SUPPORTS_SAVE ) GAME( 1986, arkbloc2, arkanoid, bootleg, arkangc, arkbloc2, ROT90, "bootleg", "Block (Game Corporation bootleg, set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1986, arkbloc3, arkanoid, bootleg, block2, block2, ROT90, "bootleg", "Block (Game Corporation bootleg, set 3)", GAME_SUPPORTS_SAVE )// Both these sets have an extra unknown rom +GAME( 1986, block2, arkanoid, bootleg, block2, block2, ROT90, "bootleg", "Block 2 (S.P.A. CO. bootleg)", GAME_SUPPORTS_SAVE ) // and scrambled gfx roms with 'space invader' themed gfx GAME( 1986, arkgcbl, arkanoid, bootleg, arkgcbl, arkgcbl, ROT90, "bootleg", "Arkanoid (bootleg on Block hardware, set 1)", GAME_SUPPORTS_SAVE ) GAME( 1986, arkgcbla, arkanoid, bootleg, arkgcbl, arkgcbl, ROT90, "bootleg", "Arkanoid (bootleg on Block hardware, set 2)", GAME_SUPPORTS_SAVE ) GAME( 1988, paddle2, arkanoid, bootleg, paddle2, paddle2, ROT90, "bootleg", "Paddle 2 (bootleg on Block hardware)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/cninja.c b/src/mame/drivers/cninja.c index f566ae74c87..82fbc3bcf99 100644 --- a/src/mame/drivers/cninja.c +++ b/src/mame/drivers/cninja.c @@ -72,19 +72,6 @@ static WRITE16_HANDLER( stoneage_sound_w ) static TIMER_DEVICE_CALLBACK( interrupt_gen ) { - int scanline = param; - - /* Save state of scroll registers before the IRQ */ - deco16_raster_display_list[deco16_raster_display_position++] = scanline; - deco16_raster_display_list[deco16_raster_display_position++] = deco16_pf12_control[1] & 0xffff; - deco16_raster_display_list[deco16_raster_display_position++] = deco16_pf12_control[2] & 0xffff; - deco16_raster_display_list[deco16_raster_display_position++] = deco16_pf12_control[3] & 0xffff; - deco16_raster_display_list[deco16_raster_display_position++] = deco16_pf12_control[4] & 0xffff; - deco16_raster_display_list[deco16_raster_display_position++] = deco16_pf34_control[1] & 0xffff; - deco16_raster_display_list[deco16_raster_display_position++] = deco16_pf34_control[2] & 0xffff; - deco16_raster_display_list[deco16_raster_display_position++] = deco16_pf34_control[3] & 0xffff; - deco16_raster_display_list[deco16_raster_display_position++] = deco16_pf34_control[4] & 0xffff; - cputag_set_input_line(timer->machine, "maincpu", (cninja_irq_mask&0x10) ? 3 : 4, ASSERT_LINE); timer_device_adjust_oneshot(raster_irq_timer, attotime_never, 0); } @@ -122,7 +109,9 @@ static WRITE16_HANDLER( cninja_irq_w ) case 1: /* Raster IRQ scanline position, only valid for values between 1 & 239 (0 and 240-256 do NOT generate IRQ's) */ cninja_scanline=data&0xff; if ((cninja_irq_mask&0x2)==0 && cninja_scanline>0 && cninja_scanline<240) + { timer_device_adjust_oneshot(raster_irq_timer, video_screen_get_time_until_pos(space->machine->primary_screen, cninja_scanline, 0), cninja_scanline); + } else timer_device_adjust_oneshot(raster_irq_timer,attotime_never,0); return; @@ -153,16 +142,30 @@ static READ16_HANDLER( robocop2_prot_r ) /**********************************************************************************/ +static WRITE16_HANDLER( deco16_pf12_control_w ) +{ + COMBINE_DATA(&deco16_pf12_control[offset]); + video_screen_update_partial(space->machine->primary_screen, video_screen_get_vpos(space->machine->primary_screen)); +} + + +static WRITE16_HANDLER( deco16_pf34_control_w ) +{ + COMBINE_DATA(&deco16_pf34_control[offset]); + video_screen_update_partial(space->machine->primary_screen, video_screen_get_vpos(space->machine->primary_screen)); +} + + static ADDRESS_MAP_START( cninja_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0bffff) AM_ROM - AM_RANGE(0x140000, 0x14000f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) + AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w) AM_BASE(&deco16_pf12_control) AM_RANGE(0x144000, 0x144fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) AM_RANGE(0x146000, 0x146fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x14c000, 0x14c7ff) AM_WRITEONLY AM_BASE(&deco16_pf1_rowscroll) AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&deco16_pf2_rowscroll) - AM_RANGE(0x150000, 0x15000f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) + AM_RANGE(0x150000, 0x15000f) AM_WRITE(deco16_pf34_control_w) AM_BASE(&deco16_pf34_control) AM_RANGE(0x154000, 0x154fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) AM_RANGE(0x156000, 0x156fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) @@ -190,13 +193,13 @@ static ADDRESS_MAP_START( cninjabl_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x138000, 0x1387ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) /* bootleg sprite-ram (sprites rewritten here in new format) */ - AM_RANGE(0x140000, 0x14000f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) + AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w) AM_BASE(&deco16_pf12_control) AM_RANGE(0x144000, 0x144fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) AM_RANGE(0x146000, 0x146fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x14c000, 0x14c7ff) AM_WRITEONLY AM_BASE(&deco16_pf1_rowscroll) AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&deco16_pf2_rowscroll) - AM_RANGE(0x150000, 0x15000f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) // not used / incorrect on this + AM_RANGE(0x150000, 0x15000f) AM_WRITE(deco16_pf34_control_w) AM_BASE(&deco16_pf34_control) // not used / incorrect on this AM_RANGE(0x154000, 0x154fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) AM_RANGE(0x156000, 0x156fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) @@ -218,13 +221,13 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( edrandy_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x140000, 0x14000f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) + AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w) AM_BASE(&deco16_pf12_control) AM_RANGE(0x144000, 0x144fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) AM_RANGE(0x146000, 0x146fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x14c000, 0x14c7ff) AM_RAM AM_BASE(&deco16_pf1_rowscroll) AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&deco16_pf2_rowscroll) - AM_RANGE(0x150000, 0x15000f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) + AM_RANGE(0x150000, 0x15000f) AM_WRITE(deco16_pf34_control_w) AM_BASE(&deco16_pf34_control) AM_RANGE(0x154000, 0x154fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) AM_RANGE(0x156000, 0x156fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) @@ -242,16 +245,17 @@ static ADDRESS_MAP_START( edrandy_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x1bc800, 0x1bcfff) AM_WRITENOP /* Another bug in game code? Sprite list can overrun. Doesn't seem to mirror */ ADDRESS_MAP_END + static ADDRESS_MAP_START( robocop2_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x140000, 0x14000f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) + AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w) AM_BASE(&deco16_pf12_control) AM_RANGE(0x144000, 0x144fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) AM_RANGE(0x146000, 0x146fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x14c000, 0x14c7ff) AM_RAM AM_BASE(&deco16_pf1_rowscroll) AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&deco16_pf2_rowscroll) - AM_RANGE(0x150000, 0x15000f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) + AM_RANGE(0x150000, 0x15000f) AM_WRITE(deco16_pf34_control_w) AM_BASE(&deco16_pf34_control) AM_RANGE(0x154000, 0x154fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) AM_RANGE(0x156000, 0x156fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) @@ -281,13 +285,13 @@ static ADDRESS_MAP_START( mutantf_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x1c0000, 0x1c0001) AM_READWRITE(deco16_71_r, buffer_spriteram16_w) AM_RANGE(0x1e0000, 0x1e0001) AM_WRITE(buffer_spriteram16_2_w) - AM_RANGE(0x300000, 0x30000f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) + AM_RANGE(0x300000, 0x30000f) AM_WRITE(deco16_pf12_control_w) AM_BASE(&deco16_pf12_control) AM_RANGE(0x304000, 0x305fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) AM_RANGE(0x306000, 0x307fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x308000, 0x3087ff) AM_RAM AM_BASE(&deco16_pf1_rowscroll) AM_RANGE(0x30a000, 0x30a7ff) AM_RAM AM_BASE(&deco16_pf2_rowscroll) - AM_RANGE(0x310000, 0x31000f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) + AM_RANGE(0x310000, 0x31000f) AM_WRITE(deco16_pf34_control_w) AM_BASE(&deco16_pf34_control) AM_RANGE(0x314000, 0x315fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) AM_RANGE(0x316000, 0x317fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) AM_RANGE(0x318000, 0x3187ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) @@ -770,7 +774,6 @@ static MACHINE_DRIVER_START( cninja ) MDRV_VIDEO_START(cninja) MDRV_VIDEO_UPDATE(cninja) - MDRV_VIDEO_EOF(cninja) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -820,7 +823,6 @@ static MACHINE_DRIVER_START( stoneage ) MDRV_VIDEO_START(stoneage) MDRV_VIDEO_UPDATE(cninja) - MDRV_VIDEO_EOF(cninja) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -866,9 +868,8 @@ static MACHINE_DRIVER_START( cninjabl ) MDRV_GFXDECODE(cninjabl) MDRV_PALETTE_LENGTH(2048) - MDRV_VIDEO_START(stoneage) - MDRV_VIDEO_UPDATE(cninja) - MDRV_VIDEO_EOF(cninja) + MDRV_VIDEO_START(cninja) + MDRV_VIDEO_UPDATE(cninjabl) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -912,7 +913,6 @@ static MACHINE_DRIVER_START( edrandy ) MDRV_VIDEO_START(edrandy) MDRV_VIDEO_UPDATE(edrandy) - MDRV_VIDEO_EOF(cninja) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -962,7 +962,6 @@ static MACHINE_DRIVER_START( robocop2 ) MDRV_VIDEO_START(robocop2) MDRV_VIDEO_UPDATE(robocop2) - MDRV_VIDEO_EOF(cninja) /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/deco32.c b/src/mame/drivers/deco32.c index 938258322c3..f2f72b5fa58 100644 --- a/src/mame/drivers/deco32.c +++ b/src/mame/drivers/deco32.c @@ -244,15 +244,24 @@ static UINT8 nslasher_sound_irq; /**********************************************************************************/ + +static WRITE32_HANDLER( deco32_pf12_control_w ) +{ + COMBINE_DATA(&deco32_pf12_control[offset]); + video_screen_update_partial(space->machine->primary_screen, video_screen_get_vpos(space->machine->primary_screen)); +} + + +static WRITE32_HANDLER( deco32_pf34_control_w ) +{ + COMBINE_DATA(&deco32_pf34_control[offset]); + video_screen_update_partial(space->machine->primary_screen, video_screen_get_vpos(space->machine->primary_screen)); +} + + + static TIMER_DEVICE_CALLBACK( interrupt_gen ) { - /* Save state of scroll registers before the IRQ */ - deco32_raster_display_list[deco32_raster_display_position++]=video_screen_get_vpos(timer->machine->primary_screen); - deco32_raster_display_list[deco32_raster_display_position++]=deco32_pf12_control[1]&0xffff; - deco32_raster_display_list[deco32_raster_display_position++]=deco32_pf12_control[2]&0xffff; - deco32_raster_display_list[deco32_raster_display_position++]=deco32_pf12_control[3]&0xffff; - deco32_raster_display_list[deco32_raster_display_position++]=deco32_pf12_control[4]&0xffff; - cputag_set_input_line(timer->machine, "maincpu", ARM_IRQ_LINE, HOLD_LINE); } @@ -305,7 +314,10 @@ static WRITE32_HANDLER( deco32_irq_controller_w ) case 1: /* Raster IRQ scanline position, only valid for values between 1 & 239 (0 and 240-256 do NOT generate IRQ's) */ scanline=(data&0xff); if (raster_enable && scanline>0 && scanline<240) - timer_device_adjust_oneshot(raster_irq_timer,video_screen_get_time_until_pos(space->machine->primary_screen, scanline-1, 320),0); + { + // needs +16 for the raster to align on captaven intro? (might just be our screen size / visible area / layer offsets need adjusting instead) + timer_device_adjust_oneshot(raster_irq_timer,video_screen_get_time_until_pos(space->machine->primary_screen, scanline+16, 320),0); + } else timer_device_adjust_oneshot(raster_irq_timer,attotime_never,0); break; @@ -673,14 +685,14 @@ static ADDRESS_MAP_START( captaven_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x178000, 0x178003) AM_WRITE(deco32_pri_w) - AM_RANGE(0x180000, 0x18001f) AM_RAM AM_BASE(&deco32_pf12_control) + AM_RANGE(0x180000, 0x18001f) AM_RAM_WRITE(deco32_pf12_control_w) AM_BASE(&deco32_pf12_control) AM_RANGE(0x190000, 0x191fff) AM_RAM_WRITE(deco32_pf1_data_w) AM_BASE(&deco32_pf1_data) AM_RANGE(0x192000, 0x193fff) AM_WRITE(deco32_pf1_data_w) /* Mirror address - bug in program code */ AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_data_w) AM_BASE(&deco32_pf2_data) AM_RANGE(0x1a0000, 0x1a1fff) AM_RAM AM_BASE(&deco32_pf1_rowscroll) AM_RANGE(0x1a4000, 0x1a5fff) AM_RAM AM_BASE(&deco32_pf2_rowscroll) - AM_RANGE(0x1c0000, 0x1c001f) AM_RAM AM_BASE(&deco32_pf34_control) + AM_RANGE(0x1c0000, 0x1c001f) AM_RAM_WRITE(deco32_pf34_control_w) AM_BASE(&deco32_pf34_control) AM_RANGE(0x1d0000, 0x1d1fff) AM_RAM_WRITE(deco32_pf3_data_w) AM_BASE(&deco32_pf3_data) AM_RANGE(0x1e0000, 0x1e1fff) AM_RAM AM_BASE(&deco32_pf3_rowscroll) ADDRESS_MAP_END @@ -706,13 +718,13 @@ static ADDRESS_MAP_START( fghthist_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x184000, 0x185fff) AM_RAM_WRITE(deco32_pf2_data_w) AM_BASE(&deco32_pf2_data) AM_RANGE(0x192000, 0x192fff) AM_RAM AM_BASE(&deco32_pf1_rowscroll) AM_RANGE(0x194000, 0x194fff) AM_RAM AM_BASE(&deco32_pf2_rowscroll) - AM_RANGE(0x1a0000, 0x1a001f) AM_RAM AM_BASE(&deco32_pf12_control) + AM_RANGE(0x1a0000, 0x1a001f) AM_RAM_WRITE(deco32_pf12_control_w) AM_BASE(&deco32_pf12_control) AM_RANGE(0x1c2000, 0x1c3fff) AM_RAM_WRITE(deco32_pf3_data_w) AM_BASE(&deco32_pf3_data) AM_RANGE(0x1c4000, 0x1c5fff) AM_RAM_WRITE(deco32_pf4_data_w) AM_BASE(&deco32_pf4_data) AM_RANGE(0x1d2000, 0x1d2fff) AM_RAM AM_BASE(&deco32_pf3_rowscroll) AM_RANGE(0x1d4000, 0x1d4fff) AM_RAM AM_BASE(&deco32_pf4_rowscroll) - AM_RANGE(0x1e0000, 0x1e001f) AM_RAM AM_BASE(&deco32_pf34_control) + AM_RANGE(0x1e0000, 0x1e001f) AM_RAM_WRITE(deco32_pf34_control_w) AM_BASE(&deco32_pf34_control) AM_RANGE(0x16c000, 0x16c01f) AM_READNOP AM_RANGE(0x17c000, 0x17c03f) AM_READNOP @@ -739,17 +751,19 @@ static ADDRESS_MAP_START( fghthsta_memmap, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x184000, 0x185fff) AM_RAM_WRITE(deco32_pf2_data_w) AM_BASE(&deco32_pf2_data) AM_RANGE(0x192000, 0x192fff) AM_RAM AM_BASE(&deco32_pf1_rowscroll) AM_RANGE(0x194000, 0x194fff) AM_RAM AM_BASE(&deco32_pf2_rowscroll) - AM_RANGE(0x1a0000, 0x1a001f) AM_RAM AM_BASE(&deco32_pf12_control) + AM_RANGE(0x1a0000, 0x1a001f) AM_RAM_WRITE(deco32_pf12_control_w) AM_BASE(&deco32_pf12_control) AM_RANGE(0x1c2000, 0x1c3fff) AM_RAM_WRITE(deco32_pf3_data_w) AM_BASE(&deco32_pf3_data) AM_RANGE(0x1c4000, 0x1c5fff) AM_RAM_WRITE(deco32_pf4_data_w) AM_BASE(&deco32_pf4_data) AM_RANGE(0x1d2000, 0x1d2fff) AM_RAM AM_BASE(&deco32_pf3_rowscroll) AM_RANGE(0x1d4000, 0x1d4fff) AM_RAM AM_BASE(&deco32_pf4_rowscroll) - AM_RANGE(0x1e0000, 0x1e001f) AM_RAM AM_BASE(&deco32_pf34_control) + AM_RANGE(0x1e0000, 0x1e001f) AM_RAM_WRITE(deco32_pf34_control_w) AM_BASE(&deco32_pf34_control) AM_RANGE(0x200000, 0x200fff) AM_READWRITE(deco16_146_fghthist_prot_r, deco16_146_fghthist_prot_w) AM_BASE(&deco32_prot_ram) ADDRESS_MAP_END +// the video drawing (especially sprite) code on this is too slow to cope with proper partial updates +// raster effects appear to need some work on it anyway? static ADDRESS_MAP_START( dragngun_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_BASE(&deco32_ram) @@ -760,12 +774,14 @@ static ADDRESS_MAP_START( dragngun_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x138000, 0x138003) AM_NOP /* Palette dma complete in bit 0x8? ack? return 0 else tight loop */ AM_RANGE(0x138008, 0x13800b) AM_WRITE(deco32_palette_dma_w) +// AM_RANGE(0x180000, 0x18001f) AM_RAM_WRITE(deco32_pf12_control_w) AM_BASE(&deco32_pf12_control) AM_RANGE(0x180000, 0x18001f) AM_RAM AM_BASE(&deco32_pf12_control) AM_RANGE(0x190000, 0x191fff) AM_RAM_WRITE(deco32_pf1_data_w) AM_BASE(&deco32_pf1_data) AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_data_w) AM_BASE(&deco32_pf2_data) AM_RANGE(0x1a0000, 0x1a0fff) AM_RAM AM_BASE(&deco32_pf1_rowscroll) AM_RANGE(0x1a4000, 0x1a4fff) AM_RAM AM_BASE(&deco32_pf2_rowscroll) +// AM_RANGE(0x1c0000, 0x1c001f) AM_RAM_WRITE(deco32_pf34_control_w) AM_BASE(&deco32_pf34_control) AM_RANGE(0x1c0000, 0x1c001f) AM_RAM AM_BASE(&deco32_pf34_control) AM_RANGE(0x1d0000, 0x1d1fff) AM_RAM_WRITE(deco32_pf3_data_w) AM_BASE(&deco32_pf3_data) AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_data_w) AM_BASE(&deco32_pf4_data) @@ -811,12 +827,14 @@ static ADDRESS_MAP_START( lockload_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x170000, 0x170007) AM_READ(lockload_gun_mirror_r) /* Not on Dragongun */ AM_RANGE(0x178008, 0x17800f) AM_WRITENOP /* Gun read ACK's */ +// AM_RANGE(0x180000, 0x18001f) AM_RAM_WRITE(deco32_pf12_control_w) AM_BASE(&deco32_pf12_control) AM_RANGE(0x180000, 0x18001f) AM_RAM AM_BASE(&deco32_pf12_control) AM_RANGE(0x190000, 0x191fff) AM_RAM_WRITE(deco32_pf1_data_w) AM_BASE(&deco32_pf1_data) AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_data_w) AM_BASE(&deco32_pf2_data) AM_RANGE(0x1a0000, 0x1a0fff) AM_RAM AM_BASE(&deco32_pf1_rowscroll) AM_RANGE(0x1a4000, 0x1a4fff) AM_RAM AM_BASE(&deco32_pf2_rowscroll) +// AM_RANGE(0x1c0000, 0x1c001f) AM_RAM_WRITE(deco32_pf34_control_w) AM_BASE(&deco32_pf34_control) AM_RANGE(0x1c0000, 0x1c001f) AM_RAM AM_BASE(&deco32_pf34_control) AM_RANGE(0x1d0000, 0x1d1fff) AM_RAM_WRITE(deco32_pf3_data_w) AM_BASE(&deco32_pf3_data) AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_data_w) AM_BASE(&deco32_pf4_data) @@ -877,13 +895,13 @@ static ADDRESS_MAP_START( tattass_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x184000, 0x185fff) AM_RAM_WRITE(deco32_pf2_data_w) AM_BASE(&deco32_pf2_data) AM_RANGE(0x192000, 0x193fff) AM_RAM AM_BASE(&deco32_pf1_rowscroll) AM_RANGE(0x194000, 0x195fff) AM_RAM AM_BASE(&deco32_pf2_rowscroll) - AM_RANGE(0x1a0000, 0x1a001f) AM_RAM AM_BASE(&deco32_pf12_control) + AM_RANGE(0x1a0000, 0x1a001f) AM_RAM_WRITE(deco32_pf12_control_w) AM_BASE(&deco32_pf12_control) AM_RANGE(0x1c2000, 0x1c3fff) AM_RAM_WRITE(deco32_pf3_data_w) AM_BASE(&deco32_pf3_data) AM_RANGE(0x1c4000, 0x1c5fff) AM_RAM_WRITE(deco32_pf4_data_w) AM_BASE(&deco32_pf4_data) AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM AM_BASE(&deco32_pf3_rowscroll) AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM AM_BASE(&deco32_pf4_rowscroll) - AM_RANGE(0x1e0000, 0x1e001f) AM_RAM AM_BASE(&deco32_pf34_control) + AM_RANGE(0x1e0000, 0x1e001f) AM_RAM_WRITE(deco32_pf34_control_w) AM_BASE(&deco32_pf34_control) AM_RANGE(0x200000, 0x200fff) AM_READWRITE(tattass_prot_r, tattass_prot_w) AM_BASE(&deco32_prot_ram) ADDRESS_MAP_END @@ -917,13 +935,13 @@ static ADDRESS_MAP_START( nslasher_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x184000, 0x185fff) AM_RAM_WRITE(deco32_pf2_data_w) AM_BASE(&deco32_pf2_data) AM_RANGE(0x192000, 0x193fff) AM_RAM AM_BASE(&deco32_pf1_rowscroll) AM_RANGE(0x194000, 0x195fff) AM_RAM AM_BASE(&deco32_pf2_rowscroll) - AM_RANGE(0x1a0000, 0x1a001f) AM_RAM AM_BASE(&deco32_pf12_control) + AM_RANGE(0x1a0000, 0x1a001f) AM_RAM_WRITE(deco32_pf12_control_w) AM_BASE(&deco32_pf12_control) AM_RANGE(0x1c2000, 0x1c3fff) AM_RAM_WRITE(deco32_pf3_data_w) AM_BASE(&deco32_pf3_data) AM_RANGE(0x1c4000, 0x1c5fff) AM_RAM_WRITE(deco32_pf4_data_w) AM_BASE(&deco32_pf4_data) AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM AM_BASE(&deco32_pf3_rowscroll) AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM AM_BASE(&deco32_pf4_rowscroll) - AM_RANGE(0x1e0000, 0x1e001f) AM_RAM AM_BASE(&deco32_pf34_control) + AM_RANGE(0x1e0000, 0x1e001f) AM_RAM_WRITE(deco32_pf34_control_w) AM_BASE(&deco32_pf34_control) AM_RANGE(0x200000, 0x200fff) AM_READWRITE(nslasher_prot_r, nslasher_prot_w) AM_BASE(&deco32_prot_ram) ADDRESS_MAP_END diff --git a/src/mame/drivers/goldstar.c b/src/mame/drivers/goldstar.c index 9f769661ab8..82c5b18087f 100644 --- a/src/mame/drivers/goldstar.c +++ b/src/mame/drivers/goldstar.c @@ -5962,6 +5962,188 @@ ROM_START( cmasterc ) ROM_LOAD( "82s129.u46", 0x0000, 0x0100, CRC(50ec383b) SHA1(ae95b92bd3946b40134bcdc22708d5c6b0f4c23e) ) ROM_END +/* + +this set is weird, apart from the MGRAISE.BIN it's a cherry master set, I'm assuming that somehow +there is extra hardware which causes it to run a different game contained in that rom? + +the extra rom contains + +MEGA DOUBLE POKER TM COPYRIGHT 1991 + +as well as various + +COPYRIGHT (C) 1988-90-92 GERALD DUHAMEL + +strings spread across the rom + +------------------ + +Blitz Video Poker +1991 + +Hardware for a real Video Poker Machine that was supposed to pay out $$$. + +Contains: + +1 X Z80 CPU +2 X 6505s? +1 GI AY-3-8910 +2 x 8255 + +CH3 BIN 32,768 11-15-98 8:46a CH3.BIN +MAST9 BIN 65,536 11-15-98 8:47a MAST9.BIN +MAST5 BIN 32,768 11-15-98 8:48a MAST5.BIN +MAST6 BIN 32,768 11-15-98 8:50a MAST6.BIN +MAST7 BIN 32,768 11-15-98 8:50a MAST7.BIN +MAST1 BIN 8,192 11-15-98 8:52a MAST1.BIN +MAST2 BIN 8,192 11-15-98 8:53a MAST2.BIN +MAST3 BIN 8,192 11-15-98 8:54a MAST3.BIN +MAST4 BIN 8,192 11-15-98 8:55a MAST4.BIN +MGRAISE BIN 131,072 11-15-98 8:58a MGRAISE.BIN Sound Amp with 6502 + +*/ + +ROM_START( cmasterbv ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "ch3.bin", 0x0000, 0x1000, CRC(9af51e47) SHA1(ac002c218502430a3e45259776ca409d32d2d4e5) ) + ROM_CONTINUE(0x4000,0x1000) + ROM_CONTINUE(0x3000,0x1000) + ROM_CONTINUE(0x7000,0x1000) + ROM_CONTINUE(0x1000,0x1000) + ROM_CONTINUE(0x6000,0x1000) + ROM_CONTINUE(0x2000,0x1000) + ROM_CONTINUE(0x5000,0x1000) + + ROM_REGION( 0x20000, "extra", 0 ) // how do we use this?!! + ROM_LOAD( "mgraise.bin", 0x0000, 0x20000, CRC(019f37d4) SHA1(ab71fe0b41ff4415896a23f28b27a0e64950c68c) ) + + + ROM_REGION( 0x18000, "gfx1", 0 ) + ROM_LOAD( "mast5.bin", 0x00000, 0x8000, CRC(19cc1d67) SHA1(47487f9362bfb36a32100ed772960628844462bf) ) + ROM_LOAD( "mast6.bin", 0x08000, 0x8000, CRC(63b3df4e) SHA1(9bacd23da598805ec18ec5ad15cab95d71eb9262) ) + ROM_LOAD( "mast7.bin", 0x10000, 0x8000, CRC(e39fff9c) SHA1(22fdc517fa478441622c6245cecb5728c5595757) ) + + ROM_REGION( 0x8000, "gfx2", 0 ) + ROM_LOAD( "mast3.bin", 0x0000, 0x2000, CRC(8607ffd9) SHA1(9bc94715554aa2473ae2ed249a47f29c7886b3dc) ) + ROM_LOAD( "mast4.bin", 0x2000, 0x2000, CRC(c32367be) SHA1(ff217021b9c58e23b2226f8b0a7f5da966225715) ) + ROM_LOAD( "mast1.bin", 0x4000, 0x2000, CRC(6dfcb188) SHA1(22430429c798954d9d979e62699b58feae7fdbf4) ) + ROM_LOAD( "mast2.bin", 0x6000, 0x2000, CRC(9678ead2) SHA1(e80aefa98b2363fe9e6b2415762695ace272e4d3) ) + + ROM_REGION( 0x10000, "user1", 0 ) // girl bitmaps + ROM_LOAD( "mast9.bin", 0x0000, 0x10000, CRC(e92443d3) SHA1(4b6ca4521841610054165f085ae05510e77af191) ) + + ROM_REGION( 0x200, "proms", 0 ) + ROM_LOAD( "82s129.u84", 0x0000, 0x0100, CRC(0489b760) SHA1(78f8632b17a76335183c5c204cdec856988368b0) ) + ROM_LOAD( "82s129.u70", 0x0100, 0x0100, CRC(21eb5b19) SHA1(9b8425bdb97f11f4855c998c7792c3291fd07470) ) + + ROM_REGION( 0x100, "proms2", 0 ) + ROM_LOAD( "82s129.u46", 0x0000, 0x0100, CRC(50ec383b) SHA1(ae95b92bd3946b40134bcdc22708d5c6b0f4c23e) ) +ROM_END + +ROM_START( cmasterd ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "cherryb.rom", 0x0000, 0x1000, CRC(b6ab94f6) SHA1(6e74a2354d15aa1da6b8207e0413158d7cb52a44) ) + ROM_CONTINUE(0x4000,0x1000) + ROM_CONTINUE(0x3000,0x1000) + ROM_CONTINUE(0x7000,0x1000) + ROM_CONTINUE(0x1000,0x1000) + ROM_CONTINUE(0x6000,0x1000) + ROM_CONTINUE(0x2000,0x1000) + ROM_CONTINUE(0x5000,0x1000) + + ROM_REGION( 0x18000, "gfx1", 0 ) + ROM_LOAD( "u16.7", 0x00000, 0x8000, CRC(19cc1d67) SHA1(47487f9362bfb36a32100ed772960628844462bf) ) + ROM_LOAD( "u11.6", 0x08000, 0x8000, CRC(63b3df4e) SHA1(9bacd23da598805ec18ec5ad15cab95d71eb9262) ) + ROM_LOAD( "u4.5", 0x10000, 0x8000, CRC(e39fff9c) SHA1(22fdc517fa478441622c6245cecb5728c5595757) ) + + ROM_REGION( 0x8000, "gfx2", 0 ) + ROM_LOAD( "u15.4", 0x0000, 0x2000, CRC(8607ffd9) SHA1(9bc94715554aa2473ae2ed249a47f29c7886b3dc) ) + ROM_LOAD( "u10.3", 0x2000, 0x2000, CRC(c32367be) SHA1(ff217021b9c58e23b2226f8b0a7f5da966225715) ) + ROM_LOAD( "u14.2", 0x4000, 0x2000, CRC(6dfcb188) SHA1(22430429c798954d9d979e62699b58feae7fdbf4) ) + ROM_LOAD( "u9.1", 0x6000, 0x2000, CRC(9678ead2) SHA1(e80aefa98b2363fe9e6b2415762695ace272e4d3) ) + + ROM_REGION( 0x10000, "user1", 0 ) + ROM_LOAD( "u53.8", 0x0000, 0x10000, CRC(e92443d3) SHA1(4b6ca4521841610054165f085ae05510e77af191) ) + + /* proms taken from cmv4, probably wrong */ + ROM_REGION( 0x200, "proms", 0 ) + ROM_LOAD( "82s129.u84", 0x0000, 0x0100, CRC(0489b760) SHA1(78f8632b17a76335183c5c204cdec856988368b0) ) + ROM_LOAD( "82s129.u70", 0x0100, 0x0100, CRC(21eb5b19) SHA1(9b8425bdb97f11f4855c998c7792c3291fd07470) ) + + ROM_REGION( 0x100, "proms2", 0 ) + ROM_LOAD( "82s129.u46", 0x0000, 0x0100, CRC(50ec383b) SHA1(ae95b92bd3946b40134bcdc22708d5c6b0f4c23e) ) +ROM_END + +ROM_START( cmastere ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "cm33.rom", 0x0000, 0x1000, CRC(c3c3f7df) SHA1(47eda025859afebe64fd76e17e8390262fb40e0b) ) + ROM_CONTINUE(0x4000,0x1000) + ROM_CONTINUE(0x3000,0x1000) + ROM_CONTINUE(0x7000,0x1000) + ROM_CONTINUE(0x1000,0x1000) + ROM_CONTINUE(0x6000,0x1000) + ROM_CONTINUE(0x2000,0x1000) + ROM_CONTINUE(0x5000,0x1000) + + ROM_REGION( 0x18000, "gfx1", 0 ) + ROM_LOAD( "u16.7", 0x00000, 0x8000, CRC(19cc1d67) SHA1(47487f9362bfb36a32100ed772960628844462bf) ) + ROM_LOAD( "u11.6", 0x08000, 0x8000, CRC(63b3df4e) SHA1(9bacd23da598805ec18ec5ad15cab95d71eb9262) ) + ROM_LOAD( "u4.5", 0x10000, 0x8000, CRC(e39fff9c) SHA1(22fdc517fa478441622c6245cecb5728c5595757) ) + + ROM_REGION( 0x8000, "gfx2", 0 ) + ROM_LOAD( "u15.4", 0x0000, 0x2000, CRC(8607ffd9) SHA1(9bc94715554aa2473ae2ed249a47f29c7886b3dc) ) + ROM_LOAD( "u10.3", 0x2000, 0x2000, CRC(c32367be) SHA1(ff217021b9c58e23b2226f8b0a7f5da966225715) ) + ROM_LOAD( "u14.2", 0x4000, 0x2000, CRC(6dfcb188) SHA1(22430429c798954d9d979e62699b58feae7fdbf4) ) + ROM_LOAD( "u9.1", 0x6000, 0x2000, CRC(9678ead2) SHA1(e80aefa98b2363fe9e6b2415762695ace272e4d3) ) + + ROM_REGION( 0x10000, "user1", 0 ) + ROM_LOAD( "u53.8", 0x0000, 0x10000, CRC(e92443d3) SHA1(4b6ca4521841610054165f085ae05510e77af191) ) + + /* proms taken from cmv4, probably wrong */ + ROM_REGION( 0x200, "proms", 0 ) + ROM_LOAD( "82s129.u84", 0x0000, 0x0100, CRC(0489b760) SHA1(78f8632b17a76335183c5c204cdec856988368b0) ) + ROM_LOAD( "82s129.u70", 0x0100, 0x0100, CRC(21eb5b19) SHA1(9b8425bdb97f11f4855c998c7792c3291fd07470) ) + + ROM_REGION( 0x100, "proms2", 0 ) + ROM_LOAD( "82s129.u46", 0x0000, 0x0100, CRC(50ec383b) SHA1(ae95b92bd3946b40134bcdc22708d5c6b0f4c23e) ) +ROM_END + +ROM_START( cmasterf ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "cmbig55.rom", 0x0000, 0x1000, CRC(2cc4df7b) SHA1(ad5b8108913ff88fb435c8c12b47446575e1360e) ) + ROM_CONTINUE(0x4000,0x1000) + ROM_CONTINUE(0x3000,0x1000) + ROM_CONTINUE(0x7000,0x1000) + ROM_CONTINUE(0x1000,0x1000) + ROM_CONTINUE(0x6000,0x1000) + ROM_CONTINUE(0x2000,0x1000) + ROM_CONTINUE(0x5000,0x1000) + + ROM_REGION( 0x18000, "gfx1", 0 ) + ROM_LOAD( "u16.7", 0x00000, 0x8000, CRC(19cc1d67) SHA1(47487f9362bfb36a32100ed772960628844462bf) ) + ROM_LOAD( "u11.6", 0x08000, 0x8000, CRC(63b3df4e) SHA1(9bacd23da598805ec18ec5ad15cab95d71eb9262) ) + ROM_LOAD( "u4.5", 0x10000, 0x8000, CRC(e39fff9c) SHA1(22fdc517fa478441622c6245cecb5728c5595757) ) + + ROM_REGION( 0x8000, "gfx2", 0 ) + ROM_LOAD( "u15.4", 0x0000, 0x2000, CRC(8607ffd9) SHA1(9bc94715554aa2473ae2ed249a47f29c7886b3dc) ) + ROM_LOAD( "u10.3", 0x2000, 0x2000, CRC(c32367be) SHA1(ff217021b9c58e23b2226f8b0a7f5da966225715) ) + ROM_LOAD( "u14.2", 0x4000, 0x2000, CRC(6dfcb188) SHA1(22430429c798954d9d979e62699b58feae7fdbf4) ) + ROM_LOAD( "u9.1", 0x6000, 0x2000, CRC(9678ead2) SHA1(e80aefa98b2363fe9e6b2415762695ace272e4d3) ) + + ROM_REGION( 0x10000, "user1", 0 ) + ROM_LOAD( "u53.8", 0x0000, 0x10000, CRC(e92443d3) SHA1(4b6ca4521841610054165f085ae05510e77af191) ) + + /* proms taken from cmv4, probably wrong */ + ROM_REGION( 0x200, "proms", 0 ) + ROM_LOAD( "82s129.u84", 0x0000, 0x0100, CRC(0489b760) SHA1(78f8632b17a76335183c5c204cdec856988368b0) ) + ROM_LOAD( "82s129.u70", 0x0100, 0x0100, CRC(21eb5b19) SHA1(9b8425bdb97f11f4855c998c7792c3291fd07470) ) + + ROM_REGION( 0x100, "proms2", 0 ) + ROM_LOAD( "82s129.u46", 0x0000, 0x0100, CRC(50ec383b) SHA1(ae95b92bd3946b40134bcdc22708d5c6b0f4c23e) ) +ROM_END + + /* Cherry Master '91 @@ -6026,6 +6208,38 @@ ROM_START( cmast91 ) ROM_LOAD( "pld4.bin", 0x0600, 0x0104, NO_DUMP ) ROM_END + + +ROM_START( cmast92 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "cm9230d.rom", 0x00000, 0x01000, CRC(214a0a2d) SHA1(2d349e0888ac2da3df954517fdeb9214a3b17ae1) ) + // I've not checked the rom loading yet + ROM_CONTINUE(0x1000,0x1000) + ROM_CONTINUE(0x4000,0x1000) + ROM_CONTINUE(0x5000,0x1000) + ROM_CONTINUE(0x2000,0x1000) + ROM_CONTINUE(0x3000,0x1000) + ROM_CONTINUE(0x6000,0x1000) + ROM_CONTINUE(0x7000,0x1000) + ROM_CONTINUE(0x8000,0x1000) + ROM_CONTINUE(0x9000,0x1000) + ROM_CONTINUE(0xa000,0x1000) + ROM_CONTINUE(0xb000,0x1000) + ROM_CONTINUE(0xc000,0x1000) + ROM_CONTINUE(0xd000,0x1000) + ROM_CONTINUE(0xe000,0x1000) + ROM_CONTINUE(0xf000,0x1000) + + // we only have a program rom :-( + ROM_REGION( 0x18000, "gfx1", 0 ) + ROM_LOAD( "cherry master 92 graphics", 0x00000, 0x8000, NO_DUMP ) + ROM_REGION( 0x20000, "gfx2", ROMREGION_ERASEFF ) + ROM_REGION( 0x40000, "user1", ROMREGION_ERASEFF ) + ROM_REGION( 0x300, "proms", ROMREGION_ERASEFF ) + ROM_LOAD( "cherry master 92 proms", 0x00000, 0x100, NO_DUMP ) + ROM_REGION( 0x100, "proms2", ROMREGION_ERASEFF ) +ROM_END + /* Lucky 8 Line @@ -8408,13 +8622,24 @@ GAME( 199?, cb3b, ncb3, cherrys, ncb3, cherrys, ROT0, "Dyna", // cherry master hardware has a rather different mem map, but is basically the same GAME( 198?, cmv801, 0, cm, cmv801, cm, ROT0, "Corsica", "Cherry Master (Corsica, ver.8.01)", 0 ) /* says ED-96 where the manufacturer is on some games.. */ +// most of these are almost certainly bootlegs, with added features, hacked payouts etc. identifying which are +// the original, unmodified dyna versions is almost impossible due to lack of documentation from back in the day, +// even original boards almost always run modified sets GAME( 1992, cmv4, 0, cm, cmv4, cmv4, ROT0, "Dyna", "Cherry Master (ver.4, set 1)", 0 ) GAME( 1992, cmv4a, cmv4, cm, cmv4, cmv4, ROT0, "Dyna", "Cherry Master (ver.4, set 2)", GAME_NOT_WORKING ) /* stealth game? */ GAME( 1991, cmaster, 0, cm, cmaster, 0, ROT0, "Dyna", "Cherry Master I (ver.1.01, set 1)", 0 ) GAME( 1991, cmasterb, cmaster, cm, cmasterb, cmv4, ROT0, "Dyna", "Cherry Master I (ver.1.01, set 2)", 0 ) GAME( 1991, cmasterc, cmaster, cmasterc, cmasterc, cmv4, ROT0, "Dyna", "Cherry Master I (ver.1.01, set 3)", 0 ) +GAME( 1991, cmasterbv, cmaster, cm, cmasterb, cmv4, ROT0, "Dyna", "Cherry Master I (ver.1.01, set 4, with Blitz Poker ROM?)", GAME_NOT_WORKING ) // Cherry Master works, but no idea how to use the Blitz ROM +GAME( 1991, cmasterd, cmaster, cm, cmasterb, cmv4, ROT0, "Dyna", "Cherry Master I (ver.1.01, set 5)", 0 ) +GAME( 1991, cmastere, cmaster, cm, cmasterb, cmv4, ROT0, "Dyna", "Cherry Master I (ver.1.01, set 6)", 0 ) +GAME( 1991, cmasterf, cmaster, cm, cmasterb, cmv4, ROT0, "Dyna", "Cherry Master I (ver.1.01, set 7)", 0 ) + + GAME( 1991, cmast91, 0, cmast91, cmast91, cmast91, ROT0, "Dyna", "Cherry Master '91 (ver.1.30)", 0 ) +GAME( 1992, cmast92, 0, cmast91, cmast91, cmast91, ROT0, "Dyna", "Cherry Master '92", GAME_NOT_WORKING ) // no gfx roms are dumped + GAME( 1989, lucky8, 0, lucky8, lucky8, 0, ROT0, "Wing Co.Ltd / GEI", "New Lucky 8 Lines (set 1)", 0 ) GAME( 1989, lucky8a, lucky8, lucky8, lucky8a, lucky8a, ROT0, "Wing Co.Ltd / GEI", "New Lucky 8 Lines (set 2)", 0 ) diff --git a/src/mame/drivers/namcond1.c b/src/mame/drivers/namcond1.c index 905acf5377f..ad5afb08ca7 100644 --- a/src/mame/drivers/namcond1.c +++ b/src/mame/drivers/namcond1.c @@ -287,7 +287,13 @@ static MACHINE_DRIVER_START( namcond1 ) MDRV_CPU_ADD("maincpu", M68000, 12288000) MDRV_CPU_PROGRAM_MAP(namcond1_map) MDRV_CPU_VBLANK_INT("screen", irq1_line_hold) - MDRV_CPU_PERIODIC_INT(ygv608_timed_interrupt, 1000) + + // I've disabled this for now, I don't think it's correct, it breaks ncv2 'game options' in test + // mode (and could also be responsible for the random resets?) + // also, if you log the timing of it and the scanlines on which the interrupt fires, it doesn't + // seem correct for the intended purpose? + //MDRV_CPU_PERIODIC_INT(ygv608_timed_interrupt, 1000) + MDRV_CPU_ADD("mcu", H83002, 16384000 ) MDRV_CPU_PROGRAM_MAP( nd1h8rwmap) diff --git a/src/mame/includes/cninja.h b/src/mame/includes/cninja.h index f21c084ec5c..a48bb8043e5 100644 --- a/src/mame/includes/cninja.h +++ b/src/mame/includes/cninja.h @@ -6,6 +6,7 @@ VIDEO_START( robocop2 ); VIDEO_START( stoneage ); VIDEO_START( mutantf ); VIDEO_UPDATE( cninja ); +VIDEO_UPDATE( cninjabl ); VIDEO_UPDATE( edrandy ); VIDEO_UPDATE( robocop2 ); VIDEO_UPDATE( mutantf ); diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c index 7306667c76e..4cafb36b39c 100644 --- a/src/mame/mamedriv.c +++ b/src/mame/mamedriv.c @@ -1805,6 +1805,7 @@ const game_driver * const drivers[] = DRIVER( arkangc2 ) /* bootleg */ DRIVER( arkblock ) /* bootleg */ DRIVER( arkbloc2 ) /* bootleg */ + DRIVER( arkbloc3 ) /* bootleg */ DRIVER( arkgcbl ) /* bootleg */ DRIVER( arkgcbla ) /* bootleg */ DRIVER( paddle2 ) /* bootleg */ @@ -9365,9 +9366,6 @@ Other Sun games DRIVER( showhanc ) /* (c) 1999? Astro Corp. */ /* Dyna */ - DRIVER( cb2001 ) /* (c) 2001 Dyna Electronics */ - DRIVER( scherrym ) /* (c) 2001? Dyna Electronics */ - DRIVER( ncb3 ) /* (c) 199? Dyna Electronics */ DRIVER( cb3a ) /* (c) 199? Dyna Electronics */ DRIVER( cb3 ) /* (c) 199? Dyna Electronics */ @@ -9378,7 +9376,14 @@ Other Sun games DRIVER( cmaster ) /* (c) 1991 Dyna Electronics */ DRIVER( cmasterb ) /* (c) 1991 Dyna Electronics */ DRIVER( cmasterc ) /* (c) 1991 Dyna Electronics */ + DRIVER( cmasterbv ) /* (c) 1991 Dyna Electronics / Gerald Duhamel?*/ + DRIVER( cmasterd ) /* (c) 1991 Dyna Electronics */ + DRIVER( cmastere ) /* (c) 1991 Dyna Electronics */ + DRIVER( cmasterf ) /* (c) 1991 Dyna Electronics */ DRIVER( cmast91 ) /* (c) 1991 Dyna Electronics */ + DRIVER( cmast92 ) /* (c) 1992 Dyna Electronics */ + DRIVER( cb2001 ) /* (c) 2001 Dyna Electronics */ + DRIVER( scherrym ) /* (c) 2001? Dyna Electronics */ /* STG? */ DRIVER( queen ) diff --git a/src/mame/video/cninja.c b/src/mame/video/cninja.c index edba6bb0335..8c26ed7c324 100644 --- a/src/mame/video/cninja.c +++ b/src/mame/video/cninja.c @@ -97,55 +97,6 @@ VIDEO_START( mutantf ) /******************************************************************************/ -VIDEO_EOF( cninja ) -{ - deco16_raster_display_position=0; -} - -static void raster_pf3_draw(bitmap_t *bitmap, const rectangle *cliprect, int flags, int pri) -{ - tilemap_t *tmap=deco16_get_tilemap(2,0); - int ptr=0,start,end=0; - rectangle clip; - int overflow=deco16_raster_display_position; - - clip.min_x = cliprect->min_x; - clip.max_x = cliprect->max_x; - - /* Finish list up to end of visible display */ - deco16_raster_display_list[overflow++]=255; - deco16_raster_display_list[overflow++]=deco16_pf12_control[1]; - deco16_raster_display_list[overflow++]=deco16_pf12_control[2]; - deco16_raster_display_list[overflow++]=deco16_pf12_control[3]; - deco16_raster_display_list[overflow++]=deco16_pf12_control[4]; - deco16_raster_display_list[overflow++]=deco16_pf34_control[1]; - deco16_raster_display_list[overflow++]=deco16_pf34_control[2]; - deco16_raster_display_list[overflow++]=deco16_pf34_control[3]; - deco16_raster_display_list[overflow++]=deco16_pf34_control[4]; - - while (ptrgeneric.buffered_spriteram.u16; + int offs; + int endoffs; + + // bootleg seems to use 0x180 as an end of list marker + // find it first, so we can use normal list processing + endoffs = 0x400-4; + for (offs = 0;offs <0x400-4 ;offs += 4) + { + int y; + + y = buffered_spriteram16[offs+1]; + + if (y==0x180) + { + endoffs = offs; + offs = 0x400-4; + } + } + + for (offs = endoffs;offs >=0 ;offs -= 4) + { + int x,y,sprite,colour,multi,fx,fy,inc,flash,mult,pri=0; + + sprite = buffered_spriteram16[offs+0]; // changed on bootleg! + y = buffered_spriteram16[offs+1]; // changed on bootleg! + + if (!sprite) continue; + + x = buffered_spriteram16[offs+2]; + + /* Sprite/playfield priority */ + switch (x&0xc000) { + case 0x0000: pri=0; break; + case 0x4000: pri=0xf0; break; + case 0x8000: pri=0xf0|0xcc; break; + case 0xc000: pri=0xf0|0xcc; break; /* Perhaps 0xf0|0xcc|0xaa (Sprite under bottom layer) */ + } + + + + flash=y&0x1000; + if (flash && (video_screen_get_frame_number(machine->primary_screen) & 1)) continue; + + colour = (x >> 9) &0x1f; + + + fx = y & 0x2000; + fy = y & 0x4000; + + multi = (1 << ((y & 0x0600) >> 9)) - 1; /* 1x, 2x, 4x, 8x height */ + + y -= multi*16; // changed on bootleg! + y += 4; + + x = x & 0x01ff; + y = y & 0x01ff; + if (x >= 256) x -= 512; + if (y >= 256) y -= 512; + x = 240 - x; + y = 240 - y; + + //sprite &= ~multi; + if (fy) + inc = -1; + else + { + sprite += multi; + inc = 1; + } + + if (flip_screen_get(machine)) { + y=240-y; + x=240-x; + if (fx) fx=0; else fx=1; + if (fy) fy=0; else fy=1; + mult=16; + } + else mult=-16; + + while (multi >= 0) + { + pdrawgfx_transpen(bitmap,cliprect,machine->gfx[3], + sprite - multi * inc, + colour, + fx,fy, + x,y + mult * multi, + machine->priority_bitmap,pri,0); + + multi--; + } + } +} + + static void robocop2_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) { UINT16 *buffered_spriteram16 = machine->generic.buffered_spriteram.u16; @@ -414,6 +463,24 @@ VIDEO_UPDATE( cninja ) return 0; } +VIDEO_UPDATE( cninjabl ) +{ + flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); + deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); + deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); + + /* Draw playfields */ + bitmap_fill(screen->machine->priority_bitmap,cliprect,0); + bitmap_fill(bitmap,cliprect,512); + deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); + deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); + deco16_tilemap_2_draw(screen,bitmap,cliprect,TILEMAP_DRAW_LAYER1,2); + deco16_tilemap_2_draw(screen,bitmap,cliprect,TILEMAP_DRAW_LAYER0,4); + cninjabl_draw_sprites(screen->machine,bitmap,cliprect); + deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); + return 0; +} + VIDEO_UPDATE( edrandy ) { flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); @@ -423,10 +490,7 @@ VIDEO_UPDATE( edrandy ) bitmap_fill(screen->machine->priority_bitmap,cliprect,0); bitmap_fill(bitmap,cliprect,0); deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); - if (deco16_raster_display_position) - raster_pf3_draw(bitmap,cliprect,0,2); - else - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); + deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); deco16_tilemap_2_draw(screen,bitmap,cliprect,0,4); cninja_draw_sprites(screen->machine,bitmap,cliprect); deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); @@ -461,17 +525,11 @@ VIDEO_UPDATE( robocop2 ) switch (deco16_priority&0x8) { case 8: deco16_tilemap_2_draw(screen,bitmap,cliprect,0,2); - if (deco16_raster_display_position) - raster_pf3_draw(bitmap,cliprect,0,4); - else - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,4); + deco16_tilemap_3_draw(screen,bitmap,cliprect,0,4); break; default: case 0: - if (deco16_raster_display_position) - raster_pf3_draw(bitmap,cliprect,0,2); - else - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); + deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); deco16_tilemap_2_draw(screen,bitmap,cliprect,0,4); break; } diff --git a/src/mame/video/deco32.c b/src/mame/video/deco32.c index 9d3d04996b9..b6cb3f6b0f0 100644 --- a/src/mame/video/deco32.c +++ b/src/mame/video/deco32.c @@ -972,8 +972,6 @@ VIDEO_START( captaven ) pf1a_tilemap =tilemap_create(machine, get_pf1a_tile_info, deco16_scan_rows,16,16,64,32); pf2_tilemap = tilemap_create(machine, get_pf2_tile_info, deco16_scan_rows,16,16,64,32); pf3_tilemap = tilemap_create(machine, get_ca_pf3_tile_info, tilemap_scan_rows,16,16,32,32); - deco32_raster_display_list=auto_alloc_array(machine, UINT16, 10 * 256 / 2); - memset(deco32_raster_display_list, 0, 10 * 256); tilemap_set_transparent_pen(pf1_tilemap,0); tilemap_set_transparent_pen(pf1a_tilemap,0); @@ -1000,7 +998,6 @@ VIDEO_START( fghthist ) tilemap_set_transparent_pen(pf2_tilemap,0); tilemap_set_transparent_pen(pf3_tilemap,0); - deco32_raster_display_list=0; deco32_pf2_colourbank=deco32_pf4_colourbank=0; has_ace_ram=0; } @@ -1072,7 +1069,6 @@ VIDEO_START( nslasher ) tilemap_set_transparent_pen(pf3_tilemap,0); memset(dirty_palette,0,4096); - deco32_raster_display_list=0; deco32_pf2_colourbank=16; deco32_pf4_colourbank=16; state_save_register_global(machine, deco32_pri); @@ -1084,7 +1080,6 @@ VIDEO_START( nslasher ) VIDEO_EOF( captaven ) { memcpy(machine->generic.buffered_spriteram.u32,machine->generic.spriteram.u32,machine->generic.spriteram_size); - deco32_raster_display_position=0; } VIDEO_EOF( dragngun ) @@ -1153,37 +1148,6 @@ static void deco32_setup_scroll(tilemap_t *pf_tilemap, UINT16 height, UINT8 cont } } -static void tilemap_raster_draw(bitmap_t *bitmap, const rectangle *cliprect, int flags, int pri) -{ - int ptr=0,start,end=0; - rectangle clip; - int overflow=deco32_raster_display_position; - - clip.min_x = cliprect->min_x; - clip.max_x = cliprect->max_x; - - /* Finish list up to end of visible display */ - deco32_raster_display_list[overflow++]=255; - deco32_raster_display_list[overflow++]=deco32_pf12_control[1]; - deco32_raster_display_list[overflow++]=deco32_pf12_control[2]; - deco32_raster_display_list[overflow++]=deco32_pf12_control[3]; - deco32_raster_display_list[overflow++]=deco32_pf12_control[4]; - - while (ptr>8)&0xff,(deco32_pf12_control[6]>>8)&0xff,deco32_pf12_control[4],deco32_pf12_control[3],deco32_pf2_rowscroll,deco32_pf2_rowscroll+0x200); - tilemap_draw(bitmap,&clip,pf2_tilemap,flags,pri); - } -} static void combined_tilemap_draw(running_machine* machine, bitmap_t *bitmap, const rectangle *cliprect) { @@ -1266,16 +1230,10 @@ VIDEO_UPDATE( captaven ) else bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine)); - if (deco32_raster_display_position) - tilemap_raster_draw(bitmap,cliprect,0,2); - else - tilemap_draw(bitmap,cliprect,pf2_tilemap,0,2); + tilemap_draw(bitmap,cliprect,pf2_tilemap,0,2); } else { if (pf2_enable) { - if (deco32_raster_display_position) - tilemap_raster_draw(bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); - else - tilemap_draw(bitmap,cliprect,pf2_tilemap,0,1); + tilemap_draw(bitmap,cliprect,pf2_tilemap,0,1); } else bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine));