Added Williams DAC sound card device. Added this to s3,s4,wms_shuffle.

Fixed wms_shuffle inputs.
This commit is contained in:
Robbbert 2022-01-23 19:58:12 +11:00
parent 7581379b98
commit 7c70628506
5 changed files with 301 additions and 237 deletions

View file

@ -33,8 +33,10 @@
#include "emu.h"
#include "williams.h"
#include "machine/6821pia.h"
#include "machine/input_merger.h"
#include "machine/rescap.h"
#include "cpu/m6809/m6809.h"
#include "cpu/m6800/m6800.h"
#include "sound/dac.h"
#include "sound/hc55516.h"
#include "sound/okim6295.h"
@ -59,6 +61,7 @@
DEFINE_DEVICE_TYPE(WILLIAMS_CVSD_SOUND, williams_cvsd_sound_device, "wmscvsd", "Williams CVSD Sound Board")
DEFINE_DEVICE_TYPE(WILLIAMS_NARC_SOUND, williams_narc_sound_device, "wmsnarc", "Williams NARC Sound Board")
DEFINE_DEVICE_TYPE(WILLIAMS_ADPCM_SOUND, williams_adpcm_sound_device, "wmsadpcm", "Williams ADPCM Sound Board")
DEFINE_DEVICE_TYPE(WILLIAMS_S4_SOUND, williams_s4_sound_device, "wmss4", "Williams System 4 Sound Board")
@ -836,3 +839,120 @@ void williams_adpcm_sound_device::device_timer(emu_timer &timer, device_timer_id
break;
}
}
//**************************************************************************
// S4 SOUND BOARD (simple sound card used in system 3/4 pinballs)
//**************************************************************************
//-------------------------------------------------
// williams_s4_sound_device - constructor
//-------------------------------------------------
williams_s4_sound_device::williams_s4_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, WILLIAMS_S4_SOUND, tag, owner, clock)
, device_mixer_interface(mconfig, *this)
, m_cpu(*this, "cpu")
, m_pia(*this, "pia")
{
}
//-------------------------------------------------
// write - handle an external write
//-------------------------------------------------
void williams_s4_sound_device::write(u8 data)
{
// If bit 7 low, make bit 4 low, to make the startup tune work
if (~data & 0x80)
data &= 0xef;
// Handle S2 (electronic or tones)
data ^= (ioport("S4")->read() & 0x40);
if ((data & 0x1f) != 0x1f)
{
m_pia->portb_w(data);
m_pia->cb1_w(0);
}
m_pia->cb1_w(1);
}
//-------------------------------------------------
// audio CPU map
//-------------------------------------------------
void williams_s4_sound_device::williams_s4_map(address_map &map)
{
map.global_mask(0x0fff);
map(0x0000, 0x00ff).ram();
map(0x0400, 0x0403).rw(m_pia, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0x0800, 0x0fff).rom().region("audiocpu", 0);
}
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
void williams_s4_sound_device::device_add_mconfig(machine_config &config)
{
M6808(config, m_cpu, 3580000);
m_cpu->set_addrmap(AS_PROGRAM, &williams_s4_sound_device::williams_s4_map);
MC1408(config, "dac", 0).add_route(ALL_OUTPUTS, *this, 0.5);
PIA6821(config, m_pia, 0);
m_pia->writepa_handler().set("dac", FUNC(dac_byte_interface::data_w));
m_pia->irqa_handler().set("audioirq", FUNC(input_merger_device::in_w<1>));
m_pia->irqb_handler().set("audioirq", FUNC(input_merger_device::in_w<2>));
INPUT_MERGER_ANY_HIGH(config, "audioirq").output_handler().set_inputline(m_cpu, M6808_IRQ_LINE);
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void williams_s4_sound_device::device_start()
{
// register for save states
save_item(NAME(m_dummy));
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void williams_s4_sound_device::device_reset()
{
// reset interrupt states
m_cpu->set_input_line(M6808_IRQ_LINE, CLEAR_LINE);
}
INPUT_PORTS_START( williams_s4 )
PORT_START("S4")
PORT_DIPNAME( 0x40, 0x00, "Sounds" )
PORT_DIPSETTING( 0x00, "Set 1" )
PORT_DIPSETTING( 0x40, "Set 2" )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Audio Diag") PORT_CODE(KEYCODE_9_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, williams_s4_sound_device, audio_nmi, 1)
INPUT_PORTS_END
INPUT_CHANGED_MEMBER( williams_s4_sound_device::audio_nmi )
{
// Diagnostic button sends a pulse to NMI pin
if (newval==CLEAR_LINE)
m_cpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
//-------------------------------------------------
// device_input_ports - return a pointer to
// the device's I/O ports
//-------------------------------------------------
ioport_constructor williams_s4_sound_device::device_input_ports() const
{
return INPUT_PORTS_NAME( williams_s4 );
}

View file

@ -9,6 +9,7 @@
****************************************************************************/
#include "machine/6821pia.h"
#include "cpu/m6800/m6800.h"
#include "cpu/m6809/m6809.h"
#include "sound/hc55516.h"
#include "sound/okim6295.h"
@ -23,6 +24,7 @@
DECLARE_DEVICE_TYPE(WILLIAMS_CVSD_SOUND, williams_cvsd_sound_device)
DECLARE_DEVICE_TYPE(WILLIAMS_NARC_SOUND, williams_narc_sound_device)
DECLARE_DEVICE_TYPE(WILLIAMS_ADPCM_SOUND, williams_adpcm_sound_device)
DECLARE_DEVICE_TYPE(WILLIAMS_S4_SOUND, williams_s4_sound_device)
@ -190,3 +192,32 @@ private:
u8 m_talkback;
u8 m_sound_int_state;
};
// ======================> williams_s4_sound_device
class williams_s4_sound_device : public device_t, public device_mixer_interface
{
public:
// construction/destruction
williams_s4_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
// read/write
void write(u8 data);
DECLARE_INPUT_CHANGED_MEMBER(audio_nmi);
protected:
// device-level overrides
virtual void device_add_mconfig(machine_config &config) override;
virtual ioport_constructor device_input_ports() const override;
virtual void device_start() override;
virtual void device_reset() override;
private:
// devices
void williams_s4_map(address_map &map);
required_device<m6808_cpu_device> m_cpu;
required_device<pia6821_device> m_pia;
u8 m_dummy = 0; // needed for save-state support
};

View file

@ -22,8 +22,18 @@ Games:
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
sounds. This is switch SW2 on the real board.
Sound:
- All games have a knocker.
- Hot Tip and Lucky Seven use chimes. There was a noise drum to simulate the sound
of EM score reels.
- Hot Tip, Lucky Seven, World Cup, Disco Fever have a dedicated tilt line to operate
a mechanical buzzer.
- World Cup and Disco Fever, being chime-based internally, would activate one sound
line per sound. There's 4 "chime" lines and the tilt line.
- The later games could send any of 15 codes (but never did), so only needed 4 lines.
- All soundcard games also have an "alternator" line. By activating this, followed by
activating bit 0, the startup tune would play. For it to work properly, both bit
4 and 7 must operate at the same time, otherwise the tune gets cut off.
Status:
- All games are playable
@ -37,10 +47,10 @@ ToDo:
#include "machine/genpin.h"
#include "cpu/m6800/m6800.h"
#include "audio/williams.h"
#include "machine/6821pia.h"
#include "machine/input_merger.h"
#include "machine/timer.h"
#include "sound/dac.h"
#include "speaker.h"
#include "s3.lh"
@ -91,6 +101,7 @@ protected:
bool m_data_ok = 0;
u8 m_lamp_data = 0;
u8 m_game = 0;
bool m_disco = false;
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
@ -125,24 +136,15 @@ class s3a_state : public s3_state
public:
s3a_state(const machine_config &mconfig, device_type type, const char *tag)
: s3_state(mconfig, type, tag)
, m_audiocpu(*this, "audiocpu")
, m_pias(*this, "pias")
, m_io_snd(*this, "SND")
, m_s4sound(*this, "s4sound")
{ }
void s3a(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(audio_nmi);
private:
virtual void machine_start() override;
u8 sound_r();
u8 m_sound_data = 0;
void s3a_sol0_w(u8 data);
void s3a_sol1_w(u8 data);
void audio_map(address_map &map);
required_device<cpu_device> m_audiocpu;
required_device<pia6821_device> m_pias;
required_ioport m_io_snd;
required_device<williams_s4_sound_device> m_s4sound;
};
@ -158,13 +160,6 @@ void s3_state::main_map(address_map &map)
map(0x6000, 0x7fff).rom().region("maincpu", 0);
}
void s3a_state::audio_map(address_map &map)
{
map.global_mask(0xfff);
map(0x0400, 0x0403).rw(m_pias, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // sounds
map(0x0800, 0x0fff).rom().region("audiocpu", 0);
}
static INPUT_PORTS_START( s3 )
PORT_START("X0")
@ -296,16 +291,6 @@ static INPUT_PORTS_START( s3 )
PORT_DIPSETTING( 0x07, "31" )
INPUT_PORTS_END
static INPUT_PORTS_START( s3a )
PORT_INCLUDE(s3)
PORT_START("SND")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Music") PORT_CODE(KEYCODE_8_PAD) PORT_TOGGLE
PORT_MODIFY("DIAGS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Audio Diag") PORT_CODE(KEYCODE_9_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s3a_state, audio_nmi, 1)
INPUT_PORTS_END
// Unassigned inputs will tilt or reset the machine, so remove them
static INPUT_PORTS_START( httip )
PORT_INCLUDE(s3)
@ -333,7 +318,7 @@ static INPUT_PORTS_START( lucky )
INPUT_PORTS_END
static INPUT_PORTS_START( wldcp )
PORT_INCLUDE(s3a)
PORT_INCLUDE(s3)
PORT_MODIFY("X0")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_MODIFY("X1")
@ -346,7 +331,7 @@ static INPUT_PORTS_START( wldcp )
INPUT_PORTS_END
static INPUT_PORTS_START( cntct )
PORT_INCLUDE(s3a)
PORT_INCLUDE(s3)
PORT_MODIFY("X0")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_MODIFY("X2")
@ -357,7 +342,7 @@ static INPUT_PORTS_START( cntct )
INPUT_PORTS_END
static INPUT_PORTS_START( disco )
PORT_INCLUDE(s3a)
PORT_INCLUDE(s3)
PORT_MODIFY("X0")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_MODIFY("X2")
@ -371,7 +356,7 @@ static INPUT_PORTS_START( disco )
INPUT_PORTS_END
static INPUT_PORTS_START( phnix )
PORT_INCLUDE(s3a)
PORT_INCLUDE(s3)
PORT_MODIFY("X2")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) // Playfield tilt
PORT_MODIFY("X4")
@ -380,7 +365,7 @@ static INPUT_PORTS_START( phnix )
INPUT_PORTS_END
static INPUT_PORTS_START( pkrno )
PORT_INCLUDE(s3a)
PORT_INCLUDE(s3)
PORT_MODIFY("X2")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) // Playfield tilt
PORT_MODIFY("X3")
@ -404,12 +389,6 @@ void s3_state::machine_start()
save_item(NAME(m_game));
}
void s3a_state::machine_start()
{
s3_state::machine_start();
save_item(NAME(m_sound_data));
}
void s3_state::machine_reset()
{
genpin_class::machine_reset();
@ -426,13 +405,6 @@ INPUT_CHANGED_MEMBER( s3_state::main_nmi )
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
INPUT_CHANGED_MEMBER( s3a_state::audio_nmi )
{
// Diagnostic button sends a pulse to NMI pin
if (newval==CLEAR_LINE)
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
void s3_state::sol0_w(u8 data)
{
if (m_game == 4) // lucky
@ -462,11 +434,20 @@ void s3a_state::s3a_sol0_w(u8 data)
for (u8 i = 0; i < 8; i++)
m_io_outputs[i] = BIT(data, i);
if ((m_game == 3) && BIT(data, 4)) // disco
// disco has the sound-alternator in a different place
if (m_game == 3)
{
m_sound_data = 0x3f | m_io_snd->read();
m_pias->cb1_w(1);
m_pias->cb1_w(0);
if (data == 0x10)
{
m_disco = true;
m_s4sound->write(0x30);
}
else
if (m_disco)
{
m_disco = false;
m_s4sound->write(0xff);
}
}
}
@ -493,17 +474,17 @@ void s3_state::sol1_w(u8 data)
void s3a_state::s3a_sol1_w(u8 data)
{
u8 sound_data = m_io_snd->read() | (data & 15);
u8 sound_data = data & 15;
if (!BIT(m_game, 0) && BIT(data, 4))
sound_data |= 0x80; // cntct, phnix, pkrno
// wldcp and disco have a dedicated tilt line
if (((m_game == 1) || (m_game == 3))&& BIT(data, 6))
sound_data = 0x10;
bool cb1 = (sound_data & 0x8f);
// enable alternator line (all except disco)
if (BIT(data, 4))
sound_data |= 0x80;
if (cb1)
m_sound_data = ~sound_data;
m_pias->cb1_w(cb1);
m_s4sound->write(~sound_data);
if (BIT(data, 5))
m_samples->start(0, 6); // knocker
@ -570,11 +551,6 @@ void s3_state::switch_w(u8 data)
m_row = data;
}
u8 s3a_state::sound_r()
{
return m_sound_data;
}
TIMER_DEVICE_CALLBACK_MEMBER( s3_state::irq )
{
if (m_t_c > 0x70)
@ -645,21 +621,10 @@ void s3a_state::s3a(machine_config &config)
m_pia22->writepa_handler().set(FUNC(s3a_state::s3a_sol0_w));
m_pia22->writepb_handler().set(FUNC(s3a_state::s3a_sol1_w));
// Add the soundcard
M6802(config, m_audiocpu, 3580000);
m_audiocpu->set_addrmap(AS_PROGRAM, &s3a_state::audio_map);
SPEAKER(config, "speaker").front_center();
MC1408(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.5);
PIA6821(config, m_pias, 0);
m_pias->readpb_handler().set(FUNC(s3a_state::sound_r));
m_pias->writepa_handler().set("dac", FUNC(dac_byte_interface::data_w));
m_pias->irqa_handler().set("audioirq", FUNC(input_merger_device::in_w<1>));
m_pias->irqb_handler().set("audioirq", FUNC(input_merger_device::in_w<2>));
INPUT_MERGER_ANY_HIGH(config, "audioirq").output_handler().set_inputline(m_audiocpu, M6802_IRQ_LINE);
SPEAKER(config, "mono").front_center();
WILLIAMS_S4_SOUND(config, m_s4sound, 0).add_route(ALL_OUTPUTS, "mono", 1.0);
}
@ -695,7 +660,7 @@ ROM_START(wldcp_l1)
ROM_LOAD("white1.716", 0x1000, 0x0800, CRC(9bbbf14f) SHA1(b0542ffdd683fa0ea4a9819576f3789cd5a4b2eb))
ROM_LOAD("white2wc.716", 0x1800, 0x0800, CRC(618d15b5) SHA1(527387893eeb2cd4aa563a4cfb1948a15d2ed741))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("481_s0_world_cup.716", 0x0000, 0x0800, CRC(cf012812) SHA1(26074f6a44075a94e6f91de1dbf92f8ec3ff8ca4))
ROM_END
@ -708,7 +673,7 @@ ROM_START(cntct_l1)
ROM_LOAD("white1.716", 0x1000, 0x0800, CRC(9bbbf14f) SHA1(b0542ffdd683fa0ea4a9819576f3789cd5a4b2eb))
ROM_LOAD("white2.716", 0x1800, 0x0800, CRC(4d4010dd) SHA1(11221124fef3b7bf82d353d65ce851495f6946a7))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("482_s0_contact.716", 0x0000, 0x0800, CRC(d3c713da) SHA1(1fc4a8fadf472e9a04b3a86f60a9d625d07764e1))
ROM_END
@ -721,7 +686,7 @@ ROM_START(disco_l1)
ROM_LOAD("white1.716", 0x1000, 0x0800, CRC(9bbbf14f) SHA1(b0542ffdd683fa0ea4a9819576f3789cd5a4b2eb))
ROM_LOAD("white2.716", 0x1800, 0x0800, CRC(4d4010dd) SHA1(11221124fef3b7bf82d353d65ce851495f6946a7))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("483_s0_disco_fever.716", 0x0000, 0x0800, CRC(d1cb5047) SHA1(7f36296975df19feecc6456ffb91f4a23bcad037))
ROM_END
@ -734,7 +699,7 @@ ROM_START(phnix_l1)
ROM_LOAD("white1.716", 0x1000, 0x0800, CRC(9bbbf14f) SHA1(b0542ffdd683fa0ea4a9819576f3789cd5a4b2eb))
ROM_LOAD("white2.716", 0x1800, 0x0800, CRC(4d4010dd) SHA1(11221124fef3b7bf82d353d65ce851495f6946a7))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("485_s0_phoenix.716", 0x0000, 0x0800, CRC(1c3dea6e) SHA1(04bfe952be2eab66f023b204c21a1bd461ea572f))
ROM_END
@ -747,7 +712,7 @@ ROM_START(pkrno_l1)
ROM_LOAD("white1.716", 0x1000, 0x0800, CRC(9bbbf14f) SHA1(b0542ffdd683fa0ea4a9819576f3789cd5a4b2eb))
ROM_LOAD("white2.716", 0x1800, 0x0800, CRC(4d4010dd) SHA1(11221124fef3b7bf82d353d65ce851495f6946a7))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("488_s0_pokerino.716", 0x0000, 0x0800, CRC(5de02e62) SHA1(f838439a731511a264e508a576ae7193d9fed1af))
ROM_END
@ -756,7 +721,7 @@ ROM_END
GAME( 1977, httip_l1, 0, s3, httip, s3_state, empty_init, ROT0, "Williams", "Hot Tip (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1977, lucky_l1, 0, s3, lucky, s3_state, init_4, ROT0, "Williams", "Lucky Seven (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1978, wldcp_l1, 0, s3a, wldcp, s3a_state, init_1, ROT0, "Williams", "World Cup (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1978, cntct_l1, 0, s3a, cntct, s3a_state, init_2, ROT0, "Williams", "Contact (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1978, disco_l1, 0, s3a, disco, s3a_state, init_3, ROT0, "Williams", "Disco Fever (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1978, cntct_l1, 0, s3a, cntct, s3a_state, init_2, ROT0, "Williams", "Contact (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1978, phnix_l1, 0, s3a, phnix, s3a_state, init_2, ROT0, "Williams", "Phoenix (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1978, pkrno_l1, 0, s3a, pkrno, s3a_state, empty_init, ROT0, "Williams", "Pokerino (L-1)", MACHINE_IS_SKELETON_MECHANICAL )

View file

@ -36,11 +36,11 @@ ToDo:
#include "machine/genpin.h"
#include "cpu/m6800/m6800.h"
#include "audio/williams.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 "s4.lh"
@ -54,16 +54,14 @@ public:
s4_state(const machine_config &mconfig, device_type type, const char *tag)
: genpin_class(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
, m_mainirq(*this, "mainirq")
, m_pias(*this, "pias")
, m_s4sound(*this, "s4sound")
, m_pia22(*this, "pia22")
, m_pia24(*this, "pia24")
, m_pia28(*this, "pia28")
, m_pia30(*this, "pia30")
, m_4020(*this, "4020")
, m_io_keyboard(*this, "X%d", 0U)
, m_io_snd(*this, "SND")
, m_dips(*this, "DS%d", 1U)
, m_digits(*this, "digit%d", 0U)
, m_leds(*this, "led%d", 0U)
@ -73,7 +71,6 @@ public:
void s4(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(main_nmi);
DECLARE_INPUT_CHANGED_MEMBER(audio_nmi);
private:
virtual void machine_start() override;
@ -95,7 +92,6 @@ private:
bool m_data_ok = 0;
u8 m_lamp_data = 0;
bool m_irq_in_progress = 0;
u8 m_sound_data = 0;
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
@ -106,19 +102,16 @@ private:
DECLARE_WRITE_LINE_MEMBER(pia30_cb2_w) { } //ST3
DECLARE_WRITE_LINE_MEMBER(irq_w);
void main_map(address_map &map);
void audio_map(address_map &map);
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<input_merger_device> m_mainirq;
required_device<pia6821_device> m_pias;
required_device<williams_s4_sound_device> m_s4sound;
required_device<pia6821_device> m_pia22;
required_device<pia6821_device> m_pia24;
required_device<pia6821_device> m_pia28;
required_device<pia6821_device> m_pia30;
required_device<ripple_counter_device> m_4020;
required_ioport_array<8> m_io_keyboard;
required_ioport m_io_snd;
required_ioport_array<2> m_dips;
output_finder<32> m_digits;
output_finder<2> m_leds;
@ -137,15 +130,6 @@ void s4_state::main_map(address_map &map)
map(0x6000, 0x7fff).rom().region("maincpu", 0);
}
void s4_state::audio_map(address_map &map)
{
map.global_mask(0x0fff);
map(0x0000, 0x00ff).ram();
map(0x0400, 0x0403).rw(m_pias, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // sounds
map(0x0800, 0x0fff).rom().region("audiocpu", 0);
}
static INPUT_PORTS_START( s4 )
PORT_START("X0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_NAME("Plumb Tilt") // 3 touches before it tilts
@ -274,12 +258,6 @@ static INPUT_PORTS_START( s4 )
PORT_DIPSETTING( 0x47, "29" )
PORT_DIPSETTING( 0x87, "30" )
PORT_DIPSETTING( 0x07, "31" )
PORT_START("SND")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Music") PORT_CODE(KEYCODE_8_PAD) PORT_TOGGLE
PORT_MODIFY("DIAGS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Audio Diag") PORT_CODE(KEYCODE_9_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s4_state, audio_nmi, 1)
INPUT_PORTS_END
static INPUT_PORTS_START( flash )
@ -321,8 +299,9 @@ INPUT_PORTS_END
void s4_state::clockcnt_w(u16 data)
{
if (data >= 1536)
m_mainirq->in_set<0>();
// A wire jumper allows selection of 7,8,9, or 8,9,10
m_mainirq->in_w<0>(BIT(data, 7, 3)==7);
if (BIT(data, 5) && m_irq_in_progress)
m_4020->reset_w(1);
else
@ -341,7 +320,6 @@ void s4_state::machine_start()
save_item(NAME(m_row));
save_item(NAME(m_data_ok));
save_item(NAME(m_lamp_data));
save_item(NAME(m_sound_data));
}
void s4_state::machine_reset()
@ -360,13 +338,6 @@ INPUT_CHANGED_MEMBER( s4_state::main_nmi )
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
INPUT_CHANGED_MEMBER( s4_state::audio_nmi )
{
// Diagnostic button sends a pulse to NMI pin
if (newval==CLEAR_LINE)
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
void s4_state::sol0_w(u8 data)
{
if (BIT(data, 0))
@ -378,14 +349,9 @@ void s4_state::sol0_w(u8 data)
void s4_state::sol1_w(u8 data)
{
u8 sound_data = m_io_snd->read() | (data & 0x1f);
u8 sound_data = data & 0x1f;
bool cb1 = (sound_data & 0x1f);
if (cb1)
m_sound_data = ~sound_data;
m_pias->cb1_w(cb1);
m_s4sound->write(~sound_data);
if (BIT(data, 5))
m_samples->start(0, 6); // knocker
@ -452,11 +418,6 @@ void s4_state::switch_w(u8 data)
m_row = data;
}
u8 s4_state::sound_r()
{
return m_sound_data;
}
WRITE_LINE_MEMBER( s4_state::irq_w )
{
m_irq_in_progress = state;
@ -524,19 +485,8 @@ void s4_state::s4(machine_config &config)
CLOCK(config, "rclock", 3580000/4).signal_handler().set(m_4020, FUNC(ripple_counter_device::clock_w));
// Add the soundcard
M6808(config, m_audiocpu, 3580000);
m_audiocpu->set_addrmap(AS_PROGRAM, &s4_state::audio_map);
SPEAKER(config, "speaker").front_center();
MC1408(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.5);
PIA6821(config, m_pias, 0);
m_pias->readpb_handler().set(FUNC(s4_state::sound_r));
m_pias->writepa_handler().set("dac", FUNC(dac_byte_interface::data_w));
m_pias->irqa_handler().set("audioirq", FUNC(input_merger_device::in_w<1>));
m_pias->irqb_handler().set("audioirq", FUNC(input_merger_device::in_w<2>));
INPUT_MERGER_ANY_HIGH(config, "audioirq").output_handler().set_inputline(m_audiocpu, M6808_IRQ_LINE);
SPEAKER(config, "mono").front_center();
WILLIAMS_S4_SOUND(config, m_s4sound, 0).add_route(ALL_OUTPUTS, "mono", 1.0);
}
@ -549,7 +499,7 @@ ROM_START(flash_l1)
ROM_LOAD("green1.716", 0x1000, 0x0800, CRC(2145f8ab) SHA1(ddf63208559a3a08d4e88327c55426b0eed27654))
ROM_LOAD("green2.716", 0x1800, 0x0800, CRC(1c978a4a) SHA1(1959184764643d58f1740c54bb74c2aad7d667d2))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("sound1.716", 0x0000, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
ROM_END
@ -559,7 +509,7 @@ ROM_START(flash_l2)
ROM_LOAD("yellow1.716", 0x1000, 0x0800, CRC(d251738c) SHA1(65ddbf5c36e429243331a4c5d2339df87a8a7f64))
ROM_LOAD("yellow2.716", 0x1800, 0x0800, CRC(5049326d) SHA1(3b2f4ea054962bf4ba41d46663b7d3d9a77590ef))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("sound1.716", 0x0000, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
ROM_END
@ -569,7 +519,7 @@ ROM_START(flash_t1)
ROM_LOAD("green1.716", 0x1000, 0x0800, CRC(2145f8ab) SHA1(ddf63208559a3a08d4e88327c55426b0eed27654))
ROM_LOAD("green2a.716", 0x1800, 0x0800, CRC(16621eec) SHA1(14e1cf5f7227860a3219b2b79fa66dcf252dce98))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("sound1.716", 0x0000, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
ROM_END
@ -582,7 +532,7 @@ ROM_START(trizn_l1)
ROM_LOAD("green1.716", 0x1000, 0x0800, CRC(2145f8ab) SHA1(ddf63208559a3a08d4e88327c55426b0eed27654))
ROM_LOAD("green2.716", 0x1800, 0x0800, CRC(1c978a4a) SHA1(1959184764643d58f1740c54bb74c2aad7d667d2))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("sound1.716", 0x0000, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
ROM_END
@ -592,7 +542,7 @@ ROM_START(trizn_t1)
ROM_LOAD("green1.716", 0x1000, 0x0800, CRC(2145f8ab) SHA1(ddf63208559a3a08d4e88327c55426b0eed27654))
ROM_LOAD("green2a.716", 0x1800, 0x0800, CRC(16621eec) SHA1(14e1cf5f7227860a3219b2b79fa66dcf252dce98))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("sound1.716", 0x0000, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
ROM_END
@ -605,7 +555,7 @@ ROM_START(tmwrp_l3)
ROM_LOAD("green1.716", 0x1000, 0x0800, CRC(2145f8ab) SHA1(ddf63208559a3a08d4e88327c55426b0eed27654))
ROM_LOAD("green2.716", 0x1800, 0x0800, CRC(1c978a4a) SHA1(1959184764643d58f1740c54bb74c2aad7d667d2))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("sound1.716", 0x0000, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
ROM_END
@ -615,7 +565,7 @@ ROM_START(tmwrp_l2)
ROM_LOAD("green1.716", 0x1000, 0x0800, CRC(2145f8ab) SHA1(ddf63208559a3a08d4e88327c55426b0eed27654))
ROM_LOAD("green2.716", 0x1800, 0x0800, CRC(1c978a4a) SHA1(1959184764643d58f1740c54bb74c2aad7d667d2))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("sound1.716", 0x0000, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
ROM_END
@ -625,7 +575,7 @@ ROM_START(tmwrp_t2)
ROM_LOAD("green1.716", 0x1000, 0x0800, CRC(2145f8ab) SHA1(ddf63208559a3a08d4e88327c55426b0eed27654))
ROM_LOAD("green2a.716", 0x1800, 0x0800, CRC(16621eec) SHA1(14e1cf5f7227860a3219b2b79fa66dcf252dce98))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("sound1.716", 0x0000, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
ROM_END
@ -638,7 +588,7 @@ ROM_START(stlwr_l2)
ROM_LOAD("yellow1.716", 0x1000, 0x0800, CRC(d251738c) SHA1(65ddbf5c36e429243331a4c5d2339df87a8a7f64))
ROM_LOAD("yellow2.716", 0x1800, 0x0800, CRC(5049326d) SHA1(3b2f4ea054962bf4ba41d46663b7d3d9a77590ef))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("sound1.716", 0x0000, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
ROM_END

View file

@ -30,29 +30,27 @@ Each game consists of a flat board with an air-driven puck and 10 bowling pins.
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.
- All games (except s11a/b) are playable.
- s9,s11/a/b: No sound.
- To play: 5,1,(optional: 3 to select game type), any of keys A-W,Y,Z,comma,period
to activate puck detectors, X to signal end. Press it twice to end a frame.
- s11a/b games: stuck in the boot-up sequence, non-functional.
- To score a strike, press ABCDFGIX one at a time.
ToDo:
- Only 2 manuals found, and only one schematic, so it's largely guesswork.
- Layout (s11a/b)
- Inputs
- Outputs
- Displays (s11/a/b)
- Sound
- Displays (s11a/b)
- Sound (s9/s11/a/b)
- 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 "audio/williams.h"
#include "machine/6821pia.h"
#include "machine/clock.h"
#include "machine/input_merger.h"
@ -74,6 +72,7 @@ public:
: genpin_class(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_mainirq(*this, "mainirq")
, m_s4sound(*this, "s4sound")
, m_pia21(*this, "pia21")
, m_pia22(*this, "pia22")
, m_pia24(*this, "pia24")
@ -138,6 +137,7 @@ private:
required_device<cpu_device> m_maincpu;
required_device<input_merger_device> m_mainirq;
optional_device<williams_s4_sound_device> m_s4sound;
optional_device<pia6821_device> m_pia21;
optional_device<pia6821_device> m_pia22;
required_device<pia6821_device> m_pia24;
@ -192,16 +192,15 @@ void shuffle_state::s11_map(address_map &map)
map(0x4000, 0x7fff).rom().region("maincpu", 0);
}
static INPUT_PORTS_START( shuffle )
static INPUT_PORTS_START( s4 )
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_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_NAME("Select Game")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN3 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_NAME("Slam Tilt")
PORT_BIT( 0x40, 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")
@ -231,30 +230,17 @@ static INPUT_PORTS_START( shuffle )
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_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Y) 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_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_X) PORT_NAME("Back Row")
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("X5") // not used
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)
@ -322,6 +308,22 @@ static INPUT_PORTS_START( shuffle )
PORT_DIPSETTING( 0x07, "31" )
INPUT_PORTS_END
static INPUT_PORTS_START( s9 )
PORT_INCLUDE(s4)
PORT_MODIFY("X0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_NAME("Select Game")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
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_MODIFY("X4")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("Ticket Dispenser")
INPUT_PORTS_END
void shuffle_state::clockcnt_w(u16 data)
{
// A wire jumper allows selection of 7,8,9, or 8,9,10
@ -348,20 +350,11 @@ void shuffle_state::sol0_w(u8 data)
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
if (m_s4sound)
{
u8 sound_data = BIT(data, 4, 4);
m_s4sound->write(~sound_data);
}
for (u8 i = 0; i < 8; i++)
m_io_outputs[8U+i] = BIT(data, i);
@ -523,12 +516,17 @@ void shuffle_state::s4(machine_config &config)
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));
// Add the soundcard
SPEAKER(config, "mono").front_center();
WILLIAMS_S4_SOUND(config, m_s4sound, 0).add_route(ALL_OUTPUTS, "mono", 1.0);
}
void shuffle_state::s9(machine_config &config)
{
s4(config);
config.device_remove("pia22");
config.device_remove("s4sound");
m_maincpu->set_addrmap(AS_PROGRAM, &shuffle_state::s9_map);
config.set_default_layout(layout_shuffle9);
@ -575,7 +573,7 @@ ROM_START(topaz_l1)
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_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("sound1.716", 0x0000, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
ROM_END
@ -588,20 +586,20 @@ ROM_START(pomp_l1)
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_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("soundx.716", 0x0000, 0x0800, CRC(539d64fb) SHA1(ff0d09c8d7c65e1072691b5b9e4fcaa3f38d67e8))
ROM_END
/*----------------------------
/ Aristocrat same roms as Pompeii
/----------------------------*/
/*----------------------------------
/ 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_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("soundx.716", 0x0000, 0x0800, CRC(539d64fb) SHA1(ff0d09c8d7c65e1072691b5b9e4fcaa3f38d67e8))
ROM_END
@ -614,7 +612,7 @@ ROM_START(taurs_l1)
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_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("soundx.716", 0x0000, 0x0800, CRC(539d64fb) SHA1(ff0d09c8d7c65e1072691b5b9e4fcaa3f38d67e8))
ROM_END
@ -627,7 +625,7 @@ ROM_START(kingt_l1)
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_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("soundx.716", 0x0000, 0x0800, CRC(539d64fb) SHA1(ff0d09c8d7c65e1072691b5b9e4fcaa3f38d67e8))
ROM_END
@ -640,7 +638,7 @@ ROM_START(omni_l1)
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_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("sound.716", 0x0000, 0x0800, CRC(db085cbb) SHA1(9a57abbad183ba16b3dba16d16923c3bfc46a0c3))
ROM_END
@ -653,7 +651,7 @@ ROM_START(bstrk_l1)
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_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("sound.716", 0x0000, 0x0800, NO_DUMP)
ROM_END
@ -666,7 +664,7 @@ ROM_START(tstrk_l1)
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_REGION(0x0800, "s4sound:audiocpu", 0)
ROM_LOAD("sound.716", 0x0000, 0x0800, NO_DUMP)
ROM_END
@ -763,19 +761,19 @@ 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 )
GAME( 1978, topaz_l1, 0, s4, s4, shuffle_state, empty_init, ROT0, "Williams", "Topaz (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1978, pomp_l1, 0, s4, s4, shuffle_state, empty_init, ROT0, "Williams/United", "Pompeii (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1978, arist_l1, 0, s4, s4, shuffle_state, empty_init, ROT0, "Williams/United", "Aristocrat (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1979, taurs_l1, 0, s4, s4, shuffle_state, empty_init, ROT0, "Williams", "Taurus (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1979, kingt_l1, 0, s4, s4, shuffle_state, empty_init, ROT0, "Williams/United", "King Tut (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1980, omni_l1, 0, s4, s4, shuffle_state, empty_init, ROT0, "Williams/United", "Omni (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1983, bstrk_l1, 0, s4, s4, shuffle_state, empty_init, ROT0, "Williams/United", "Big Strike (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1983, tstrk_l1, 0, s4, s4, shuffle_state, empty_init, ROT0, "Williams/United", "Triple Strike (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1984, szone_l5, 0, s9, s9, shuffle_state, empty_init, ROT0, "Williams/United", "Strike Zone (Shuffle) (L-5)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1984, szone_l2, szone_l5, s9, s9, shuffle_state, empty_init, ROT0, "Williams/United", "Strike Zone (Shuffle) (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1985, alcat_l7, 0, s11, s9, shuffle_state, empty_init, ROT0, "Williams", "Alley Cats (Shuffle) (L-7)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1986, tts_l2, 0, s11, s9, shuffle_state, empty_init, ROT0, "Williams", "Tic-Tac-Strike (Shuffle) (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1986, tts_l1, tts_l2, s11, s9, shuffle_state, empty_init, ROT0, "Williams", "Tic-Tac-Strike (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1987, gmine_l2, 0, s11, s9, shuffle_state, empty_init, ROT0, "Williams", "Gold Mine (Shuffle) (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1987, tdawg_l1, 0, s11, s9, shuffle_state, empty_init, ROT0, "Williams", "Top Dawg (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1987, shfin_l1, 0, s11, s9, shuffle_state, empty_init, ROT0, "Williams", "Shuffle Inn (Shuffle) (L-1)", MACHINE_IS_SKELETON_MECHANICAL )