summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Tom <37988779+TwistedTom@users.noreply.github.com>2020-04-09 19:05:37 +0100
committer GitHub <noreply@github.com>2020-04-09 14:05:37 -0400
commitf1917b828c8c7bc53ab75fb04d4b580a3c3f7025 (patch)
tree4c2760c048a569ea5e0b3a62f044321a16f6e16a
parentebaac9949102171ecb057ec97b0e3777d417d593 (diff)
Cps1 new bootleg set, pal dumps and other bits n bobs (#6530)
* added new pang3 bootleg set: pang3b3 * added cps-b-03 id register * added pang3 cp1bf1 mapper * some pang 3 security chip notes * an irq4 note * added kod kd29b dump * added wof d9k1 dump * added punisher ps63b dump + mapper * added dino cd63b mapper * added slammast mb63b mapper * tidy-up after testing * added more mstreet6 pals * added ghouls demo sound dipsw * some pang3 b-board notes
-rw-r--r--src/mame/drivers/cps1.cpp127
-rw-r--r--src/mame/mame.lst1
-rw-r--r--src/mame/video/cps1.cpp82
3 files changed, 143 insertions, 67 deletions
diff --git a/src/mame/drivers/cps1.cpp b/src/mame/drivers/cps1.cpp
index 413f2111bed..7c373cc0017 100644
--- a/src/mame/drivers/cps1.cpp
+++ b/src/mame/drivers/cps1.cpp
@@ -344,10 +344,18 @@ INTERRUPT_GEN_MEMBER(cps_state::cps1_interrupt)
device.execute().set_input_line(2, ASSERT_LINE);
}
+/*
+ /INT2 (IRQ4) is tied high on some early B boards (eg. 89624B-3),
+ On later B boards (90629B-2, 91634B-2, 91635B-2) it is passed to the C board via connector CNA pin 9.
+ On the later cps-b-21 based C boards (92631C-6, 90631C-5, 92641C-1) it then passes to pin 57 of the cps-b-21 via jumper JP1.
+ Ganbare! Marine Kun (B:91634B-2, C:92631C-6) is only game known to use it, requires a cps-b-21 C-board (90631C-5, 92631C-6, 92641C-1) with JP1 closed.
+ Strider has a handler but no h/w support to call it, perhaps a remnant of some dev tool?
+*/
TIMER_DEVICE_CALLBACK_MEMBER(cps_state::ganbare_interrupt)
{
/* not sure on the timing or source of this - the game needs it once per frame, */
/* otherwise you get a "HARD ERROR" after boot */
+ /* appears to be generated by the cps-b-21 custom on the c-board */
if (param == 0)
m_maincpu->set_input_line(4, ASSERT_LINE);
}
@@ -955,9 +963,9 @@ static INPUT_PORTS_START( ghouls )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW(C):5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW(C):6")
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) // "Demo Sounds" in manual; doesn't work
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW(C):6") /* not much demo sound, just effects in gameplay section of attract sequence */
+ PORT_DIPSETTING( 0x20, DEF_STR( On ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW(C):7")
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x40, DEF_STR( Yes ) )
@@ -8510,7 +8518,7 @@ ROM_START( kod )
ROM_LOAD( "sou1", 0x0000, 0x0117, CRC(84f4b2fe) SHA1(dcc9e86cc36316fe42eace02d6df75d08bc8bb6d) )
ROM_REGION( 0x0200, "bboardplds", 0 )
- ROM_LOAD( "kd29b.1a", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "kd29b.1a", 0x0000, 0x0117, CRC(6b892f82) SHA1(c0b5c285c45bcc8d885681efa8e0c0e564142684) )
ROM_LOAD( "iob1.11d", 0x0000, 0x0117, CRC(3abc0700) SHA1(973043aa46ec6d5d1db20dc9d5937005a0f9f6ae) )
ROM_REGION( 0x0200, "cboardplds", 0 )
@@ -8556,7 +8564,7 @@ ROM_START( kodr1 )
ROM_LOAD( "sou1", 0x0000, 0x0117, CRC(84f4b2fe) SHA1(dcc9e86cc36316fe42eace02d6df75d08bc8bb6d) )
ROM_REGION( 0x0200, "bboardplds", 0 )
- ROM_LOAD( "kd29b.1a", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "kd29b.1a", 0x0000, 0x0117, CRC(6b892f82) SHA1(c0b5c285c45bcc8d885681efa8e0c0e564142684) )
ROM_LOAD( "iob1.11d", 0x0000, 0x0117, CRC(3abc0700) SHA1(973043aa46ec6d5d1db20dc9d5937005a0f9f6ae) )
ROM_REGION( 0x0200, "cboardplds", 0 )
@@ -8602,7 +8610,7 @@ ROM_START( kodr2 )
ROM_LOAD( "sou1", 0x0000, 0x0117, CRC(84f4b2fe) SHA1(dcc9e86cc36316fe42eace02d6df75d08bc8bb6d) )
ROM_REGION( 0x0200, "bboardplds", 0 )
- ROM_LOAD( "kd29b.1a", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "kd29b.1a", 0x0000, 0x0117, CRC(6b892f82) SHA1(c0b5c285c45bcc8d885681efa8e0c0e564142684) )
ROM_LOAD( "iob1.11d", 0x0000, 0x0117, CRC(3abc0700) SHA1(973043aa46ec6d5d1db20dc9d5937005a0f9f6ae) )
ROM_REGION( 0x0200, "cboardplds", 0 )
@@ -8648,7 +8656,7 @@ ROM_START( kodu )
ROM_LOAD( "sou1", 0x0000, 0x0117, CRC(84f4b2fe) SHA1(dcc9e86cc36316fe42eace02d6df75d08bc8bb6d) )
ROM_REGION( 0x0200, "bboardplds", 0 )
- ROM_LOAD( "kd29b.1a", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "kd29b.1a", 0x0000, 0x0117, CRC(6b892f82) SHA1(c0b5c285c45bcc8d885681efa8e0c0e564142684) )
ROM_LOAD( "iob1.11d", 0x0000, 0x0117, CRC(3abc0700) SHA1(973043aa46ec6d5d1db20dc9d5937005a0f9f6ae) )
ROM_REGION( 0x0200, "cboardplds", 0 )
@@ -8691,7 +8699,7 @@ ROM_START( kodj )
ROM_LOAD( "sou1", 0x0000, 0x0117, CRC(84f4b2fe) SHA1(dcc9e86cc36316fe42eace02d6df75d08bc8bb6d) )
ROM_REGION( 0x0200, "bboardplds", 0 )
- ROM_LOAD( "kd29b.1a", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "kd29b.1a", 0x0000, 0x0117, CRC(6b892f82) SHA1(c0b5c285c45bcc8d885681efa8e0c0e564142684) )
ROM_LOAD( "iob1.11d", 0x0000, 0x0117, CRC(3abc0700) SHA1(973043aa46ec6d5d1db20dc9d5937005a0f9f6ae) )
ROM_REGION( 0x0200, "cboardplds", 0 )
@@ -10852,16 +10860,7 @@ ROM_END
*/
#define SF2CEMS6_PLD_DEVICES \
- /* 8x TIBPAL16L8-25CN (OTP) */ \
- ROM_LOAD( "ms6_pal16l8.u173", 0x000, 0x104, NO_DUMP ) \
- ROM_LOAD( "ms6_pal16l8.u176", 0x000, 0x104, NO_DUMP ) \
- ROM_LOAD( "ms6_pal16l8.u177", 0x000, 0x104, NO_DUMP ) \
- ROM_LOAD( "ms6_pal16l8.u178", 0x000, 0x104, NO_DUMP ) \
- ROM_LOAD( "ms6_pal16l8.u183", 0x000, 0x104, NO_DUMP ) \
- ROM_LOAD( "ms6_pal16l8.u198", 0x000, 0x104, NO_DUMP ) \
- ROM_LOAD( "ms6_pal16l8.u218", 0x000, 0x104, NO_DUMP ) \
- ROM_LOAD( "ms6_pal16l8.u231", 0x000, 0x104, NO_DUMP ) \
- /* 8x PALCE16V8H-25PC/4 */ \
+ /* 16x PALCE16V8H-25PC/4 or TIBPAL16L8-25CN (OTP) */ \
ROM_LOAD( "ms6_gal16v8.u6", 0x000, 0x117, NO_DUMP ) \
ROM_LOAD( "ms6_gal16v8.u95", 0x000, 0x117, NO_DUMP ) \
ROM_LOAD( "ms6_gal16v8.u96", 0x000, 0x117, NO_DUMP ) \
@@ -10869,6 +10868,14 @@ ROM_END
ROM_LOAD( "ms6_gal16v8.u125", 0x000, 0x117, NO_DUMP ) \
ROM_LOAD( "ms6_gal16v8.u139", 0x000, 0x117, NO_DUMP ) \
ROM_LOAD( "ms6_gal16v8.u151", 0x000, 0x117, NO_DUMP ) \
+ ROM_LOAD( "ms6_gal16v8.u173", 0x000, 0x117, CRC(32dec205) SHA1(aaf1579b00f30b5bec86e89db8c7f0c3ad7a790d) ) /* unprotected */ \
+ ROM_LOAD( "ms6_gal16v8.u176", 0x200, 0x117, CRC(deb37f27) SHA1(776d5185eece102d6e340ab5c2f7ddc4483ccda5) ) /* unprotected */ \
+ ROM_LOAD( "ms6_pal16l8.u177", 0x000, 0x117, NO_DUMP ) \
+ ROM_LOAD( "ms6_pal16l8.u178", 0x000, 0x117, NO_DUMP ) \
+ ROM_LOAD( "ms6_pal16l8.u183", 0x000, 0x117, NO_DUMP ) \
+ ROM_LOAD( "ms6_gal16v8.u198", 0x400, 0x117, CRC(cd1246fe) SHA1(b6d311f3c8dd6b411059eb60b22b33483b59bff8) ) /* unprotected */ \
+ ROM_LOAD( "ms6_pal16l8.u218", 0x000, 0x117, NO_DUMP ) \
+ ROM_LOAD( "ms6_pal16l8.u231", 0x000, 0x117, NO_DUMP ) \
ROM_LOAD( "ms6_gal16v8.u245", 0x000, 0x117, NO_DUMP ) \
/* 14x PALCE20V8H-25PC/4 */ \
ROM_LOAD( "ms6_gal20v8.u15", 0x000, 0x157, NO_DUMP ) \
@@ -10877,17 +10884,17 @@ ROM_END
ROM_LOAD( "ms6_gal20v8.u21", 0x000, 0x157, NO_DUMP ) \
ROM_LOAD( "ms6_gal20v8.u39", 0x000, 0x157, NO_DUMP ) \
ROM_LOAD( "ms6_gal20v8.u40", 0x000, 0x157, NO_DUMP ) \
- ROM_LOAD( "ms6_gal20v8.u104", 0x000, 0x157, CRC(67b56d29) SHA1(261ae6e968100d5a9c1ee68ea684bb2b1eef3cf8) ) /* unprotected */ \
+ ROM_LOAD( "ms6_gal20v8.u104", 0x600, 0x157, CRC(67b56d29) SHA1(261ae6e968100d5a9c1ee68ea684bb2b1eef3cf8) ) /* unprotected */ \
ROM_LOAD( "ms6_gal20v8.u131", 0x000, 0x157, NO_DUMP ) \
ROM_LOAD( "ms6_gal20v8.u135", 0x000, 0x157, NO_DUMP ) \
ROM_LOAD( "ms6_gal20v8.u140", 0x000, 0x157, NO_DUMP ) \
ROM_LOAD( "ms6_gal20v8.u232", 0x000, 0x157, NO_DUMP ) \
ROM_LOAD( "ms6_gal20v8.u233", 0x000, 0x157, NO_DUMP ) \
- ROM_LOAD( "ms6_gal20v8.u234", 0x200, 0x157, CRC(2c16b7c6) SHA1(f73ad0253a861d5306a09b1f97dfce622b19cdcf) ) /* unprotected */ \
+ ROM_LOAD( "ms6_gal20v8.u234", 0x800, 0x157, CRC(2c16b7c6) SHA1(f73ad0253a861d5306a09b1f97dfce622b19cdcf) ) /* unprotected */ \
ROM_LOAD( "ms6_gal20v8.u235", 0x000, 0x157, NO_DUMP ) \
/* 2x PALCE22V10H-25PC/4 */ \
- ROM_LOAD( "ms6_gal22v10.u50", 0x400, 0x2e5, CRC(dc665408) SHA1(a7161a03add24a01d547189e9bfaf11474bbe878) ) /* unprotected */ \
- ROM_LOAD( "ms6_gal22v10.u134", 0x800, 0x2e5, CRC(b66848bb) SHA1(edef02bc7fc0195f56cf815c1b862bee095951c8) ) /* unprotected */
+ ROM_LOAD( "ms6_gal22v10.u50", 0xa00, 0x2e5, CRC(dc665408) SHA1(a7161a03add24a01d547189e9bfaf11474bbe878) ) /* unprotected */ \
+ ROM_LOAD( "ms6_gal22v10.u134", 0xe00, 0x2e5, CRC(b66848bb) SHA1(edef02bc7fc0195f56cf815c1b862bee095951c8) ) /* unprotected */
ROM_START( sf2cems6a ) /* 920313 USA (this set matches "sf2ceuab4" in FBA) */
ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68k code */
@@ -10924,7 +10931,7 @@ ROM_START( sf2cems6a ) /* 920313 USA (this set matches "sf2ceuab4" in FBA) */
ROM_REGION( 0x10000, "user1", 0 ) /* unknown, priority? */
ROM_LOAD( "ms6.u133", 0x00000, 0x10000, CRC(13ea1c44) SHA1(5b05fe4c3920e33d94fac5f59e09ff14b3e427fe) ) // == loads other bootleg sets
- ROM_REGION( 0x0c00, "plds", 0 ) /* pld devices */
+ ROM_REGION( 0x1200, "plds", 0 ) /* pld devices */
SF2CEMS6_PLD_DEVICES
ROM_END
@@ -10971,7 +10978,7 @@ ROM_START( sf2cems6b ) /* 920322 USA */
ROM_REGION( 0x10000, "user1", 0 ) /* unknown, priority? */
ROM_LOAD( "ms6.u133", 0x00000, 0x10000, CRC(13ea1c44) SHA1(5b05fe4c3920e33d94fac5f59e09ff14b3e427fe) )
- ROM_REGION( 0x0c00, "plds", 0 ) /* pld devices */
+ ROM_REGION( 0x1200, "plds", 0 ) /* pld devices */
SF2CEMS6_PLD_DEVICES
ROM_END
@@ -11018,7 +11025,7 @@ ROM_START( sf2cems6c ) /* 920322 USA */
ROM_REGION( 0x10000, "user1", 0 ) /* unknown, priority? */
ROM_LOAD( "ms6.u133", 0x00000, 0x10000, CRC(13ea1c44) SHA1(5b05fe4c3920e33d94fac5f59e09ff14b3e427fe) )
- ROM_REGION( 0x0c00, "plds", 0 ) /* pld devices */
+ ROM_REGION( 0x1200, "plds", 0 ) /* pld devices */
SF2CEMS6_PLD_DEVICES
ROM_END
@@ -11520,7 +11527,7 @@ ROM_START( wof )
ROM_REGION( 0x0200, "dboardplds", 0 )
ROM_LOAD( "d7l1.7l", 0x0000, 0x0117, CRC(27b7410d) SHA1(06d0cba0226850f100ff1f539bd7d5db0f90c730) )
ROM_LOAD( "d8l1.8l", 0x0000, 0x0117, CRC(539fc7da) SHA1(cad5c91629c6247e49ccbbcbfe6b08229eafae07) )
- ROM_LOAD( "d9k1.9k", 0x0000, 0x0117, NO_DUMP ) // pal verification required
+ ROM_LOAD( "d9k1.9k", 0x0000, 0x0117, CRC(6c35c805) SHA1(641b9003b8e7fc969d0cd679f98e413ed2abe474) )
ROM_LOAD( "d10f1.10f", 0x0000, 0x0117, CRC(6619c494) SHA1(3aef656c07182a2186f810f30e0d854dd5bd8d18) )
ROM_END
@@ -11568,7 +11575,7 @@ ROM_START( wofr1 )
ROM_REGION( 0x0200, "dboardplds", 0 )
ROM_LOAD( "d7l1.7l", 0x0000, 0x0117, CRC(27b7410d) SHA1(06d0cba0226850f100ff1f539bd7d5db0f90c730) )
ROM_LOAD( "d8l1.8l", 0x0000, 0x0117, CRC(539fc7da) SHA1(cad5c91629c6247e49ccbbcbfe6b08229eafae07) )
- ROM_LOAD( "d9k1.9k", 0x0000, 0x0117, NO_DUMP ) // pal verification required
+ ROM_LOAD( "d9k1.9k", 0x0000, 0x0117, CRC(6c35c805) SHA1(641b9003b8e7fc969d0cd679f98e413ed2abe474) )
ROM_LOAD( "d10f1.10f", 0x0000, 0x0117, CRC(6619c494) SHA1(3aef656c07182a2186f810f30e0d854dd5bd8d18) )
ROM_END
@@ -11615,7 +11622,7 @@ ROM_START( wofu )
ROM_REGION( 0x0200, "dboardplds", 0 )
ROM_LOAD( "d7l1.7l", 0x0000, 0x0117, CRC(27b7410d) SHA1(06d0cba0226850f100ff1f539bd7d5db0f90c730) )
ROM_LOAD( "d8l1.8l", 0x0000, 0x0117, CRC(539fc7da) SHA1(cad5c91629c6247e49ccbbcbfe6b08229eafae07) )
- ROM_LOAD( "d9k1.9k", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "d9k1.9k", 0x0000, 0x0117, CRC(6c35c805) SHA1(641b9003b8e7fc969d0cd679f98e413ed2abe474) )
ROM_LOAD( "d10f1.10f", 0x0000, 0x0117, CRC(6619c494) SHA1(3aef656c07182a2186f810f30e0d854dd5bd8d18) )
ROM_END
@@ -11664,7 +11671,7 @@ ROM_START( wofa )
ROM_REGION( 0x0200, "dboardplds", 0 )
ROM_LOAD( "d7l1.7l", 0x0000, 0x0117, CRC(27b7410d) SHA1(06d0cba0226850f100ff1f539bd7d5db0f90c730) )
ROM_LOAD( "d8l1.8l", 0x0000, 0x0117, CRC(539fc7da) SHA1(cad5c91629c6247e49ccbbcbfe6b08229eafae07) )
- ROM_LOAD( "d9k1.9k", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "d9k1.9k", 0x0000, 0x0117, CRC(6c35c805) SHA1(641b9003b8e7fc969d0cd679f98e413ed2abe474) )
ROM_LOAD( "d10f1.10f", 0x0000, 0x0117, CRC(6619c494) SHA1(3aef656c07182a2186f810f30e0d854dd5bd8d18) )
ROM_END
@@ -11711,7 +11718,7 @@ ROM_START( wofj )
ROM_REGION( 0x0200, "dboardplds", 0 )
ROM_LOAD( "d7l1.7l", 0x0000, 0x0117, CRC(27b7410d) SHA1(06d0cba0226850f100ff1f539bd7d5db0f90c730) )
ROM_LOAD( "d8l1.8l", 0x0000, 0x0117, CRC(539fc7da) SHA1(cad5c91629c6247e49ccbbcbfe6b08229eafae07) )
- ROM_LOAD( "d9k1.9k", 0x0000, 0x0117, NO_DUMP ) // pal verification required
+ ROM_LOAD( "d9k1.9k", 0x0000, 0x0117, CRC(6c35c805) SHA1(641b9003b8e7fc969d0cd679f98e413ed2abe474) )
ROM_LOAD( "d10f1.10f", 0x0000, 0x0117, CRC(6619c494) SHA1(3aef656c07182a2186f810f30e0d854dd5bd8d18) )
ROM_END
@@ -12137,7 +12144,7 @@ ROM_START( punisher )
ROM_LOAD( "rom1", 0x0000, 0x0117, CRC(41dc73b9) SHA1(7d4c9f1693c821fbf84e32dd6ef62ddf14967845) )
ROM_REGION( 0x0200, "bboardplds", 0 )
- ROM_LOAD( "ps63b.1a", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "ps63b.1a", 0x0000, 0x0117, CRC(03a758b0) SHA1(f0035f0dac927af50e21f5c57b7b4462856aa50c) )
ROM_LOAD( "iob1.12d", 0x0000, 0x0117, CRC(3abc0700) SHA1(973043aa46ec6d5d1db20dc9d5937005a0f9f6ae) )
ROM_LOAD( "bprg1.11d", 0x0000, 0x0117, CRC(31793da7) SHA1(400fa7ac517421c978c1ee7773c30b9ed0c5d3f3) )
@@ -12191,7 +12198,7 @@ ROM_START( punisheru )
ROM_LOAD( "rom1", 0x0000, 0x0117, CRC(41dc73b9) SHA1(7d4c9f1693c821fbf84e32dd6ef62ddf14967845) )
ROM_REGION( 0x0200, "bboardplds", 0 )
- ROM_LOAD( "ps63b.1a", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "ps63b.1a", 0x0000, 0x0117, CRC(03a758b0) SHA1(f0035f0dac927af50e21f5c57b7b4462856aa50c) )
ROM_LOAD( "iob1.12d", 0x0000, 0x0117, CRC(3abc0700) SHA1(973043aa46ec6d5d1db20dc9d5937005a0f9f6ae) )
ROM_LOAD( "bprg1.11d", 0x0000, 0x0117, CRC(31793da7) SHA1(400fa7ac517421c978c1ee7773c30b9ed0c5d3f3) )
@@ -12245,7 +12252,7 @@ ROM_START( punisherh )
ROM_LOAD( "rom1", 0x0000, 0x0117, CRC(41dc73b9) SHA1(7d4c9f1693c821fbf84e32dd6ef62ddf14967845) )
ROM_REGION( 0x0200, "bboardplds", 0 )
- ROM_LOAD( "ps63b.1a", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "ps63b.1a", 0x0000, 0x0117, CRC(03a758b0) SHA1(f0035f0dac927af50e21f5c57b7b4462856aa50c) )
ROM_LOAD( "iob1.12d", 0x0000, 0x0117, CRC(3abc0700) SHA1(973043aa46ec6d5d1db20dc9d5937005a0f9f6ae) )
ROM_LOAD( "bprg1.11d", 0x0000, 0x0117, CRC(31793da7) SHA1(400fa7ac517421c978c1ee7773c30b9ed0c5d3f3) )
@@ -12293,7 +12300,7 @@ ROM_START( punisherj )
ROM_LOAD( "rom1", 0x0000, 0x0117, CRC(41dc73b9) SHA1(7d4c9f1693c821fbf84e32dd6ef62ddf14967845) )
ROM_REGION( 0x0200, "bboardplds", 0 )
- ROM_LOAD( "ps63b.1a", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "ps63b.1a", 0x0000, 0x0117, CRC(03a758b0) SHA1(f0035f0dac927af50e21f5c57b7b4462856aa50c) )
ROM_LOAD( "iob1.12d", 0x0000, 0x0117, CRC(3abc0700) SHA1(973043aa46ec6d5d1db20dc9d5937005a0f9f6ae) )
ROM_LOAD( "bprg1.11d", 0x0000, 0x0117, CRC(31793da7) SHA1(400fa7ac517421c978c1ee7773c30b9ed0c5d3f3) )
@@ -12924,6 +12931,46 @@ ROM_START( pang3b2 )
ROM_LOAD( "sou1", 0x0000, 0x0117, CRC(84f4b2fe) SHA1(dcc9e86cc36316fe42eace02d6df75d08bc8bb6d) )
ROM_END
+/* An interesting single board bootleg which is an almost exact replica of the official Pang3 A/B board circuitry condensed onto a single pcb.
+ All component refs match the official 89626A short 10MHz A board and 94916-10 pang3 exclusive B board.
+ Uses pin compatible clone CPS-A/B chips which are marked 27C634 and 27C633 respectively, the clone B is a CPS-B-17.
+ They appear to be 3.3v chips as the common bootlegger trick of stepping down the supply voltage with power diodes is used.
+ Main code has been hacked to use the CPS-B-17 rather than official CPS-B-21 config.
+ All PALs confirmed to match official A/B board PALs.
+ Uses same encryption and mach215 security pld as official.
+*/
+ROM_START( pang3b3 )
+ ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */
+ ROM_LOAD16_WORD_SWAP( "u11l1_17.bin", 0x00000, 0x80000, CRC(dd3b95c0) SHA1(f5cc414f92e6ee805957ca00512ad112586bc4ff) )
+ ROM_LOAD16_WORD_SWAP( "u10l1_16.bin", 0x80000, 0x80000, CRC(1be9a483) SHA1(6cff1dd15ca163237bc82fb4a3e1d469d35e7be8) ) // == pa3e_16.10l
+
+ ROM_REGION( 0x400000, "gfx", 0 )
+ ROM_LOAD64_WORD( "pa3-01m.2c", 0x000000, 0x100000, CRC(068a152c) SHA1(fa491874068924c39bcc7de93dfda3b27f5d9613) )
+ ROM_CONTINUE( 0x000004, 0x100000 )
+ ROM_LOAD64_WORD( "pa3-07m.2f", 0x000002, 0x100000, CRC(3a4a619d) SHA1(cfe68e24632b53fb6cd6d03b2166d6b5ba28b778) )
+ ROM_CONTINUE( 0x000006, 0x100000 )
+
+ ROM_REGION( 0x18000, "audiocpu", 0 ) /* 64k for the audio CPU (+banks) */
+ ROM_LOAD( "u11f1.bin", 0x00000, 0x08000, CRC(278d786c) SHA1(bf226adf766b7d24a60e20d19d586c9fafe0973d) ) // == pa3_11.11f with empty space cut to fit into a 27c512
+ ROM_IGNORE( 0x08000 )
+
+ ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
+ ROM_LOAD( "pa3_05.10d", 0x00000, 0x20000, CRC(73a10d5d) SHA1(999465e4fbc35a34746d2db61ad49f61403d5af7) )
+ ROM_LOAD( "pa3_06.11d", 0x20000, 0x20000, CRC(affa4f82) SHA1(27b9292bbc121cf585f53297a79fe8f0d0a729ae) )
+
+ ROM_REGION( 0x0200, "aboardplds", 0 )
+ ROM_LOAD( "buf1", 0x0000, 0x0117, CRC(eb122de7) SHA1(b26b5bfe258e3e184f069719f9fd008d6b8f6b9b) )
+ ROM_LOAD( "ioa1", 0x0000, 0x0117, CRC(59c7ee3b) SHA1(fbb887c5b4f5cb8df77cec710eaac2985bc482a6) )
+ ROM_LOAD( "prg1", 0x0000, 0x0117, CRC(f1129744) SHA1(a5300f301c1a08a7da768f0773fa0fe3f683b237) )
+ ROM_LOAD( "rom1", 0x0000, 0x0117, CRC(41dc73b9) SHA1(7d4c9f1693c821fbf84e32dd6ef62ddf14967845) )
+ ROM_LOAD( "sou1", 0x0000, 0x0117, CRC(84f4b2fe) SHA1(dcc9e86cc36316fe42eace02d6df75d08bc8bb6d) )
+
+ ROM_REGION( 0x0200, "bboardplds", 0 )
+ ROM_LOAD( "cp1b1f.1f", 0x0000, 0x0117, CRC(3979b8e3) SHA1(07c9819d68b4d93bc37b96bd15d689ce54fe034e) )
+ ROM_LOAD( "cp1b8k.8k", 0x0000, 0x0117, CRC(8a52ea7a) SHA1(47a59abc54a83292cfd6faa2d293c8f948c7ea03) )
+ ROM_LOAD( "cp1b9k.9k", 0x0000, 0x0117, CRC(a754bdc3) SHA1(9267b24cbddee4858b219468cc92f9df8f5fd0ef) )
+ROM_END
+
/* B-Board 91635B-2 */
/* Note that this USA set seems to be the only one where GFX are stored into EPROMs instead of the usual mask ROMs. */
ROM_START( megaman )
@@ -13237,7 +13284,7 @@ ROM_START( wofch )
ROM_REGION( 0x0200, "dboardplds", 0 )
ROM_LOAD( "d7l1.7l", 0x0000, 0x0117, CRC(27b7410d) SHA1(06d0cba0226850f100ff1f539bd7d5db0f90c730) )
ROM_LOAD( "d8l1.8l", 0x0000, 0x0117, CRC(539fc7da) SHA1(cad5c91629c6247e49ccbbcbfe6b08229eafae07) )
- ROM_LOAD( "d9k1.9k", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "d9k1.9k", 0x0000, 0x0117, CRC(6c35c805) SHA1(641b9003b8e7fc969d0cd679f98e413ed2abe474) )
ROM_LOAD( "d10f1.10f", 0x0000, 0x0117, CRC(6619c494) SHA1(3aef656c07182a2186f810f30e0d854dd5bd8d18) )
ROM_END
@@ -13545,7 +13592,8 @@ void cps_state::init_slammast()
void cps_state::init_pang3b()
{
/* Pang 3 is the only non-QSound game to have an EEPROM. */
- /* It is mapped in the CPS-B address range so probably is on the C-board. */
+ /* It is mapped in the CPS-B address range and is on the B-board. */
+ /* The Mach215 security chip outputs 2 control signals (pins 4, 6) which switch the eeprom in/out serial data lines onto the main 68k data bus when required */
m_maincpu->space(AS_PROGRAM).install_readwrite_port(0x80017a, 0x80017b, "EEPROMIN", "EEPROMOUT");
init_cps1();
@@ -13553,6 +13601,12 @@ void cps_state::init_pang3b()
void cps_state::init_pang3()
{
+ // an AMD or Lattice Mach215 pld chip performs the decryption (and controls eeprom).
+ // it needs to be "kicked" (by reading port 80017a) every vblank else it seems to stop decrypting code.
+ // encryption is switched on/off by pin 37.
+ // encrypted code range is controlled by PAL CP1B9K which sets pin 37 such that: 00000-7ffff unencrypted, >=80000 encrypted.
+ // the mach215 responds to R/W 800174-80017B enabled by pin 36, range set by PAL CP1B8K.
+
uint16_t *rom = (uint16_t *)memregion("maincpu")->base();
int A, src, dst;
@@ -13864,6 +13918,7 @@ GAME( 1995, pang3r1, pang3, pang3, pang3, cps_state, init_pang3
GAME( 1995, pang3j, pang3, pang3, pang3, cps_state, init_pang3, ROT0, "Mitchell", "Pang! 3: Kaitou Tachi no Karei na Gogo (Japan 950511)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, pang3b, pang3, pang3, pang3b, cps_state, init_pang3b, ROT0, "bootleg", "Pang! 3 (bootleg, set 1)", MACHINE_SUPPORTS_SAVE ) // 950511 - based on Euro version
GAME( 1995, pang3b2, pang3, pang3, pang3, cps_state, init_pang3, ROT0, "bootleg", "Pang! 3 (bootleg, set 2)", MACHINE_SUPPORTS_SAVE ) // 950601 - based on Euro version
+GAME( 1995, pang3b3, pang3, pang3, pang3, cps_state, init_pang3, ROT0, "bootleg", "Pang! 3 (bootleg, set 3)", MACHINE_SUPPORTS_SAVE ) // 950511 - based on Euro version, hacked to use cps-b-17
/* Home 'CPS Changer' Unit */
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index a3b43f38ae6..725b31f6e7a 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -10707,6 +10707,7 @@ nemor1 // 09/11/1990 (c) 1990 (World)
pang3 // 01/06/1995 (c) 1995 Mitchell (Euro) not listed on Capcom's site
pang3b // bootleg
pang3b2 // bootleg
+pang3b3 // bootleg
pang3j // 11/05/1995 (c) 1995 Mitchell (Japan) not listed on Capcom's site
pang3r1 // 11/05/1995 (c) 1995 Mitchell (Euro) not listed on Capcom's site
pnickj // 08/06/1994 (c) 1994 Compile + Capcom license (Japan) not listed on Capcom's site
diff --git a/src/mame/video/cps1.cpp b/src/mame/video/cps1.cpp
index 3a12145330d..9a20440b738 100644
--- a/src/mame/video/cps1.cpp
+++ b/src/mame/video/cps1.cpp
@@ -222,6 +222,11 @@ You can set the suicide CPS-B-21 chips to their default layer register and prior
if you pull pins 45 and 46 high (floating the pins seems to work, too). The default is the same
values as Street Fighter 2 CE/Turbo.
+The Pang! 3 B-board (94916-10) is unique to that game, presumably designed by Mitchell rather than Capcom.
+It uses a Mach215 pld security chip to encrypt main code and is the only non-qsound game to use an eeprom instead of dip switches.
+It is designed to allow operation with either a standard or CPS1.5/qsound A-board, in the latter case the full standard sound hardware (z80, ym, oki, audio amp etc.) can be populated on the B-board itself,
+(although to date, no example of the B-board with sound h/w populated has been found, perhaps it was never used?)
+Exact-copy bootleg B-boards exist and are quite common, bizarrely the bootleggers often crudely cut off the front/unused analog audio section of the pcb!
CPS-A Registers
@@ -466,7 +471,7 @@ The games seem to use them to mark platforms, kill zones and no-go areas.
/* CPSB ID multiply protection unknown ctrl priority masks palctrl layer enable masks */
#define CPS_B_01 -1, 0x0000, __not_applicable__, 0x26,{0x28,0x2a,0x2c,0x2e},0x30, {0x02,0x04,0x08,0x30,0x30}
#define CPS_B_02 0x20,0x0002, __not_applicable__, 0x2c,{0x2a,0x28,0x26,0x24},0x22, {0x02,0x04,0x08,0x00,0x00}
-#define CPS_B_03 -1, 0x0000, __not_applicable__, 0x30,{0x2e,0x2c,0x2a,0x28},0x26, {0x20,0x10,0x08,0x00,0x00}
+#define CPS_B_03 0x24,0x0003, __not_applicable__, 0x30,{0x2e,0x2c,0x2a,0x28},0x26, {0x20,0x10,0x08,0x00,0x00}
#define CPS_B_04 0x20,0x0004, __not_applicable__, 0x2e,{0x26,0x30,0x28,0x32},0x2a, {0x02,0x04,0x08,0x00,0x00}
#define CPS_B_05 0x20,0x0005, __not_applicable__, 0x28,{0x2a,0x2c,0x2e,0x30},0x32, {0x02,0x08,0x20,0x14,0x14}
#define CPS_B_11 0x32,0x0401, __not_applicable__, 0x26,{0x28,0x2a,0x2c,0x2e},0x30, {0x08,0x10,0x20,0x00,0x00}
@@ -1129,6 +1134,9 @@ static const struct gfx_range mapper_Q522B_table[] =
};
+// TK263B, CD63B, PS63B (wof, dino, punisher) are equivalent, can be swapped on real pcb without issue
+// MB63B (slammast) can substitute any of the above but NOT vice-versa
+
#define mapper_TK263B { 0x8000, 0x8000, 0, 0 }, mapper_TK263B_table
static const struct gfx_range mapper_TK263B_table[] =
{
@@ -1147,12 +1155,14 @@ static const struct gfx_range mapper_TK263B_table[] =
#define mapper_CD63B { 0x8000, 0x8000, 0, 0 }, mapper_CD63B_table
static const struct gfx_range mapper_CD63B_table[] =
{
- /* type start end bank */
- { GFXTYPE_SCROLL1, 0x0000, 0x0fff, 0 },
- { GFXTYPE_SPRITES, 0x1000, 0x7fff, 0 },
+ // verified from PAL dump:
+ // bank0 = pin 19 (ROMs 1,3) & pin 18 (ROMs 2,4)
+ // bank1 = pin 17 (ROMs 5,7) & pin 16 (ROMs 6,8)
+ // pins 12,13,14,15 are never enabled
- { GFXTYPE_SPRITES | GFXTYPE_SCROLL2, 0x8000, 0xdfff, 1 },
- { GFXTYPE_SCROLL3, 0xe000, 0xffff, 1 },
+ /* type start end bank */
+ { GFXTYPE_SPRITES | GFXTYPE_SCROLL1 | GFXTYPE_SCROLL2 | GFXTYPE_SCROLL3, 0x00000, 0x07fff, 0 },
+ { GFXTYPE_SPRITES | GFXTYPE_SCROLL1 | GFXTYPE_SCROLL2 | GFXTYPE_SCROLL3, 0x08000, 0x0ffff, 1 },
{ 0 }
};
@@ -1160,12 +1170,14 @@ static const struct gfx_range mapper_CD63B_table[] =
#define mapper_PS63B { 0x8000, 0x8000, 0, 0 }, mapper_PS63B_table
static const struct gfx_range mapper_PS63B_table[] =
{
- /* type start end bank */
- { GFXTYPE_SCROLL1, 0x0000, 0x0fff, 0 },
- { GFXTYPE_SPRITES, 0x1000, 0x7fff, 0 },
+ // verified from PAL dump:
+ // bank0 = pin 19 (ROMs 1,3) & pin 18 (ROMs 2,4)
+ // bank1 = pin 17 (ROMs 5,7) & pin 16 (ROMs 6,8)
+ // pins 12,13,14,15 are always enabled
- { GFXTYPE_SPRITES | GFXTYPE_SCROLL2, 0x8000, 0xdbff, 1 },
- { GFXTYPE_SCROLL3, 0xdc00, 0xffff, 1 },
+ /* type start end bank */
+ { GFXTYPE_SPRITES | GFXTYPE_SCROLL1 | GFXTYPE_SCROLL2 | GFXTYPE_SCROLL3, 0x00000, 0x07fff, 0 },
+ { GFXTYPE_SPRITES | GFXTYPE_SCROLL1 | GFXTYPE_SCROLL2 | GFXTYPE_SCROLL3, 0x08000, 0x0ffff, 1 },
{ 0 }
};
@@ -1173,14 +1185,16 @@ static const struct gfx_range mapper_PS63B_table[] =
#define mapper_MB63B { 0x8000, 0x8000, 0x8000, 0 }, mapper_MB63B_table
static const struct gfx_range mapper_MB63B_table[] =
{
- /* type start end bank */
- { GFXTYPE_SCROLL1, 0x00000, 0x00fff, 0 },
- { GFXTYPE_SPRITES | GFXTYPE_SCROLL2, 0x01000, 0x07fff, 0 },
-
- { GFXTYPE_SPRITES | GFXTYPE_SCROLL2, 0x08000, 0x0ffff, 1 },
+ // verified from PAL dump:
+ // bank0 = pin 19 (ROMs 1,3) & pin 18 (ROMs 2,4)
+ // bank1 = pin 17 (ROMs 5,7) & pin 16 (ROMs 6,8)
+ // bank2 = pin 15 (ROMs 10,12) & pin 14 (ROMs 11,13)
+ // pins 12,13 are never enabled
- { GFXTYPE_SPRITES | GFXTYPE_SCROLL2, 0x10000, 0x167ff, 2 },
- { GFXTYPE_SCROLL3, 0x16800, 0x17fff, 2 },
+ /* type start end bank */
+ { GFXTYPE_SPRITES | GFXTYPE_SCROLL1 | GFXTYPE_SCROLL2 | GFXTYPE_SCROLL3, 0x00000, 0x07fff, 0 },
+ { GFXTYPE_SPRITES | GFXTYPE_SCROLL1 | GFXTYPE_SCROLL2 | GFXTYPE_SCROLL3, 0x08000, 0x0ffff, 1 },
+ { GFXTYPE_SPRITES | GFXTYPE_SCROLL1 | GFXTYPE_SCROLL2 | GFXTYPE_SCROLL3, 0x10000, 0x17fff, 2 },
{ 0 }
};
@@ -1265,15 +1279,20 @@ static const struct gfx_range mapper_PKB10B_table[] =
};
-#define mapper_pang3 { 0x8000, 0x8000, 0, 0 }, mapper_pang3_table
-static const struct gfx_range mapper_pang3_table[] =
+#define mapper_CP1B1F { 0x10000, 0, 0, 0 }, mapper_CP1B1F_table
+static const struct gfx_range mapper_CP1B1F_table[] =
{
- /* type start end bank */
- { GFXTYPE_SPRITES | GFXTYPE_SCROLL2, 0x0000, 0x7fff, 0 },
-
- { GFXTYPE_SPRITES | GFXTYPE_SCROLL2, 0x8000, 0x9fff, 1 },
- { GFXTYPE_SCROLL1, 0xa000, 0xbfff, 1 },
- { GFXTYPE_SCROLL3, 0xc000, 0xffff, 1 },
+ // verified from PAL dump:
+ // bank0 = pin 16 (ROMs 1,7 /ce)
+ // = pin 15 (ROMs 1,7 /oe)
+ // = pin 13 (ROMs 1,7 a19)
+ // Unlike other games which switch between 2 pairs of roms to form the full 64-bit gfx bus,
+ // this unique B board stores the 2x 32-bit halves in the same rom pair and switches between them with the a19 line.
+ // An a20 line is available on pin 14 for 32MBit roms but is unused (this would be bank1 if used).
+ // pins 17,18,19 are rom /ce lines to other 3 pairs of unpopulated roms.
+
+ /* type start end bank */
+ { GFXTYPE_SPRITES | GFXTYPE_SCROLL1 | GFXTYPE_SCROLL2 | GFXTYPE_SCROLL3, 0x0000, 0xffff, 0 },
{ 0 }
};
@@ -1652,11 +1671,12 @@ static const struct CPS1config cps1_config_table[]=
{"megamana", CPS_B_21_DEF, mapper_RCM63B },
{"rockmanj", CPS_B_21_DEF, mapper_RCM63B },
{"pnickj", CPS_B_21_DEF, mapper_PKB10B },
- {"pang3", CPS_B_21_DEF, mapper_pang3 }, /* EEPROM port is among the CPS registers (handled by DRIVER_INIT) */ // should use one of these three CP1B1F,CP1B8K,CP1B9KA
- {"pang3r1", CPS_B_21_DEF, mapper_pang3 }, /* EEPROM port is among the CPS registers (handled by DRIVER_INIT) */ // should use one of these three CP1B1F,CP1B8K,CP1B9K
- {"pang3j", CPS_B_21_DEF, mapper_pang3 }, /* EEPROM port is among the CPS registers (handled by DRIVER_INIT) */ // should use one of these three CP1B1F,CP1B8K,CP1B9K
- {"pang3b", CPS_B_21_DEF, mapper_pang3 }, /* EEPROM port is among the CPS registers (handled by DRIVER_INIT) */ // should use one of these three CP1B1F,CP1B8K,CP1B9K
- {"pang3b2", CPS_B_21_DEF, mapper_pang3 }, /* EEPROM port is among the CPS registers (handled by DRIVER_INIT) */ // should use one of these three CP1B1F,CP1B8K,CP1B9K
+ {"pang3", CPS_B_21_DEF, mapper_CP1B1F }, /* EEPROM port is among the CPS registers (handled by DRIVER_INIT) */
+ {"pang3r1", CPS_B_21_DEF, mapper_CP1B1F }, /* EEPROM port is among the CPS registers (handled by DRIVER_INIT) */
+ {"pang3j", CPS_B_21_DEF, mapper_CP1B1F }, /* EEPROM port is among the CPS registers (handled by DRIVER_INIT) */
+ {"pang3b", CPS_B_21_DEF, mapper_CP1B1F }, /* EEPROM port is among the CPS registers (handled by DRIVER_INIT) */
+ {"pang3b2", CPS_B_21_DEF, mapper_CP1B1F }, /* EEPROM port is among the CPS registers (handled by DRIVER_INIT) */
+ {"pang3b3", CPS_B_17, mapper_CP1B1F }, /* EEPROM port is among the CPS registers (handled by DRIVER_INIT) */
{"ganbare", CPS_B_21_DEF, mapper_sfzch }, // wrong, this set uses GBPR2, dumped but equations still not added
{"gulunpa", CPS_B_21_DEF, mapper_gulunpa }, // wrong