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));