subsino/subsino.cpp: Dumped and added a "New HUNTer" clone (#11605)

* New WORKING clone

-------------------------
New HUNTer (bootleg) [Taksangs]

* mame.lst: Add 'newhunterb'

* Fix identation

* Fix comments

* derived tisub and newhunterb maps from a common base map

---------

Co-authored-by: Ivan Vangelista <mesgnet@yahoo.it>
This commit is contained in:
ClawGrip 2023-10-10 18:17:56 +02:00 committed by GitHub
parent a996ab351d
commit 8d2618ece4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 119 additions and 50 deletions

View File

@ -42261,7 +42261,8 @@ crsbingo // (c) 1991 Subsino
dinofmly // (c) 1994 Subsino
dinofmlya // (c) 1995 Subsino (Tangasoft license or hack?)
mtrainnv // (c) 1996 Subsino
newhunter // (c) 1989 Karam
newhunter // (c) 1992 Karam
newhunterb // bootleg
sharkpy // (c) 1996 Subsino
sharkpya // (c) 1996 Subsino
sharkpye // (c) 1996 Subsino (Alpha license)

View File

@ -276,6 +276,7 @@ public:
void victor21(machine_config &config);
void sharkpy(machine_config &config);
void victor5(machine_config &config);
void newhunterb(machine_config &config);
void init_stbsub();
void init_stisub();
@ -291,6 +292,7 @@ public:
void init_tisuba();
void init_tisubb();
void init_newhunter();
void init_newhunterb();
void init_sharkpye();
void init_tisub();
void init_mtrainnv();
@ -348,11 +350,13 @@ private:
void crsbingo_map(address_map &map);
void dinofmly_map(address_map &map);
void mtrainnv_map(address_map &map);
void newhunterb_map(address_map &map);
void ramdac_map(address_map &map);
void sharkpy_map(address_map &map);
void srider_map(address_map &map);
void stbsub_map(address_map &map);
void subsino_iomap(address_map &map);
void tisub_base_map(address_map &map);
void tisub_map(address_map &map);
void victor21_map(address_map &map);
void victor5_map(address_map &map);
@ -983,43 +987,46 @@ void subsino_state::out_c_w(uint8_t data)
// popmessage("data %02x\n",data);
}
void subsino_state::tisub_map(address_map &map)
void subsino_state::tisub_base_map(address_map &map)
{
map(0x00000, 0x0bfff).rom(); // overlap unmapped regions
map(0x09800, 0x09fff).ram();
map(0x07800, 0x07fff).ram();
map(0x08000, 0x087ff).ram().w(FUNC(subsino_state::colorram_w)).share("colorram");
map(0x08800, 0x08fff).ram().w(FUNC(subsino_state::videoram_w)).share("videoram");
map(0x09000, 0x09002).r("ppi1", FUNC(i8255_device::read));
map(0x09004, 0x09006).r("ppi2", FUNC(i8255_device::read));
// 0x09008: is marked as OUTPUT C in the test mode.
map(0x09008, 0x09008).w(FUNC(subsino_state::out_c_w));
map(0x09009, 0x09009).w(FUNC(subsino_state::out_b_w));
map(0x0900a, 0x0900a).w(FUNC(subsino_state::out_a_w));
map(0x0900c, 0x0900c).portr("INC");
map(0x09016, 0x09017).w("ymsnd", FUNC(ym3812_device::write));
// map(0x0900c, 0x0900c).w("oki", FUNC(okim6295_device::write));
map(0x0901b, 0x0901b).w(FUNC(subsino_state::tiles_offset_w));
map(0x07800, 0x07fff).ram();
map(0x08800, 0x08fff).ram().w(FUNC(subsino_state::videoram_w)).share("videoram");
map(0x08000, 0x087ff).ram().w(FUNC(subsino_state::colorram_w)).share("colorram");
map(0x09800, 0x09fff).ram();
map(0x10000, 0x13fff).rom();
map(0x14000, 0x14fff).rom(); // reads the card face data here (see rom copy in rom loading)
map(0x150c0, 0x150ff).ram().share("reel_scroll.2");
map(0x15140, 0x1517f).ram().share("reel_scroll.1");
map(0x15180, 0x151bf).ram().share("reel_scroll.0");
map(0x15800, 0x159ff).ram().w(FUNC(subsino_state::reel_ram_w<0>)).share("reel_ram.0");
map(0x15a00, 0x15bff).ram().w(FUNC(subsino_state::reel_ram_w<1>)).share("reel_ram.1");
map(0x15c00, 0x15dff).ram().w(FUNC(subsino_state::reel_ram_w<2>)).share("reel_ram.2");
}
void subsino_state::tisub_map(address_map &map)
{
tisub_base_map(map);
map(0x0900c, 0x0900c).portr("INC");
map(0x09016, 0x09017).w("ymsnd", FUNC(ym3812_device::write));
map(0x0901b, 0x0901b).w(FUNC(subsino_state::tiles_offset_w));
map(0x14000, 0x14fff).rom(); // reads the card face data here (see rom copy in rom loading)
}
void subsino_state::newhunterb_map(address_map &map)
{
tisub_base_map(map);
map(0x0900c, 0x0900d).w("ymsnd", FUNC(ym3812_device::write));
map(0x0900e, 0x0900e).portr("INC");
map(0x0900f, 0x0900f).w(FUNC(subsino_state::tiles_offset_w));
}
void subsino_state::ramdac_map(address_map &map)
{
map(0x000, 0x3ff).rw("ramdac", FUNC(ramdac_device::ramdac_pal_r), FUNC(ramdac_device::ramdac_rgb666_w));
@ -2943,6 +2950,13 @@ void subsino_state::tisub(machine_config &config)
YM3812(config, "ymsnd", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 1.0); // Unknown clock
}
void subsino_state::newhunterb(machine_config &config)
{
tisub(config);
m_maincpu->set_addrmap(AS_PROGRAM, &subsino_state::newhunterb_map);
}
void subsino_state::stbsub(machine_config &config)
{
// basic machine hardware
@ -3238,10 +3252,12 @@ ROM_START( tisubb )
ROM_LOAD( "n82s129n.u41", 0x200, 0x100, BAD_DUMP CRC(db99f6da) SHA1(d281a2fa06f1890ef0b1c4d099e6828827db14fd) )
ROM_END
/* This bootleg shows year 1989 on title screen, but it's from 1992 (there are 1992 strings on the ROMs). Probably Karam
modified the New HUNTer set from Mecca, which also shows 1989, and was legally registered on Korea on 1989-8-25. */
ROM_START( newhunter )
// The MCU had its surface scratched out, but almost sure it's an HD647180X0CP8L
// The MCU had its surface scratched out, but almost sure it's an HD647180X0CP8L
ROM_REGION( 0x04000, "mcu", 0 )
ROM_LOAD( "hd647180.bin", 0x00000, 0x04000, NO_DUMP )
ROM_LOAD( "hd647180.bin", 0x00000, 0x04000, NO_DUMP )
ROM_REGION( 0x18000, "maincpu", 0 )
ROM_LOAD( "27c512.u18", 0x10000, 0x04000, CRC(d0d863a7) SHA1(0ee5ee04c3da83320bea8130be30f7fe6446b32f) )
@ -3279,7 +3295,44 @@ ROM_START( newhunter )
ROM_LOAD( "ht-4.bin", 0x00345, 0x00117, CRC(f4f78925) SHA1(738281c05c0f51c0edcf65bacc18ebc87c2408c1) )
ROM_END
/* The PCB had five positions for banks of eight DIP switches, but four of them were unpopulated (only one was present on the PCB).
The position for the reset switch was also unpopulated, and there wasn't battery-backed RAM on the PCB
(present on most games on this hardware). */
ROM_START( newhunterb )
ROM_REGION( 0x04000, "mcu", 0 )
ROM_LOAD( "hd647180.bin", 0x00000, 0x04000, NO_DUMP ) // HD647180X0CP8L
ROM_REGION( 0x18000, "maincpu", 0 )
ROM_LOAD( "tms27c512.u26", 0x10000, 0x06000, CRC(a155197c) SHA1(01c53b436de14717260c88352b09f1a01b6fd8b2) )
ROM_CONTINUE( 0x00000, 0x0a000 )
ROM_REGION( 0x40000, "tilemap", 0 )
ROM_LOAD( "am27c010.u24", 0x00000, 0x08000, CRC(e712ab8a) SHA1(ddeb92213124c6114951b9b5739eed25efe3c7a6) )
ROM_CONTINUE( 0x10000, 0x08000 )
ROM_CONTINUE( 0x08000, 0x08000 )
ROM_CONTINUE( 0x18000, 0x08000 )
ROM_LOAD( "i27c010.u25", 0x20000, 0x08000, CRC(f13c08e3) SHA1(f25ce6e73be9ee23f8a75fc6771d8224c4dd07b8) )
ROM_CONTINUE( 0x30000, 0x08000 )
ROM_CONTINUE( 0x28000, 0x08000 )
ROM_CONTINUE( 0x38000, 0x08000 )
ROM_REGION( 0x08000, "reels", 0 )
ROM_LOAD( "27c512.u29", 0x00000, 0x04000, CRC(dbe8bacd) SHA1(a0bdcb62b3a3b0d649c3cc63123882c33bcf17bd) )
ROM_IGNORE(0xc000)
ROM_LOAD( "m27512.u30", 0x04000, 0x04000, CRC(74d9b34f) SHA1(355157cf019a4fb3177ecf129b5237502bc8026b) )
ROM_IGNORE(0xc000)
ROM_REGION( 0x00300, "proms", 0 )
ROM_LOAD( "hu-1.bin", 0x00000, 0x00100, CRC(971843e5) SHA1(4cb5fc1085503dae2f2f02eb49cca051ac84b890) )
ROM_LOAD( "hu-2.bin", 0x00100, 0x00100, CRC(b4bd872c) SHA1(c0f9fe68186636d6d6bc6f81415459631cf38edd) )
ROM_LOAD( "hu-3.bin", 0x00200, 0x00100, CRC(db99f6da) SHA1(d281a2fa06f1890ef0b1c4d099e6828827db14fd) )
ROM_REGION( 0x00045c, "plds", 0 )
ROM_LOAD( "ht-1.bin", 0x00000, 0x00117, CRC(fdb4cd61) SHA1(f510077b707864b2536942db6157118ca15922de) )
ROM_LOAD( "ht-2.bin", 0x00117, 0x00117, CRC(0cf55cec) SHA1(845395ca0587627331b9ac48777f7cb6b54b9401) )
ROM_LOAD( "ht-3.bin", 0x0022e, 0x00117, CRC(8272668f) SHA1(9037f0d9c7625d05d2087e6f2d159dece934a945) )
ROM_LOAD( "ht-4.bin", 0x00345, 0x00117, CRC(f4f78925) SHA1(738281c05c0f51c0edcf65bacc18ebc87c2408c1) )
ROM_END
/***************************************************************************
@ -4073,6 +4126,20 @@ void subsino_state::init_newhunter()
save_item(NAME(m_flash_val));
}
void subsino_state::init_newhunterb()
{
uint8_t *rom = memregion( "maincpu" )->base();
subsino_decrypt(rom, tisubb_bitswaps, tisubb_xors, 0xc000);
// This trips a z180 MMU core bug? It unmaps a region then the program code jumps to that region...
rom[0x671c] = 0x00;
rom[0x671d] = 0x00;
rom[0x671e] = 0x00;
rom[0x6721] = 0x00;
rom[0x6722] = 0x00;
rom[0x6723] = 0x00;
}
void subsino_state::init_stbsub()
{
#if 1
@ -4160,38 +4227,39 @@ void subsino_state::init_mtrainnv()
* Game Drivers *
***************************************************************************/
// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS LAYOUT
GAMEL( 1990, victor21, 0, victor21, victor21, subsino_state, init_victor21, ROT0, "Subsino / Buffy", "Victor 21", 0, layout_victor21 )
// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS LAYOUT
GAMEL( 1990, victor21, 0, victor21, victor21, subsino_state, init_victor21, ROT0, "Subsino / Buffy", "Victor 21", 0, layout_victor21 )
GAMEL( 1991, victor5, 0, victor5, victor5, subsino_state, init_victor5, ROT0, "Subsino / Buffy", "Victor 5", 0, layout_victor5 ) // Original PCB and game from Subsino.
GAMEL( 1991, victor5a, victor5, victor5, victor5, subsino_state, init_victor5, ROT0, "Subsino", "G.E.A.", 0, layout_victor5 ) // PCB black-box was marked 'victor 5' - in-game says G.E.A with no manufacturer info?
GAMEL( 1991, victor5, 0, victor5, victor5, subsino_state, init_victor5, ROT0, "Subsino / Buffy", "Victor 5", 0, layout_victor5 ) // Original PCB and game from Subsino.
GAMEL( 1991, victor5a, victor5, victor5, victor5, subsino_state, init_victor5, ROT0, "Subsino", "G.E.A.", 0, layout_victor5 ) // PCB black-box was marked 'victor 5' - in-game says G.E.A with no manufacturer info?
GAMEL( 1992, tisub, 0, tisub, tisub, subsino_state, init_tisub, ROT0, "Subsino", "Treasure Island (Subsino, set 1)", 0, layout_tisub )
GAMEL( 1992, tisuba, tisub, tisub, tisub, subsino_state, init_tisuba, ROT0, "Subsino", "Treasure Island (Subsino, set 2)", 0, layout_tisub )
GAMEL( 1992, tisubb, tisub, tisub, tisubb, subsino_state, init_tisubb, ROT0, "American Alpha", "Treasure Island (American Alpha, v3.0N)", 0, layout_tisubb )
GAMEL( 1989, newhunter, tisub, tisub, tisub, subsino_state, init_newhunter, ROT0, "Karam", "New HUNTer", 0, layout_tisubb )
GAMEL( 1992, tisub, 0, tisub, tisub, subsino_state, init_tisub, ROT0, "Subsino", "Treasure Island (Subsino, set 1)", 0, layout_tisub )
GAMEL( 1992, tisuba, tisub, tisub, tisub, subsino_state, init_tisuba, ROT0, "Subsino", "Treasure Island (Subsino, set 2)", 0, layout_tisub )
GAMEL( 1992, tisubb, tisub, tisub, tisubb, subsino_state, init_tisubb, ROT0, "American Alpha", "Treasure Island (American Alpha, v3.0N)", 0, layout_tisubb )
GAMEL( 1992, newhunter, tisub, tisub, tisub, subsino_state, init_newhunter, ROT0, "Karam", "New HUNTer", 0, layout_tisubb ) // 1989 on screen, but this bootleg is from 1992
GAMEL( 1993, newhunterb, tisub, newhunterb, tisub, subsino_state, init_newhunterb, ROT0, "bootleg", "New HUNTer (bootleg)", 0, layout_tisubb )
GAMEL( 1991, crsbingo, 0, crsbingo, crsbingo, subsino_state, init_crsbingo, ROT0, "Subsino", "Poker Carnival", 0, layout_crsbingo )
GAMEL( 1991, crsbingo, 0, crsbingo, crsbingo, subsino_state, init_crsbingo, ROT0, "Subsino", "Poker Carnival", 0, layout_crsbingo )
GAMEL( 1994, dinofmly, 0, dinofmly, sharkpy, subsino_state, empty_init, ROT0, "Subsino", "Dino Family", MACHINE_NOT_WORKING, layout_sharkpy ) // stops with 'error password' message during boot
GAMEL( 1995, dinofmlya, dinofmly,dinofmly, sharkpy, subsino_state, empty_init, ROT0, "Tangasoft", "Dino Family (Portuguese, Tangasoft license)", MACHINE_NOT_WORKING, layout_sharkpy ) // stops with 'error password' message during boot
GAMEL( 1994, dinofmly, 0, dinofmly, sharkpy, subsino_state, empty_init, ROT0, "Subsino", "Dino Family", MACHINE_NOT_WORKING, layout_sharkpy ) // stops with 'error password' message during boot
GAMEL( 1995, dinofmlya, dinofmly,dinofmly, sharkpy, subsino_state, empty_init, ROT0, "Tangasoft", "Dino Family (Portuguese, Tangasoft license)", MACHINE_NOT_WORKING, layout_sharkpy ) // stops with 'error password' message during boot
GAMEL( 1995, stbsub, 0, stbsub, stbsub, subsino_state, init_stbsub, ROT0, "American Alpha", "Treasure Bonus (Subsino, v1.6)", 0, layout_stisub ) // board CPU module marked 'Super Treasure Island' (alt title?)
GAMEL( 1995, stisub, stbsub, stbsub, stbsub, subsino_state, init_stisub, ROT0, "Subsino", "Super Treasure Island (Italy, v1.6)", 0, layout_stisub )
GAMEL( 1995, tesorone, stbsub, stbsub, tesorone, subsino_state, init_tesorone, ROT0, "Subsino", "Tesorone Dell'Isola (Italy, v2.41)", 0, layout_stisub )
GAMEL( 1995, tesorone240, stbsub, stbsub, tesorone, subsino_state, init_tesorone, ROT0, "Subsino", "Tesorone Dell'Isola (Italy, v2.40)", 0, layout_stisub )
GAMEL( 1995, tesorone230, stbsub, stbsub, tesorone, subsino_state, init_tesorone230, ROT0, "Subsino", "Tesorone Dell'Isola (Italy, v2.30)", 0, layout_stisub )
GAMEL( 1995, stbsub, 0, stbsub, stbsub, subsino_state, init_stbsub, ROT0, "American Alpha", "Treasure Bonus (Subsino, v1.6)", 0, layout_stisub ) // board CPU module marked 'Super Treasure Island' (alt title?)
GAMEL( 1995, stisub, stbsub, stbsub, stbsub, subsino_state, init_stisub, ROT0, "Subsino", "Super Treasure Island (Italy, v1.6)", 0, layout_stisub )
GAMEL( 1995, tesorone, stbsub, stbsub, tesorone, subsino_state, init_tesorone, ROT0, "Subsino", "Tesorone Dell'Isola (Italy, v2.41)", 0, layout_stisub )
GAMEL( 1995, tesorone240, stbsub, stbsub, tesorone, subsino_state, init_tesorone, ROT0, "Subsino", "Tesorone Dell'Isola (Italy, v2.40)", 0, layout_stisub )
GAMEL( 1995, tesorone230, stbsub, stbsub, tesorone, subsino_state, init_tesorone230, ROT0, "Subsino", "Tesorone Dell'Isola (Italy, v2.30)", 0, layout_stisub )
GAMEL( 1996, sharkpy, 0, sharkpy, sharkpy, subsino_state, init_sharkpy, ROT0, "Subsino", "Shark Party (Italy, v1.3)", 0, layout_sharkpy ) // missing POST messages?
GAMEL( 1996, sharkpya, sharkpy, sharkpy, sharkpy, subsino_state, init_sharkpy, ROT0, "Subsino", "Shark Party (Italy, v1.6)", 0, layout_sharkpy ) // missing POST messages?
GAMEL( 1995, sharkpye, sharkpy, sharkpy, sharkpye, subsino_state, init_sharkpye, ROT0, "American Alpha", "Shark Party (English, Alpha license)", 0, layout_sharkpye ) // PCB black-box was marked 'victor 6'
GAMEL( 1996, sharkpy, 0, sharkpy, sharkpy, subsino_state, init_sharkpy, ROT0, "Subsino", "Shark Party (Italy, v1.3)", 0, layout_sharkpy ) // missing POST messages?
GAMEL( 1996, sharkpya, sharkpy, sharkpy, sharkpy, subsino_state, init_sharkpy, ROT0, "Subsino", "Shark Party (Italy, v1.6)", 0, layout_sharkpy ) // missing POST messages?
GAMEL( 1995, sharkpye, sharkpy, sharkpy, sharkpye, subsino_state, init_sharkpye, ROT0, "American Alpha", "Shark Party (English, Alpha license)", 0, layout_sharkpye ) // PCB black-box was marked 'victor 6'
GAMEL( 1995, victor6, 0, sharkpy, victor6, subsino_state, init_sharkpye, ROT0, "American Alpha", "Victor 6 (v2.3N)", 0, layout_sharkpye ) // ^^
GAMEL( 1995, victor6a, victor6, sharkpy, victor6a, subsino_state, init_sharkpye, ROT0, "American Alpha", "Victor 6 (v2.3)", 0, layout_sharkpye ) // ^^
GAMEL( 1995, victor6b, victor6, sharkpy, victor6b, subsino_state, init_sharkpye, ROT0, "American Alpha", "Victor 6 (v1.2)", 0, layout_sharkpye ) // ^^ Version # according to label, not displayed
GAMEL( 1995, victor6, 0, sharkpy, victor6, subsino_state, init_sharkpye, ROT0, "American Alpha", "Victor 6 (v2.3N)", 0, layout_sharkpye ) // ^^
GAMEL( 1995, victor6a, victor6, sharkpy, victor6a, subsino_state, init_sharkpye, ROT0, "American Alpha", "Victor 6 (v2.3)", 0, layout_sharkpye ) // ^^
GAMEL( 1995, victor6b, victor6, sharkpy, victor6b, subsino_state, init_sharkpye, ROT0, "American Alpha", "Victor 6 (v1.2)", 0, layout_sharkpye ) // ^^ Version # according to label, not displayed
GAMEL( 1996, smoto20, 0, srider, smoto20, subsino_state, init_smoto20, ROT0, "Subsino", "Super Rider (Italy, v2.0)", 0, layout_smoto )
GAMEL( 1996, smoto16, smoto20, srider, smoto16, subsino_state, init_smoto16, ROT0, "Subsino", "Super Moto (Italy, v1.6)", 0, layout_smoto )
GAMEL( 1996, smoto13, smoto20, srider, smoto16, subsino_state, init_smoto13, ROT0, "Subsino", "Super Rider (v1.3)", 0, layout_smoto )
GAMEL( 1996, smoto20, 0, srider, smoto20, subsino_state, init_smoto20, ROT0, "Subsino", "Super Rider (Italy, v2.0)", 0, layout_smoto )
GAMEL( 1996, smoto16, smoto20, srider, smoto16, subsino_state, init_smoto16, ROT0, "Subsino", "Super Moto (Italy, v1.6)", 0, layout_smoto )
GAMEL( 1996, smoto13, smoto20, srider, smoto16, subsino_state, init_smoto13, ROT0, "Subsino", "Super Rider (v1.3)", 0, layout_smoto )
GAME( 1996, mtrainnv, mtrain, mtrainnv, stbsub, subsino_state, init_mtrainnv, ROT0, "Subsino", "Magic Train (Clear NVRAM ROM?)", MACHINE_NOT_WORKING )
GAME( 1996, mtrainnv, mtrain, mtrainnv, stbsub, subsino_state, init_mtrainnv, ROT0, "Subsino", "Magic Train (Clear NVRAM ROM?)", MACHINE_NOT_WORKING )