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]
This commit is contained in:
Angelo Salese 2009-12-29 20:35:04 +00:00
parent 81523f2e10
commit 674fcdc548
9 changed files with 451 additions and 158 deletions

View File

@ -1088,6 +1088,28 @@ ROM_START( block2 )
ROM_LOAD( "a75-09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */ ROM_LOAD( "a75-09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */
ROM_END 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_START( arkblock )
ROM_REGION( 0x10000, "maincpu", 0 ) ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "ark-6.bin", 0x0000, 0x8000, CRC(0be015de) SHA1(f4209085b59d2c96a62ac9657c7bf097da55362b) ) 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, 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, 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, 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, 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, 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, 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( 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 ) GAME( 1988, paddle2, arkanoid, bootleg, paddle2, paddle2, ROT90, "bootleg", "Paddle 2 (bootleg on Block hardware)", GAME_SUPPORTS_SAVE )

View File

@ -72,19 +72,6 @@ static WRITE16_HANDLER( stoneage_sound_w )
static TIMER_DEVICE_CALLBACK( interrupt_gen ) 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); 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); 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) */ 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; cninja_scanline=data&0xff;
if ((cninja_irq_mask&0x2)==0 && cninja_scanline>0 && cninja_scanline<240) 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); timer_device_adjust_oneshot(raster_irq_timer, video_screen_get_time_until_pos(space->machine->primary_screen, cninja_scanline, 0), cninja_scanline);
}
else else
timer_device_adjust_oneshot(raster_irq_timer,attotime_never,0); timer_device_adjust_oneshot(raster_irq_timer,attotime_never,0);
return; 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 ) static ADDRESS_MAP_START( cninja_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0bffff) AM_ROM 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(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(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(0x14c000, 0x14c7ff) AM_WRITEONLY AM_BASE(&deco16_pf1_rowscroll)
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&deco16_pf2_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(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(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) 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(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(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(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(0x14c000, 0x14c7ff) AM_WRITEONLY AM_BASE(&deco16_pf1_rowscroll)
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&deco16_pf2_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(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(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) 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 ) static ADDRESS_MAP_START( edrandy_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM 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(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(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(0x14c000, 0x14c7ff) AM_RAM AM_BASE(&deco16_pf1_rowscroll)
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&deco16_pf2_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(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(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) 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 */ AM_RANGE(0x1bc800, 0x1bcfff) AM_WRITENOP /* Another bug in game code? Sprite list can overrun. Doesn't seem to mirror */
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( robocop2_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( robocop2_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM 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(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(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(0x14c000, 0x14c7ff) AM_RAM AM_BASE(&deco16_pf1_rowscroll)
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&deco16_pf2_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(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(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) 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(0x1c0000, 0x1c0001) AM_READWRITE(deco16_71_r, buffer_spriteram16_w)
AM_RANGE(0x1e0000, 0x1e0001) AM_WRITE(buffer_spriteram16_2_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(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(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(0x308000, 0x3087ff) AM_RAM AM_BASE(&deco16_pf1_rowscroll)
AM_RANGE(0x30a000, 0x30a7ff) AM_RAM AM_BASE(&deco16_pf2_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(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(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) 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_START(cninja)
MDRV_VIDEO_UPDATE(cninja) MDRV_VIDEO_UPDATE(cninja)
MDRV_VIDEO_EOF(cninja)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -820,7 +823,6 @@ static MACHINE_DRIVER_START( stoneage )
MDRV_VIDEO_START(stoneage) MDRV_VIDEO_START(stoneage)
MDRV_VIDEO_UPDATE(cninja) MDRV_VIDEO_UPDATE(cninja)
MDRV_VIDEO_EOF(cninja)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -866,9 +868,8 @@ static MACHINE_DRIVER_START( cninjabl )
MDRV_GFXDECODE(cninjabl) MDRV_GFXDECODE(cninjabl)
MDRV_PALETTE_LENGTH(2048) MDRV_PALETTE_LENGTH(2048)
MDRV_VIDEO_START(stoneage) MDRV_VIDEO_START(cninja)
MDRV_VIDEO_UPDATE(cninja) MDRV_VIDEO_UPDATE(cninjabl)
MDRV_VIDEO_EOF(cninja)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -912,7 +913,6 @@ static MACHINE_DRIVER_START( edrandy )
MDRV_VIDEO_START(edrandy) MDRV_VIDEO_START(edrandy)
MDRV_VIDEO_UPDATE(edrandy) MDRV_VIDEO_UPDATE(edrandy)
MDRV_VIDEO_EOF(cninja)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -962,7 +962,6 @@ static MACHINE_DRIVER_START( robocop2 )
MDRV_VIDEO_START(robocop2) MDRV_VIDEO_START(robocop2)
MDRV_VIDEO_UPDATE(robocop2) MDRV_VIDEO_UPDATE(robocop2)
MDRV_VIDEO_EOF(cninja)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -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 ) 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); 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) */ 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); scanline=(data&0xff);
if (raster_enable && scanline>0 && scanline<240) 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 else
timer_device_adjust_oneshot(raster_irq_timer,attotime_never,0); timer_device_adjust_oneshot(raster_irq_timer,attotime_never,0);
break; 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(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(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(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(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(0x1a0000, 0x1a1fff) AM_RAM AM_BASE(&deco32_pf1_rowscroll)
AM_RANGE(0x1a4000, 0x1a5fff) AM_RAM AM_BASE(&deco32_pf2_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(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) AM_RANGE(0x1e0000, 0x1e1fff) AM_RAM AM_BASE(&deco32_pf3_rowscroll)
ADDRESS_MAP_END 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(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(0x192000, 0x192fff) AM_RAM AM_BASE(&deco32_pf1_rowscroll)
AM_RANGE(0x194000, 0x194fff) AM_RAM AM_BASE(&deco32_pf2_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(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(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(0x1d2000, 0x1d2fff) AM_RAM AM_BASE(&deco32_pf3_rowscroll)
AM_RANGE(0x1d4000, 0x1d4fff) AM_RAM AM_BASE(&deco32_pf4_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(0x16c000, 0x16c01f) AM_READNOP
AM_RANGE(0x17c000, 0x17c03f) 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(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(0x192000, 0x192fff) AM_RAM AM_BASE(&deco32_pf1_rowscroll)
AM_RANGE(0x194000, 0x194fff) AM_RAM AM_BASE(&deco32_pf2_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(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(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(0x1d2000, 0x1d2fff) AM_RAM AM_BASE(&deco32_pf3_rowscroll)
AM_RANGE(0x1d4000, 0x1d4fff) AM_RAM AM_BASE(&deco32_pf4_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) AM_RANGE(0x200000, 0x200fff) AM_READWRITE(deco16_146_fghthist_prot_r, deco16_146_fghthist_prot_w) AM_BASE(&deco32_prot_ram)
ADDRESS_MAP_END 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 ) static ADDRESS_MAP_START( dragngun_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_BASE(&deco32_ram) 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(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(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(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(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(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(0x1a0000, 0x1a0fff) AM_RAM AM_BASE(&deco32_pf1_rowscroll)
AM_RANGE(0x1a4000, 0x1a4fff) AM_RAM AM_BASE(&deco32_pf2_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(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(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) 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(0x170000, 0x170007) AM_READ(lockload_gun_mirror_r) /* Not on Dragongun */
AM_RANGE(0x178008, 0x17800f) AM_WRITENOP /* Gun read ACK's */ 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(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(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(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(0x1a0000, 0x1a0fff) AM_RAM AM_BASE(&deco32_pf1_rowscroll)
AM_RANGE(0x1a4000, 0x1a4fff) AM_RAM AM_BASE(&deco32_pf2_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(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(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) 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(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(0x192000, 0x193fff) AM_RAM AM_BASE(&deco32_pf1_rowscroll)
AM_RANGE(0x194000, 0x195fff) AM_RAM AM_BASE(&deco32_pf2_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(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(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(0x1d2000, 0x1d3fff) AM_RAM AM_BASE(&deco32_pf3_rowscroll)
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM AM_BASE(&deco32_pf4_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) AM_RANGE(0x200000, 0x200fff) AM_READWRITE(tattass_prot_r, tattass_prot_w) AM_BASE(&deco32_prot_ram)
ADDRESS_MAP_END 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(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(0x192000, 0x193fff) AM_RAM AM_BASE(&deco32_pf1_rowscroll)
AM_RANGE(0x194000, 0x195fff) AM_RAM AM_BASE(&deco32_pf2_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(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(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(0x1d2000, 0x1d3fff) AM_RAM AM_BASE(&deco32_pf3_rowscroll)
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM AM_BASE(&deco32_pf4_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) AM_RANGE(0x200000, 0x200fff) AM_READWRITE(nslasher_prot_r, nslasher_prot_w) AM_BASE(&deco32_prot_ram)
ADDRESS_MAP_END ADDRESS_MAP_END

View File

@ -5962,6 +5962,188 @@ ROM_START( cmasterc )
ROM_LOAD( "82s129.u46", 0x0000, 0x0100, CRC(50ec383b) SHA1(ae95b92bd3946b40134bcdc22708d5c6b0f4c23e) ) ROM_LOAD( "82s129.u46", 0x0000, 0x0100, CRC(50ec383b) SHA1(ae95b92bd3946b40134bcdc22708d5c6b0f4c23e) )
ROM_END 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 Cherry Master '91
@ -6026,6 +6208,38 @@ ROM_START( cmast91 )
ROM_LOAD( "pld4.bin", 0x0600, 0x0104, NO_DUMP ) ROM_LOAD( "pld4.bin", 0x0600, 0x0104, NO_DUMP )
ROM_END 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 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 // 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.. */ 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, 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( 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, 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, 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, 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( 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, 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 ) GAME( 1989, lucky8a, lucky8, lucky8, lucky8a, lucky8a, ROT0, "Wing Co.Ltd / GEI", "New Lucky 8 Lines (set 2)", 0 )

View File

@ -287,7 +287,13 @@ static MACHINE_DRIVER_START( namcond1 )
MDRV_CPU_ADD("maincpu", M68000, 12288000) MDRV_CPU_ADD("maincpu", M68000, 12288000)
MDRV_CPU_PROGRAM_MAP(namcond1_map) MDRV_CPU_PROGRAM_MAP(namcond1_map)
MDRV_CPU_VBLANK_INT("screen", irq1_line_hold) 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_ADD("mcu", H83002, 16384000 )
MDRV_CPU_PROGRAM_MAP( nd1h8rwmap) MDRV_CPU_PROGRAM_MAP( nd1h8rwmap)

View File

@ -6,6 +6,7 @@ VIDEO_START( robocop2 );
VIDEO_START( stoneage ); VIDEO_START( stoneage );
VIDEO_START( mutantf ); VIDEO_START( mutantf );
VIDEO_UPDATE( cninja ); VIDEO_UPDATE( cninja );
VIDEO_UPDATE( cninjabl );
VIDEO_UPDATE( edrandy ); VIDEO_UPDATE( edrandy );
VIDEO_UPDATE( robocop2 ); VIDEO_UPDATE( robocop2 );
VIDEO_UPDATE( mutantf ); VIDEO_UPDATE( mutantf );

View File

@ -1805,6 +1805,7 @@ const game_driver * const drivers[] =
DRIVER( arkangc2 ) /* bootleg */ DRIVER( arkangc2 ) /* bootleg */
DRIVER( arkblock ) /* bootleg */ DRIVER( arkblock ) /* bootleg */
DRIVER( arkbloc2 ) /* bootleg */ DRIVER( arkbloc2 ) /* bootleg */
DRIVER( arkbloc3 ) /* bootleg */
DRIVER( arkgcbl ) /* bootleg */ DRIVER( arkgcbl ) /* bootleg */
DRIVER( arkgcbla ) /* bootleg */ DRIVER( arkgcbla ) /* bootleg */
DRIVER( paddle2 ) /* bootleg */ DRIVER( paddle2 ) /* bootleg */
@ -9365,9 +9366,6 @@ Other Sun games
DRIVER( showhanc ) /* (c) 1999? Astro Corp. */ DRIVER( showhanc ) /* (c) 1999? Astro Corp. */
/* Dyna */ /* Dyna */
DRIVER( cb2001 ) /* (c) 2001 Dyna Electronics */
DRIVER( scherrym ) /* (c) 2001? Dyna Electronics */
DRIVER( ncb3 ) /* (c) 199? Dyna Electronics */ DRIVER( ncb3 ) /* (c) 199? Dyna Electronics */
DRIVER( cb3a ) /* (c) 199? Dyna Electronics */ DRIVER( cb3a ) /* (c) 199? Dyna Electronics */
DRIVER( cb3 ) /* (c) 199? Dyna Electronics */ DRIVER( cb3 ) /* (c) 199? Dyna Electronics */
@ -9378,7 +9376,14 @@ Other Sun games
DRIVER( cmaster ) /* (c) 1991 Dyna Electronics */ DRIVER( cmaster ) /* (c) 1991 Dyna Electronics */
DRIVER( cmasterb ) /* (c) 1991 Dyna Electronics */ DRIVER( cmasterb ) /* (c) 1991 Dyna Electronics */
DRIVER( cmasterc ) /* (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( cmast91 ) /* (c) 1991 Dyna Electronics */
DRIVER( cmast92 ) /* (c) 1992 Dyna Electronics */
DRIVER( cb2001 ) /* (c) 2001 Dyna Electronics */
DRIVER( scherrym ) /* (c) 2001? Dyna Electronics */
/* STG? */ /* STG? */
DRIVER( queen ) DRIVER( queen )

View File

@ -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 (ptr<overflow) {
start=end;
end=deco16_raster_display_list[ptr++];
/* Restore state of registers before IRQ */
deco16_pf12_control[1]=deco16_raster_display_list[ptr++];
deco16_pf12_control[2]=deco16_raster_display_list[ptr++];
deco16_pf12_control[3]=deco16_raster_display_list[ptr++];
deco16_pf12_control[4]=deco16_raster_display_list[ptr++];
deco16_pf34_control[1]=deco16_raster_display_list[ptr++];
deco16_pf34_control[2]=deco16_raster_display_list[ptr++];
deco16_pf34_control[3]=deco16_raster_display_list[ptr++];
deco16_pf34_control[4]=deco16_raster_display_list[ptr++];
clip.min_y = start;
clip.max_y = end;
/* Update tilemap for this register state, and draw */
deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll);
tilemap_draw(bitmap,&clip,tmap,flags,pri);
}
}
/******************************************************************************/ /******************************************************************************/
static void cninja_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) static void cninja_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
@ -218,6 +169,104 @@ static void cninja_draw_sprites(running_machine *machine, bitmap_t *bitmap, cons
} }
} }
/* The bootleg sprites are in a different format! */
static void cninjabl_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
{
UINT16 *buffered_spriteram16 = machine->generic.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) static void robocop2_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
{ {
UINT16 *buffered_spriteram16 = machine->generic.buffered_spriteram.u16; UINT16 *buffered_spriteram16 = machine->generic.buffered_spriteram.u16;
@ -414,6 +463,24 @@ VIDEO_UPDATE( cninja )
return 0; 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 ) VIDEO_UPDATE( edrandy )
{ {
flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); 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(screen->machine->priority_bitmap,cliprect,0);
bitmap_fill(bitmap,cliprect,0); bitmap_fill(bitmap,cliprect,0);
deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1);
if (deco16_raster_display_position) deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2);
raster_pf3_draw(bitmap,cliprect,0,2);
else
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2);
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,4); deco16_tilemap_2_draw(screen,bitmap,cliprect,0,4);
cninja_draw_sprites(screen->machine,bitmap,cliprect); cninja_draw_sprites(screen->machine,bitmap,cliprect);
deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0);
@ -461,17 +525,11 @@ VIDEO_UPDATE( robocop2 )
switch (deco16_priority&0x8) { switch (deco16_priority&0x8) {
case 8: case 8:
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,2); deco16_tilemap_2_draw(screen,bitmap,cliprect,0,2);
if (deco16_raster_display_position) deco16_tilemap_3_draw(screen,bitmap,cliprect,0,4);
raster_pf3_draw(bitmap,cliprect,0,4);
else
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,4);
break; break;
default: default:
case 0: case 0:
if (deco16_raster_display_position) deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2);
raster_pf3_draw(bitmap,cliprect,0,2);
else
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2);
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,4); deco16_tilemap_2_draw(screen,bitmap,cliprect,0,4);
break; break;
} }

View File

@ -972,8 +972,6 @@ VIDEO_START( captaven )
pf1a_tilemap =tilemap_create(machine, get_pf1a_tile_info, deco16_scan_rows,16,16,64,32); 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); 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); 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(pf1_tilemap,0);
tilemap_set_transparent_pen(pf1a_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(pf2_tilemap,0);
tilemap_set_transparent_pen(pf3_tilemap,0); tilemap_set_transparent_pen(pf3_tilemap,0);
deco32_raster_display_list=0;
deco32_pf2_colourbank=deco32_pf4_colourbank=0; deco32_pf2_colourbank=deco32_pf4_colourbank=0;
has_ace_ram=0; has_ace_ram=0;
} }
@ -1072,7 +1069,6 @@ VIDEO_START( nslasher )
tilemap_set_transparent_pen(pf3_tilemap,0); tilemap_set_transparent_pen(pf3_tilemap,0);
memset(dirty_palette,0,4096); memset(dirty_palette,0,4096);
deco32_raster_display_list=0;
deco32_pf2_colourbank=16; deco32_pf2_colourbank=16;
deco32_pf4_colourbank=16; deco32_pf4_colourbank=16;
state_save_register_global(machine, deco32_pri); state_save_register_global(machine, deco32_pri);
@ -1084,7 +1080,6 @@ VIDEO_START( nslasher )
VIDEO_EOF( captaven ) VIDEO_EOF( captaven )
{ {
memcpy(machine->generic.buffered_spriteram.u32,machine->generic.spriteram.u32,machine->generic.spriteram_size); memcpy(machine->generic.buffered_spriteram.u32,machine->generic.spriteram.u32,machine->generic.spriteram_size);
deco32_raster_display_position=0;
} }
VIDEO_EOF( dragngun ) 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<overflow) {
start=end;
end=deco32_raster_display_list[ptr++];
deco32_pf12_control[1]=deco32_raster_display_list[ptr++];
deco32_pf12_control[2]=deco32_raster_display_list[ptr++];
deco32_pf12_control[3]=deco32_raster_display_list[ptr++];
deco32_pf12_control[4]=deco32_raster_display_list[ptr++];
clip.min_y = start;
clip.max_y = end;
deco32_setup_scroll(pf2_tilemap, 512,(deco32_pf12_control[5]>>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) static void combined_tilemap_draw(running_machine* machine, bitmap_t *bitmap, const rectangle *cliprect)
{ {
@ -1266,16 +1230,10 @@ VIDEO_UPDATE( captaven )
else else
bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine)); bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine));
if (deco32_raster_display_position) tilemap_draw(bitmap,cliprect,pf2_tilemap,0,2);
tilemap_raster_draw(bitmap,cliprect,0,2);
else
tilemap_draw(bitmap,cliprect,pf2_tilemap,0,2);
} else { } else {
if (pf2_enable) { if (pf2_enable) {
if (deco32_raster_display_position) tilemap_draw(bitmap,cliprect,pf2_tilemap,0,1);
tilemap_raster_draw(bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1);
else
tilemap_draw(bitmap,cliprect,pf2_tilemap,0,1);
} }
else else
bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine)); bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine));