summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2025-08-26 18:46:11 +0200
committer Ivan Vangelista <mesgnet@yahoo.it>2025-08-26 18:46:11 +0200
commit09416454ac9b2daa28eb03e5c8f556988c704a3a (patch)
treed5cea8040aab27f58a9a49eef2ef230b67d4d113
parent443099f3c4a6f621d1568dacdfd27bd3d67c1bd2 (diff)
New systems marked not working
------------------------------ Bare Knuckle III (Conny bootleg of Mega Drive version) [Hammy, little0] Contra (Conny bootleg of Mega Drive version) [Hammy, little0] Gunstar Heroes / Snake Rattle n' Roll / Joe & Mac (Conny bootleg of Mega Drive versions) [Hammy, little0] Side Pocket (Conny bootleg of Mega Drive version) [Hammy, little0] Ultraman Club - Lucky Numbers [Hammy] Systems promoted to working --------------------------- Bio-Hazard Battle (scrambled bootleg of Mega Drive version) [Hammy, little0, IQ_132] - nmk/quizpani.cpp: identified coinage-related DIPs for quizpanir [Hammy]
-rw-r--r--src/mame/mame.lst8
-rw-r--r--src/mame/nmk/quizpani.cpp49
-rw-r--r--src/mame/sega/megadriv_acbl.cpp125
-rw-r--r--src/mame/skeleton/banpresto_bpsc68000.cpp223
4 files changed, 378 insertions, 27 deletions
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 4f760634979..1b946fa5403 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -40425,16 +40425,20 @@ wmegam2
xeye
@source:sega/megadriv_acbl.cpp
+3in1mbc
aladmdb
barekch
barek2ch
barek2mb
barek3mb
barek3mba
+barek3mbc
biohzdmb
bk3ssrmb
+contrambc
jparkmb
mk3mdb
+sidepmbc
sonic2mb
sonic3mb
srmdb
@@ -43136,6 +43140,10 @@ attache816
@source:skeleton/ax20.cpp
ax20
+@source:seibu/banpresto_bpsc68000.cpp
+lnumbers
+
+
@source:skeleton/banpresto_tomy_h8s.cpp
cmcwa
cscaoysd
diff --git a/src/mame/nmk/quizpani.cpp b/src/mame/nmk/quizpani.cpp
index 77de1ebf709..a32aa0eebbc 100644
--- a/src/mame/nmk/quizpani.cpp
+++ b/src/mame/nmk/quizpani.cpp
@@ -379,27 +379,32 @@ static INPUT_PORTS_START( quizpanir )
PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Flip_Screen ) ) // ok
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0002, DEF_STR( On ) )
- PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x001e, 0x001e, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x000e, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x000c, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x000a, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x0006, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( 1C_6C ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( 1C_7C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 1C_8C ) )
+ PORT_DIPSETTING( 0x0012, DEF_STR( 1C_10C ) )
+ PORT_DIPSETTING( 0x0010, "1 Coin/11 Credits" )
+ PORT_DIPSETTING( 0x001e, DEF_STR( 1C_20C ) )
+ PORT_DIPSETTING( 0x001c, "1 Coin/22 Credits" )
+ PORT_DIPSETTING( 0x001a, "1 Coin/30 Credits" )
+ PORT_DIPSETTING( 0x0018, "1 Coin/33 Credits" )
+ PORT_DIPSETTING( 0x0016, "1 Coin/40 Credits" )
+ PORT_DIPSETTING( 0x0014, "1 Coin/44 Credits" )
+ PORT_DIPNAME( 0x00e0, 0x00e0, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x0060, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x00e0, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x00a0, DEF_STR( 1C_3C ) )
INPUT_PORTS_END
@@ -491,4 +496,4 @@ ROM_END
GAME( 1993, quizpani, 0, quizpani, quizpani, quizpani_state, empty_init, ROT0, "NMK", "Quiz Panicuru Fantasy", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, quizpanir, 0, quizpani, quizpanir, quizpani_state, empty_init, ROT0, "NMK", "Medal Quiz Panicuru Roulette", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+GAME( 1994, quizpanir, quizpani, quizpani, quizpanir, quizpani_state, empty_init, ROT0, "NMK", "Medal Quiz Panicuru Roulette", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/sega/megadriv_acbl.cpp b/src/mame/sega/megadriv_acbl.cpp
index 704399390b4..bae33ccc93b 100644
--- a/src/mame/sega/megadriv_acbl.cpp
+++ b/src/mame/sega/megadriv_acbl.cpp
@@ -182,6 +182,9 @@ public:
void init_barek3() ATTR_COLD;
void init_barek3a() ATTR_COLD;
void init_biohzdmb() ATTR_COLD;
+ template <uint32_t Prot_addr> void init_conny_bit6() ATTR_COLD;
+ template <uint32_t Prot_addr> void init_conny_bit7() ATTR_COLD;
+ void init_contrambc() ATTR_COLD;
void init_sonic2mb() ATTR_COLD;
void init_twinktmb() ATTR_COLD;
@@ -1089,6 +1092,46 @@ INPUT_PORTS_START( bk3ssrmb )
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "DSWC:8")
INPUT_PORTS_END
+INPUT_PORTS_START( biohzdmb )
+ PORT_INCLUDE( md_common )
+
+ PORT_START("COINS")
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_COIN2 )
+
+ // only three of the four banks of 8 switches are populated
+ PORT_START("DSWA")
+ PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "DSWA:1")
+ PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "DSWA:2")
+ PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "DSWA:3")
+ PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSWA:4")
+ PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSWA:5")
+ PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSWA:6")
+ PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSWA:7")
+ PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "DSWA:8")
+
+ PORT_START("DSWB")
+ PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "DSWB:1")
+ PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "DSWB:2")
+ PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "DSWB:3")
+ PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSWB:4")
+ PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSWB:5")
+ PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSWB:6")
+ PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSWB:7")
+ PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "DSWB:8")
+
+ PORT_START("DSWC")
+ PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "DSWC:1")
+ PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "DSWC:2")
+ PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "DSWC:3")
+ PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSWC:4")
+ PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSWC:5")
+ PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSWC:6")
+ PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSWC:7")
+ PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "DSWC:8")
+INPUT_PORTS_END
+
+
/*************************************
*
* Machine Configuration
@@ -1388,6 +1431,34 @@ void md_boot_state::init_biohzdmb()
init_megadrij();
m_maincpu->space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16sm_delegate(*this, FUNC(md_boot_state::dsw_r)));
+ m_maincpu->space(AS_PROGRAM).install_read_port(0x770078, 0x770079, "COINS");
+}
+
+template <uint32_t Prot_addr>
+void md_boot_state::init_conny_bit6()
+{
+ init_megadrij();
+
+ // these games check that bit 6 is set, each game at a different address. Protection?
+ m_maincpu->space(AS_PROGRAM).install_read_handler(Prot_addr, Prot_addr + 1, read16smo_delegate(*this, NAME([] () { return 0x40; })));
+}
+
+// TODO: unify with above once the GAME macro is substituted with something that supports templated inits with 2 or more parameters
+template <uint32_t Prot_addr>
+void md_boot_state::init_conny_bit7()
+{
+ init_megadrij();
+
+ // these games check that bit 7 is set, each game at a different address. Protection?
+ m_maincpu->space(AS_PROGRAM).install_read_handler(Prot_addr, Prot_addr + 1, read16smo_delegate(*this, NAME([] () { return 0x80; })));
+}
+
+void md_boot_state::init_contrambc()
+{
+ init_conny_bit7<0x860000>();
+
+ // HACK: gross. The game dislikes megadriv_68k_check_z80_bus(), always expecting bit 8 to be 0. Hacked to boot for now.
+ m_maincpu->space(AS_PROGRAM).install_read_handler(0xa11100, 0xa11101, read16s_delegate(*this, NAME([this] (uint16_t data, uint16_t mem_mask) { return megadriv_68k_check_z80_bus(data, mem_mask) & 0xfeff; })));
}
/*************************************
@@ -1568,6 +1639,40 @@ ROM_START( biohzdmb )
ROM_LOAD16_BYTE( "u15", 0x000000, 0x080000, CRC(41a8eae8) SHA1(a9db565f4ca4d71c81fbb44fd429221951887bab) )
ROM_END
+ROM_START( sidepmbc )
+ ROM_REGION( 0x400000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "rom1.bin", 0x000000, 0x080000, CRC(dcf02dc9) SHA1(310832183aa4fcafd434d15ee80cfb07e38fa1d2) )
+ ROM_LOAD16_BYTE( "rom2.bin", 0x000001, 0x080000, CRC(b0b14bf5) SHA1(92a4f4346381ac21a0a31822df7e339d6f3207f8) )
+ROM_END
+
+ROM_START( contrambc )
+ ROM_REGION( 0x400000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "rom.m3", 0x000000, 0x080000, CRC(990f824d) SHA1(95f769a9f9263479ca74fdaee12a3eae16cae432) )
+ ROM_LOAD16_BYTE( "rom.m6", 0x000001, 0x080000, CRC(ab83e795) SHA1(cd2da23ffd5e0ca954bcdfd2a9f48e16cdd587a0) )
+ ROM_LOAD16_BYTE( "rom.m2", 0x100000, 0x080000, CRC(28b9d1a9) SHA1(0a7536088e61239c5c777847e57b282289b006f2) )
+ ROM_LOAD16_BYTE( "rom.m5", 0x100001, 0x080000, CRC(1c92ebf1) SHA1(33e7aff01fa9db7900a4e1a834772e128c06b148) )
+ROM_END
+
+ROM_START( 3in1mbc )
+ ROM_REGION( 0x400000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "rom6.bin", 0x000000, 0x080000, CRC(7e333c36) SHA1(db2dc129d96a31bc1021cc7ce9538f3b2a9306bb) )
+ ROM_LOAD16_BYTE( "rom3.bin", 0x000001, 0x080000, CRC(7e3bded6) SHA1(1073c73535e89211b3d329f1119cc95a9d522686) )
+ ROM_LOAD16_BYTE( "rom5.bin", 0x100000, 0x080000, CRC(f869f746) SHA1(0a7ac33fd844732a5384f173f422213134211d75) )
+ ROM_LOAD16_BYTE( "rom2.bin", 0x100001, 0x080000, CRC(de60da62) SHA1(62d811dda61390e8d89b52c4a77d94f209cfcc72) )
+ ROM_LOAD16_BYTE( "rom4.bin", 0x200000, 0x080000, CRC(6faf99cd) SHA1(fa8960afd5200c230cdc19801114169fbb87cdea) ) // 1xxxxxxxxxxxxxxxxxx = 0x00
+ ROM_LOAD16_BYTE( "rom1.bin", 0x200001, 0x080000, CRC(a7d2adb9) SHA1(3b6a1c6fb26303594da166f3d5b8542da1e949cb) ) // 1xxxxxxxxxxxxxxxxxx = 0x00
+ROM_END
+
+ROM_START( barek3mbc )
+ ROM_REGION( 0x400000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "rom6.bin", 0x000000, 0x080000, CRC(a0f9cf5d) SHA1(94042fa0c49380dc5387fd6a24cfc4cbc13ff726) )
+ ROM_LOAD16_BYTE( "rom3.bin", 0x000001, 0x080000, CRC(b6becf5f) SHA1(dd9e1ba398dc37c76d4a240904360d9342a10738) )
+ ROM_LOAD16_BYTE( "rom5.bin", 0x100000, 0x080000, CRC(d4f52553) SHA1(3f6554cafef79c15362840e06269d3584f738426) )
+ ROM_LOAD16_BYTE( "rom2.bin", 0x100001, 0x080000, CRC(0c6daeae) SHA1(7479be3e1ecaa4cf0ecf55b118a5f44f9159b8a9) )
+ ROM_LOAD16_BYTE( "rom4.bin", 0x200000, 0x080000, CRC(4e91f0df) SHA1(119694402da11c882013d6ecd9c542eb1d1ec8ad) )
+ ROM_LOAD16_BYTE( "rom1.bin", 0x200001, 0x080000, CRC(ade4166b) SHA1(c0c6603fea1c09af597084bcf61035339cd6a012) )
+ROM_END
+
} // anonymous namespace
/*************************************
@@ -1585,13 +1690,23 @@ GAME( 1994, barek3mba, barek3mb, megadrvb, barek3a, md_boot_state, init_
GAME( 1993, twinktmb, 0, md_bootleg, twinktmb, md_boot_state, init_twinktmb, ROT0, "bootleg / Sega", "Twinkle Tale (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // Needs PIC decap or simulation
GAME( 1993, jparkmb, 0, md_boot_mcu, jparkmb, md_boot_mcu_state, init_megadrij, ROT0, "bootleg / Sega", "Jurassic Park (bootleg of Mega Drive version)", 0 ) // PCB labeled "JPA-028"
-// Scrambled bootlegs with Actel for scrambling and Mega Drive bootleg chipset marked TA-04, TA-05 and TA-06.
+// Scrambled bootlegs with Actel or Lattice for scrambling and Mega Drive bootleg chipset marked TA-04, TA-05 and TA-06. 3 DIP switch banks.
GAME( 1994, barekch, 0, megadrvb_6b, barekch, md_boot_6button_state, init_barekch, ROT0, "bootleg", "Bare Knuckle (scrambled bootleg of Mega Drive version)", 0 )
-GAME( 1994, barek2ch, 0, md_bootleg, barek2ch, md_boot_state, init_barek2ch, ROT0, "bootleg", "Bare Knuckle II (scrambled bootleg of Mega Drive version)", 0 )
-GAME( 1994, barek3mb, 0, megadrvb, barek3, md_boot_state, init_barek3, ROT0, "bootleg / Sega", "Bare Knuckle III (scrambled bootleg of Mega Drive version)", 0 )
-GAME( 1994, bk3ssrmb, 0, megadrvb_6b, bk3ssrmb, md_boot_6button_state, init_bk3ssrmb, ROT0, "bootleg / Sega", "Bare Knuckle III / Sunset Riders (scrambled bootleg of Mega Drive versions)", MACHINE_NOT_WORKING ) // Currently boots as Bare Knuckle III, mechanism to switch game not emulated yet
+GAME( 1994, bk3ssrmb, 0, megadrvb_6b, bk3ssrmb, md_boot_6button_state, init_bk3ssrmb, ROT0, "bootleg / Sega", "Bare Knuckle III / Sunset Riders (scrambled bootleg of Mega Drive versions)", MACHINE_NOT_WORKING ) // Currently boots as Bare Knuckle III, mechanism to switch game not emulated yet, a single game version of Bare Knuckle III on this board exists, but it's not dumped.
GAME( 1994, srssf2mb, 0, megadrvb_6b, bk3ssrmb, md_boot_6button_state, init_srssf2mb, ROT0, "bootleg / Sega", "Sunset Riders / Super Street Fighter II - The New Challengers (scrambled bootleg of Mega Drive versions)", MACHINE_NOT_WORKING )
GAME( 1996, mk3mdb, 0, megadrvb_6b, mk3mdb, md_boot_6button_state, init_mk3mdb, ROT0, "bootleg / Midway", "Mortal Kombat 3 (scrambled bootleg of Mega Drive version)", 0 )
GAME( 1994, ssf2mdb, 0, ssf2mdb, ssf2mdb, md_boot_6button_state, init_megadrij, ROT0, "bootleg / Capcom", "Super Street Fighter II - The New Challengers (scrambled bootleg of Mega Drive version)", 0 )
GAME( 1993, srmdb, 0, megadrvb, srmdb, md_boot_state, init_srmdb, ROT0, "bootleg / Konami", "Sunset Riders (scrambled bootleg of Mega Drive version)", 0 )
-GAME( 1993, biohzdmb, 0, megadrvb, srmdb, md_boot_state, init_biohzdmb, ROT0, "bootleg / Sega", "Bio-Hazard Battle (scrambled bootleg of Mega Drive version)", MACHINE_NOT_WORKING ) // inputs
+
+// Scrambled bootlegs with 8 line connector, smaller Lattice for scrambling and Mega Drive bootleg chipset marked TA-04, TA-05 and TA-06. 4 DIP Switch banks.
+// There should be 8 line games on this hardware too, but none have been spotted.
+GAME( 1994, barek3mb, 0, megadrvb, barek3, md_boot_state, init_barek3, ROT0, "bootleg / Sega", "Bare Knuckle III (scrambled bootleg of Mega Drive version)", 0 )
+GAME( 1994, barek2ch, 0, md_bootleg, barek2ch, md_boot_state, init_barek2ch, ROT0, "bootleg", "Bare Knuckle II (scrambled bootleg of Mega Drive version)", 0 )
+GAME( 1995, biohzdmb, 0, megadrvb, biohzdmb, md_boot_state, init_biohzdmb, ROT0, "bootleg / Sega", "Bio-Hazard Battle (scrambled bootleg of Mega Drive version)", 0 )
+
+// Conny bootlegs with Mega Drive bootleg chipset marked TA-04, TA-05 and TA-06. 1 DIP switch bank.
+GAME( 1995, contrambc, 0, megadrvb, biohzdmb, md_boot_state, init_contrambc, ROT0, "bootleg / Konami", "Contra (Conny bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // doesn't seem to like megadriv_68k_check_z80_bus(), no coins
+GAME( 1995, sidepmbc, 0, megadrvb, biohzdmb, md_boot_state, init_conny_bit7<0x8a0000>, ROT0, "bootleg / Data East", "Side Pocket (Conny bootleg of Mega Drive version)", MACHINE_NOT_WORKING ) // no coins
+GAME( 1995, 3in1mbc, 0, megadrvb, biohzdmb, md_boot_state, init_conny_bit7<0x880000>, ROT0, "bootleg", "Gunstar Heroes / Snake Rattle n' Roll / Joe & Mac (Conny bootleg of Mega Drive versions)", MACHINE_NOT_WORKING ) // no coins, no game switching
+GAME( 1995, barek3mbc, 0, megadrvb, biohzdmb, md_boot_state, init_conny_bit6<0x820000>, ROT0, "bootleg (Sega)", "Bare Knuckle III (Conny bootleg of Mega Drive version)", MACHINE_NOT_WORKING ) // no coins
+// Samurai Spirits and Kuhga PCBs have also been seen
diff --git a/src/mame/skeleton/banpresto_bpsc68000.cpp b/src/mame/skeleton/banpresto_bpsc68000.cpp
new file mode 100644
index 00000000000..5a3196ed978
--- /dev/null
+++ b/src/mame/skeleton/banpresto_bpsc68000.cpp
@@ -0,0 +1,223 @@
+// license:BSD-3-Clause
+// copyright-holders:
+
+/*
+Banpresto M68K-based medal games with Banpresto customs
+
+BPSC68000 PCB (rev B)
+
+Main components:
+- MC68EC000FN12 main CPU
+- 2x LH52258AD-25 SRAM
+- 24.000 MHz XTAL
+- BPSPC 87F 9529 HAD3 Banpresto custom chip (208-pin, has the Banpresto logo)
+- MFC68K 88F 9443 ABF3 Banpresto custom chip (100-pin, no Banpresto logo)
+- SPMUX 89F 9531 ADG3 Banpresto custom chip (128-pin, no Banpresto logo)
+- 2x HM514270CJ7 DRAM (between BPSPC and SPMUX customs)
+- Sanyo LC89080Q high-speed current-output D/A converter
+- 2x banks of 8 switches
+- 2x LH528256D-70LL SRAM (near YMZ280 space)
+- OKI M6295
+- 1066J resonator (near M6295)
+- M 535 1026B 8-pin chip (probably an EEPROM like Microchip 24LC1026 or similar)
+
+The video section has an unpopulated space marked BPBG for a 160-pin (probably) custom chip.
+The audio section also has unpopulated space marked for a YMZ280.
+
+
+TODO:
+- everything
+*/
+
+#include "emu.h"
+
+#include "cpu/m68000/m68000.h"
+#include "machine/eepromser.h"
+#include "machine/nvram.h"
+#include "sound/okim6295.h"
+
+#include "emupal.h"
+#include "screen.h"
+#include "speaker.h"
+
+
+namespace {
+
+class bpsc68000_state : public driver_device
+{
+public:
+ bpsc68000_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_gfxdecode(*this, "gfxdecode")
+ { }
+
+ void bpsc68000(machine_config &config) ATTR_COLD;
+
+protected:
+ virtual void video_start() override ATTR_COLD;
+
+private:
+ required_device<cpu_device> m_maincpu;
+ required_device<gfxdecode_device> m_gfxdecode;
+
+ uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ void prg_map(address_map &map) ATTR_COLD;
+};
+
+
+void bpsc68000_state::video_start()
+{
+}
+
+uint32_t bpsc68000_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ return 0;
+}
+
+
+void bpsc68000_state::prg_map(address_map &map)
+{
+ map.unmap_value_high(); // TODO: remove once more about the hw is figured out
+
+ map(0x000000, 0x01ffff).rom();
+ map(0x200000, 0x20ffff).ram();
+ // map(0xa00000, 0xa00001).r() // inputs?
+ // map(0xa00002, 0xa00003).r() // inputs??
+ // map(0xc00000, 0xc0002b).rw(); // video regs?
+ map(0x800001, 0x800001).w("oki", FUNC(okim6295_device::write));
+ map(0xe00000, 0xe07fff).ram();
+}
+
+
+static INPUT_PORTS_START( lnumbers )
+ PORT_START("IN0")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(4)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(4)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(4)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(4)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_PLAYER(4)
+
+ PORT_START("DSW1")
+ PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:1")
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:2")
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:3")
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:4")
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:5")
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:6")
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:7")
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:8")
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:1")
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:2")
+ PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:3")
+ PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:4")
+ PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:5")
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:6")
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:7")
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:8")
+ PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+INPUT_PORTS_END
+
+
+static GFXDECODE_START( gfx )
+ GFXDECODE_ENTRY( "sprites", 0, gfx_16x16x4_packed_lsb, 0, 16 )
+GFXDECODE_END
+
+
+void bpsc68000_state::bpsc68000(machine_config &config)
+{
+ // basic machine hardware
+ M68000(config, m_maincpu, 24_MHz_XTAL / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bpsc68000_state::prg_map);
+ m_maincpu->set_vblank_int("screen", FUNC(bpsc68000_state::irq4_line_hold));
+
+ // NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
+
+ // video hardware
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); // TODO
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(0, 320-1, 16, 240-1);
+ screen.set_screen_update(FUNC(bpsc68000_state::screen_update));
+ screen.set_palette("palette");
+
+ GFXDECODE(config, m_gfxdecode, "palette", gfx);
+
+ PALETTE(config, "palette").set_format(palette_device::xBGR_555, 0x400);
+
+ // sound hardware
+ SPEAKER(config, "mono").front_center();
+
+ OKIM6295(config, "oki", 1'066'000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.40); // TODO: check pin 7.
+}
+
+
+// ウルトラマン倶楽部 ラッキーナンバーズ
+ROM_START( lnumbers )
+ ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "s197_a01.prog16b.u15", 0x00000, 0x20000, CRC(b824a0ed) SHA1(ea8ef81d17896205f89d330066a23c459ab5e668) )
+
+ ROM_REGION( 0x100000, "sprites", 0 )
+ ROM_LOAD( "s197_a04.obj1.u24", 0x00000, 0x80000, CRC(e70f4f14) SHA1(030bbbe2da07a9b8c3a8c7055799e89113bad16b) )
+ ROM_LOAD( "s197_a03_obj2.u25", 0x80000, 0x80000, CRC(5d5955e8) SHA1(aea84b08ed639b2bacada1c4ade9760b2599cfc7) )
+ // unpopulated OBJ3 / OBJ4 space at u26 / u27
+
+ // unpopulated BG1 space at u31
+
+ ROM_REGION( 0x40000, "oki", 0 )
+ ROM_LOAD( "s197_a02.sound2.u41", 0x00000, 0x40000, CRC(a1a67ead) SHA1(d4f0979c534a6d131025da474944e0d32f583693) )
+ // PCB can accommodate bigger ROMs, too
+
+ ROM_REGION( 0x200, "plds", ROMREGION_ERASE00 )
+ ROM_LOAD( "peel18cv8p-10_u2.u2", 0x000, 0x155, NO_DUMP )
+ // unpopulated spaces at u28 and u44 marked 18CV8
+ROM_END
+
+} // anonymous namespace
+
+
+GAME( 1995, lnumbers, 0, bpsc68000, lnumbers, bpsc68000_state, empty_init, ROT0, "Banpresto", "Ultraman Club - Lucky Numbers", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )