diff --git a/src/mame/drivers/cps1.cpp b/src/mame/drivers/cps1.cpp index bff13d06aa4..193f031e037 100644 --- a/src/mame/drivers/cps1.cpp +++ b/src/mame/drivers/cps1.cpp @@ -2166,7 +2166,7 @@ INPUT_PORTS_START( knights ) PORT_DIPSETTING( 0x00, DEF_STR( Test ) ) INPUT_PORTS_END -static INPUT_PORTS_START( varth ) +INPUT_PORTS_START( varth ) PORT_INCLUDE( cps1_3b ) PORT_MODIFY("IN0") diff --git a/src/mame/drivers/fcrash.cpp b/src/mame/drivers/fcrash.cpp index d13da4ad367..16f0bb53530 100644 --- a/src/mame/drivers/fcrash.cpp +++ b/src/mame/drivers/fcrash.cpp @@ -2954,6 +2954,98 @@ ROM_START( slampic ) ROM_LOAD( "mb_qa.5k", 0x00000, 0x20000, CRC(e21a03c4) SHA1(98c03fd2c9b6bf8a4fc25a4edca87fff7c3c3819) ) ROM_END +// ************************************************************************* VARTHB + +WRITE16_MEMBER(cps_state::varthb_layer_w) +{ + if (data > 0x9000) + m_cps_a_regs[0x06 / 2] = data; +} + +static ADDRESS_MAP_START( varthb_map, AS_PROGRAM, 16, cps_state ) + AM_RANGE(0x000000, 0x1fffff) AM_ROM + AM_RANGE(0x800000, 0x800001) AM_READ_PORT("IN1") + AM_RANGE(0x800006, 0x800007) AM_WRITE(cps1_soundlatch_w) + AM_RANGE(0x800018, 0x80001f) AM_READ(cps1_dsw_r) + AM_RANGE(0x800030, 0x800037) AM_WRITE(cps1_coinctrl_w) + AM_RANGE(0x800100, 0x80013f) AM_WRITE(cps1_cps_a_w) AM_SHARE("cps_a_regs") + AM_RANGE(0x800140, 0x80017f) AM_READWRITE(cps1_cps_b_r, cps1_cps_b_w) AM_SHARE("cps_b_regs") + AM_RANGE(0x800188, 0x800189) AM_WRITE(varthb_layer_w) + AM_RANGE(0x980000, 0x98000b) AM_WRITE(dinopic_layer_w) + AM_RANGE(0x900000, 0x92ffff) AM_RAM_WRITE(cps1_gfxram_w) AM_SHARE("gfxram") + AM_RANGE(0xff0000, 0xffffff) AM_RAM AM_SHARE("mainram") +ADDRESS_MAP_END + +static MACHINE_CONFIG_START( varthb, cps_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68000, 12000000) + MCFG_CPU_PROGRAM_MAP(varthb_map) + MCFG_CPU_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt) + + MCFG_CPU_ADD("audiocpu", Z80, 3579545) + MCFG_CPU_PROGRAM_MAP(sgyxz_sound_map) + + MCFG_MACHINE_START_OVERRIDE(cps_state,cps1) + + /* video hardware */ + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_SIZE(64*8, 32*8) + MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 2*8, 30*8-1 ) + MCFG_SCREEN_UPDATE_DRIVER(cps_state, screen_update_cps1) + MCFG_SCREEN_VBLANK_DRIVER(cps_state, screen_eof_cps1) + MCFG_SCREEN_PALETTE("palette") + + MCFG_GFXDECODE_ADD("gfxdecode", "palette", cps1) + MCFG_PALETTE_ADD("palette", 0xc00) + + MCFG_VIDEO_START_OVERRIDE(cps_state,cps1) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + + MCFG_YM2151_ADD("2151", XTAL_3_579545MHz) + MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) + MCFG_SOUND_ROUTE(0, "mono", 0.35) + MCFG_SOUND_ROUTE(1, "mono", 0.35) + + MCFG_OKIM6295_ADD("oki", XTAL_16MHz/4/4, OKIM6295_PIN7_HIGH) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) +MACHINE_CONFIG_END + +ROM_START( varthb ) + ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */ + ROM_LOAD16_BYTE( "2", 0x000000, 0x80000, CRC(2f010023) SHA1(bf4b6c0cd82cf1b86e17d6ea2670110c06e6eabe) ) + ROM_LOAD16_BYTE( "1", 0x000001, 0x80000, CRC(0861dff3) SHA1(bf6dfe18ecaeaa1bbea09267014891c4a4a07943) ) + ROM_LOAD16_BYTE( "4", 0x100000, 0x10000, CRC(aa51e43b) SHA1(46b9dab844c55b50a47d048e5bb114911773699c) ) + ROM_LOAD16_BYTE( "3", 0x100001, 0x10000, CRC(f7e4f2f0) SHA1(2ce4eadb2d6a0e0d5745323eff2c899950ad4d3b) ) + + ROM_REGION( 0x200000, "gfx", 0 ) + ROMX_LOAD( "14", 0x000000, 0x40000, CRC(7ca73780) SHA1(26909db32f84157cd05719e5d1e715e76636d292) , ROM_SKIP(7) ) + ROMX_LOAD( "13", 0x000001, 0x40000, CRC(9fb11869) SHA1(a434fb0b588f934aaa68139495e1212a63ccf162) , ROM_SKIP(7) ) + ROMX_LOAD( "12", 0x000002, 0x40000, CRC(afeba416) SHA1(e722c65ea2e2bac3251c32208899484aa5ef6ad2) , ROM_SKIP(7) ) + ROMX_LOAD( "11", 0x000003, 0x40000, CRC(9eef3507) SHA1(ae03064ca5681fbdc43a34c54aaac11c8467428b) , ROM_SKIP(7) ) + ROMX_LOAD( "10", 0x000004, 0x40000, CRC(eeec6183) SHA1(40dc9c86e90d7c1a2ad600c195fe387180d95fd4) , ROM_SKIP(7) ) + ROMX_LOAD( "9", 0x000005, 0x40000, CRC(0e94f718) SHA1(249534f2323abcdb24099d0abc24c229c699ba94) , ROM_SKIP(7) ) + ROMX_LOAD( "8", 0x000006, 0x40000, CRC(c4ddc5b4) SHA1(79c2a42a664e387932b7804e7a80f5753338c3b0) , ROM_SKIP(7) ) + ROMX_LOAD( "7", 0x000007, 0x40000, CRC(8941ca12) SHA1(5ad5d47b8614c2899d05c65dc3b74947d4bac561) , ROM_SKIP(7) ) + + ROM_REGION( 0x18000, "audiocpu", 0 ) /* 64k for the audio CPU (+banks) */ + ROM_LOAD( "6", 0x00000, 0x08000, CRC(7a99446e) SHA1(ca027f41e3e58be5abc33ad7380746658cb5380a) ) + ROM_CONTINUE( 0x10000, 0x08000 ) + + ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ + ROM_LOAD( "5", 0x00000, 0x40000, CRC(1547e595) SHA1(27f47b1afd9700afd9e8167d7e4e2888be34a9e5) ) + + ROM_REGION( 0x157, "proms", 0 ) // came with the set + ROM_LOAD_OPTIONAL( "varth1.bin", 0x00000, 0x157, CRC(4c6a0d99) SHA1(081a307ef38675de178dd6221e6c4e55a5bfbd87) ) +ROM_END + // ************************************************************************* DRIVER MACROS @@ -2986,3 +3078,5 @@ GAME( 1992, sf2m9, sf2ce, sf2m1, sf2, cps_state, sf2m1, ROT0, GAME( 1993, slampic, slammast, slampic, slammast, cps_state, dinopic, ROT0, "bootleg", "Saturday Night Slam Masters (bootleg with PIC16c57)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) // 930713 ETC GAME( 1999, sgyxz, wof, sgyxz, sgyxz, cps_state, cps1, ROT0, "bootleg (All-In Electronic)", "Warriors of Fate ('sgyxz' bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // 921005 - Sangokushi 2 + +GAME( 1992, varthb, varth, varthb, varth, cps_state, dinopic, ROT270, "bootleg", "Varth: Operation Thunderstorm (bootleg)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/cps1.h b/src/mame/includes/cps1.h index 67ecdfee2b9..b0196409ed1 100644 --- a/src/mame/includes/cps1.h +++ b/src/mame/includes/cps1.h @@ -370,6 +370,7 @@ public: DECLARE_WRITE8_MEMBER(knightsb_snd_bankswitch_w); DECLARE_WRITE8_MEMBER(fcrash_msm5205_0_data_w); DECLARE_WRITE8_MEMBER(fcrash_msm5205_1_data_w); + DECLARE_WRITE16_MEMBER(varthb_layer_w); UINT32 screen_update_fcrash(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void fcrash_update_transmasks(); void fcrash_render_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -425,6 +426,7 @@ INPUT_PORTS_EXTERN( knights ); INPUT_PORTS_EXTERN( punisher ); INPUT_PORTS_EXTERN( sf2 ); INPUT_PORTS_EXTERN( slammast ); +INPUT_PORTS_EXTERN( varth ); #endif diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 07b86a45db7..ab30da025a6 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -12096,6 +12096,7 @@ sf2mdta // bootleg sf2mdtb // bootleg sgyxz // bootleg (All-In Electronics) slampic // bootleg +varthb // bootleg @source:feversoc.cpp feversoc // (c) 2004 diff --git a/src/mame/video/cps1.cpp b/src/mame/video/cps1.cpp index 51f37d896f2..4a58350a77e 100644 --- a/src/mame/video/cps1.cpp +++ b/src/mame/video/cps1.cpp @@ -1553,6 +1553,7 @@ static const struct CPS1config cps1_config_table[]= {"sf2mdtb", CPS_B_21_DEF, mapper_S9263B, 0x36, 0, 0, 1 }, {"sf2b", CPS_B_17, mapper_STF29, 0x36, 0, 0, 1 }, {"varth", CPS_B_04, mapper_VA63B }, /* CPSB test has been patched out (60=0008) register is also written to, possibly leftover from development */ // wrong, this set uses VA24B, dumped but equations still not added + {"varthb", CPS_B_04, mapper_VA63B, 0, 0, 0, 0x0F }, {"varthr1", CPS_B_04, mapper_VA63B }, /* CPSB test has been patched out (60=0008) register is also written to, possibly leftover from development */ // wrong, this set uses VA24B, dumped but equations still not added {"varthu", CPS_B_04, mapper_VA63B }, /* CPSB test has been patched out (60=0008) register is also written to, possibly leftover from development */ {"varthj", CPS_B_21_BT5, mapper_VA22B }, /* CPSB test has been patched out (72=0001) register is also written to, possibly leftover from development */ @@ -1947,7 +1948,7 @@ void cps_state::cps1_get_video_base() } /* Some of the sf2 hacks use only sprite port 0x9100 and the scroll layers are offset */ - if (m_game_config->bootleg_kludge == 1) + if (m_game_config->bootleg_kludge == 0x01) { m_cps_a_regs[CPS1_OBJ_BASE] = 0x9100; scroll1xoff = -0x0c; @@ -1955,6 +1956,20 @@ void cps_state::cps1_get_video_base() scroll3xoff = -0x10; } else + if (m_game_config->bootleg_kludge == 0x0E) + { + scroll1xoff = 0xffba; + scroll2xoff = 0xffc0; + scroll3xoff = 0xffba; + } + else + if (m_game_config->bootleg_kludge == 0x0F) + { + scroll1xoff = 0xffc0; + scroll2xoff = 0xffc0; + scroll3xoff = 0xffc0; + } + else if (m_game_config->bootleg_kludge == 2) { m_cps_a_regs[CPS1_OBJ_BASE] = 0x9100;