summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2022-01-21 01:09:39 +1100
committer Robbbert <Robbbert@users.noreply.github.com>2022-01-21 01:09:39 +1100
commitf854bf08a5a0485a8091fd79821f707aba66a9ab (patch)
tree1362009fc7ae4cba419893ab08d321ec5d26468b /src
parent70295eff162bb08a8961a3f2d6a5bac020125876 (diff)
Split off Williams Shuffle games to their own driver.
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/s11.cpp95
-rw-r--r--src/mame/drivers/s4.cpp137
-rw-r--r--src/mame/drivers/s9.cpp28
-rw-r--r--src/mame/drivers/wms_shuffle.cpp819
-rw-r--r--src/mame/layout/shuffle.lay107
-rw-r--r--src/mame/layout/shuffle11.lay107
6 files changed, 1041 insertions, 252 deletions
diff --git a/src/mame/drivers/s11.cpp b/src/mame/drivers/s11.cpp
index 905ab72866e..ad320720555 100644
--- a/src/mame/drivers/s11.cpp
+++ b/src/mame/drivers/s11.cpp
@@ -2,18 +2,13 @@
// copyright-holders:Miodrag Milanovic, Robbbert
/****************************************************************************************
- Pinball
- Williams System 11
+PINBALL
+Williams System 11
- Status of games:
+Status:
ToDo:
-- tic-tac-strike belongs in s11a.cpp
-- gold mine belongs in s11b.cpp
-- top dawg belongs in s11b.cpp
-- shuffle inn belongs in s11b.cpp
-
Known keys necessary to get games to start (so the proper number of balls are detected):
- Grand Lizard: Press S, D, F, and press "1" after inserting 1 or more credits.
- Road Kings: press 'Up' (the direction key) and 'Delete', and press "1" after inserting 1 or more credits.
@@ -653,82 +648,6 @@ ROM_START(rdkng_l4)
ROM_LOAD("road_u4.l1", 0x0000, 0x8000, CRC(4395b48f) SHA1(2325ce6ba7f6f92f884c302e6f053c31229dc774))
ROM_END
-/************************ From here, not pinball machines **************************************/
-
-/*------------------------------
-/ Alley Cats (Shuffle) (#918)
-/-------------------------------*/
-ROM_START(alcat_l7)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("u26_rev7.rom", 0xd000, 0x1000, CRC(4d274dd3) SHA1(80d72bd0f85ce2cac04f6d9f59dc1fcccc86d402))
- ROM_LOAD("u27_rev7.rom", 0xe000, 0x2000, CRC(9c7faf8a) SHA1(dc1a561948b9a303f7924d7bebcd972db766827b))
-
- ROM_REGION(0x20000, "audiocpu", ROMREGION_ERASEFF)
- ROM_LOAD("acs_u21.bin", 0x18000, 0x8000, CRC(c54cd329) SHA1(4b86b10e60a30c4de5d97129074f5657447be676))
- ROM_LOAD("acs_u22.bin", 0x10000, 0x8000, CRC(56c1011a) SHA1(c817a3410c643617f3643897b8f529ae78546b0d))
-ROM_END
-
-/*--------------------
-/ Tic-Tac-Strike (#919)
-/--------------------*/
-ROM_START(tts_l2)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("u27_l2.128", 0x8000, 0x4000, CRC(edbcab92) SHA1(0f6b2dc01874984f9a17ee873f2fa0b6c9bba5be))
- ROM_RELOAD( 0xc000, 0x4000)
-
- ROM_REGION(0x20000, "audiocpu", ROMREGION_ERASEFF)
- ROM_LOAD("tts_u21.256", 0x18000, 0x8000, NO_DUMP)
- ROM_LOAD("tts_u22.256", 0x10000, 0x8000, NO_DUMP)
-ROM_END
-
-ROM_START(tts_l1)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("tts_u27.128", 0x8000, 0x4000, CRC(f540c53c) SHA1(1c7a318278ad1afdcbe6aaf81f9b774882b069d6))
- ROM_RELOAD( 0xc000, 0x4000)
-
- ROM_REGION(0x20000, "audiocpu", ROMREGION_ERASEFF)
- ROM_LOAD("tts_u21.256", 0x18000, 0x8000, NO_DUMP)
- ROM_LOAD("tts_u22.256", 0x10000, 0x8000, NO_DUMP)
-ROM_END
-
-/*-------------------------------
-/ Gold Mine (Shuffle) (#920) s11b
-/--------------------------------*/
-ROM_START(gmine_l2)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("u27.128", 0x8000, 0x4000, CRC(99c6e049) SHA1(356faec0598a54892050a28857e9eb5cdbf35833))
- ROM_RELOAD( 0xc000, 0x4000)
-
- ROM_REGION(0x20000, "audiocpu", ROMREGION_ERASEFF)
- ROM_LOAD("u21.256", 0x18000, 0x8000, CRC(3b801570) SHA1(50b50ff826dcb031a30940fa3099bd3a8d773831))
- ROM_LOAD("u22.256", 0x10000, 0x8000, CRC(08352101) SHA1(a7437847a71cf037a80686292f9616b1e08922df))
-ROM_END
-
-/*-------------------------
-/ Top Dawg (Shuffle) (#921)
-/--------------------------*/
-ROM_START(tdawg_l1)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("tdu27r1.128", 0x8000, 0x4000, CRC(0b4bb586) SHA1(a927ebf7167609cc84b38c22aa35d0c4d259dd8b))
- ROM_RELOAD( 0xc000, 0x4000)
-
- ROM_REGION(0x20000, "audiocpu", ROMREGION_ERASEFF)
- ROM_LOAD("tdsu21r1.256", 0x18000, 0x8000, CRC(6a323227) SHA1(7c7263754e5672c654a2ee9582f0b278e637a909))
- ROM_LOAD("tdsu22r1.256", 0x10000, 0x8000, CRC(58407eb4) SHA1(6bd9b304c88d9470eae5afb6621187f4a8313573))
-ROM_END
-
-/*----------------------------
-/ Shuffle Inn (Shuffle) (#922)
-/-----------------------------*/
-ROM_START(shfin_l1)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("u27rom-1.rv1", 0x8000, 0x4000, CRC(40cfb74a) SHA1(8cee4212ea8bb6b360060391df3208e1e129d7e5))
- ROM_RELOAD( 0xc000, 0x4000)
-
- ROM_REGION(0x20000, "audiocpu", ROMREGION_ERASEFF)
- ROM_LOAD("u21snd-2.rv1", 0x18000, 0x8000, CRC(80ddce05) SHA1(9498260e5ccd2fe0eb03ff321dd34eb945b0213a))
- ROM_LOAD("u22snd-2.rv1", 0x10000, 0x8000, CRC(6894abaf) SHA1(2d661765fbfce33a73a20778c41233c0bd9933e9))
-ROM_END
// Pinball
GAME( 1986, grand_l4, 0, s11_bgs, s11, s11_state, init_s11, ROT0, "Williams", "Grand Lizard (L-4)", MACHINE_IS_SKELETON_MECHANICAL )
@@ -739,11 +658,3 @@ GAME( 1986, rdkng_l4, 0, s11_bgm, s11, s11_state, init_s11, ROT0, "Willi
GAME( 1986, rdkng_l1, rdkng_l4, s11_bgm, s11, s11_state, init_s11, ROT0, "Williams", "Road Kings (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1986, rdkng_l2, rdkng_l4, s11_bgm, s11, s11_state, init_s11, ROT0, "Williams", "Road Kings (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1986, rdkng_l3, rdkng_l4, s11_bgm, s11, s11_state, init_s11, ROT0, "Williams", "Road Kings (L-3)", MACHINE_IS_SKELETON_MECHANICAL )
-
-// Shuffle
-GAME( 1985, alcat_l7, 0, s11_only, s11, s11_state, init_s11, ROT0, "Williams", "Alley Cats (Shuffle) (L-7)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1986, tts_l2, 0, s11_only, s11, s11_state, init_s11, ROT0, "Williams", "Tic-Tac-Strike (Shuffle) (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1986, tts_l1, tts_l2, s11_only, s11, s11_state, init_s11, ROT0, "Williams", "Tic-Tac-Strike (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1987, gmine_l2, 0, s11_only, s11, s11_state, init_s11, ROT0, "Williams", "Gold Mine (Shuffle) (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1987, tdawg_l1, 0, s11_only, s11, s11_state, init_s11, ROT0, "Williams", "Top Dawg (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1987, shfin_l1, 0, s11_only, s11, s11_state, init_s11, ROT0, "Williams", "Shuffle Inn (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
diff --git a/src/mame/drivers/s4.cpp b/src/mame/drivers/s4.cpp
index e5ef5a76faf..0b5715d1feb 100644
--- a/src/mame/drivers/s4.cpp
+++ b/src/mame/drivers/s4.cpp
@@ -15,35 +15,20 @@ Games:
- Trizone (#487)
- Time Warp (#489)
- Stellar Wars (#490)
-- Pompei
-- Aristocrat
-- Topaz
-- Taurus
-- King Tut
-- Omni
-- Big Strike
-- Triple Strike
-
-The first time run, the pinballs will display will show the model number, while
- the shuffle games show 0200 and 419. Press F3 to clear this.
+
+The first time run, the machine will display will show the model number.
+ Press F3 to clear this.
Phoenix and Pokerino are listed as System 4, but use System 3 ROMs.
They have been moved to s3.cpp, and are working there.
-The "Shuffle" games consist of a flat board with an air-driven puck and 10
- bowling pins. You must push the puck as if it was a bowling ball, and score
- strikes and spares. Since the maximum score is 300, the displays have 4 digits
- and 6 can play. They will most likely be split off to a separate driver.
-
Pressing NUM-8 will select a different set of sounds.
Status:
-- Pinballs are playable.
+- All machines are playable.
ToDo:
-- Shuffle games: need a layout, and no manuals found. Press 6 to insert coin,
- press 9 to start. Some keys make noises. / key steps to next frame.
-
+- Nothing
************************************************************************************/
@@ -714,108 +699,6 @@ ROM_START(stlwr_l2)
ROM_LOAD("sound1.716", 0x0000, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
ROM_END
-
-
-/* From here, are NOT pinball machines */
-
-/*----------------------------
-/ Pompeii (Shuffle)
-/----------------------------*/
-ROM_START(pomp_l1)
- ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("gamerom.716", 0x0000, 0x0800, CRC(0f069ac2) SHA1(d651d49cdb50cf444e420241a1f9ed48c878feee))
- ROM_LOAD("b_ic20.716", 0x1000, 0x0800, CRC(c6f8e3b1) SHA1(cb78d42e1265162132a1ab2320148b6857106b0e))
- ROM_LOAD("b_ic17.716", 0x1800, 0x0800, CRC(cfc2518a) SHA1(5e99e40dcb7e178137db8d7d7d6da82ba87130fa))
-
- ROM_REGION(0x0800, "audiocpu", 0)
- ROM_LOAD("soundx.716", 0x0000, 0x0800, CRC(539d64fb) SHA1(ff0d09c8d7c65e1072691b5b9e4fcaa3f38d67e8))
-ROM_END
-
-/*----------------------------
-/ Aristocrat (Shuffle) same roms as Pompeii
-/----------------------------*/
-ROM_START(arist_l1)
- ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("gamerom.716", 0x0000, 0x0800, CRC(0f069ac2) SHA1(d651d49cdb50cf444e420241a1f9ed48c878feee))
- ROM_LOAD("b_ic20.716", 0x1000, 0x0800, CRC(c6f8e3b1) SHA1(cb78d42e1265162132a1ab2320148b6857106b0e))
- ROM_LOAD("b_ic17.716", 0x1800, 0x0800, CRC(cfc2518a) SHA1(5e99e40dcb7e178137db8d7d7d6da82ba87130fa))
-
- ROM_REGION(0x0800, "audiocpu", 0)
- ROM_LOAD("soundx.716", 0x0000, 0x0800, CRC(539d64fb) SHA1(ff0d09c8d7c65e1072691b5b9e4fcaa3f38d67e8))
-ROM_END
-
-/*----------------------------
-/ Topaz (Shuffle)
-/----------------------------*/
-ROM_START(topaz_l1)
- ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("gamerom.716", 0x0000, 0x0800, CRC(cb287b10) SHA1(7fb6b6a26237cf85d5e02cf35271231267f90fc1))
- ROM_LOAD("b_ic20.716", 0x1000, 0x0800, CRC(c6f8e3b1) SHA1(cb78d42e1265162132a1ab2320148b6857106b0e))
- ROM_LOAD("b_ic17.716", 0x1800, 0x0800, CRC(cfc2518a) SHA1(5e99e40dcb7e178137db8d7d7d6da82ba87130fa))
-
- ROM_REGION(0x0800, "audiocpu", 0)
- ROM_LOAD("sound1.716", 0x0000, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
-ROM_END
-
-/*----------------------------
-/ Taurus (Shuffle)
-/----------------------------*/
-ROM_START(taurs_l1)
- ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("gamerom.716", 0x0000, 0x0800, CRC(3246e285) SHA1(4f76784ecb5063a49c24795ae61db043a51e2c89))
- ROM_LOAD("b_ic20.716", 0x1000, 0x0800, CRC(c6f8e3b1) SHA1(cb78d42e1265162132a1ab2320148b6857106b0e))
- ROM_LOAD("b_ic17.716", 0x1800, 0x0800, CRC(cfc2518a) SHA1(5e99e40dcb7e178137db8d7d7d6da82ba87130fa))
-
- ROM_REGION(0x0800, "audiocpu", 0)
- ROM_LOAD("soundx.716", 0x0000, 0x0800, CRC(539d64fb) SHA1(ff0d09c8d7c65e1072691b5b9e4fcaa3f38d67e8))
-ROM_END
-
-/*----------------------------
-/ King Tut
-/----------------------------*/
-ROM_START(kingt_l1)
- ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("gamerom.716", 0x0000, 0x0800, CRC(54d3280a) SHA1(ca74636e35d2c3e0b3133f89b1ff1233d5d72a5c))
- ROM_LOAD("b_ic20.716", 0x1000, 0x0800, CRC(c6f8e3b1) SHA1(cb78d42e1265162132a1ab2320148b6857106b0e))
- ROM_LOAD("b_ic17.716", 0x1800, 0x0800, CRC(cfc2518a) SHA1(5e99e40dcb7e178137db8d7d7d6da82ba87130fa))
-
- ROM_REGION(0x0800, "audiocpu", 0)
- ROM_LOAD("soundx.716", 0x0000, 0x0800, CRC(539d64fb) SHA1(ff0d09c8d7c65e1072691b5b9e4fcaa3f38d67e8))
-ROM_END
-
-/*----------------------------
-/ Omni (Shuffle)
-/----------------------------*/
-ROM_START(omni_l1)
- ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("omni-1a.u21", 0x0000, 0x0800, CRC(443bd170) SHA1(cc1ebd72d77ec2014cbd84534380e5ea1f12c022))
- ROM_LOAD("b_ic20.716", 0x1000, 0x0800, CRC(c6f8e3b1) SHA1(cb78d42e1265162132a1ab2320148b6857106b0e))
- ROM_LOAD("b_ic17.716", 0x1800, 0x0800, CRC(cfc2518a) SHA1(5e99e40dcb7e178137db8d7d7d6da82ba87130fa))
-
- ROM_REGION(0x0800, "audiocpu", 0)
- ROM_LOAD("sound.716", 0x0000, 0x0800, CRC(db085cbb) SHA1(9a57abbad183ba16b3dba16d16923c3bfc46a0c3))
-ROM_END
-
-/*----------------------------
-/ Big Strike (Shuffle)
-/----------------------------*/
-ROM_START(bstrk_l1)
- ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("gamerom.716", 0x0000, 0x0800, CRC(323dbcde) SHA1(a75cbb5de97cb9afc1d36e9b6ff593bb482fcf8b))
- ROM_LOAD("b_ic20.716", 0x1000, 0x0800, CRC(c6f8e3b1) SHA1(cb78d42e1265162132a1ab2320148b6857106b0e))
- ROM_LOAD("b_ic17.716", 0x1800, 0x0800, CRC(cfc2518a) SHA1(5e99e40dcb7e178137db8d7d7d6da82ba87130fa))
-ROM_END
-
-/*----------------------------
-/ Triple Strike (Shuffle)
-/----------------------------*/
-ROM_START(tstrk_l1)
- ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("gamerom.716", 0x0000, 0x0800, CRC(b034c059) SHA1(76b3926b87b3c137fcaf33021a586827e3c030af))
- ROM_LOAD("ic20.716", 0x1000, 0x0800, CRC(f163fc88) SHA1(988b60626f3d4dc8f4a1dbd0c99282418bc53aae))
- ROM_LOAD("b_ic17.716", 0x1800, 0x0800, CRC(cfc2518a) SHA1(5e99e40dcb7e178137db8d7d7d6da82ba87130fa))
-ROM_END
-
} // Anonymous namespace
// Pinball
@@ -828,13 +711,3 @@ GAME( 1979, tmwrp_l3, 0, s4a, tmwrp, s4a_state, empty_init, ROT0, "Willia
GAME( 1979, tmwrp_l2, tmwrp_l3, s4a, tmwrp, s4a_state, empty_init, ROT0, "Williams", "Time Warp (Williams, L-2)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1979, tmwrp_t2, tmwrp_l3, s4a, tmwrp, s4a_state, empty_init, ROT0, "Williams", "Time Warp (Williams, T-2)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1979, stlwr_l2, 0, s4a, stlwr, s4a_state, empty_init, ROT0, "Williams", "Stellar Wars (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
-
-// Shuffle
-GAME( 1978, pomp_l1, 0, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Pompeii (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1978, arist_l1, 0, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Aristocrat (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1978, topaz_l1, 0, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Topaz (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1979, taurs_l1, 0, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Taurus (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1979, kingt_l1, 0, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "King Tut (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1980, omni_l1, 0, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Omni (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1983, bstrk_l1, 0, s4, s4, s4_state, empty_init, ROT0, "Williams", "Big Strike (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1983, tstrk_l1, 0, s4, s4, s4_state, empty_init, ROT0, "Williams", "Triple Strike (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
diff --git a/src/mame/drivers/s9.cpp b/src/mame/drivers/s9.cpp
index 9ed47de3599..fc468c99543 100644
--- a/src/mame/drivers/s9.cpp
+++ b/src/mame/drivers/s9.cpp
@@ -16,7 +16,6 @@ Games:
- Comet (#540)
- Rat Race (#527)
- Rat Race II (#533)
-- Strike Zone (#916)
The first time run, the display will show the model number. Press F3 to clear this.
@@ -41,8 +40,6 @@ Status:
ToDo:
- Rat Race: need a manual, playboard contacts are unknown/don't respond.
-- Strike Zone (Shuffle): need a manual, need a layout. Press 5 to insert coin,
- press 1 to start. Some keys make noises.
- Mechanical sounds
*****************************************************************************************/
@@ -568,27 +565,6 @@ ROM_START(comet_l5)
ROM_LOAD("cpu_u49.128", 0x4000, 0x4000, CRC(f1db0cbe) SHA1(59b7f36fb2003b90b288abeff56df62ce50f10c6))
ROM_END
-/*--------------------------------
-/ Strike Zone (Shuffle) (#916)
-/---------------------------------*/
-ROM_START(szone_l5)
- ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("sz_u19r5.732", 0x1000, 0x1000, CRC(c79c46cb) SHA1(422ba74ae67bebbe02f85a9a8df0e3072f3cebc0))
- ROM_LOAD("sz_u20r5.764", 0x2000, 0x2000, CRC(9b5b3be2) SHA1(fce051a60b6eecd9bc07273892b14046b251b372))
-
- ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF)
- ROM_LOAD("szs_u49.128", 0x4000, 0x4000, CRC(144c3c07) SHA1(57be6f336f200079cd698b13f8fa4755cf694274))
-ROM_END
-
-ROM_START(szone_l2)
- ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("sz_u19r2.732", 0x1000, 0x1000, CRC(c0e4238b) SHA1(eae60ccd5b5001671cd6d2685fd588494d052d1e))
- ROM_LOAD("sz_u20r2.764", 0x2000, 0x2000, CRC(91c08137) SHA1(86da08f346f85810fceceaa7b9824ab76a68da54))
-
- ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF)
- ROM_LOAD("szs_u49.128", 0x4000, 0x4000, CRC(144c3c07) SHA1(57be6f336f200079cd698b13f8fa4755cf694274))
-ROM_END
-
} // Anonymous namespace
// Novelty
@@ -601,7 +577,3 @@ GAME( 1984, sshtl_l7, 0, s9, sshtl, s9_state, empty_init, ROT0, "Williams
GAME( 1984, sshtl_l3, sshtl_l7, s9, sshtl, s9_state, empty_init, ROT0, "Williams", "Space Shuttle (L-3)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1985, comet_l4, comet_l5, s9, s9, s9_state, empty_init, ROT0, "Williams", "Comet (L-4)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1985, comet_l5, 0, s9, s9, s9_state, empty_init, ROT0, "Williams", "Comet (L-5)", MACHINE_IS_SKELETON_MECHANICAL )
-
-// Shuffle
-GAME( 1984, szone_l5, 0, s9, s9, s9_state, empty_init, ROT0, "Williams", "Strike Zone (Shuffle) (L-5)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1984, szone_l2, szone_l5, s9, s9, s9_state, empty_init, ROT0, "Williams", "Strike Zone (Shuffle) (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
diff --git a/src/mame/drivers/wms_shuffle.cpp b/src/mame/drivers/wms_shuffle.cpp
new file mode 100644
index 00000000000..6ced679de76
--- /dev/null
+++ b/src/mame/drivers/wms_shuffle.cpp
@@ -0,0 +1,819 @@
+// license:BSD-3-Clause
+// copyright-holders:Robbbert
+/***********************************************************************************
+
+PINBALL
+Williams/United Shuffle-Alley games
+
+Games:
+- Topaz (s4)
+- Pompei (s4)
+- Aristocrat (s4)
+- Taurus (s4)
+- King Tut (s4)(#912)
+- Omni (s4)
+- Big Strike (s4)
+- Triple Strike (s4)
+- Strike Zone (s9)(#916)
+- Alley Cats (s11)(#918)
+- Tic-Tac-Strike (s11a)(#919)
+- Gold Mine (s11b)(#920)
+- Top Dawg (s11b)(#921)
+- Shuffle Inn (s11b)(#922)
+
+The first time run, the machine will show some numbers. Press F3 to clear this.
+
+Each game consists of a flat board with an air-driven puck and 10 bowling pins.
+ You must push the puck as if it was a bowling ball, and score strikes and spares.
+ The displays have 4 digits and 6 can play. The board has contactors to detect
+ the passage of the puck, and the machine will lift the bowling pins out of the
+ way, so in fact the puck never touches the pins at all.
+
+Status:
+- All games (except s11a/b) seem to be playable, but no sound, and the inputs
+ aren't known.
+- s4 games: 6 to insert coin, 9 to start, various keys on bottom 2 rows act as puck
+ detectors, period key to signal end of ball. Press it twice to end a frame.
+- Strike Zone, Alley Cats: 5 to insert coin, 1 to start, then same as above.
+- s11a/b games: stuck in the boot-up sequence.
+
+ToDo:
+- Only 2 manuals found, and only one schematic, so it's largely guesswork.
+- Layout (s11/a/b)
+- Inputs
+- Outputs
+- Displays (s11/a/b)
+- Sound
+- Roms missing
+- Remove all mechanical sounds (no chimes or knocker in these games)
+
+************************************************************************************/
+
+#include "emu.h"
+#include "machine/genpin.h"
+
+#include "cpu/m6800/m6800.h"
+#include "machine/6821pia.h"
+#include "machine/clock.h"
+#include "machine/input_merger.h"
+#include "machine/ripple_counter.h"
+#include "sound/dac.h"
+#include "speaker.h"
+
+#include "shuffle.lh"
+#include "shuffle11.lh"
+
+
+namespace {
+
+class shuffle_state : public genpin_class
+{
+public:
+ shuffle_state(const machine_config &mconfig, device_type type, const char *tag)
+ : genpin_class(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_mainirq(*this, "mainirq")
+ , m_pia21(*this, "pia21")
+ , m_pia22(*this, "pia22")
+ , m_pia24(*this, "pia24")
+ , m_pia28(*this, "pia28")
+ , m_pia2c(*this, "pia2c")
+ , m_pia30(*this, "pia30")
+ , m_pia34(*this, "pia34")
+ , m_4020(*this, "4020")
+ , m_io_keyboard(*this, "X%d", 0U)
+ , m_dips(*this, "DS%d", 1U)
+ , m_digits(*this, "digit%d", 0U)
+ , m_leds(*this, "led%d", 0U)
+ , m_io_outputs(*this, "out%d", 0U)
+ { }
+
+ void s4(machine_config &config);
+ void s9(machine_config &config);
+ void s11(machine_config &config);
+
+ DECLARE_INPUT_CHANGED_MEMBER(main_nmi);
+
+private:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ void dig0_w(u8 data);
+ void dig1_w(u8 data);
+ void lamp0_w(u8 data);
+ void lamp1_w(u8 data);
+ void sol0_w(u8 data);
+ void sol1_w(u8 data);
+ void sol2_w(u8 data) { };
+ void sol3_w(u8 data) { };
+ void sound_w(u8);
+ void pia2c_pa_w(u8);
+ void pia2c_pb_w(u8);
+ void pia34_pa_w(u8);
+ void pia34_pb_w(u8);
+ u8 dips_r();
+ u8 sound_r();
+ u8 switch_r();
+ void switch_w(u8 data);
+ void clockcnt_w(u16 data);
+ u8 m_strobe = 0;
+ u8 m_row = 0;
+ bool m_data_ok = 0;
+ u8 m_lamp_data = 0;
+ bool m_irq_in_progress = 0;
+ u32 m_segment1 = 0U;
+ u32 m_segment2 = 0U;
+ u8 m_sound_data = 0U;
+ DECLARE_WRITE_LINE_MEMBER(pia22_ca2_w) { } //ST5
+ DECLARE_WRITE_LINE_MEMBER(pia22_cb2_w) { } //ST-solenoids enable
+ DECLARE_WRITE_LINE_MEMBER(pia24_ca2_w) { } //ST2
+ DECLARE_WRITE_LINE_MEMBER(pia24_cb2_w) { } //ST1
+ DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { } //diag leds enable
+ DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { } //ST6
+ DECLARE_WRITE_LINE_MEMBER(pia30_ca2_w) { } //ST4
+ DECLARE_WRITE_LINE_MEMBER(pia30_cb2_w) { } //ST3
+ DECLARE_WRITE_LINE_MEMBER(irq_w);
+ void s4_map(address_map &map);
+ void s9_map(address_map &map);
+ void s11_map(address_map &map);
+
+ required_device<cpu_device> m_maincpu;
+ required_device<input_merger_device> m_mainirq;
+ optional_device<pia6821_device> m_pia21;
+ optional_device<pia6821_device> m_pia22;
+ required_device<pia6821_device> m_pia24;
+ required_device<pia6821_device> m_pia28;
+ optional_device<pia6821_device> m_pia2c;
+ required_device<pia6821_device> m_pia30;
+ optional_device<pia6821_device> m_pia34;
+ required_device<ripple_counter_device> m_4020;
+ required_ioport_array<8> m_io_keyboard;
+ required_ioport_array<2> m_dips;
+ output_finder<32> m_digits;
+ output_finder<2> m_leds;
+ output_finder<80> m_io_outputs; // 16 solenoids + 64 lamps
+};
+
+
+void shuffle_state::s4_map(address_map &map)
+{
+ map.global_mask(0x7fff);
+ map(0x0000, 0x00ff).ram();
+ map(0x0100, 0x01ff).ram().share("nvram");
+ map(0x2200, 0x2203).rw(m_pia22, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // solenoids
+ map(0x2400, 0x2403).rw(m_pia24, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // lamps
+ map(0x2800, 0x2803).rw(m_pia28, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // display
+ map(0x3000, 0x3003).rw(m_pia30, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // inputs
+ map(0x4000, 0x7fff).rom().region("maincpu", 0);
+}
+
+void shuffle_state::s9_map(address_map &map)
+{
+ map.global_mask(0x7fff);
+ map(0x0000, 0x07ff).ram().share("nvram");
+ map(0x2100, 0x2103).rw(m_pia21, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // sound+solenoids
+ map(0x2200, 0x2200).w(FUNC(shuffle_state::sol3_w)); // solenoids
+ map(0x2400, 0x2403).rw(m_pia24, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // lamps
+ map(0x2800, 0x2803).rw(m_pia28, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // display
+ map(0x3000, 0x3003).rw(m_pia30, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // inputs
+ map(0x4000, 0x7fff).rom().region("maincpu", 0);
+}
+
+void shuffle_state::s11_map(address_map &map)
+{
+ map.global_mask(0x7fff);
+ map(0x0000, 0x07ff).ram().share("nvram");
+ map(0x2100, 0x2103).rw(m_pia21, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // sound+solenoids
+ map(0x2200, 0x2200).w(FUNC(shuffle_state::sol3_w)); // solenoids
+ map(0x2400, 0x2403).rw(m_pia24, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // lamps
+ map(0x2800, 0x2803).rw(m_pia28, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // display
+ map(0x2c00, 0x2c03).rw(m_pia2c, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // alphanumeric display
+ map(0x3000, 0x3003).rw(m_pia30, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // inputs
+ map(0x3400, 0x3403).rw(m_pia34, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // widget
+ map(0x4000, 0x7fff).rom().region("maincpu", 0);
+}
+
+static INPUT_PORTS_START( shuffle )
+ PORT_START("X0")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_NAME("Plumb Tilt") // 3 touches before it tilts
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_NAME("Tilt")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN3 )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN2 )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN1 )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_NAME("Slam Tilt")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("High Score Reset")
+
+ PORT_START("X1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("INP09")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("INP10")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("INP11")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_NAME("INP12")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("INP13")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("INP14")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_G) PORT_NAME("INP15")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_H) PORT_NAME("INP16")
+
+ PORT_START("X2")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_I) PORT_NAME("INP17")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_J) PORT_NAME("INP18")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_K) PORT_NAME("INP19")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_L) PORT_NAME("INP20")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_M) PORT_NAME("INP21")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("INP22")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_O) PORT_NAME("INP23")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_P) PORT_NAME("INP24")
+
+ PORT_START("X3")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("INP25")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("INP26")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("INP27")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("INP28")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_U) PORT_NAME("INP29")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_V) PORT_NAME("INP30")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("INP31")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("INP32")
+
+ PORT_START("X4")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Y) PORT_NAME("INP33")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("INP34")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_COMMA) PORT_NAME("INP35")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_STOP) PORT_NAME("INP36")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH) PORT_NAME("INP37")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_COLON) PORT_NAME("INP38")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_QUOTE) PORT_NAME("INP39")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_NAME("INP40")
+
+ PORT_START("X5")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("INP41")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("INP42")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_NAME("INP43")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("INP44")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("INP45")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("INP46")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_UP) PORT_NAME("INP47")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_LEFT) PORT_NAME("INP48")
+
+ PORT_START("X6") // not used?
+ PORT_START("X7") // not used?
+
+ PORT_START("DIAGS")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Main Diag") PORT_CODE(KEYCODE_0_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, shuffle_state, main_nmi, 1)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Advance") PORT_CODE(KEYCODE_1_PAD)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Manual/Auto") PORT_CODE(KEYCODE_6_PAD)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER_PAD)
+
+ PORT_START("DS1")
+ PORT_DIPNAME( 0xf0, 0xf0, "Data units" )
+ PORT_DIPSETTING( 0xf0, "0" )
+ PORT_DIPSETTING( 0x70, "1" )
+ PORT_DIPSETTING( 0xb0, "2" )
+ PORT_DIPSETTING( 0x30, "3" )
+ PORT_DIPSETTING( 0xd0, "4" )
+ PORT_DIPSETTING( 0x50, "5" )
+ PORT_DIPSETTING( 0x90, "6" )
+ PORT_DIPSETTING( 0x10, "7" )
+ PORT_DIPSETTING( 0xe0, "8" )
+ PORT_DIPSETTING( 0x60, "9" )
+ PORT_DIPNAME( 0x0f, 0x0f, "Data tens" )
+ PORT_DIPSETTING( 0x0f, "0" )
+ PORT_DIPSETTING( 0x07, "1" )
+ PORT_DIPSETTING( 0x0b, "2" )
+ PORT_DIPSETTING( 0x03, "3" )
+ PORT_DIPSETTING( 0x0d, "4" )
+ PORT_DIPSETTING( 0x05, "5" )
+ PORT_DIPSETTING( 0x09, "6" )
+ PORT_DIPSETTING( 0x01, "7" )
+ PORT_DIPSETTING( 0x0e, "8" )
+ PORT_DIPSETTING( 0x06, "9" )
+
+ PORT_START("DS2")
+ PORT_DIPNAME( 0xff, 0xff, "Function" )
+ PORT_DIPSETTING( 0xff, "0" )
+ PORT_DIPSETTING( 0x7f, "1" )
+ PORT_DIPSETTING( 0xbf, "2" )
+ PORT_DIPSETTING( 0x3f, "3" )
+ PORT_DIPSETTING( 0xdf, "4" )
+ PORT_DIPSETTING( 0x5f, "5" )
+ PORT_DIPSETTING( 0x9f, "6" )
+ PORT_DIPSETTING( 0x1f, "7" )
+ PORT_DIPSETTING( 0xef, "8" )
+ PORT_DIPSETTING( 0x6f, "9" )
+ PORT_DIPSETTING( 0xaf, "10" )
+ PORT_DIPSETTING( 0x2f, "11" )
+ PORT_DIPSETTING( 0xcf, "12" )
+ PORT_DIPSETTING( 0x4f, "13" )
+ PORT_DIPSETTING( 0x8f, "14" )
+ PORT_DIPSETTING( 0x0f, "15" )
+ PORT_DIPSETTING( 0xf7, "16" )
+ PORT_DIPSETTING( 0x77, "17" )
+ PORT_DIPSETTING( 0xb7, "18" )
+ PORT_DIPSETTING( 0x37, "19" )
+ PORT_DIPSETTING( 0xd7, "20" )
+ PORT_DIPSETTING( 0x57, "21" )
+ PORT_DIPSETTING( 0x97, "22" )
+ PORT_DIPSETTING( 0x17, "23" )
+ PORT_DIPSETTING( 0xe7, "24" )
+ PORT_DIPSETTING( 0x67, "25" )
+ PORT_DIPSETTING( 0xa7, "26" )
+ PORT_DIPSETTING( 0x27, "27" )
+ PORT_DIPSETTING( 0xc7, "28" )
+ PORT_DIPSETTING( 0x47, "29" )
+ PORT_DIPSETTING( 0x87, "30" )
+ PORT_DIPSETTING( 0x07, "31" )
+INPUT_PORTS_END
+
+void shuffle_state::clockcnt_w(u16 data)
+{
+// if (data >= 1536)
+// m_mainirq->in_set<0>();
+ m_mainirq->in_w<0>(BIT(data, 7, 3)==7);
+ if (BIT(data, 5) && m_irq_in_progress)
+ m_4020->reset_w(1);
+ else
+ m_4020->reset_w(0);
+}
+
+INPUT_CHANGED_MEMBER( shuffle_state::main_nmi )
+{
+ // Diagnostic button sends a pulse to NMI pin
+ if (newval==CLEAR_LINE)
+ m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
+}
+
+void shuffle_state::sol0_w(u8 data)
+{
+ for (u8 i = 0; i < 8; i++)
+ m_io_outputs[i] = BIT(data, i);
+}
+
+void shuffle_state::sol1_w(u8 data)
+{
+ if (BIT(data, 0))
+ m_samples->start(4, 4); // 10 chime
+
+ if (BIT(data, 1))
+ m_samples->start(1, 1); // 100 chime
+
+ if (BIT(data, 2))
+ m_samples->start(2, 2); // 1000 chime
+
+ if (BIT(data, 3))
+ m_samples->start(3, 3); // 10k chime
+
+ if (BIT(data, 5))
+ m_samples->start(0, 6); // knocker
+
+ for (u8 i = 0; i < 8; i++)
+ m_io_outputs[8U+i] = BIT(data, i);
+}
+
+void shuffle_state::lamp0_w(u8 data)
+{
+ m_mainirq->in_clear<0>();
+ m_lamp_data = data ^ 0xff;
+}
+
+void shuffle_state::lamp1_w(u8 data)
+{
+ // find out which row is active
+ for (u8 i = 0; i < 8; i++)
+ if (BIT(data, i))
+ for (u8 j = 0; j < 8; j++)
+ m_io_outputs[16U+i*8U+j] = BIT(m_lamp_data, j);
+}
+
+u8 shuffle_state::dips_r()
+{
+ if (BIT(ioport("DIAGS")->read(), 4))
+ return m_dips[BIT(~m_strobe, 1)]->read() << (BIT(m_strobe, 0) ? 4 : 0);
+
+ return 0xff;
+}
+
+void shuffle_state::dig0_w(u8 data)
+{
+ m_strobe = data & 15;
+ m_data_ok = true;
+ m_leds[0] = !BIT(data, 4);
+ m_leds[1] = !BIT(data, 5);
+}
+
+void shuffle_state::dig1_w(u8 data)
+{
+ static const u8 patterns[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0,0,0,0,0 }; // MC14543
+ if (m_data_ok)
+ {
+ m_digits[m_strobe+16] = patterns[data&15];
+ m_digits[m_strobe] = patterns[data>>4];
+ }
+ m_data_ok = false;
+}
+
+void shuffle_state::pia2c_pa_w(u8 data)
+{
+ m_segment1 |= (data<<8);
+ m_segment1 |= 0x10000;
+ if ((m_segment1 & 0x70000) == 0x30000)
+ {
+ m_digits[m_strobe] = bitswap<16>(m_segment1, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
+ m_segment1 |= 0x40000;
+ }
+}
+
+void shuffle_state::pia2c_pb_w(u8 data)
+{
+ m_segment1 |= data;
+ m_segment1 |= 0x20000;
+ if ((m_segment1 & 0x70000) == 0x30000)
+ {
+ m_digits[m_strobe] = bitswap<16>(m_segment1, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
+ m_segment1 |= 0x40000;
+ }
+}
+
+void shuffle_state::pia34_pa_w(u8 data)
+{
+ m_segment2 |= (data<<8);
+ m_segment2 |= 0x10000;
+ if ((m_segment2 & 0x70000) == 0x30000)
+ {
+ m_digits[m_strobe+16] = bitswap<16>(m_segment2, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
+ m_segment2 |= 0x40000;
+ }
+}
+
+void shuffle_state::pia34_pb_w(u8 data)
+{
+}
+
+u8 shuffle_state::sound_r()
+{
+ return m_sound_data;
+}
+
+void shuffle_state::sound_w(u8 data)
+{
+ m_sound_data = data;
+}
+
+u8 shuffle_state::switch_r()
+{
+ u8 data = 0;
+ for (u8 i = 0; i < 8; i++)
+ if (BIT(m_row, i))
+ data |= m_io_keyboard[i]->read();
+
+ return data;
+}
+
+void shuffle_state::switch_w(u8 data)
+{
+ m_row = data;
+}
+
+WRITE_LINE_MEMBER( shuffle_state::irq_w )
+{
+ m_irq_in_progress = state;
+ m_maincpu->set_input_line(M6802_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
+}
+
+void shuffle_state::machine_start()
+{
+ genpin_class::machine_start();
+ m_io_outputs.resolve();
+ m_digits.resolve();
+ m_leds.resolve();
+
+ save_item(NAME(m_irq_in_progress));
+ save_item(NAME(m_strobe));
+ save_item(NAME(m_row));
+ save_item(NAME(m_data_ok));
+ save_item(NAME(m_lamp_data));
+ save_item(NAME(m_segment1));
+ save_item(NAME(m_segment2));
+ save_item(NAME(m_sound_data));
+}
+
+void shuffle_state::machine_reset()
+{
+ genpin_class::machine_reset();
+ for (u8 i = 0; i < m_io_outputs.size(); i++)
+ m_io_outputs[i] = 0;
+
+ m_irq_in_progress = 0;
+}
+
+void shuffle_state::s4(machine_config &config)
+{
+ // basic machine hardware
+ M6802(config, m_maincpu, 3580000); // Divided by 4 internally
+ m_maincpu->set_addrmap(AS_PROGRAM, &shuffle_state::s4_map);
+
+ // Video
+ config.set_default_layout(layout_shuffle);
+
+ // Sound
+ genpin_audio(config);
+
+ // Devices
+ PIA6821(config, m_pia22, 0);
+ m_pia22->writepa_handler().set(FUNC(shuffle_state::sol0_w));
+ m_pia22->writepb_handler().set(FUNC(shuffle_state::sol1_w));
+ m_pia22->ca2_handler().set(FUNC(shuffle_state::pia22_ca2_w));
+ m_pia22->cb2_handler().set(FUNC(shuffle_state::pia22_cb2_w));
+ m_pia22->irqa_handler().set(m_mainirq, FUNC(input_merger_device::in_w<1>));
+ m_pia22->irqb_handler().set(m_mainirq, FUNC(input_merger_device::in_w<2>));
+
+ PIA6821(config, m_pia24, 0);
+ m_pia24->writepa_handler().set(FUNC(shuffle_state::lamp0_w));
+ m_pia24->writepb_handler().set(FUNC(shuffle_state::lamp1_w));
+ m_pia24->ca2_handler().set(FUNC(shuffle_state::pia24_ca2_w));
+ m_pia24->cb2_handler().set(FUNC(shuffle_state::pia24_cb2_w));
+ m_pia24->irqa_handler().set(m_mainirq, FUNC(input_merger_device::in_w<3>));
+ m_pia24->irqb_handler().set(m_mainirq, FUNC(input_merger_device::in_w<4>));
+
+ PIA6821(config, m_pia28, 0);
+ m_pia28->readpa_handler().set(FUNC(shuffle_state::dips_r));
+ m_pia28->set_port_a_input_overrides_output_mask(0xff);
+ m_pia28->readca1_handler().set_ioport("DIAGS").bit(2); // advance button
+ m_pia28->readcb1_handler().set_ioport("DIAGS").bit(3); // auto/manual switch
+ m_pia28->writepa_handler().set(FUNC(shuffle_state::dig0_w));
+ m_pia28->writepb_handler().set(FUNC(shuffle_state::dig1_w));
+ m_pia28->ca2_handler().set(FUNC(shuffle_state::pia28_ca2_w));
+ m_pia28->cb2_handler().set(FUNC(shuffle_state::pia28_cb2_w));
+ m_pia28->irqa_handler().set(m_mainirq, FUNC(input_merger_device::in_w<5>));
+ m_pia28->irqb_handler().set(m_mainirq, FUNC(input_merger_device::in_w<6>));
+
+ PIA6821(config, m_pia30, 0);
+ m_pia30->readpa_handler().set(FUNC(shuffle_state::switch_r));
+ m_pia30->set_port_a_input_overrides_output_mask(0xff);
+ m_pia30->writepb_handler().set(FUNC(shuffle_state::switch_w));
+ m_pia30->ca2_handler().set(FUNC(shuffle_state::pia30_ca2_w));
+ m_pia30->cb2_handler().set(FUNC(shuffle_state::pia30_cb2_w));
+ m_pia30->irqa_handler().set(m_mainirq, FUNC(input_merger_device::in_w<7>));
+ m_pia30->irqb_handler().set(m_mainirq, FUNC(input_merger_device::in_w<8>));
+
+ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
+
+ INPUT_MERGER_ANY_HIGH(config, m_mainirq).output_handler().set(FUNC(shuffle_state::irq_w));
+
+ RIPPLE_COUNTER(config, m_4020);
+ m_4020->set_stages(14); // Using Q5,Q8,Q9
+ m_4020->count_out_cb().set(FUNC(shuffle_state::clockcnt_w));
+
+ CLOCK(config, "rclock", 3580000/4).signal_handler().set(m_4020, FUNC(ripple_counter_device::clock_w));
+}
+
+void shuffle_state::s9(machine_config &config)
+{
+ s4(config);
+ config.device_remove("pia22");
+ m_maincpu->set_addrmap(AS_PROGRAM, &shuffle_state::s9_map);
+
+ PIA6821(config, m_pia21, 0);
+ m_pia21->readpa_handler().set(FUNC(shuffle_state::sound_r));
+ m_pia21->set_port_a_input_overrides_output_mask(0xff);
+ m_pia21->writepa_handler().set(FUNC(shuffle_state::sound_w));
+ m_pia21->writepb_handler().set(FUNC(shuffle_state::sol2_w));
+ //m_pia21->ca2_handler().set(FUNC(shuffle_state::pia21_ca2_w));
+ //m_pia21->cb2_handler().set(FUNC(shuffle_state::pia21_cb2_w));
+ m_pia21->irqa_handler().set(m_mainirq, FUNC(input_merger_device::in_w<9>));
+ m_pia21->irqb_handler().set(m_mainirq, FUNC(input_merger_device::in_w<10>));
+}
+
+void shuffle_state::s11(machine_config &config)
+{
+ s9(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &shuffle_state::s11_map);
+
+ config.set_default_layout(layout_shuffle11);
+
+ PIA6821(config, m_pia2c, 0);
+ m_pia2c->writepa_handler().set(FUNC(shuffle_state::pia2c_pa_w));
+ m_pia2c->writepb_handler().set(FUNC(shuffle_state::pia2c_pb_w));
+ m_pia2c->irqa_handler().set(m_mainirq, FUNC(input_merger_device::in_w<11>));
+ m_pia2c->irqb_handler().set(m_mainirq, FUNC(input_merger_device::in_w<12>));
+
+ PIA6821(config, m_pia34, 0);
+ m_pia34->writepa_handler().set(FUNC(shuffle_state::pia34_pa_w));
+ m_pia34->writepb_handler().set(FUNC(shuffle_state::pia34_pb_w));
+ //m_pia34->cb2_handler().set(FUNC(shuffle_state::pia34_cb2_w));
+ m_pia34->irqa_handler().set(m_mainirq, FUNC(input_merger_device::in_w<13>));
+ m_pia34->irqb_handler().set(m_mainirq, FUNC(input_merger_device::in_w<14>));
+}
+
+
+/*----------------------------
+/ Topaz
+/----------------------------*/
+ROM_START(topaz_l1)
+ ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("gamerom.716", 0x2000, 0x0800, CRC(cb287b10) SHA1(7fb6b6a26237cf85d5e02cf35271231267f90fc1))
+ ROM_LOAD("b_ic20.716", 0x3000, 0x0800, CRC(c6f8e3b1) SHA1(cb78d42e1265162132a1ab2320148b6857106b0e))
+ ROM_LOAD("b_ic17.716", 0x3800, 0x0800, CRC(cfc2518a) SHA1(5e99e40dcb7e178137db8d7d7d6da82ba87130fa))
+
+ ROM_REGION(0x0800, "audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("sound1.716", 0x0000, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
+ROM_END
+
+/*----------------------------
+/ Pompeii
+/----------------------------*/
+ROM_START(pomp_l1)
+ ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("gamerom.716", 0x2000, 0x0800, CRC(0f069ac2) SHA1(d651d49cdb50cf444e420241a1f9ed48c878feee))
+ ROM_LOAD("b_ic20.716", 0x3000, 0x0800, CRC(c6f8e3b1) SHA1(cb78d42e1265162132a1ab2320148b6857106b0e))
+ ROM_LOAD("b_ic17.716", 0x3800, 0x0800, CRC(cfc2518a) SHA1(5e99e40dcb7e178137db8d7d7d6da82ba87130fa))
+
+ ROM_REGION(0x0800, "audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("soundx.716", 0x0000, 0x0800, CRC(539d64fb) SHA1(ff0d09c8d7c65e1072691b5b9e4fcaa3f38d67e8))
+ROM_END
+
+/*----------------------------
+/ Aristocrat same roms as Pompeii
+/----------------------------*/
+ROM_START(arist_l1)
+ ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("gamerom.716", 0x2000, 0x0800, CRC(0f069ac2) SHA1(d651d49cdb50cf444e420241a1f9ed48c878feee))
+ ROM_LOAD("b_ic20.716", 0x3000, 0x0800, CRC(c6f8e3b1) SHA1(cb78d42e1265162132a1ab2320148b6857106b0e))
+ ROM_LOAD("b_ic17.716", 0x3800, 0x0800, CRC(cfc2518a) SHA1(5e99e40dcb7e178137db8d7d7d6da82ba87130fa))
+
+ ROM_REGION(0x0800, "audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("soundx.716", 0x0000, 0x0800, CRC(539d64fb) SHA1(ff0d09c8d7c65e1072691b5b9e4fcaa3f38d67e8))
+ROM_END
+
+/*----------------------------
+/ Taurus
+/----------------------------*/
+ROM_START(taurs_l1)
+ ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("gamerom.716", 0x2000, 0x0800, CRC(3246e285) SHA1(4f76784ecb5063a49c24795ae61db043a51e2c89))
+ ROM_LOAD("b_ic20.716", 0x3000, 0x0800, CRC(c6f8e3b1) SHA1(cb78d42e1265162132a1ab2320148b6857106b0e))
+ ROM_LOAD("b_ic17.716", 0x3800, 0x0800, CRC(cfc2518a) SHA1(5e99e40dcb7e178137db8d7d7d6da82ba87130fa))
+
+ ROM_REGION(0x0800, "audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("soundx.716", 0x0000, 0x0800, CRC(539d64fb) SHA1(ff0d09c8d7c65e1072691b5b9e4fcaa3f38d67e8))
+ROM_END
+
+/*----------------------------
+/ King Tut (#912)
+/----------------------------*/
+ROM_START(kingt_l1)
+ ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("gamerom.716", 0x2000, 0x0800, CRC(54d3280a) SHA1(ca74636e35d2c3e0b3133f89b1ff1233d5d72a5c))
+ ROM_LOAD("b_ic20.716", 0x3000, 0x0800, CRC(c6f8e3b1) SHA1(cb78d42e1265162132a1ab2320148b6857106b0e))
+ ROM_LOAD("b_ic17.716", 0x3800, 0x0800, CRC(cfc2518a) SHA1(5e99e40dcb7e178137db8d7d7d6da82ba87130fa))
+
+ ROM_REGION(0x0800, "audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("soundx.716", 0x0000, 0x0800, CRC(539d64fb) SHA1(ff0d09c8d7c65e1072691b5b9e4fcaa3f38d67e8))
+ROM_END
+
+/*----------------------------
+/ Omni
+/----------------------------*/
+ROM_START(omni_l1)
+ ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("omni-1a.u21", 0x2000, 0x0800, CRC(443bd170) SHA1(cc1ebd72d77ec2014cbd84534380e5ea1f12c022))
+ ROM_LOAD("b_ic20.716", 0x3000, 0x0800, CRC(c6f8e3b1) SHA1(cb78d42e1265162132a1ab2320148b6857106b0e))
+ ROM_LOAD("b_ic17.716", 0x3800, 0x0800, CRC(cfc2518a) SHA1(5e99e40dcb7e178137db8d7d7d6da82ba87130fa))
+
+ ROM_REGION(0x0800, "audiocpu", 0)
+ ROM_LOAD("sound.716", 0x0000, 0x0800, CRC(db085cbb) SHA1(9a57abbad183ba16b3dba16d16923c3bfc46a0c3))
+ROM_END
+
+/*----------------------------
+/ Big Strike
+/----------------------------*/
+ROM_START(bstrk_l1)
+ ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("gamerom.716", 0x2000, 0x0800, CRC(323dbcde) SHA1(a75cbb5de97cb9afc1d36e9b6ff593bb482fcf8b))
+ ROM_LOAD("b_ic20.716", 0x3000, 0x0800, CRC(c6f8e3b1) SHA1(cb78d42e1265162132a1ab2320148b6857106b0e))
+ ROM_LOAD("b_ic17.716", 0x3800, 0x0800, CRC(cfc2518a) SHA1(5e99e40dcb7e178137db8d7d7d6da82ba87130fa))
+
+ ROM_REGION(0x0800, "audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("sound.716", 0x0000, 0x0800, NO_DUMP)
+ROM_END
+
+/*----------------------------
+/ Triple Strike
+/----------------------------*/
+ROM_START(tstrk_l1)
+ ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("gamerom.716", 0x2000, 0x0800, CRC(b034c059) SHA1(76b3926b87b3c137fcaf33021a586827e3c030af))
+ ROM_LOAD("ic20.716", 0x3000, 0x0800, CRC(f163fc88) SHA1(988b60626f3d4dc8f4a1dbd0c99282418bc53aae))
+ ROM_LOAD("b_ic17.716", 0x3800, 0x0800, CRC(cfc2518a) SHA1(5e99e40dcb7e178137db8d7d7d6da82ba87130fa))
+
+ ROM_REGION(0x0800, "audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("sound.716", 0x0000, 0x0800, NO_DUMP)
+ROM_END
+
+/*--------------------------------
+/ Strike Zone (#916)
+/---------------------------------*/
+ROM_START(szone_l5)
+ ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("sz_u19r5.732", 0x1000, 0x1000, CRC(c79c46cb) SHA1(422ba74ae67bebbe02f85a9a8df0e3072f3cebc0))
+ ROM_LOAD("sz_u20r5.764", 0x2000, 0x2000, CRC(9b5b3be2) SHA1(fce051a60b6eecd9bc07273892b14046b251b372))
+
+ ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("szs_u49.128", 0x4000, 0x4000, CRC(144c3c07) SHA1(57be6f336f200079cd698b13f8fa4755cf694274))
+ROM_END
+
+ROM_START(szone_l2)
+ ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("sz_u19r2.732", 0x1000, 0x1000, CRC(c0e4238b) SHA1(eae60ccd5b5001671cd6d2685fd588494d052d1e))
+ ROM_LOAD("sz_u20r2.764", 0x2000, 0x2000, CRC(91c08137) SHA1(86da08f346f85810fceceaa7b9824ab76a68da54))
+
+ ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("szs_u49.128", 0x4000, 0x4000, CRC(144c3c07) SHA1(57be6f336f200079cd698b13f8fa4755cf694274))
+ROM_END
+
+/*------------------------------
+/ Alley Cats (#918)
+/-------------------------------*/
+ROM_START(alcat_l7)
+ ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("u26_rev7.rom", 0x1000, 0x1000, CRC(4d274dd3) SHA1(80d72bd0f85ce2cac04f6d9f59dc1fcccc86d402))
+ ROM_LOAD("u27_rev7.rom", 0x2000, 0x2000, CRC(9c7faf8a) SHA1(dc1a561948b9a303f7924d7bebcd972db766827b))
+
+ ROM_REGION(0x20000, "audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("acs_u21.bin", 0x18000, 0x8000, CRC(c54cd329) SHA1(4b86b10e60a30c4de5d97129074f5657447be676))
+ ROM_LOAD("acs_u22.bin", 0x10000, 0x8000, CRC(56c1011a) SHA1(c817a3410c643617f3643897b8f529ae78546b0d))
+ROM_END
+
+/*--------------------
+/ Tic-Tac-Strike (#919)
+/--------------------*/
+ROM_START(tts_l2)
+ ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("u27_l2.128", 0x0000, 0x4000, CRC(edbcab92) SHA1(0f6b2dc01874984f9a17ee873f2fa0b6c9bba5be))
+
+ ROM_REGION(0x20000, "audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("tts_u21.256", 0x18000, 0x8000, NO_DUMP)
+ ROM_LOAD("tts_u22.256", 0x10000, 0x8000, NO_DUMP)
+ROM_END
+
+ROM_START(tts_l1)
+ ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("tts_u27.128", 0x0000, 0x4000, CRC(f540c53c) SHA1(1c7a318278ad1afdcbe6aaf81f9b774882b069d6))
+
+ ROM_REGION(0x20000, "audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("tts_u21.256", 0x18000, 0x8000, NO_DUMP)
+ ROM_LOAD("tts_u22.256", 0x10000, 0x8000, NO_DUMP)
+ROM_END
+
+/*-------------------------------
+/ Gold Mine (#920)
+/--------------------------------*/
+ROM_START(gmine_l2)
+ ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("u27.128", 0x0000, 0x4000, CRC(99c6e049) SHA1(356faec0598a54892050a28857e9eb5cdbf35833))
+
+ ROM_REGION(0x20000, "audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("u21.256", 0x18000, 0x8000, CRC(3b801570) SHA1(50b50ff826dcb031a30940fa3099bd3a8d773831))
+ ROM_LOAD("u22.256", 0x10000, 0x8000, CRC(08352101) SHA1(a7437847a71cf037a80686292f9616b1e08922df))
+ROM_END
+
+/*-------------------------
+/ Top Dawg (#921)
+/--------------------------*/
+ROM_START(tdawg_l1)
+ ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("tdu27r1.128", 0x0000, 0x4000, CRC(0b4bb586) SHA1(a927ebf7167609cc84b38c22aa35d0c4d259dd8b))
+
+ ROM_REGION(0x20000, "audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("tdsu21r1.256", 0x18000, 0x8000, CRC(6a323227) SHA1(7c7263754e5672c654a2ee9582f0b278e637a909))
+ ROM_LOAD("tdsu22r1.256", 0x10000, 0x8000, CRC(58407eb4) SHA1(6bd9b304c88d9470eae5afb6621187f4a8313573))
+ROM_END
+
+/*----------------------------
+/ Shuffle Inn (#922)
+/-----------------------------*/
+ROM_START(shfin_l1)
+ ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("u27rom-1.rv1", 0x0000, 0x4000, CRC(40cfb74a) SHA1(8cee4212ea8bb6b360060391df3208e1e129d7e5))
+
+ ROM_REGION(0x20000, "audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("u21snd-2.rv1", 0x18000, 0x8000, CRC(80ddce05) SHA1(9498260e5ccd2fe0eb03ff321dd34eb945b0213a))
+ ROM_LOAD("u22snd-2.rv1", 0x10000, 0x8000, CRC(6894abaf) SHA1(2d661765fbfce33a73a20778c41233c0bd9933e9))
+ROM_END
+
+} // Anonymous namespace
+
+GAME( 1978, topaz_l1, 0, s4, shuffle, shuffle_state, empty_init, ROT0, "Williams", "Topaz (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1978, pomp_l1, 0, s4, shuffle, shuffle_state, empty_init, ROT0, "Williams/United", "Pompeii (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1978, arist_l1, 0, s4, shuffle, shuffle_state, empty_init, ROT0, "Williams/United", "Aristocrat (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1979, taurs_l1, 0, s4, shuffle, shuffle_state, empty_init, ROT0, "Williams", "Taurus (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1979, kingt_l1, 0, s4, shuffle, shuffle_state, empty_init, ROT0, "Williams/United", "King Tut (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1980, omni_l1, 0, s4, shuffle, shuffle_state, empty_init, ROT0, "Williams/United", "Omni (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1983, bstrk_l1, 0, s4, shuffle, shuffle_state, empty_init, ROT0, "Williams/United", "Big Strike (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1983, tstrk_l1, 0, s4, shuffle, shuffle_state, empty_init, ROT0, "Williams/United", "Triple Strike (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1984, szone_l5, 0, s9, shuffle, shuffle_state, empty_init, ROT0, "Williams/United", "Strike Zone (Shuffle) (L-5)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1984, szone_l2, szone_l5, s9, shuffle, shuffle_state, empty_init, ROT0, "Williams/United", "Strike Zone (Shuffle) (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1985, alcat_l7, 0, s11, shuffle, shuffle_state, empty_init, ROT0, "Williams", "Alley Cats (Shuffle) (L-7)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1986, tts_l2, 0, s11, shuffle, shuffle_state, empty_init, ROT0, "Williams", "Tic-Tac-Strike (Shuffle) (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1986, tts_l1, tts_l2, s11, shuffle, shuffle_state, empty_init, ROT0, "Williams", "Tic-Tac-Strike (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1987, gmine_l2, 0, s11, shuffle, shuffle_state, empty_init, ROT0, "Williams", "Gold Mine (Shuffle) (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1987, tdawg_l1, 0, s11, shuffle, shuffle_state, empty_init, ROT0, "Williams", "Top Dawg (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1987, shfin_l1, 0, s11, shuffle, shuffle_state, empty_init, ROT0, "Williams", "Shuffle Inn (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
diff --git a/src/mame/layout/shuffle.lay b/src/mame/layout/shuffle.lay
new file mode 100644
index 00000000000..7c63416cc1f
--- /dev/null
+++ b/src/mame/layout/shuffle.lay
@@ -0,0 +1,107 @@
+<?xml version="1.0"?>
+<!--
+license:CC0
+copyright-holders:Robbbert
+-->
+
+<mamelayout version="2">
+
+ <element name="digit" defstate="0">
+ <led7seg>
+ <color red="1.0" green="0.25" blue="0.0" />
+ </led7seg>
+ </element>
+ <element name="red_led">
+ <disk state="0">
+ <color red="1.0" green="0.0" blue="0.0" />
+ </disk>
+ </element>
+ <element name="P0"><text string="Frame / Match"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P1"><text string="Credits"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P3"><text string="Player 1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P4"><text string="Player 2"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P5"><text string="Player 3"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P6"><text string="Player 4"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P7"><text string="Player 5"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P8"><text string="Player 6"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+
+ <group name="score">
+ <repeat count="4">
+ <param name="n" start="~s~" increment="1" />
+ <param name="x" start="0" increment="44" />
+ <element name="digit~n~" ref="digit">
+ <bounds x="~x~" y="0" width="34" height="39" />
+ </element>
+ </repeat>
+ </group>
+
+ <view name="Default Layout">
+ <bounds left="0" top="20" right="374" bottom="334" />
+
+ <!-- LEDs -->
+
+ <!-- Player 1 Score -->
+ <param name="s" value="0" />
+ <group ref="score">
+ <bounds left="10" top="45" right="164" bottom="84" />
+ </group>
+
+ <!-- Player 2 Score -->
+ <param name="s" value="4" />
+ <group ref="score">
+ <bounds left="210" top="45" right="364" bottom="84" />
+ </group>
+
+ <!-- Player 3 Score -->
+ <param name="s" value="8" />
+ <group ref="score">
+ <bounds left="10" top="125" right="164" bottom="164" />
+ </group>
+
+ <!-- Player 4 Score -->
+ <param name="s" value="16" />
+ <group ref="score">
+ <bounds left="210" top="125" right="364" bottom="164" />
+ </group>
+
+ <!-- Player 5 Score -->
+ <param name="s" value="20" />
+ <group ref="score">
+ <bounds left="10" top="205" right="164" bottom="244" />
+ </group>
+
+ <!-- Player 6 Score -->
+ <param name="s" value="24" />
+ <group ref="score">
+ <bounds left="210" top="205" right="364" bottom="244" />
+ </group>
+
+ <!-- Credits and Balls -->
+ <element name="digit13" ref="digit">
+ <bounds left="10" top="285" right="44" bottom="324" />
+ </element>
+ <element name="digit12" ref="digit">
+ <bounds left="54" top="285" right="88" bottom="324" />
+ </element>
+ <element name="digit14" ref="digit">
+ <bounds left="186" top="285" right="220" bottom="324" />
+ </element>
+ <element name="digit15" ref="digit">
+ <bounds left="230" top="285" right="264" bottom="324" />
+ </element>
+ <element ref="P0"><bounds left="200" right="258" top="270" bottom="282" /></element>
+ <element ref="P1"><bounds left="30" right="88" top="270" bottom="282" /></element>
+ <element ref="P3"><bounds left="60" right="140" top="30" bottom="42" /></element>
+ <element ref="P4"><bounds left="260" right="340" top="30" bottom="42" /></element>
+ <element ref="P5"><bounds left="60" right="140" top="110" bottom="122" /></element>
+ <element ref="P6"><bounds left="260" right="340" top="110" bottom="122" /></element>
+ <element ref="P7"><bounds left="60" right="140" top="190" bottom="202" /></element>
+ <element ref="P8"><bounds left="260" right="340" top="190" bottom="202" /></element>
+ <element name="led0" ref="red_led">
+ <bounds left="310" right="325" top="300" bottom="315" />
+ </element>
+ <element name="led1" ref="red_led">
+ <bounds left="344" right="359" top="300" bottom="315" />
+ </element>
+ </view>
+</mamelayout>
diff --git a/src/mame/layout/shuffle11.lay b/src/mame/layout/shuffle11.lay
new file mode 100644
index 00000000000..7c63416cc1f
--- /dev/null
+++ b/src/mame/layout/shuffle11.lay
@@ -0,0 +1,107 @@
+<?xml version="1.0"?>
+<!--
+license:CC0
+copyright-holders:Robbbert
+-->
+
+<mamelayout version="2">
+
+ <element name="digit" defstate="0">
+ <led7seg>
+ <color red="1.0" green="0.25" blue="0.0" />
+ </led7seg>
+ </element>
+ <element name="red_led">
+ <disk state="0">
+ <color red="1.0" green="0.0" blue="0.0" />
+ </disk>
+ </element>
+ <element name="P0"><text string="Frame / Match"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P1"><text string="Credits"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P3"><text string="Player 1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P4"><text string="Player 2"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P5"><text string="Player 3"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P6"><text string="Player 4"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P7"><text string="Player 5"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P8"><text string="Player 6"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+
+ <group name="score">
+ <repeat count="4">
+ <param name="n" start="~s~" increment="1" />
+ <param name="x" start="0" increment="44" />
+ <element name="digit~n~" ref="digit">
+ <bounds x="~x~" y="0" width="34" height="39" />
+ </element>
+ </repeat>
+ </group>
+
+ <view name="Default Layout">
+ <bounds left="0" top="20" right="374" bottom="334" />
+
+ <!-- LEDs -->
+
+ <!-- Player 1 Score -->
+ <param name="s" value="0" />
+ <group ref="score">
+ <bounds left="10" top="45" right="164" bottom="84" />
+ </group>
+
+ <!-- Player 2 Score -->
+ <param name="s" value="4" />
+ <group ref="score">
+ <bounds left="210" top="45" right="364" bottom="84" />
+ </group>
+
+ <!-- Player 3 Score -->
+ <param name="s" value="8" />
+ <group ref="score">
+ <bounds left="10" top="125" right="164" bottom="164" />
+ </group>
+
+ <!-- Player 4 Score -->
+ <param name="s" value="16" />
+ <group ref="score">
+ <bounds left="210" top="125" right="364" bottom="164" />
+ </group>
+
+ <!-- Player 5 Score -->
+ <param name="s" value="20" />
+ <group ref="score">
+ <bounds left="10" top="205" right="164" bottom="244" />
+ </group>
+
+ <!-- Player 6 Score -->
+ <param name="s" value="24" />
+ <group ref="score">
+ <bounds left="210" top="205" right="364" bottom="244" />
+ </group>
+
+ <!-- Credits and Balls -->
+ <element name="digit13" ref="digit">
+ <bounds left="10" top="285" right="44" bottom="324" />
+ </element>
+ <element name="digit12" ref="digit">
+ <bounds left="54" top="285" right="88" bottom="324" />
+ </element>
+ <element name="digit14" ref="digit">
+ <bounds left="186" top="285" right="220" bottom="324" />
+ </element>
+ <element name="digit15" ref="digit">
+ <bounds left="230" top="285" right="264" bottom="324" />
+ </element>
+ <element ref="P0"><bounds left="200" right="258" top="270" bottom="282" /></element>
+ <element ref="P1"><bounds left="30" right="88" top="270" bottom="282" /></element>
+ <element ref="P3"><bounds left="60" right="140" top="30" bottom="42" /></element>
+ <element ref="P4"><bounds left="260" right="340" top="30" bottom="42" /></element>
+ <element ref="P5"><bounds left="60" right="140" top="110" bottom="122" /></element>
+ <element ref="P6"><bounds left="260" right="340" top="110" bottom="122" /></element>
+ <element ref="P7"><bounds left="60" right="140" top="190" bottom="202" /></element>
+ <element ref="P8"><bounds left="260" right="340" top="190" bottom="202" /></element>
+ <element name="led0" ref="red_led">
+ <bounds left="310" right="325" top="300" bottom="315" />
+ </element>
+ <element name="led1" ref="red_led">
+ <bounds left="344" right="359" top="300" bottom="315" />
+ </element>
+ </view>
+</mamelayout>