s9.cpp: Added outputs, savestates, notes.

Moved alcat_l7 to s11.
Made wldtexas a clone of fpwr2_l2.
This commit is contained in:
Robbbert 2021-12-22 17:17:00 +11:00
parent bd00adb24f
commit a1984ce710
8 changed files with 351 additions and 224 deletions

View File

@ -531,7 +531,7 @@ void s11_state::s11_only(machine_config &config)
/ Grand Lizard 04/86 (#523)
/-----------------------------*/
ROM_START(grand_l4)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("lzrd_u26.l3", 0x4000, 0x2000, CRC(5fe50db6) SHA1(7e2adfefce5c33ad605606574dbdfb2642aa0e85))
ROM_RELOAD( 0x6000, 0x2000)
ROM_LOAD("lzrd_u27.l4", 0x8000, 0x8000, CRC(6462ca55) SHA1(0ebfa998d3cefc213ada9ed815d44977120e5d6d))
@ -549,7 +549,7 @@ ROM_START(grand_l4)
ROM_END
ROM_START(grand_l3)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("lzrd_u26.l3", 0x4000, 0x2000, CRC(5fe50db6) SHA1(7e2adfefce5c33ad605606574dbdfb2642aa0e85))
ROM_RELOAD( 0x6000, 0x2000)
ROM_LOAD("lzrd_u27.l3", 0x8000, 0x8000, CRC(9061dfdc) SHA1(06e0add721afa0a89ad4961cddbc5409f95362df))
@ -570,7 +570,7 @@ ROM_END
/ High Speed 01/86 (#541)
/--------------------------*/
ROM_START(hs_l4)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("hs_u26.l4", 0x4000, 0x2000, CRC(38b73830) SHA1(df89670f3df2b657dcf1f8ee08e506e54e016028))
ROM_RELOAD( 0x6000, 0x2000)
ROM_LOAD("hs_u27.l4", 0x8000, 0x8000, CRC(24c6f7f0) SHA1(bb0058650ec0908f88b6a202df79e971b46f8594))
@ -584,7 +584,7 @@ ROM_START(hs_l4)
ROM_END
ROM_START(hs_l3)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("u26-l3.rom", 0x4000, 0x2000, CRC(fd587959) SHA1(20fe6d7bd617b1fa886362ce520393a25be9a632))
ROM_RELOAD( 0x6000, 0x2000)
ROM_LOAD("hs_u27.l4", 0x8000, 0x8000, CRC(24c6f7f0) SHA1(bb0058650ec0908f88b6a202df79e971b46f8594))
@ -602,7 +602,7 @@ ROM_END
/--------------------------*/
ROM_START(rdkng_l1)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("road_u26.l1", 0x4000, 0x4000, CRC(19abe96b) SHA1(d6c3b6dab328f23cc4506e4f56cd0beeb06fb3cb))
ROM_LOAD("road_u27.l1", 0x8000, 0x8000, CRC(3dcad794) SHA1(0cf06f8e16d738f0bc0111e2e12351a26e2f02c6))
@ -615,7 +615,7 @@ ROM_START(rdkng_l1)
ROM_END
ROM_START(rdkng_l2)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("road_u26.l1", 0x4000, 0x4000, CRC(19abe96b) SHA1(d6c3b6dab328f23cc4506e4f56cd0beeb06fb3cb))
ROM_LOAD("road_u27.l2", 0x8000, 0x8000, CRC(aff45e2b) SHA1(c52aca20639f519a940951ef04c2bd179a596b30))
@ -628,7 +628,7 @@ ROM_START(rdkng_l2)
ROM_END
ROM_START(rdkng_l3)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("road_u26.l3", 0x4000, 0x4000, CRC(9bade45d) SHA1(c1791724761cdd1d863e12b02655c5fed8936162))
ROM_LOAD("road_u27.l3", 0x8000, 0x8000, CRC(97b599dc) SHA1(18524d22a75b0569bb480d847cef8047ee51f91e))
@ -641,7 +641,7 @@ ROM_START(rdkng_l3)
ROM_END
ROM_START(rdkng_l4)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("road_u26.l4", 0x4000, 0x4000, CRC(4ea27d67) SHA1(cf46e8c5e417999150403d6d40adf8c36b1c0347))
ROM_LOAD("road_u27.l4", 0x8000, 0x8000, CRC(5b88e755) SHA1(6438505bb335f670e0892126764819a48eec9b88))
@ -655,11 +655,24 @@ 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", 0)
ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("u27_l2.128", 0x8000, 0x4000, CRC(edbcab92) SHA1(0f6b2dc01874984f9a17ee873f2fa0b6c9bba5be))
ROM_RELOAD( 0xc000, 0x4000)
@ -669,7 +682,7 @@ ROM_START(tts_l2)
ROM_END
ROM_START(tts_l1)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("tts_u27.128", 0x8000, 0x4000, CRC(f540c53c) SHA1(1c7a318278ad1afdcbe6aaf81f9b774882b069d6))
ROM_RELOAD( 0xc000, 0x4000)
@ -682,7 +695,7 @@ ROM_END
/ Gold Mine (Shuffle) (#920) s11b
/--------------------------------*/
ROM_START(gmine_l2)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("u27.128", 0x8000, 0x4000, CRC(99c6e049) SHA1(356faec0598a54892050a28857e9eb5cdbf35833))
ROM_RELOAD( 0xc000, 0x4000)
@ -695,7 +708,7 @@ ROM_END
/ Top Dawg (Shuffle) (#921)
/--------------------------*/
ROM_START(tdawg_l1)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("tdu27r1.128", 0x8000, 0x4000, CRC(0b4bb586) SHA1(a927ebf7167609cc84b38c22aa35d0c4d259dd8b))
ROM_RELOAD( 0xc000, 0x4000)
@ -708,7 +721,7 @@ ROM_END
/ Shuffle Inn (Shuffle) (#922)
/-----------------------------*/
ROM_START(shfin_l1)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("u27rom-1.rv1", 0x8000, 0x4000, CRC(40cfb74a) SHA1(8cee4212ea8bb6b360060391df3208e1e129d7e5))
ROM_RELOAD( 0xc000, 0x4000)
@ -717,17 +730,20 @@ ROM_START(shfin_l1)
ROM_LOAD("u22snd-2.rv1", 0x10000, 0x8000, CRC(6894abaf) SHA1(2d661765fbfce33a73a20778c41233c0bd9933e9))
ROM_END
GAME( 1986, grand_l4, 0, s11_bgs, s11, s11_state, init_s11, ROT0, "Williams", "Grand Lizard (L-4)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING)
GAME( 1986, grand_l3, grand_l4, s11_bgs, s11, s11_state, init_s11, ROT0, "Williams", "Grand Lizard (L-3)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING)
GAME( 1986, hs_l4, 0, s11_bgs, s11, s11_state, init_s11, ROT0, "Williams", "High Speed (L-4)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING)
GAME( 1986, hs_l3, hs_l4, s11_bgs, s11, s11_state, init_s11, ROT0, "Williams", "High Speed (L-3)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING)
GAME( 1986, rdkng_l4, 0, s11_bgm, s11, s11_state, init_s11, ROT0, "Williams", "Road Kings (L-4)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING)
GAME( 1986, rdkng_l1, rdkng_l4, s11_bgm, s11, s11_state, init_s11, ROT0, "Williams", "Road Kings (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING)
GAME( 1986, rdkng_l2, rdkng_l4, s11_bgm, s11, s11_state, init_s11, ROT0, "Williams", "Road Kings (L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING)
GAME( 1986, rdkng_l3, rdkng_l4, s11_bgm, s11, s11_state, init_s11, ROT0, "Williams", "Road Kings (L-3)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING)
// Pinball
GAME( 1986, grand_l4, 0, s11_bgs, s11, s11_state, init_s11, ROT0, "Williams", "Grand Lizard (L-4)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1986, grand_l3, grand_l4, s11_bgs, s11, s11_state, init_s11, ROT0, "Williams", "Grand Lizard (L-3)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1986, hs_l4, 0, s11_bgs, s11, s11_state, init_s11, ROT0, "Williams", "High Speed (L-4)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1986, hs_l3, hs_l4, s11_bgs, s11, s11_state, init_s11, ROT0, "Williams", "High Speed (L-3)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1986, rdkng_l4, 0, s11_bgm, s11, s11_state, init_s11, ROT0, "Williams", "Road Kings (L-4)", MACHINE_IS_SKELETON_MECHANICAL )
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 )
GAME( 1986, tts_l2, 0, s11_only, s11, s11_state, init_s11, ROT0, "Williams", "Tic-Tac-Strike (Shuffle) (L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME( 1986, tts_l1, tts_l2, s11_only, s11, s11_state, init_s11, ROT0, "Williams", "Tic-Tac-Strike (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME( 1987, gmine_l2, 0, s11_only, s11, s11_state, init_s11, ROT0, "Williams", "Gold Mine (Shuffle) (L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING)
GAME( 1987, tdawg_l1, 0, s11_only, s11, s11_state, init_s11, ROT0, "Williams", "Top Dawg (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING)
GAME( 1987, shfin_l1, 0, s11_only, s11, s11_state, init_s11, ROT0, "Williams", "Shuffle Inn (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING)
// 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 )

View File

@ -11,6 +11,15 @@ Schematic and PinMAME used as references.
Written during October 2012 [Robbbert]
Games:
- Hot Tip (#477)
- Lucky Seven (#480)
- World Cup Soccer (#481)
- Contact (#482)
- Disco Fevel (#483)
- Phoenix (#485)
- Pokerino (#488)
When first used, it appears frozen (the score should alternate). Press F3 to fix.
For those games with a sound card, pressing NUM-8 will select a different set of

View File

@ -10,7 +10,24 @@ Differences to system 3:
- Use 6802 instead of 6800+6875.
- Soundcard does more sounds, and uses 6808.
Phoenix and Pokerino are listed as System 4 systems, but use System 3 ROMs.
Games:
- Flash (#486)
- 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.
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
@ -18,12 +35,10 @@ The "Shuffle" games consist of a flat board with an air-driven puck and 10
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.
When first used, game appears frozen (the score should alternate). Press F3 to fix.
Pressing NUM-8 will select a different set of sounds.
Status:
- flash, trizn, trmwp, stlwr are playable.
- Pinballs are playable.
ToDo:
- Shuffle games: need a layout, and no manuals found. Press 6 to insert coin,
@ -803,7 +818,7 @@ ROM_END
} // Anonymous namespace
// Pinball
GAME( 1979, flash_l2, 0, s4a, flash, s4a_state, empty_init, ROT0, "Williams", "Flash (Williams, L-2)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1979, flash_l1, flash_l2, s4a, flash, s4a_state, empty_init, ROT0, "Williams", "Flash (Williams, L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1979, flash_t1, flash_l2, s4a, flash, s4a_state, empty_init, ROT0, "Williams", "Flash (Williams, T-1) Ted Estes", MACHINE_IS_SKELETON_MECHANICAL )
@ -814,6 +829,7 @@ GAME( 1979, tmwrp_l2, tmwrp_l3, s4a, tmwrp, s4a_state, empty_init, ROT0, "Willia
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 )

View File

@ -10,6 +10,15 @@ Differences to system 4:
- Some machines have multiball (scrpn, frpwr).
- New soundcard.
Games:
- Laserball (#493)
- Scorpion (#494)
- Blackout (#495)
- Gorgar (#496)
- Firepower (#497)
The first time run, the display will show the model number. Press F3 to clear this.
Diagnostic actions:
- You must be in game over mode. All buttons are in the number-pad. When you are
finished, you must reboot.
@ -26,12 +35,16 @@ Diagnostic actions:
- Other: Set Dips to SW7 or SW8. Press NUM-0. Press NUM-ENTER.
Here are the key codes to enable play:
Game NUM Start game End ball
-----------------------------------------------------------------------------------------------
Scorpion 494 AX hit 1 AX
Firepower 497 ASD hit 1 Hit X, hold D, hit X, hold S, hit X, hit A
Others --- 1 X
Status:
- All games are playable.
- scrpn: Multiball - hold AX hit 1 to start; hold AX to end ball
- frpwr: Multiball - hold ASD hit 1 to start; to end ball is quite tricky:
Hit X (wait for sound), hold D, hit X hold S, hit X hold A.
ToDo:
- Nothing

View File

@ -8,6 +8,12 @@ Williams System 6a
Differences to system 6:
- Player score is 7 digits instead of 6.
Games:
- Algar (#499)
- Alien Poker (#501)
The first time run, the display will show the model number. Press F3 to clear this.
Diagnostic actions:
- You must be in game over mode. All buttons are in the number-pad. When you are
finished, you must reboot.

View File

@ -32,25 +32,27 @@ and start playing.
Most games are multiball - here are the key codes:
Game Start game End ball
Game NUM Start game End ball
-----------------------------------------------------------------------------------------------
Black Knight ASD hit 1 Hit X, hold A, hit X, hold S, hit X, hit D
Cosmic Gunfight AS hit 1 AS
Jungle Lord AS hit 1 Hit X, hold A, hit X, hit S
Pharaoh AS hit 1 AS
Solar Fire ASD hit 1 ASD
Thunderball 1 unknown
HyperBall 1 unknown
Barracora ASD hit 1 ASD
Varkon AX hit 1 AX
Time Fantasy 1 X
Warlok 1 X
Defender hold up,left,right,hit 1 Hit X, hold Left, hit X, hold Up, Hit X, hit Right.
Joust ABCD hit 1 unknown
Laser Cue 1 X
Firepower II AS hit 1 AS
Wild Texas AS hit 1 AS
Starlight AS hit 1 AS
Black Knight 500 ASD hit 1 Hit X, hold A, hit X, hold S, hit X, hit D
Cosmic Gunfight 502 AS hit 1 AS
Jungle Lord 503 AS hit 1 Hit X, hold A, hit X, hit S
Pharaoh 504 AS hit 1 AS
Solar Fire 507 ASD hit 1 ASD
Thunderball 508 1 unknown
HyperBall 509 1 unknown
Barracora 510 ASD hit 1 ASD
Varkon 512 AX hit 1 AX
Time Fantasy 515 1 X
Warlok 516 1 X
Defender 517 hold up,left,right,hit 1 Hit X, hold Left, hit X, hold Up, Hit X, hit Right.
Joust 519 ABCD hit 1 unknown
Laser Cue 520 1 X
Firepower II 521 AS hit 1 AS
Wild Texas *(521) AS hit 1 AS
Starlight 530 AS hit 1 AS
*Wild Texas is a clone/bootleg of Firepower II, and shows the same game number.
Status:
- All machines are playable
@ -1171,4 +1173,4 @@ GAME( 1983, lsrcu_l2, 0, s7, lsrcu, s7_state, empty_init, ROT0, "Williams
GAME( 1983, fpwr2_l2, 0, s7, fpwr2, s7_state, empty_init, ROT0, "Williams", "Firepower II (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1984, strlt_l1, 0, s7, strlt, s7_state, empty_init, ROT0, "Williams", "Star Light (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
// same hardware, unknown manufacturer, clone of fpwr2
GAME( 1983, wldtexas, 0, s7, fpwr2, s7_state, empty_init, ROT0, "<unknown>", "Wild Texas", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1983, wldtexas, fpwr2_l2, s7, fpwr2, s7_state, empty_init, ROT0, "<unknown>", "Wild Texas", MACHINE_IS_SKELETON_MECHANICAL )

View File

@ -2,8 +2,8 @@
// copyright-holders:Robbbert
/***********************************************************************************
PINBALL
Williams System 8: Still Crazy
PINBALL
Williams System 8: Still Crazy
The first time run, the display will show the model number (543).
Press F3 to clear this.

View File

@ -2,10 +2,23 @@
// copyright-holders:Robbbert
/****************************************************************************************
PINBALL
Williams System 9
PINBALL
Williams System 9
When first started, it shows the game number and stops. Press F3 to reboot, then it works.
Differences to system 7:
- PIA at 0x2200 removed
- Dip switches removed
- Crystals changed from 3.58 to 4MHz
Games:
- Sorcerer (#532)
- Space Shuttle (#535)
- 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.
Rat Race is played in a one-player cocktail cabinet, the player uses a joystick
to tilt the board, to coax the ball into following lit arrows in a maze. After
@ -13,20 +26,23 @@ a successful navigation, the maze changes to something else faster and harder.
It's almost an arcade game done mechanically. Obviously there is no way to emulate it
in its intended form. Probably would have been a nice game, but it never passed the
prototype stage. Currently it runs but the player display flashes randoms ones while
a sound is produced every couple of seconds.
a sound is produced every couple of seconds. Bad byte at "maincpu" D7FF.
Each game has its own switches, you need to know the outhole and slam-tilt ones.
Note that T is also a tilt, but it may take 3 hits to activate it.
Here are the key codes to enable play:
Game NUM Start game End ball
-----------------------------------------------------------------------------------------------
Sorcerer 532 AD hit 1 AD
Space Huttle 535 ASD hit 1 ASD
Comet 540 1 X
Game Outhole Tilt Notes
----------------------------------------------------------------------------------------
Sorcerer X - Y To start, hold down X and minus, then press 1.
Space Shuttle S D F Right-shift To start, hold down SDF, then press 1.
Comet Y Right-shift
Rat Race Not working
Status:
- Pinballs (Sorcerer, Space Shuttle, Comet) are playable.
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
*****************************************************************************************/
@ -56,32 +72,32 @@ public:
, m_pia24(*this, "pia24")
, m_pia28(*this, "pia28")
, m_pia30(*this, "pia30")
, m_digits(*this, "digit%u", 0U)
, m_swarray(*this, "SW.%u", 0U)
, m_io_keyboard(*this, "X%d", 0U)
, m_digits(*this, "digit%d", 0U)
, m_io_outputs(*this, "out%d", 0U)
{ }
void s9(machine_config &config);
void init_s9();
DECLARE_INPUT_CHANGED_MEMBER(main_nmi);
DECLARE_INPUT_CHANGED_MEMBER(audio_nmi);
protected:
virtual void machine_start() override { m_digits.resolve(); }
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
private:
uint8_t sound_r();
void dig0_w(uint8_t data);
void dig1_w(uint8_t data);
void lamp0_w(uint8_t data) { };
void lamp1_w(uint8_t data) { };
void sol2_w(uint8_t data) { }; // solenoids 8-15
void sol3_w(uint8_t data) { }; // solenoids 0-7
void sound_w(uint8_t data);
uint8_t switch_r();
void switch_w(uint8_t data);
u8 sound_r();
void dig0_w(u8 data);
void dig1_w(u8 data);
void lamp0_w(u8 data);
void lamp1_w(u8 data);
void sol2_w(u8 data) { for (u8 i = 0; i < 8; i++) m_io_outputs[8U+i] = BIT(data, i); }; // solenoids 8-15
void sol3_w(u8 data) { for (u8 i = 0; i < 8; i++) m_io_outputs[i] = BIT(data, i); }; // solenoids 0-7
void sound_w(u8 data);
u8 switch_r();
void switch_w(u8 data);
DECLARE_READ_LINE_MEMBER(pia21_ca1_r);
DECLARE_WRITE_LINE_MEMBER(pia21_ca2_w);
DECLARE_WRITE_LINE_MEMBER(pia21_cb2_w) { }; // enable solenoids
@ -90,13 +106,14 @@ private:
DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { }; // comma1&2
DECLARE_WRITE_LINE_MEMBER(pia_irq);
void s9_audio_map(address_map &map);
void s9_main_map(address_map &map);
void audio_map(address_map &map);
void main_map(address_map &map);
uint8_t m_sound_data;
uint8_t m_strobe;
uint8_t m_switch_col;
bool m_data_ok;
u8 m_sound_data = 0;
u8 m_strobe = 0;
u8 m_row = 0;
bool m_data_ok = 0;
u8 m_lamp_data = 0;
emu_timer* m_irq_timer;
static const device_timer_id TIMER_IRQ = 0;
required_device<cpu_device> m_maincpu;
@ -107,11 +124,12 @@ private:
required_device<pia6821_device> m_pia24;
required_device<pia6821_device> m_pia28;
required_device<pia6821_device> m_pia30;
required_ioport_array<8> m_io_keyboard;
output_finder<61> m_digits;
required_ioport_array<8> m_swarray;
output_finder<80> m_io_outputs; // 16 solenoids + 64 lamps
};
void s9_state::s9_main_map(address_map &map)
void s9_state::main_map(address_map &map)
{
map.global_mask(0x7fff);
map(0x0000, 0x07ff).ram().share("nvram");
@ -120,94 +138,120 @@ void s9_state::s9_main_map(address_map &map)
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("roms", 0);
map(0x4000, 0x7fff).rom().region("maincpu", 0 );
}
void s9_state::s9_audio_map(address_map &map)
void s9_state::audio_map(address_map &map)
{
map(0x0000, 0x07ff).ram();
map(0x2000, 0x2003).rw(m_pias, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0x8000, 0xffff).rom().region("audioroms", 0);
map(0x8000, 0xffff).rom().region("audiocpu", 0 );
}
static INPUT_PORTS_START( s9 )
PORT_START("SW.0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER )
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("SW.1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_A)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_S)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_D)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_G)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_H)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_J)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_K)
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("SW.2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_L)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Z)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_C)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_V)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_B)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_N)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_M)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_COMMA)
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("SW.3")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_STOP)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_SLASH)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_COLON)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_QUOTE)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_X)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_MINUS)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_EQUALS)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSPACE)
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_Y) PORT_NAME("INP32")
PORT_START("SW.4")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_OPENBRACE)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_CLOSEBRACE)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSLASH)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_ENTER)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_LEFT)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_RIGHT)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_UP)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_DOWN)
PORT_START("X4")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("INP33")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_COMMA) PORT_NAME("INP34")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_STOP) PORT_NAME("INP35")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH) PORT_NAME("INP36")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_COLON) PORT_NAME("INP37")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_QUOTE) PORT_NAME("INP38")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_NAME("INP39")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("INP40")
PORT_START("SW.5")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Q)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_W)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_E)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_R)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Y)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_U)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_I)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_O)
PORT_START("X5")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("INP41")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_NAME("INP42")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("INP43")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("INP44")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("Outhole")
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("SW.6")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_RSHIFT)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_SPACE)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_LALT)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_LSHIFT)
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("X6")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_DOWN) PORT_NAME("INP50")
PORT_START("SW.7")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("X7")
PORT_START("DIAGS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Audio Diag") PORT_CODE(KEYCODE_1_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s9_state, audio_nmi, 1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Main Diag") PORT_CODE(KEYCODE_4_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s9_state, main_nmi, 1)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Advance") PORT_CODE(KEYCODE_5_PAD)
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Audio Diag") PORT_CODE(KEYCODE_7_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s9_state, audio_nmi, 1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Main Diag") PORT_CODE(KEYCODE_0_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s9_state, main_nmi, 1)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Advance") PORT_CODE(KEYCODE_1_PAD)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Up/Down") PORT_CODE(KEYCODE_6_PAD) PORT_TOGGLE
INPUT_PORTS_END
static INPUT_PORTS_START( sorcr )
PORT_INCLUDE(s9)
PORT_MODIFY("X1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_U) PORT_NAME("INP09")
PORT_MODIFY("X3")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("INP27")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("Outhole")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("INP29")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("INP30")
PORT_MODIFY("X5")
PORT_BIT( 0xe1, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_V) PORT_NAME("INP45")
PORT_MODIFY("X6")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( sshtl )
PORT_INCLUDE(s9)
PORT_MODIFY("X1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("Outhole")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("INP10")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("INP11")
PORT_MODIFY("X3")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("INP27")
PORT_MODIFY("X5")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("INP45")
PORT_MODIFY("X6")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
INPUT_CHANGED_MEMBER( s9_state::main_nmi )
{
// Diagnostic button sends a pulse to NMI pin
@ -222,7 +266,7 @@ INPUT_CHANGED_MEMBER( s9_state::audio_nmi )
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
void s9_state::sound_w(uint8_t data)
void s9_state::sound_w(u8 data)
{
m_sound_data = data;
}
@ -239,18 +283,32 @@ WRITE_LINE_MEMBER( s9_state::pia21_ca2_w )
m_pias->ca1_w(state);
}
void s9_state::dig0_w(uint8_t data)
void s9_state::lamp0_w(u8 data)
{
static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7447
m_lamp_data = data ^ 0xff;
}
void s9_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);
}
void s9_state::dig0_w(u8 data)
{
static const u8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7447
data &= 0x7f;
m_strobe = data & 15;
m_data_ok = true;
m_digits[60] = patterns[data>>4]; // diag digit
}
void s9_state::dig1_w(uint8_t data)
void s9_state::dig1_w(u8 data)
{
static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // MC14558
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];
@ -259,27 +317,23 @@ void s9_state::dig1_w(uint8_t data)
m_data_ok = false;
}
uint8_t s9_state::switch_r()
u8 s9_state::switch_r()
{
uint8_t retval = 0xff;
// scan all 8 input columns, since multiple can be selected at once
for (int i = 0; i < 7; i++)
{
if (m_switch_col & (1<<i))
retval &= m_swarray[i]->read();
}
//retval &= ioport("OPTOS")->read(); // optos should be read here as well, and are always active even if no column is selected
return ~retval;
u8 data = 0;
// there's hardware for 8 rows, but machine uses 7 max
for (u8 i = 0; i < 7; i++)
if (BIT(m_row, i))
data |= m_io_keyboard[i]->read();
return data;
}
void s9_state::switch_w(uint8_t data)
void s9_state::switch_w(u8 data)
{
// this drives the pulldown 2N3904 NPN transistors Q7-Q14, each of which drives one column of the switch matrix low
// it is possible for multiple columns to be enabled at once, this is handled in switch_r above.
m_switch_col = data;
m_row = data;
}
uint8_t s9_state::sound_r()
u8 s9_state::sound_r()
{
return m_sound_data;
}
@ -322,17 +376,34 @@ void s9_state::device_timer(emu_timer &timer, device_timer_id id, int param, voi
}
}
void s9_state::init_s9()
void s9_state::machine_start()
{
genpin_class::machine_start();
m_io_outputs.resolve();
m_digits.resolve();
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_sound_data));
m_irq_timer = timer_alloc(TIMER_IRQ);
m_irq_timer->adjust(attotime::from_ticks(980,1e6),1);
}
void s9_state::machine_reset()
{
genpin_class::machine_reset();
for (u8 i = 0; i < m_io_outputs.size(); i++)
m_io_outputs[i] = 0;
}
void s9_state::s9(machine_config &config)
{
/* basic machine hardware */
M6808(config, m_maincpu, XTAL(4'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &s9_state::s9_main_map);
m_maincpu->set_addrmap(AS_PROGRAM, &s9_state::main_map);
/* Video */
config.set_default_layout(layout_s9);
@ -378,7 +449,7 @@ void s9_state::s9(machine_config &config)
/* Add the soundcard */
M6808(config, m_audiocpu, XTAL(4'000'000));
m_audiocpu->set_addrmap(AS_PROGRAM, &s9_state::s9_audio_map);
m_audiocpu->set_addrmap(AS_PROGRAM, &s9_state::audio_map);
SPEAKER(config, "speaker").front_center();
MC1408(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.5);
@ -398,14 +469,15 @@ void s9_state::s9(machine_config &config)
/*-----------------------------
/ Rat Race - Sys.9 (Game #527)- Prototype (displays as #500)
/ IMPD shows this as System 7, however the writes to 0x2200 indicate System 9.
/-----------------------------*/
ROM_START(ratrc_l1)
ROM_REGION(0x4000, "roms", 0)
ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("ic20.532", 0x1000, 0x1000, CRC(0c5c7c09) SHA1(c93b39ba1460feee5850fcd3ca7cacb72c4c8ff3))
ROM_LOAD("ic14.532", 0x2000, 0x1000, CRC(c6f4bcf4) SHA1(d71c86299139abe3dd376a324315a039be82875c))
ROM_LOAD("ic17.532", 0x3000, 0x1000, CRC(0800c214) SHA1(3343c07fd550bb0759032628e01bb750135dab15))
ROM_REGION(0x8000, "audioroms", 0)
ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("b486.bin", 0x6000, 0x2000, CRC(c54b9402) SHA1(c56fc5f105fc2c1166e3b22bb09b72af79e0aec1))
ROM_END
@ -413,11 +485,11 @@ ROM_END
/ Sorcerer (S9) 03/85 (#532)
/------------------------------*/
ROM_START(sorcr_l1)
ROM_REGION(0x4000, "roms", 0)
ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("cpu_u19.732", 0x1000, 0x1000, CRC(88b6837d) SHA1(d26b06342741443406a72ba48a70e82df62bb26e))
ROM_LOAD("cpu_u20.764", 0x2000, 0x2000, CRC(c235b692) SHA1(d3b97fad2d501c894570601b387933c7644f64e6))
ROM_REGION(0x8000, "audioroms", 0)
ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("spch_u7.732", 0x0000, 0x1000, CRC(bba9ed18) SHA1(8e37ba8cb6bbc1e0afeef230088beda4513adddb))
ROM_LOAD("spch_u5.732", 0x1000, 0x1000, CRC(d48c68ad) SHA1(b1391b87519ad47be3dcce7f8581f871e6a3669f))
ROM_LOAD("spch_u6.732", 0x2000, 0x1000, CRC(a5c54d47) SHA1(4e1206412ecf52ae61c9df2055e0715749a6325d))
@ -426,11 +498,11 @@ ROM_START(sorcr_l1)
ROM_END
ROM_START(sorcr_l2)
ROM_REGION(0x4000, "roms", 0)
ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("cpu_u19.l2", 0x1000, 0x1000, CRC(faf738db) SHA1(a3b3f4160dc837ddf5379e1edb0eafeefcc11e3d))
ROM_LOAD("cpu_u20.l2", 0x2000, 0x2000, CRC(74fc8117) SHA1(c228c76ade670603f77bb324e6794ec6dd358285))
ROM_REGION(0x8000, "audioroms", 0)
ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("spch_u7.732", 0x0000, 0x1000, CRC(bba9ed18) SHA1(8e37ba8cb6bbc1e0afeef230088beda4513adddb))
ROM_LOAD("spch_u5.732", 0x1000, 0x1000, CRC(d48c68ad) SHA1(b1391b87519ad47be3dcce7f8581f871e6a3669f))
ROM_LOAD("spch_u6.732", 0x2000, 0x1000, CRC(a5c54d47) SHA1(4e1206412ecf52ae61c9df2055e0715749a6325d))
@ -438,15 +510,20 @@ ROM_START(sorcr_l2)
ROM_LOAD("cpu_u49.128", 0x4000, 0x4000, CRC(a0bae1e4) SHA1(dc5172aa1d59191d4119da20757cb2c2469f8fe3))
ROM_END
/*-----------------------------
/ Rat Race II (Game #533)
/ - never produced
/-----------------------------*/
/*---------------------------------
/ Space Shuttle (S9) 12/84 (#535)
/----------------------------------*/
ROM_START(sshtl_l7)
// Spanish licensed version by Stargame is identical to this set
ROM_REGION(0x4000, "roms", 0)
ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("cpu_u20.128", 0x0000, 0x4000, CRC(848ad54c) SHA1(4e4ce5fb970da37706472f94a27fd912e1ecb1a0))
ROM_REGION(0x8000, "audioroms", 0)
ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("spch_u5.732", 0x1000, 0x1000, CRC(13edd4e5) SHA1(46c4052c31ddc20bb87445636f8fe3b6f7bff856))
ROM_LOAD("spch_u6.732", 0x2000, 0x1000, CRC(cf48b2e7) SHA1(fe55419a5d40b3a4e8c02a92746b25a075b8efd3))
ROM_LOAD("spch_u4.732", 0x3000, 0x1000, CRC(b0d03c5e) SHA1(46b952f71a7ecc03e22e427875f6e16a9d124067))
@ -454,10 +531,10 @@ ROM_START(sshtl_l7)
ROM_END
ROM_START(sshtl_l3)
ROM_REGION(0x4000, "roms", 0)
ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("cpu_u20.l3", 0x0000, 0x4000, CRC(dc5f08e0) SHA1(67869c1db4e1f49f38588978d4ed32fe7d62e2d6))
ROM_REGION(0x8000, "audioroms", 0)
ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("spch_u5.732", 0x1000, 0x1000, CRC(13edd4e5) SHA1(46c4052c31ddc20bb87445636f8fe3b6f7bff856))
ROM_LOAD("spch_u6.732", 0x2000, 0x1000, CRC(cf48b2e7) SHA1(fe55419a5d40b3a4e8c02a92746b25a075b8efd3))
ROM_LOAD("spch_u4.732", 0x3000, 0x1000, CRC(b0d03c5e) SHA1(46b952f71a7ecc03e22e427875f6e16a9d124067))
@ -468,10 +545,10 @@ ROM_END
/ Comet (S9) 06/85 (#540)
/--------------------------*/
ROM_START(comet_l4)
ROM_REGION(0x4000, "roms", 0)
ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("cpu_u20.128", 0x0000, 0x4000, CRC(36193600) SHA1(efdc44ef26c2def8f860a0296e27b2c3dac55ec8))
ROM_REGION(0x8000, "audioroms", 0)
ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("spch_u7.732", 0x0000, 0x1000, CRC(36545b22) SHA1(f4a026f3fa58dce81b439d76120a6769f4632955))
ROM_LOAD("spch_u5.732", 0x1000, 0x1000, CRC(89f7ede5) SHA1(bbfbd991c9e005c2fa36d8458803b121f4933618))
ROM_LOAD("spch_u6.732", 0x2000, 0x1000, CRC(6ba2aba6) SHA1(783b4e9b38db8677d91f86cb4805f0fa1ae8f856))
@ -480,10 +557,10 @@ ROM_START(comet_l4)
ROM_END
ROM_START(comet_l5)
ROM_REGION(0x4000, "roms", 0)
ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("cpu_u20.l5", 0x0000, 0x4000, CRC(d153d9ab) SHA1(0b97591b8ba35207b1427900486d69078ae122bc))
ROM_REGION(0x8000, "audioroms", 0)
ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("spch_u7.732", 0x0000, 0x1000, CRC(36545b22) SHA1(f4a026f3fa58dce81b439d76120a6769f4632955))
ROM_LOAD("spch_u5.732", 0x1000, 0x1000, CRC(89f7ede5) SHA1(bbfbd991c9e005c2fa36d8458803b121f4933618))
ROM_LOAD("spch_u6.732", 0x2000, 0x1000, CRC(6ba2aba6) SHA1(783b4e9b38db8677d91f86cb4805f0fa1ae8f856))
@ -495,48 +572,36 @@ ROM_END
/ Strike Zone (Shuffle) (#916)
/---------------------------------*/
ROM_START(szone_l5)
ROM_REGION(0x4000, "roms", 0)
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, "audioroms", 0)
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, "roms", 0)
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, "audioroms", 0)
ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("szs_u49.128", 0x4000, 0x4000, CRC(144c3c07) SHA1(57be6f336f200079cd698b13f8fa4755cf694274))
ROM_END
/*------------------------------
/ Alley Cats (Shuffle) (#918)
/-------------------------------*/
ROM_START(alcat_l7)
ROM_REGION(0x4000, "roms", 0) // system 9 mainboard
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", 0) // System 11 soundboard
ROM_LOAD("acs_u21.bin", 0x18000, 0x8000, CRC(c54cd329) SHA1(4b86b10e60a30c4de5d97129074f5657447be676))
ROM_LOAD("acs_u22.bin", 0x10000, 0x8000, CRC(56c1011a) SHA1(c817a3410c643617f3643897b8f529ae78546b0d))
ROM_REGION(0x8000, "audioroms", ROMREGION_ERASEFF)
ROM_END
} // Anonymous namespace
// Novelty
GAME( 1983, ratrc_l1, 0, s9, s9, s9_state, empty_init, ROT0, "Williams", "Rat Race (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1983, ratrc_l1, 0, s9, s9, s9_state, init_s9, ROT0, "Williams", "Rat Race (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING)
GAME( 1985, sorcr_l1, sorcr_l2, s9, s9, s9_state, init_s9, ROT0, "Williams", "Sorcerer (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
GAME( 1985, sorcr_l2, 0, s9, s9, s9_state, init_s9, ROT0, "Williams", "Sorcerer (L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
GAME( 1984, sshtl_l7, 0, s9, s9, s9_state, init_s9, ROT0, "Williams", "Space Shuttle (L-7)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
GAME( 1984, sshtl_l3, sshtl_l7, s9, s9, s9_state, init_s9, ROT0, "Williams", "Space Shuttle (L-3)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
GAME( 1985, comet_l4, comet_l5, s9, s9, s9_state, init_s9, ROT0, "Williams", "Comet (L-4)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
GAME( 1985, comet_l5, 0, s9, s9, s9_state, init_s9, ROT0, "Williams", "Comet (L-5)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
GAME( 1984, szone_l5, 0, s9, s9, s9_state, init_s9, ROT0, "Williams", "Strike Zone (Shuffle) (L-5)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING)
GAME( 1984, szone_l2, szone_l5, s9, s9, s9_state, init_s9, ROT0, "Williams", "Strike Zone (Shuffle) (L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING)
GAME( 1985, alcat_l7, 0, s9, s9, s9_state, init_s9, ROT0, "Williams", "Alley Cats (Shuffle) (L-7)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
// Pinball
GAME( 1985, sorcr_l1, sorcr_l2, s9, sorcr, s9_state, empty_init, ROT0, "Williams", "Sorcerer (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1985, sorcr_l2, 0, s9, sorcr, s9_state, empty_init, ROT0, "Williams", "Sorcerer (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1984, sshtl_l7, 0, s9, sshtl, s9_state, empty_init, ROT0, "Williams", "Space Shuttle (L-7)", MACHINE_IS_SKELETON_MECHANICAL )
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 )