From 18b7b9edaf48691411aa67e91a9feb3000bae08f Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Sun, 1 May 2022 18:20:22 +0200 Subject: New working clones ------------------ Batsugun (bootleg) [buffi] --- src/mame/drivers/royalmah.cpp | 2 +- src/mame/drivers/toaplan2.cpp | 84 +++++++++++++++++++++++++++++++++++++++++-- src/mame/includes/toaplan2.h | 3 ++ src/mame/mame.lst | 1 + src/mame/video/toaplan2.cpp | 19 ++++++++++ 5 files changed, 106 insertions(+), 3 deletions(-) diff --git a/src/mame/drivers/royalmah.cpp b/src/mame/drivers/royalmah.cpp index c72d0b1ac19..7a16f84948a 100644 --- a/src/mame/drivers/royalmah.cpp +++ b/src/mame/drivers/royalmah.cpp @@ -768,7 +768,7 @@ void royalmah_state::pongboo2_map(address_map &map) { map(0x0000, 0x6fff).rom().region("maincpu", 0); map(0x7000, 0x7fff).ram().share("nvram"); - map(0x8000, 0xffff).rom().region("maincpu", 0x8000); // TODO: should be banked, as changing the offset to the other ROMs shows other graphics + map(0x8000, 0xffff).rom().region("maincpu", 0x8000); // TODO: should be banked, as changing the offset shows other graphics map(0x8000, 0xffff).writeonly().share(m_videoram); } diff --git a/src/mame/drivers/toaplan2.cpp b/src/mame/drivers/toaplan2.cpp index dea7960a82b..1f889074732 100644 --- a/src/mame/drivers/toaplan2.cpp +++ b/src/mame/drivers/toaplan2.cpp @@ -1066,6 +1066,26 @@ void toaplan2_state::batsugun_68k_mem(address_map &map) map(0x700000, 0x700001).r(FUNC(toaplan2_state::video_count_r)); } +void toaplan2_state::batsugunbl_68k_mem(address_map &map) +{ + map(0x000000, 0x07ffff).rom(); + map(0x100000, 0x10ffff).ram(); + // map(0x200004, 0x200005).r() // only cleared at boot? + map(0x200005, 0x200005).w(FUNC(toaplan2_state::fixeightbl_oki_bankswitch_w)); // TODO: doesn't sound correct + map(0x200009, 0x200009).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write)); + map(0x200010, 0x200011).portr("IN1"); + map(0x200014, 0x200015).portr("IN2"); + map(0x200018, 0x200019).portr("SYS"); + map(0x21f004, 0x21f005).portr("DSWA"); + map(0x21f006, 0x21f007).portr("DSWB"); + map(0x21f008, 0x21f009).portr("JMPR"); + map(0x20001c, 0x20001d).nopw(); // leftover code from the original? + map(0x300000, 0x30000d).rw(m_vdp[0], FUNC(gp9001vdp_device::read), FUNC(gp9001vdp_device::write)); + map(0x400000, 0x400fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); + map(0x500000, 0x50000d).rw(m_vdp[1], FUNC(gp9001vdp_device::read), FUNC(gp9001vdp_device::write)); + map(0x700000, 0x700001).r(FUNC(toaplan2_state::video_count_r)); +} + void toaplan2_state::pwrkick_68k_mem(address_map &map) { map(0x000000, 0x07ffff).rom(); @@ -2349,6 +2369,31 @@ static INPUT_PORTS_START( batsugun ) INPUT_PORTS_END +static INPUT_PORTS_START( batsugunbl ) + PORT_INCLUDE( batsugun ) + + PORT_MODIFY("JMPR") + PORT_CONFNAME( 0x000f, 0x0009, DEF_STR( Region ) ) //PORT_CONFLOCATION("JP:!4,!3,!2,!1") + PORT_CONFSETTING( 0x0009, DEF_STR( Europe ) ) + PORT_CONFSETTING( 0x0008, "Europe (Taito Corp.)" ) + PORT_CONFSETTING( 0x000b, DEF_STR( USA ) ) + PORT_CONFSETTING( 0x000a, "USA (Taito Corp.)" ) + PORT_CONFSETTING( 0x000f, DEF_STR( Japan ) ) +// PORT_CONFSETTING( 0x000e, DEF_STR( Japan ) ) + PORT_CONFSETTING( 0x000d, "Japan (Taito Corp.)" ) +// PORT_CONFSETTING( 0x000c, "Japan (Taito Corp.)" ) + PORT_CONFSETTING( 0x0007, DEF_STR( Southeast_Asia ) ) + PORT_CONFSETTING( 0x0006, "Southeast Asia (Taito Corp.)" ) + PORT_CONFSETTING( 0x0005, DEF_STR( Taiwan ) ) + PORT_CONFSETTING( 0x0004, "Taiwan (Taito Corp.)" ) + PORT_CONFSETTING( 0x0003, DEF_STR( Hong_Kong ) ) + PORT_CONFSETTING( 0x0002, "Hong Kong (Taito Corp.)" ) + PORT_CONFSETTING( 0x0001, DEF_STR( Korea ) ) + PORT_CONFSETTING( 0x0000, "Korea (Unite Trading)" ) + PORT_CONFNAME( 0x00f0, 0x00f0, "(null)" ) +INPUT_PORTS_END + + static INPUT_PORTS_START( pwrkick ) PORT_START("DSWA") PORT_DIPNAME( 0x03, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:!1,!2") @@ -3858,6 +3903,23 @@ void toaplan2_state::batsugun(machine_config &config) m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.4); } +void toaplan2_state::batsugunbl(machine_config &config) +{ + batsugun(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::batsugunbl_68k_mem); + m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &toaplan2_state::cpu_space_fixeightbl_map); + + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_2, ASSERT_LINE); + + MCFG_VIDEO_START_OVERRIDE(toaplan2_state, batsugunbl) + + config.device_remove("audiocpu"); + config.device_remove("ymsnd"); + + m_oki[0]->set_addrmap(0, &toaplan2_state::fixeightbl_oki); +} + void toaplan2_state::pwrkick(machine_config &config) { /* basic machine hardware */ @@ -4900,8 +4962,6 @@ ROM_START( batsugunb ) // ROM_LOAD( "tp030_u19_gal16v8b-15.jed", 0x0000, 0x991, CRC(31be54a2) SHA1(06278942a9a2ea858c0352b2ef5a65bf329b7b82) ) ROM_END - - ROM_START( batsugunsp ) ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */ ROM_LOAD16_WORD_SWAP( "tp030-sp.u69", 0x000000, 0x080000, CRC(8072a0cd) SHA1(3a0a9cdf894926a16800c4882a2b00383d981367) ) @@ -4926,6 +4986,25 @@ ROM_START( batsugunsp ) ROM_LOAD( "tp030_u19_gal16v8b-15.bin", 0x0000, 0x117, CRC(f71669e8) SHA1(ec1fbe04605fee864af4b01f001af227938c9f21) ) ROM_END +// a cost-cutting bootleg PCB with only M68000 + OKIM6295. A pair of TPC1020 seem to do the job of the GP9001s. +// according to the dumper 'audio is pretty garbage, and some sprites overlay the UI incorrectly' +ROM_START( batsugunbl ) + ROM_REGION( 0x080000, "maincpu", 0 ) + ROM_LOAD16_WORD_SWAP( "27c240.bin", 0x000000, 0x080000, CRC(a34df8bb) SHA1(10d456f5437b21a95fd8018bdb19a08a110241c4) ) + + ROM_REGION( 0x400000, "gp9001_0", 0 ) // same as original + ROM_LOAD( "27c8100-j.bin", 0x000000, 0x100000, CRC(3024b793) SHA1(e161db940f069279356fca2c5bf2753f07773705) ) + ROM_LOAD( "27c8100-k.bin", 0x100000, 0x100000, CRC(ed75730b) SHA1(341f0f728144a049486d996c9bb14078578c6879) ) + ROM_LOAD( "27c8100-l.bin", 0x200000, 0x100000, CRC(fedb9861) SHA1(4b0917056bd359b21935358c6bcc729262be6417) ) + ROM_LOAD( "27c8100-m.bin", 0x300000, 0x100000, CRC(d482948b) SHA1(31be7dc5cff072403b783bf203b9805ffcad7284) ) + + ROM_REGION( 0x200000, "gp9001_1", 0 ) // same as original + ROM_LOAD( "27c8100-n.bin", 0x000000, 0x100000, CRC(bcf5ba05) SHA1(40f98888a29cdd30cda5dfb60fdc667c69b0fdb0) ) + ROM_LOAD( "27c8100-o.bin", 0x100000, 0x100000, CRC(0666fecd) SHA1(aa8f921fc51590b5b05bbe0b0ad0cce5ff359c64) ) + + ROM_REGION( 0x80000, "oki1", 0 ) // more samples to compensate for missing YM2151 + ROM_LOAD( "27c040.bin", 0x00000, 0x80000, CRC(1f8ec1b6) SHA1(28107a90d29613ceddc001df2556543b33c1294c) ) +ROM_END ROM_START( pwrkick ) ROM_REGION( 0x80000, "maincpu", ROMREGION_ERASE00 ) @@ -5881,6 +5960,7 @@ GAME( 1993, batsugun, 0, batsugun, batsugun, toaplan2_state, init_ GAME( 1993, batsuguna, batsugun, batsugun, batsugun, toaplan2_state, init_dogyuun, ROT270, "Toaplan", "Batsugun (older set)", MACHINE_SUPPORTS_SAVE ) GAME( 1993, batsugunb, batsugun, batsugun, batsugun, toaplan2_state, init_dogyuun, ROT270, "Toaplan", "Batsugun (Korean PCB)", MACHINE_SUPPORTS_SAVE ) // cheap looking PCB (same 'TP-030' numbering as original) but without Mask ROMs. Still has original customs etc. Jumpers were set to the Korea Unite Trading license, so likely made in Korea, not a bootleg tho. GAME( 1993, batsugunsp, batsugun, batsugun, batsugun, toaplan2_state, init_dogyuun, ROT270, "Toaplan", "Batsugun - Special Version", MACHINE_SUPPORTS_SAVE ) +GAME( 1993, batsugunbl, batsugun, batsugunbl, batsugunbl, toaplan2_state, init_fixeightbl, ROT270, "Toaplan", "Batsugun (bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // needs correct GFX offsets and oki banking fix GAME( 1994, pwrkick, 0, pwrkick, pwrkick, toaplan2_state, empty_init, ROT0, "Sunwise", "Power Kick (Japan)", 0 ) GAME( 1995, othldrby, 0, othldrby, othldrby, toaplan2_state, empty_init, ROT0, "Sunwise", "Othello Derby (Japan)", 0 ) diff --git a/src/mame/includes/toaplan2.h b/src/mame/includes/toaplan2.h index cb948900da4..94572aefefa 100644 --- a/src/mame/includes/toaplan2.h +++ b/src/mame/includes/toaplan2.h @@ -71,6 +71,7 @@ public: void pipibibs(machine_config &config); void pipibibsbl(machine_config &config); void batsugun(machine_config &config); + void batsugunbl(machine_config &config); void enmadaio(machine_config &config); void truxton2(machine_config &config); void vfive(machine_config &config); @@ -186,6 +187,7 @@ private: DECLARE_VIDEO_START(bgaregga); DECLARE_VIDEO_START(bgareggabl); DECLARE_VIDEO_START(batrider); + DECLARE_VIDEO_START(batsugunbl); // Teki Paki sound u8 tekipaki_cmdavailable_r(); @@ -211,6 +213,7 @@ private: void batrider_sound_z80_mem(address_map &map); void batrider_sound_z80_port(address_map &map); void batsugun_68k_mem(address_map &map); + void batsugunbl_68k_mem(address_map &map); void bbakraid_68k_mem(address_map &map); void bbakraid_sound_z80_mem(address_map &map); void bbakraid_sound_z80_port(address_map &map); diff --git a/src/mame/mame.lst b/src/mame/mame.lst index d1c08f7f6fb..361e300ec54 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -41819,6 +41819,7 @@ batrideru // (c) 1998 Raizing/8ing batsugun // TP-030 (c) 1993 Toaplan batsuguna // TP-030 (c) 1993 Toaplan batsugunb // +batsugunbl // bootleg batsugunsp // TP-030 (c) 1993 Toaplan bbakraid // (c) 1999 8ing bbakraidc // (c) 1999 8ing diff --git a/src/mame/video/toaplan2.cpp b/src/mame/video/toaplan2.cpp index 9a542579022..f52431508a8 100644 --- a/src/mame/video/toaplan2.cpp +++ b/src/mame/video/toaplan2.cpp @@ -111,6 +111,25 @@ VIDEO_START_MEMBER(toaplan2_state,fixeightbl) m_vdp[0]->init_scroll_regs(); } +VIDEO_START_MEMBER(toaplan2_state, batsugunbl) +{ + VIDEO_START_CALL_MEMBER(toaplan2); + + // This bootleg has additional layer offsets. TODO: further refinement needed + m_vdp[0]->set_tm_extra_offsets(0, 0, 0, 0, 0); + m_vdp[0]->set_tm_extra_offsets(1, 0, 0, 0, 0); + m_vdp[0]->set_tm_extra_offsets(2, 0, 0, 0, 0); + m_vdp[0]->set_sp_extra_offsets(0x37, 0x07, 0, 0); + + m_vdp[1]->set_tm_extra_offsets(0, -0x05, 0x07, 0, 0); + m_vdp[1]->set_tm_extra_offsets(1, -0x05, 0x07, 0, 0); + m_vdp[1]->set_tm_extra_offsets(2, 0, 0, 0, 0); + m_vdp[1]->set_sp_extra_offsets(0x39, 0x12, 0, 0); + + m_vdp[0]->init_scroll_regs(); + m_vdp[1]->init_scroll_regs(); +} + VIDEO_START_MEMBER(toaplan2_state,bgaregga) { VIDEO_START_CALL_MEMBER(toaplan2); -- cgit v1.2.3