superqix.cpp: Add sqixr0 World/Japan V1.0 romset as a working clone, dumped from an early PCB.

Renamed sqixr1, sqix, and sqixb1 set long names to include their version numbers.
Updated comments about sqixb1, which is in fact an exact copy of sqixr0 with one gfx rom split and the MCU replaced with a bootleg version.
Add notes about the greenwire fix on 7H on the V1.0 pcb vs the res/cap fix on later pcbs.
Add notes about V1.0 coin lockout being inverted compared to the later sets. [Lord Nightmare]
This commit is contained in:
Lord-Nightmare 2016-09-22 01:39:25 -04:00
parent 2931bb9015
commit f56481e4f3
3 changed files with 79 additions and 31 deletions

View File

@ -45,15 +45,35 @@ Super Qix:
This happens in all sets. There appears to be code that would check part of
the MCU init sequence ($5973 onwards), but it doesn't seem to be called.
- sqixb1 might be based on an earlier version because there is a bug with coin
lockout: it is activated after inserting 10 coins instead of 9.
sqix doesn't have that bug and also inverts the coin lockout output compared
to the bootleg.
The older sqixr1 non-bootleg set does not have the 10 coin lockout bug
either, so it is possible that the bootleggers introduced it themselves, or
the bootleg is based on some sort of early (location test?) set (older than
the sqixr1 set) which we don't have a dump of.
- sqixr0 (World/Japan V1.0) (and sqixb1 which is the exact same ROMs but the
8751 MCU replaced with an 8031) has a bug with coin lockout: it is activated
after inserting 10 coins instead of 9.
This is fixed in World/Japan V1.1, V1.2 and the US set.
In addition, the polarity of the coin lockout on V1.0 (and sqixb1) is
flat-out reversed, so the pcb will not work in a standard JAMMA harness with
coin lockouts without inverting JAMMA pins K and/or 9. The hack below on V1.0
pcbs with the two wires connecting to IC 7H may have been a workaround which
involved a customized JAMMA connector/harness. How exactly is unclear.
- All Taito Super Qix PCBS are part M6100237A, and have a wiring hack on top of
component 7H (a 74LS86 Quad XOR gate):
(reference: 74LS86 pins 4, 5 and 12 are 2A, 2B and 4A respectively, none are
outputs)
The V1.0 PCBs have two greenwires running on the back of the pcb, connected
from 7H pins 4 and 5, to JAMMA pins e (GND) and d (unused) respectively.
This implies there was a hack done on the JAMMA harness connector itself
(possibly to invert the coin lockout value using one of the XOR gates
at 7H (or perhaps 7H controls the coin lockouts themselves?)) but what
exactly the hack does is unclear without further tracing.
The V1.1, V1.2 and US PCBS have two resistors from VCC to GND forming a
voltage divider on top of 7H, the resistor from VCC/Pin 14 to Common is
22KOhms, the other resistor is unknown and seems to connect to GND/Pin 7.
The center of the two resistors connects to one end of a 0.1uf capacitor,
the other end of the capacitor connects to 7H pin 12.
This implies some sort of brief/reset pulse generation or filter on pin 12.
Again, what exactly this accomplishes is unclear without further tracing.
- sqixb2 is a bootleg of sqixb1, with the MCU removed.
- Prebillian controls: (from the Japanese flyer):
@ -68,7 +88,8 @@ TODO:
- I'm not sure about the NMI ack at 0418 in the original sqix, but the game hangs
at the end of a game without it. Note that the bootleg replaces that call with
something else.
something else. That something else is actually reading the system/Coin/Start
inputs from 0418, which the MCU normally reads from its port 0, hence...
- Given the behavior of prebillian and hotsmash, I'm guessing 0418 resetting the
NMI latch (i.e. NMI ACK) is correct. [LN]
@ -363,7 +384,7 @@ WRITE8_MEMBER(superqix_state::sqixu_mcu_p2_w)
machine().bookkeeping().coin_counter_w(1,data & 4);
// bit 3 = coin lockout
machine().bookkeeping().coin_lockout_global_w(~data & 8);
machine().bookkeeping().coin_lockout_global_w(((data & 8)>>3) ^ m_invert_coin_lockout);
// bit 4 = flip screen
flip_screen_set(data & 0x10);
@ -1548,9 +1569,9 @@ ROM_START( hotsmash )
ROM_LOAD( "b18-03", 0x14000, 0x04000, CRC(1c82717d) SHA1(6942c8877e24ac51ed71036e771a1655d82f3491) )
ROM_END
ROM_START( sqix )
ROM_START( sqix ) // It is unclear what this set fixes vs 1.1 below, but the 'rug pattern' on the bitmap test during POST has the left edge entirely black, unlike v1.0 or v1.1, but like sqixu
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "b03-01-2.f3", 0x00000, 0x08000, CRC(5ded636b) SHA1(827954001b4617b3bd439be75094d8dca06ea32b) )
ROM_LOAD( "b03-01-2.ef3", 0x00000, 0x08000, CRC(5ded636b) SHA1(827954001b4617b3bd439be75094d8dca06ea32b) )
ROM_LOAD( "b03-02.h3", 0x10000, 0x10000, CRC(9c23cb64) SHA1(7e04cb18cabdc0031621162cbc228cd95875a022) )
ROM_REGION( 0x1000, "mcu", 0 ) /* I8751 code */
@ -1567,9 +1588,28 @@ ROM_START( sqix )
ROM_LOAD( "b03-05.t8", 0x00000, 0x10000, CRC(df326540) SHA1(1fe025edcd38202e24c4e1005f478b6a88533453) )
ROM_END
ROM_START( sqixr1 )
ROM_START( sqixr1 ) // This set has the coin lockout polarity inverted, and also fixes the 10 vs 9 lockout bug
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "b03-01-1.f3", 0x00000, 0x08000, CRC(ad614117) SHA1(c461f00a2aecde1bc3860c15a3c31091b14665a2) )
ROM_LOAD( "b03-01-1.ef3", 0x00000, 0x08000, CRC(ad614117) SHA1(c461f00a2aecde1bc3860c15a3c31091b14665a2) )
ROM_LOAD( "b03-02.h3", 0x10000, 0x10000, CRC(9c23cb64) SHA1(7e04cb18cabdc0031621162cbc228cd95875a022) )
ROM_REGION( 0x1000, "mcu", 0 ) /* I8751 code */
ROM_LOAD( "b03-03.l2", 0x00000, 0x1000, BAD_DUMP CRC(f0c3af2b) SHA1(6dce2175011b5c8d0f1bce433c53979841d5d1a4) ) /* Original Taito ID code for this set's MCU */
/* the above file is derived from b03-08.l2 from the sqixu set, by patching 3 bytes, needs verification dump/decap from a real b03-03 MCU */
ROM_REGION( 0x08000, "gfx1", 0 )
ROM_LOAD( "b03-04.s8", 0x00000, 0x08000, CRC(f815ef45) SHA1(4189d455b6ccf3ae922d410fb624c4665203febf) )
ROM_REGION( 0x20000, "gfx2", 0 )
ROM_LOAD( "taito_sq-iu3__lh231041__sharp_japan__8709_d.p8", 0x00000, 0x20000, CRC(b8d0c493) SHA1(ef5d62ef3835c7ae088a7aa98945f747130fe0ec) ) /* Sharp LH231041 28 pin 128K x 8bit mask rom */
ROM_REGION( 0x10000, "gfx3", 0 )
ROM_LOAD( "b03-05.t8", 0x00000, 0x10000, CRC(df326540) SHA1(1fe025edcd38202e24c4e1005f478b6a88533453) )
ROM_END
ROM_START( sqixr0 ) // This set is older than the above two: it has the coin lockout only trigger after 10 coins (causing the last coin to be lost), and the coin lockout polarity is not inverted
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "b03-01.ef3", 0x00000, 0x08000, CRC(0888b7de) SHA1(de3e4637436de185f43d2ad4186d4cfdcd4d33d9) )
ROM_LOAD( "b03-02.h3", 0x10000, 0x10000, CRC(9c23cb64) SHA1(7e04cb18cabdc0031621162cbc228cd95875a022) )
ROM_REGION( 0x1000, "mcu", 0 ) /* I8751 code */
@ -1588,7 +1628,7 @@ ROM_END
ROM_START( sqixu )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "b03-06.f3", 0x00000, 0x08000, CRC(4f59f7af) SHA1(6ea627ea8505cf8d1a5a1350258180c61fbd1ed9) )
ROM_LOAD( "b03-06.ef3", 0x00000, 0x08000, CRC(4f59f7af) SHA1(6ea627ea8505cf8d1a5a1350258180c61fbd1ed9) )
ROM_LOAD( "b03-07.h3", 0x10000, 0x10000, CRC(4c417d4a) SHA1(de46551da1b27312dca40240a210e77595cf9dbd) )
ROM_REGION( 0x1000, "mcu", 0 ) /* I8751 code */
@ -1607,10 +1647,11 @@ ROM_END
/* this is a bootleg with an 8031+external rom in place of the 8751 of the
original board; The mcu code is extensively hacked to avoid use of port 2,
which is used as the rom data bus, using a multiplexed latch on one of the
other ports instead. This is based on dumped original b03-03.l2 code. */
other ports instead. This mcu is based on dumped original b03-03.l2 code.
The actual rom set is an exact copy of sqixr0 above, barring the MCU changes */
ROM_START( sqixb1 )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "sq01.97", 0x00000, 0x08000, CRC(0888b7de) SHA1(de3e4637436de185f43d2ad4186d4cfdcd4d33d9) )
ROM_LOAD( "sq01.97", 0x00000, 0x08000, CRC(0888b7de) SHA1(de3e4637436de185f43d2ad4186d4cfdcd4d33d9) ) // == b03-01.ef3
ROM_LOAD( "b03-02.h3", 0x10000, 0x10000, CRC(9c23cb64) SHA1(7e04cb18cabdc0031621162cbc228cd95875a022) )
ROM_REGION( 0x10000, "mcu", 0 ) /* I8031 code */
@ -1620,14 +1661,14 @@ ROM_START( sqixb1 )
ROM_LOAD( "b03-04.s8", 0x00000, 0x08000, CRC(f815ef45) SHA1(4189d455b6ccf3ae922d410fb624c4665203febf) )
ROM_REGION( 0x20000, "gfx2", 0 )
ROM_LOAD( "b03-03", 0x00000, 0x10000, CRC(6e8b6a67) SHA1(c71117cc880a124c46397c446d1edc1cbf681200) ) /* 1st half of sq-iu3.p8, fake label */
ROM_LOAD( "b03-06", 0x10000, 0x10000, CRC(38154517) SHA1(703ad4cfe54a4786c67aedcca5998b57f39fd857) ) /* 2nd half of sq-iu3.p8, fake label */
ROM_LOAD( "b03-03", 0x00000, 0x10000, CRC(6e8b6a67) SHA1(c71117cc880a124c46397c446d1edc1cbf681200) ) /* == 1st half of taito_sq-iu3__lh231041__sharp_japan__8709_d.p8, fake label */
ROM_LOAD( "b03-06", 0x10000, 0x10000, CRC(38154517) SHA1(703ad4cfe54a4786c67aedcca5998b57f39fd857) ) /* == 2nd half of taito_sq-iu3__lh231041__sharp_japan__8709_d.p8, fake label */
ROM_REGION( 0x10000, "gfx3", 0 )
ROM_LOAD( "b03-05.t8", 0x00000, 0x10000, CRC(df326540) SHA1(1fe025edcd38202e24c4e1005f478b6a88533453) )
ROM_END
ROM_START( sqixb2 )
ROM_START( sqixb2 ) // this bootleg set has been extensively hacked to avoid using the MCU at all, though a few checks for the semaphore flags were never patched out
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "cpu.2", 0x00000, 0x08000, CRC(682e28e3) SHA1(fe9221d26d7397be5a0fc8fdc51672b5924f3cf2) )
ROM_LOAD( "b03-02.h3", 0x10000, 0x10000, CRC(9c23cb64) SHA1(7e04cb18cabdc0031621162cbc228cd95875a022) )
@ -1673,9 +1714,12 @@ ROM_START( perestro )
ROM_LOAD( "rom3a.bin", 0x00000, 0x10000, CRC(7a2a563f) SHA1(e3654091b858cc80ec1991281447fc3622a0d4f9) )
ROM_END
DRIVER_INIT_MEMBER(superqix_state,sqix)
{
m_invert_coin_lockout = 1;
}
DRIVER_INIT_MEMBER(superqix_state,sqixa)
DRIVER_INIT_MEMBER(superqix_state,sqixr0)
{
m_invert_coin_lockout = 0;
}
@ -1746,10 +1790,11 @@ DRIVER_INIT_MEMBER(superqix_state,perestro)
GAME( 1986, pbillian, 0, pbillian, pbillian, driver_device, 0, ROT0, "Kaneko / Taito", "Prebillian", MACHINE_SUPPORTS_SAVE )
GAME( 1987, hotsmash, 0, hotsmash, hotsmash, driver_device, 0, ROT90, "Kaneko / Taito", "Vs. Hot Smash", MACHINE_SUPPORTS_SAVE )
GAME( 1987, sqix, 0, sqix, superqix, driver_device, 0, ROT90, "Kaneko / Taito", "Super Qix (World, Rev 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, sqixr1, sqix, sqix, superqix, driver_device, 0, ROT90, "Kaneko / Taito", "Super Qix (World, Rev 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, sqixu, sqix, sqix, superqix, driver_device, 0, ROT90, "Kaneko / Taito (Romstar License)", "Super Qix (US)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, sqixb1, sqix, sqix_8031, superqix, superqix_state, sqixa, ROT90, "bootleg", "Super Qix (bootleg set 1, 8031 MCU)", MACHINE_SUPPORTS_SAVE ) // bootleg of World, Rev 1
GAME( 1987, sqixb2, sqix, sqix_nomcu, superqix, driver_device, 0, ROT90, "bootleg", "Super Qix (bootleg set 2, No MCU)", MACHINE_SUPPORTS_SAVE ) // bootleg of World, Rev 1
GAME( 1987, sqix, 0, sqix, superqix, superqix_state, sqix, ROT90, "Kaneko / Taito", "Super Qix (World/Japan, V1.2)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, sqixr1, sqix, sqix, superqix, superqix_state, sqix, ROT90, "Kaneko / Taito", "Super Qix (World/Japan, V1.1)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, sqixr0, sqix, sqix, superqix, superqix_state, sqixr0, ROT90, "Kaneko / Taito", "Super Qix (World/Japan, V1.0)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, sqixu, sqix, sqix, superqix, superqix_state, sqix, ROT90, "Kaneko / Taito (Romstar License)", "Super Qix (US)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, sqixb1, sqix, sqix_8031, superqix, superqix_state, sqixr0, ROT90, "bootleg", "Super Qix (bootleg of V1.0, 8031 MCU)", MACHINE_SUPPORTS_SAVE ) // bootleg of World, Rev 1
GAME( 1987, sqixb2, sqix, sqix_nomcu, superqix, superqix_state, sqix, ROT90, "bootleg", "Super Qix (bootleg, No MCU)", MACHINE_SUPPORTS_SAVE ) // bootleg of World, Rev 1
GAME( 1994, perestro, 0, sqix_nomcu, superqix, superqix_state, perestro, ROT90, "Promat", "Perestroika Girls", MACHINE_SUPPORTS_SAVE )
GAME( 1993, perestrof,perestro, sqix_nomcu, superqix, superqix_state, perestro, ROT90, "Promat (Fuuki license)", "Perestroika Girls (Fuuki license)", MACHINE_SUPPORTS_SAVE )

View File

@ -114,7 +114,8 @@ public:
DECLARE_READ8_MEMBER(pbillian_ay_port_b_r);
SAMPLES_START_CB_MEMBER(pbillian_sh_start);
DECLARE_DRIVER_INIT(perestro);
DECLARE_DRIVER_INIT(sqixa);
DECLARE_DRIVER_INIT(sqix);
DECLARE_DRIVER_INIT(sqixr0);
TILE_GET_INFO_MEMBER(pb_get_bg_tile_info);
TILE_GET_INFO_MEMBER(sqix_get_bg_tile_info);
DECLARE_MACHINE_START(pbillian);

View File

@ -34316,9 +34316,10 @@ pbillian // (c) 1986 Taito
perestro // (c) 1994 Promat
perestrof // (c) 1993 Promat / Fuuki
sqix // B03 1987
sqixb1 // bootleg? but (c) 1987
sqixb2 // bootleg? but (c) 1987
sqixb1 // bootleg (exact copy of sqixr0 with bootleg MCU) (c) 1987
sqixb2 // bootleg with no mcu, but retains the (c) 1987
sqixr1 // B03 1987
sqixr0 // B03 1987
sqixu // B03 1987
@source:superslave.cpp
@ -36476,6 +36477,7 @@ wrecking // (c) 1984 Nintendo
@source:vt100.cpp
vt100 // 1978 Digital Equipment Corporation
//vt100ac // 1979 Digital Equipment Corporation
vt101 // 1981 Digital Equipment Corporation
vt102 // 1981 Digital Equipment Corporation
vt105 // 1978 Digital Equipment Corporation