From 15ff665815c9dd2941bfb5b53f9200df1888590f Mon Sep 17 00:00:00 2001 From: Mike Date: Sat, 8 Jun 2019 12:04:27 -0700 Subject: Add Bally squawk & talk boards (#5175) * Bally pinball by35: Add sound LED to layouts. * Bally pinball by35: whitespace/formatting cleanup. * Bally pinball by35: Add filters to audio device output. The boards have them, and the chip like to output DC at idle. This can cause clipping in the mixer. * 6821pia: For port A reads, only use the DDR for reading pins. * Bally pinball by35: Move over cabinet switches. This makes more room for a sound board LED. * Bally pinball audio: Add Squawk & Talk board. * Bally pinball audio: Add new board, Squawk & Talk with the AY chip. * TMS5220: Adjust delay time between /RS going low and /READY being set. The datasheet doesn't list this time exactly, but something close (time between /RS going low and the data being valid on the bus). It's measured in usec, not clock cycles. * Bally audio: minor cleanup * Midway mcr: Use Bally Squawk & Talk sound board implementation * Bally pinball audio: remove clock from as2888, as it's a discrete board. --- src/devices/machine/6821pia.cpp | 11 +- src/devices/sound/dac.h | 1 + src/devices/sound/tms5220.cpp | 7 +- src/mame/audio/bally.cpp | 443 +++++++++++++++++++++++++++++++--------- src/mame/audio/bally.h | 181 +++++++++++++--- src/mame/audio/midway.cpp | 215 +------------------ src/mame/audio/midway.h | 45 ---- src/mame/drivers/by35.cpp | 245 ++++++++++++---------- src/mame/drivers/mcr.cpp | 8 +- src/mame/includes/mcr.h | 3 +- src/mame/layout/by35.lay | 45 ++-- 11 files changed, 676 insertions(+), 528 deletions(-) diff --git a/src/devices/machine/6821pia.cpp b/src/devices/machine/6821pia.cpp index 4171b9c6f82..b5b6b123b0b 100644 --- a/src/devices/machine/6821pia.cpp +++ b/src/devices/machine/6821pia.cpp @@ -237,12 +237,11 @@ uint8_t pia6821_device::get_in_a_value() } } - // - connected pins are always read - // - disconnected pins read the output buffer in output mode - // - disconnected pins are HI in input mode - ret = (~m_port_a_z_mask & port_a_data) | - ( m_port_a_z_mask & m_ddr_a & m_out_a) | - ( m_port_a_z_mask & ~m_ddr_a); + // For port A, when the port is in output mode, other devices can drive the pins too. + // If they load the lines so the voltage changes from what the PIA is outputting, that + // value will be read back. + // TODO: Figure out if any boards do this, and compensate. + ret = (m_out_a & m_ddr_a) | (port_a_data & ~m_ddr_a); return ret; } diff --git a/src/devices/sound/dac.h b/src/devices/sound/dac.h index 434f82ba4f9..613886a5c0e 100644 --- a/src/devices/sound/dac.h +++ b/src/devices/sound/dac.h @@ -265,6 +265,7 @@ DAC_GENERATOR_EPILOG(_dac_type, _dac_class, _dac_description, _dac_shortname) // DAC chips DAC_GENERATOR(AD557, ad557_device, dac_byte_interface, dac_code_binary<8>, dac_gain_r2r, "AD557", "ad557") +DAC_GENERATOR(AD558, ad558_device, dac_byte_interface, dac_code_binary<8>, dac_gain_r2r, "AD558", "ad558") DAC_GENERATOR(AD7224, ad7224_device, dac_byte_interface, dac_code_binary<8>, dac_gain_r2r, "AD7224", "ad7224") DAC_GENERATOR(AD7521, ad7521_device, dac_word_interface, dac_code_binary<12>, dac_gain_r2r, "AD7521", "ad7521") DAC_GENERATOR(AD7523, ad7523_device, dac_byte_interface, dac_code_binary<8>, dac_gain_r2r, "AD7523", "ad7523") diff --git a/src/devices/sound/tms5220.cpp b/src/devices/sound/tms5220.cpp index 792a0d0a637..4889cd85c60 100644 --- a/src/devices/sound/tms5220.cpp +++ b/src/devices/sound/tms5220.cpp @@ -1821,9 +1821,10 @@ WRITE_LINE_MEMBER( tms5220_device::rsq_w ) /* upon /RS being activated, /READY goes inactive after 100 nsec from data sheet, through 3 asynchronous gates on patent. This is effectively within one clock, so we immediately set io_ready to 0 and activate the callback. */ m_io_ready = false; update_ready_state(); - /* How long does /READY stay inactive, when /RS is pulled low? It might be always ~16 clocks (25 usec at 800khz as shown on the datasheet) - but the patent schematic implies it might be as short as 4 clock cycles. */ - m_timer_io_ready->adjust(clocks_to_attotime(16), 1); + // The datasheet doesn't give an exact time when /READY should change, but the data is valid 6-11 usec after /RS goes low. + // It looks like /READY goes high soon after that (although the datasheet graph is not to scale). + // The value of 13 was measured on a real chip with an oscilloscope, and it fits the datasheet. + m_timer_io_ready->adjust(attotime::from_usec(13), 1); } } } diff --git a/src/mame/audio/bally.cpp b/src/mame/audio/bally.cpp index 8ac10c5ca12..90576c12f72 100644 --- a/src/mame/audio/bally.cpp +++ b/src/mame/audio/bally.cpp @@ -17,16 +17,17 @@ // GLOBAL VARIABLES //************************************************************************** -DEFINE_DEVICE_TYPE(BALLY_AS2888, bally_as2888_device, "as2888", "Bally AS2888 Sound Board") -DEFINE_DEVICE_TYPE(BALLY_AS3022, bally_as3022_device, "as3022", "Bally AS3022 Sound Board") -DEFINE_DEVICE_TYPE(BALLY_SOUNDS_PLUS, bally_sounds_plus_device, "sounds_plus", "Bally Sounds Plus w/ Vocalizer Board") -DEFINE_DEVICE_TYPE(BALLY_CHEAP_SQUEAK, bally_cheap_squeak_device, "cheap_squeak", "Bally Cheap Squeak Board") +DEFINE_DEVICE_TYPE(BALLY_AS2888, bally_as2888_device, "as2888", "Bally AS2888 Sound Board") +DEFINE_DEVICE_TYPE(BALLY_AS3022, bally_as3022_device, "as3022", "Bally AS3022 Sound Board") +DEFINE_DEVICE_TYPE(BALLY_SOUNDS_PLUS, bally_sounds_plus_device, "sounds_plus", "Bally Sounds Plus w/ Vocalizer Board") +DEFINE_DEVICE_TYPE(BALLY_CHEAP_SQUEAK, bally_cheap_squeak_device, "cheap_squeak", "Bally Cheap Squeak Board") +DEFINE_DEVICE_TYPE(BALLY_SQUAWK_N_TALK, bally_squawk_n_talk_device, "squawk_n_talk", "Bally Squawk & Talk Board") +DEFINE_DEVICE_TYPE(BALLY_SQUAWK_N_TALK_AY, bally_squawk_n_talk_ay_device, "squawk_n_talk_ay", "Bally Squawk & Talk w/ AY8910 Board") //************************************************************************** // AS2888 //************************************************************************** - static const discrete_mixer_desc as2888_digital_mixer_info = { DISC_MIXER_IS_RESISTOR, /* type */ @@ -88,7 +89,6 @@ DISCRETE_SOUND_END //------------------------------------------------- // sound_select - handle an external write to the board //------------------------------------------------- - WRITE8_MEMBER(bally_as2888_device::sound_select) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(bally_as2888_device::sound_select_sync), this), data); @@ -101,10 +101,8 @@ TIMER_CALLBACK_MEMBER(bally_as2888_device::sound_select_sync) } //------------------------------------------------- -// // sound_int - handle an external sound interrupt to the board //------------------------------------------------- - WRITE_LINE_MEMBER(bally_as2888_device::sound_int) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(bally_as2888_device::sound_int_sync), this), state); @@ -112,60 +110,58 @@ WRITE_LINE_MEMBER(bally_as2888_device::sound_int) TIMER_CALLBACK_MEMBER(bally_as2888_device::sound_int_sync) { - if (param) - { - m_snd_sustain_timer->adjust(attotime::from_msec(5)); - m_discrete->write(NODE_08, 11); // 11 volt pulse - } + if (param) + { + m_snd_sustain_timer->adjust(attotime::from_msec(5)); + m_discrete->write(NODE_08, 11); // 11 volt pulse + } } //------------------------------------------------- // device_add_mconfig - add device configuration //------------------------------------------------- - void bally_as2888_device::device_add_mconfig(machine_config &config) { DISCRETE(config, m_discrete, as2888_discrete); m_discrete->add_route(ALL_OUTPUTS, *this, 1.00, AUTO_ALLOC_INPUT, 0); - TIMER(config, "timer_s_freq").configure_periodic(FUNC(bally_as2888_device::timer_s), attotime::from_hz(353000)); // Inverter clock on AS-2888 sound board - TIMER(config, m_snd_sustain_timer).configure_generic(FUNC(bally_as2888_device::timer_as2888)); + TIMER(config, "timer_s_freq").configure_periodic(FUNC(bally_as2888_device::timer_s), attotime::from_hz(353000)); // Inverter clock on AS-2888 sound board + TIMER(config, m_snd_sustain_timer).configure_generic(FUNC(bally_as2888_device::timer_as2888)); } //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- - void bally_as2888_device::device_start() { - save_item(NAME(m_sound_select)); - save_item(NAME(m_snd_sel)); - save_item(NAME(m_snd_tone_gen)); - save_item(NAME(m_snd_div)); + save_item(NAME(m_sound_select)); + save_item(NAME(m_snd_sel)); + save_item(NAME(m_snd_tone_gen)); + save_item(NAME(m_snd_div)); } TIMER_DEVICE_CALLBACK_MEMBER(bally_as2888_device::timer_s) { - m_snd_tone_gen--; + m_snd_tone_gen--; - if ((m_snd_tone_gen == 0) && (m_snd_sel != 0x01)) - { - m_snd_tone_gen = m_snd_sel; - m_snd_div++; + if ((m_snd_tone_gen == 0) && (m_snd_sel != 0x01)) + { + m_snd_tone_gen = m_snd_sel; + m_snd_div++; - m_discrete->write(NODE_04, BIT(m_snd_div, 2) * 1); - m_discrete->write(NODE_01, BIT(m_snd_div, 0) * 1); - } + m_discrete->write(NODE_04, BIT(m_snd_div, 2) * 1); + m_discrete->write(NODE_01, BIT(m_snd_div, 0) * 1); + } } TIMER_DEVICE_CALLBACK_MEMBER(bally_as2888_device::timer_as2888) { - m_snd_sel = m_snd_prom[m_sound_select]; - m_snd_sel = bitswap<8>(m_snd_sel,0,1,2,3,4,5,6,7); - m_snd_tone_gen = m_snd_sel; + m_snd_sel = m_snd_prom[m_sound_select]; + m_snd_sel = bitswap<8>(m_snd_sel,0,1,2,3,4,5,6,7); + m_snd_tone_gen = m_snd_sel; - m_discrete->write(NODE_08, 0); - m_snd_sustain_timer->adjust(attotime::never); + m_discrete->write(NODE_08, 0); + m_snd_sustain_timer->adjust(attotime::never); } @@ -173,9 +169,9 @@ TIMER_DEVICE_CALLBACK_MEMBER(bally_as2888_device::timer_as2888) // AS3022 //************************************************************************** -//************************************************************************** +//-------------------------------------------------------------------------- // IO ports -//************************************************************************** +//-------------------------------------------------------------------------- static INPUT_PORTS_START(as3022) PORT_START("SW1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Sound Test") PORT_CHANGED_MEMBER(DEVICE_SELF, bally_as3022_device, sw1, 0) @@ -183,19 +179,18 @@ INPUT_PORTS_END ioport_constructor bally_as3022_device::device_input_ports() const { - return INPUT_PORTS_NAME(as3022); + return INPUT_PORTS_NAME(as3022); } INPUT_CHANGED_MEMBER(bally_as3022_device::sw1) { - if (newval != oldval) - m_cpu->set_input_line(INPUT_LINE_NMI, (newval ? ASSERT_LINE : CLEAR_LINE)); + if (newval != oldval) + m_cpu->set_input_line(INPUT_LINE_NMI, (newval ? ASSERT_LINE : CLEAR_LINE)); } //------------------------------------------------- // sound_select - handle an external write to the board //------------------------------------------------- - WRITE8_MEMBER(bally_as3022_device::sound_select) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(bally_as3022_device::sound_select_sync), this), data); @@ -208,10 +203,8 @@ TIMER_CALLBACK_MEMBER(bally_as3022_device::sound_select_sync) } //------------------------------------------------- -// // sound_int - handle an external sound interrupt to the board //------------------------------------------------- - WRITE_LINE_MEMBER(bally_as3022_device::sound_int) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(bally_as3022_device::sound_int_sync), this), state); @@ -222,23 +215,18 @@ TIMER_CALLBACK_MEMBER(bally_as3022_device::sound_int_sync) m_pia->ca1_w(param); } - //------------------------------------------------- -// -// irq_w - IRQ line state changes +// pia_irq_w - IRQ line state changes //------------------------------------------------- - -WRITE_LINE_MEMBER(bally_as3022_device::irq_w) +WRITE_LINE_MEMBER(bally_as3022_device::pia_irq_w) { int combined_state = m_pia->irq_a_state() | m_pia->irq_b_state(); m_cpu->set_input_line(M6802_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE); } - //------------------------------------------------- // CPU map, from schematics //------------------------------------------------- - void bally_as3022_device::as3022_map(address_map &map) { map.unmap_value_high(); @@ -248,11 +236,9 @@ void bally_as3022_device::as3022_map(address_map &map) map(0x1000, 0x1fff).rom(); // 4k RAM space, but could be jumpered for 2k } - //------------------------------------------------- // device_add_mconfig - add device configuration //------------------------------------------------- - void bally_as3022_device::device_add_mconfig(machine_config &config) { M6808(config, m_cpu, DERIVED_CLOCK(1, 1)); @@ -263,10 +249,17 @@ void bally_as3022_device::device_add_mconfig(machine_config &config) m_pia->writepa_handler().set(FUNC(bally_as3022_device::pia_porta_w)); m_pia->writepb_handler().set(FUNC(bally_as3022_device::pia_portb_w)); m_pia->cb2_handler().set(FUNC(bally_as3022_device::pia_cb2_w)); - m_pia->irqa_handler().set(FUNC(bally_as3022_device::irq_w)); - m_pia->irqb_handler().set(FUNC(bally_as3022_device::irq_w)); + m_pia->irqa_handler().set(FUNC(bally_as3022_device::pia_irq_w)); + m_pia->irqb_handler().set(FUNC(bally_as3022_device::pia_irq_w)); + for (required_device &filter : m_ay_filters) + // TODO: Calculate exact filter values. An AC filter is good enough for now + // and required as the chip likes to output a DC offset at idle. + FILTER_RC(config, filter).set_ac().add_route(ALL_OUTPUTS, *this, 1.0); AY8910(config, m_ay, DERIVED_CLOCK(1, 4)); + m_ay->add_route(0, "ay_filter0", 0.33); + m_ay->add_route(1, "ay_filter1", 0.33); + m_ay->add_route(2, "ay_filter2", 0.33); m_ay->port_a_read_callback().set(FUNC(bally_as3022_device::ay_io_r)); m_ay->add_route(ALL_OUTPUTS, *this, 0.33, AUTO_ALLOC_INPUT, 0); } @@ -275,7 +268,6 @@ void bally_as3022_device::device_add_mconfig(machine_config &config) //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- - void bally_as3022_device::device_start() { // Set volumes to a sane default. @@ -284,16 +276,14 @@ void bally_as3022_device::device_start() m_ay->set_volume(2, 0); save_item(NAME(m_bc1)); - save_item(NAME(m_bdir)); - save_item(NAME(m_sound_select)); - save_item(NAME(m_ay_data)); + save_item(NAME(m_bdir)); + save_item(NAME(m_sound_select)); + save_item(NAME(m_ay_data)); } - //------------------------------------------------- // pia_porta_r - PIA port A reads //------------------------------------------------- - READ8_MEMBER(bally_as3022_device::pia_porta_r) { if (m_bc1 && !m_bdir) @@ -308,11 +298,9 @@ READ8_MEMBER(bally_as3022_device::pia_porta_r) } } - //------------------------------------------------- // pia_porta_w - PIA port A writes //------------------------------------------------- - WRITE8_MEMBER(bally_as3022_device::pia_porta_w) { if (m_bc1 && !m_bdir) @@ -320,14 +308,12 @@ WRITE8_MEMBER(bally_as3022_device::pia_porta_w) logerror("PIA port A bus contention!\n"); } m_ay_data = data; - update_sound_selects(); + update_ay_bus(); } - //------------------------------------------------- // pia_portb_w - PIA port B writes //------------------------------------------------- - WRITE8_MEMBER(bally_as3022_device::pia_portb_w) { m_bc1 = BIT(data, 0); @@ -336,10 +322,9 @@ WRITE8_MEMBER(bally_as3022_device::pia_portb_w) { m_ay_data = m_ay->data_r(); } - update_sound_selects(); + update_ay_bus(); } - //------------------------------------------------- // pia_cb2_w - PIA CB2 writes //------------------------------------------------- @@ -360,19 +345,16 @@ WRITE_LINE_MEMBER(bally_as3022_device::pia_cb2_w) } } - //------------------------------------------------- // ay_io_r - AY8912 IO A reads (B is unconnected) //------------------------------------------------- - READ8_MEMBER(bally_as3022_device::ay_io_r) { // The two high bits are unconnected, the others are inverted. return ~m_sound_select & 0x3f; } - -void bally_as3022_device::update_sound_selects() +void bally_as3022_device::update_ay_bus() { if (m_bc1 && m_bdir) { @@ -384,6 +366,7 @@ void bally_as3022_device::update_sound_selects() } } + //************************************************************************** // SOUNDS PLUS WITH VOCALIZER //************************************************************************** @@ -391,7 +374,6 @@ void bally_as3022_device::update_sound_selects() //------------------------------------------------- // device_add_mconfig - add device configuration //------------------------------------------------- - void bally_sounds_plus_device::device_add_mconfig(machine_config &config) { bally_as3022_device::device_add_mconfig(config); @@ -399,15 +381,18 @@ void bally_sounds_plus_device::device_add_mconfig(machine_config &config) m_cpu->set_addrmap(AS_PROGRAM, &bally_sounds_plus_device::sounds_plus_map); m_pia->writepb_handler().set(FUNC(bally_sounds_plus_device::vocalizer_pia_portb_w)); + // TODO: Calculate exact filter values. An AC filter is good enough for now + // and required as the chip likes to output a DC offset at idle. + FILTER_RC(config, m_mc3417_filter).set_ac(); + m_mc3417_filter->add_route(ALL_OUTPUTS, *this, 1.0); MC3417(config, m_mc3417, 0); // A gain of 2.2 is a guess. It sounds about loud enough and doesn't clip. - m_mc3417->add_route(ALL_OUTPUTS, *this, 2.2, AUTO_ALLOC_INPUT, 0); + m_mc3417->add_route(ALL_OUTPUTS, "mc3417_filter", 2.2); } //------------------------------------------------- // CPU map, from schematics //------------------------------------------------- - void bally_sounds_plus_device::sounds_plus_map(address_map &map) { map.unmap_value_high(); @@ -419,7 +404,6 @@ void bally_sounds_plus_device::sounds_plus_map(address_map &map) //------------------------------------------------- // pia_portb_w - PIA port B writes //------------------------------------------------- - WRITE8_MEMBER(bally_sounds_plus_device::vocalizer_pia_portb_w) { bool speech_clock = BIT(data, 6); @@ -434,9 +418,9 @@ WRITE8_MEMBER(bally_sounds_plus_device::vocalizer_pia_portb_w) // Cheap Squeak //************************************************************************** -//************************************************************************** +//-------------------------------------------------------------------------- // IO ports -//************************************************************************** +//-------------------------------------------------------------------------- static INPUT_PORTS_START(cheap_squeak) PORT_START("SW1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Sound Test") PORT_CHANGED_MEMBER(DEVICE_SELF, bally_cheap_squeak_device, sw1, 0) @@ -444,19 +428,18 @@ INPUT_PORTS_END ioport_constructor bally_cheap_squeak_device::device_input_ports() const { - return INPUT_PORTS_NAME(cheap_squeak); + return INPUT_PORTS_NAME(cheap_squeak); } INPUT_CHANGED_MEMBER(bally_cheap_squeak_device::sw1) { - if (newval != oldval) - m_cpu->set_input_line(INPUT_LINE_NMI, (newval ? ASSERT_LINE : CLEAR_LINE)); + if (newval != oldval) + m_cpu->set_input_line(INPUT_LINE_NMI, (newval ? ASSERT_LINE : CLEAR_LINE)); } //------------------------------------------------- // sound_select - handle an external write to the board //------------------------------------------------- - WRITE8_MEMBER(bally_cheap_squeak_device::sound_select) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(bally_cheap_squeak_device::sound_select_sync), this), data); @@ -468,10 +451,8 @@ TIMER_CALLBACK_MEMBER(bally_cheap_squeak_device::sound_select_sync) } //------------------------------------------------- -// // sound_int - handle an external sound interrupt to the board //------------------------------------------------- - WRITE_LINE_MEMBER(bally_cheap_squeak_device::sound_int) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(bally_cheap_squeak_device::sound_int_sync), this), state); @@ -481,12 +462,12 @@ TIMER_CALLBACK_MEMBER(bally_cheap_squeak_device::sound_int_sync) { m_sound_int = param; m_cpu->set_input_line(M6801_TIN_LINE, (m_sound_int ? ASSERT_LINE : CLEAR_LINE)); + update_led(); } //------------------------------------------------- // CPU map, from schematics //------------------------------------------------- - void bally_cheap_squeak_device::cheap_squeak_map(address_map &map) { map.unmap_value_high(); @@ -498,7 +479,6 @@ void bally_cheap_squeak_device::cheap_squeak_map(address_map &map) //------------------------------------------------- // device_add_mconfig - add device configuration //------------------------------------------------- - void bally_cheap_squeak_device::device_add_mconfig(machine_config &config) { M6803(config, m_cpu, DERIVED_CLOCK(1, 1)); @@ -508,26 +488,24 @@ void bally_cheap_squeak_device::device_add_mconfig(machine_config &config) m_cpu->out_p2_cb().set(FUNC(bally_cheap_squeak_device::out_p2_cb)); ZN429E(config, "dac", 0).add_route(ALL_OUTPUTS, *this, 1.00, AUTO_ALLOC_INPUT, 0); - voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); - vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); - vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); + voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); + vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); + vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); } //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- - void bally_cheap_squeak_device::device_start() { m_sound_ack_w_handler.resolve(); - save_item(NAME(m_sound_select)); - save_item(NAME(m_sound_int)); + save_item(NAME(m_sound_select)); + save_item(NAME(m_sound_int)); } //------------------------------------------------- // out_p1_cb - IO port 1 write //------------------------------------------------- - WRITE8_MEMBER(bally_cheap_squeak_device::out_p1_cb) { m_dac->write(data); @@ -536,7 +514,6 @@ WRITE8_MEMBER(bally_cheap_squeak_device::out_p1_cb) //------------------------------------------------- // in_p2_cb - IO port 2 read //------------------------------------------------- - READ8_MEMBER(bally_cheap_squeak_device::in_p2_cb) { int sound_int_bit = m_sound_int ? 1 : 0; @@ -546,12 +523,288 @@ READ8_MEMBER(bally_cheap_squeak_device::in_p2_cb) //------------------------------------------------- // out_p2_cb - IO port 2 write //------------------------------------------------- - WRITE8_MEMBER(bally_cheap_squeak_device::out_p2_cb) { - bool sound_ack = data & 0x01; + m_sound_ack = BIT(data, 0); if (!m_sound_ack_w_handler.isnull()) { - m_sound_ack_w_handler(sound_ack); + m_sound_ack_w_handler(m_sound_ack); + } + update_led(); +} + +void bally_cheap_squeak_device::update_led() +{ + // Either input or output can pull the led line high + bool led_state = m_sound_int || m_sound_ack; + machine().output().set_value("sound_led0", led_state); +} + + +//************************************************************************** +// Squawk & Talk +//************************************************************************** + +//-------------------------------------------------------------------------- +// IO ports +//-------------------------------------------------------------------------- +static INPUT_PORTS_START(squawk_n_talk) + PORT_START("SW1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("SW1") PORT_CHANGED_MEMBER(DEVICE_SELF, bally_squawk_n_talk_device, sw1, 0) +INPUT_PORTS_END + +ioport_constructor bally_squawk_n_talk_device::device_input_ports() const +{ + return INPUT_PORTS_NAME(squawk_n_talk); +} + +INPUT_CHANGED_MEMBER(bally_squawk_n_talk_device::sw1) +{ + if (newval != oldval) + m_cpu->set_input_line(INPUT_LINE_NMI, (newval ? ASSERT_LINE : CLEAR_LINE)); +} + +//------------------------------------------------- +// sound_select - handle an external write to the board +//------------------------------------------------- +WRITE8_MEMBER(bally_squawk_n_talk_device::sound_select) +{ + machine().scheduler().synchronize(timer_expired_delegate(FUNC(bally_squawk_n_talk_device::sound_select_sync), this), data); +} + +TIMER_CALLBACK_MEMBER(bally_squawk_n_talk_device::sound_select_sync) +{ + m_sound_select = param; +} + +//------------------------------------------------- +// sound_int - handle an external sound interrupt to the board +//------------------------------------------------- +WRITE_LINE_MEMBER(bally_squawk_n_talk_device::sound_int) +{ + machine().scheduler().synchronize(timer_expired_delegate(FUNC(bally_squawk_n_talk_device::sound_int_sync), this), state); +} + +TIMER_CALLBACK_MEMBER(bally_squawk_n_talk_device::sound_int_sync) +{ + // the line runs though in inverter + m_pia2->cb1_w(!param); +} + +//------------------------------------------------- +// CPU map, from schematics +//------------------------------------------------- +void bally_squawk_n_talk_device::squawk_n_talk_map(address_map &map) +{ + map.unmap_value_high(); + map(0x0000, 0x007f).ram(); // internal RAM, could also be jumpered to use a 6808 + map(0x0080, 0x0083).mirror(0x4f6c).rw("pia2", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x0090, 0x0093).mirror(0x4f6c).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x1000, 0x1000).mirror(0x40ff).w("dac", FUNC(dac_byte_interface::data_w)); + map(0x8000, 0x8fff).mirror(0x4000).rom(); // U2 + map(0x9000, 0x9fff).mirror(0x4000).rom(); // U3 + map(0xa000, 0xafff).mirror(0x4000).rom(); // U4 + map(0xb000, 0xbfff).mirror(0x4000).rom(); // U5 +} + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- +void bally_squawk_n_talk_device::device_add_mconfig(machine_config &config) +{ + M6802(config, m_cpu, DERIVED_CLOCK(1, 1)); + m_cpu->set_addrmap(AS_PROGRAM, &bally_squawk_n_talk_device::squawk_n_talk_map); + + PIA6821(config, m_pia1, 0); + m_pia1->readpa_handler().set(m_tms5200, FUNC(tms5220_device::status_r)); + m_pia1->writepa_handler().set(m_tms5200, FUNC(tms5220_device::data_w)); + m_pia1->writepb_handler().set(FUNC(bally_squawk_n_talk_device::pia1_portb_w)); + m_pia1->irqa_handler().set(FUNC(bally_squawk_n_talk_device::pia_irq_w)); + m_pia1->irqb_handler().set(FUNC(bally_squawk_n_talk_device::pia_irq_w)); + + PIA6821(config, m_pia2, 0); + m_pia2->readpa_handler().set(FUNC(bally_squawk_n_talk_device::pia2_porta_r)); + m_pia2->ca2_handler().set(FUNC(bally_squawk_n_talk_device::pia2_ca2_w)); + m_pia2->irqa_handler().set(FUNC(bally_squawk_n_talk_device::pia_irq_w)); + m_pia2->irqb_handler().set(FUNC(bally_squawk_n_talk_device::pia_irq_w)); + + FILTER_RC(config, m_dac_filter); + m_dac_filter->add_route(ALL_OUTPUTS, *this, 1.0); + m_dac_filter->set_rc(filter_rc_device::HIGHPASS, 2000, 0, 0, CAP_U(2)); + AD558(config, "dac", 0).add_route(ALL_OUTPUTS, "dac_filter", 0.75); + voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); + vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); + vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); + + // TODO: Calculate exact filter values. An AC filter is good enough for now + // and required as the chip likes to output a DC offset at idle. + FILTER_RC(config, m_speech_filter).set_ac(); + m_speech_filter->add_route(ALL_OUTPUTS, *this, 1.0); + TMS5200(config, m_tms5200, 640000); + m_tms5200->add_route(ALL_OUTPUTS, "speech_filter", 1.0); + m_tms5200->ready_cb().set(m_pia1, FUNC(pia6821_device::ca2_w)); + m_tms5200->irq_cb().set(m_pia1, FUNC(pia6821_device::cb1_w)); +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- +void bally_squawk_n_talk_device::device_start() +{ + save_item(NAME(m_sound_select)); +} + +//------------------------------------------------- +// pia1_portb_w - PIA 1 port B write +//------------------------------------------------- +WRITE8_MEMBER(bally_squawk_n_talk_device::pia1_portb_w) +{ + m_tms5200->rsq_w(BIT(data, 0)); + m_tms5200->wsq_w(BIT(data, 1)); +} + +//------------------------------------------------- +// pia2_porta_r - PIA 2 port A reads +//------------------------------------------------- +READ8_MEMBER(bally_squawk_n_talk_device::pia2_porta_r) +{ + // 5 lines and they go through inverters + return ~m_sound_select & 0x1f; +} + +//------------------------------------------------- +// pia2_ca2_w - PIA 2 CA2 writes +//------------------------------------------------- +WRITE_LINE_MEMBER(bally_squawk_n_talk_device::pia2_ca2_w) +{ + machine().output().set_value("sound_led0", state); +} + +//------------------------------------------------- +// pia_irq_w - IRQ line state changes +//------------------------------------------------- +WRITE_LINE_MEMBER(bally_squawk_n_talk_device::pia_irq_w) +{ + int combined_state = m_pia1->irq_a_state() | m_pia1->irq_b_state() | m_pia2->irq_a_state() | m_pia2->irq_b_state(); + m_cpu->set_input_line(M6802_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE); +} + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- +void bally_squawk_n_talk_ay_device::device_add_mconfig(machine_config &config) +{ + bally_squawk_n_talk_device::device_add_mconfig(config); + + m_pia2->writepa_handler().set(FUNC(bally_squawk_n_talk_ay_device::pia2_porta_w)); + m_pia2->readpa_handler().set(FUNC(bally_squawk_n_talk_ay_device::pia2_porta_r)); + m_pia2->writepb_handler().set(FUNC(bally_squawk_n_talk_ay_device::pia2_portb_w)); + m_pia2->cb2_handler().set(FUNC(bally_squawk_n_talk_ay_device::pia2_cb2_w)); + + for (optional_device &filter : m_ay_filters) + // TODO: Calculate exact filter values. An AC filter is good enough for now + // and required as the chip likes to output a DC offset at idle. + FILTER_RC(config, filter).set_ac().add_route(ALL_OUTPUTS, *this, 1.0); + AY8910(config, m_ay, DERIVED_CLOCK(1, 4)); + m_ay->add_route(0, "ay_filter0", 0.33); + m_ay->add_route(1, "ay_filter1", 0.33); + m_ay->add_route(2, "ay_filter2", 0.33); + m_ay->port_a_read_callback().set(FUNC(bally_squawk_n_talk_ay_device::ay_io_r)); +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- +void bally_squawk_n_talk_ay_device::device_start() +{ + // Set volumes to a sane default. + m_ay->set_volume(0, 0); + m_ay->set_volume(1, 0); + m_ay->set_volume(2, 0); + + save_item(NAME(m_bc1)); + save_item(NAME(m_bdir)); + save_item(NAME(m_ay_data)); +} + +//------------------------------------------------- +// pia2_porta_r - PIA 2 port A reads +//------------------------------------------------- +READ8_MEMBER(bally_squawk_n_talk_ay_device::pia2_porta_r) +{ + if (m_bc1 && !m_bdir) + { + m_ay_data = m_ay->data_r(); + } + // This should return the open bus, but this method is called even if the PIA + // is in output mode. Self test expects to see the same value. + return m_ay_data; +} + +//------------------------------------------------- +// pia2_porta_w - PIA 2 port A writes +//------------------------------------------------- +WRITE8_MEMBER(bally_squawk_n_talk_ay_device::pia2_porta_w) +{ + if (m_bc1 && !m_bdir) + { + logerror("PIA2 port A bus contention!\n"); + } + m_ay_data = data; + update_ay_bus(); +} + +//------------------------------------------------- +// pia2_portb_w - PIA 2 port B writes +//------------------------------------------------- +WRITE8_MEMBER(bally_squawk_n_talk_ay_device::pia2_portb_w) +{ + m_bc1 = BIT(data, 0); + m_bdir = BIT(data, 1); + if (m_bc1 && !m_bdir) + { + m_ay_data = m_ay->data_r(); + } + update_ay_bus(); +} + +//------------------------------------------------- +// pia2_cb2_w - PIA 2 CB2 writes +//------------------------------------------------- +WRITE_LINE_MEMBER(bally_squawk_n_talk_ay_device::pia2_cb2_w) +{ + // This pin is hooked up to the amp, and disables sounds when hi + if (state) + { + m_ay->set_volume(0, 0); + m_ay->set_volume(1, 0); + m_ay->set_volume(2, 0); + } + else + { + m_ay->set_volume(0, 0xff); + m_ay->set_volume(1, 0xff); + m_ay->set_volume(2, 0xff); + } +} + +//------------------------------------------------- +// ay_io_r - AY8910 read +//------------------------------------------------- +READ8_MEMBER(bally_squawk_n_talk_ay_device::ay_io_r) +{ + // 5 lines and they go through inverters + return ~m_sound_select & 0x1f; +} + +void bally_squawk_n_talk_ay_device::update_ay_bus() +{ + if (m_bc1 && m_bdir) + { + m_ay->address_w(m_ay_data); + } + else if (!m_bc1 && m_bdir) + { + m_ay->data_w(m_ay_data); } } diff --git a/src/mame/audio/bally.h b/src/mame/audio/bally.h index bd55fd6b40b..c00c9c688ae 100644 --- a/src/mame/audio/bally.h +++ b/src/mame/audio/bally.h @@ -21,17 +21,22 @@ #include "sound/ay8910.h" #include "sound/dac.h" #include "sound/discrete.h" +#include "sound/flt_rc.h" #include "sound/hc55516.h" +#include "sound/tms5220.h" + //************************************************************************** // GLOBAL VARIABLES //************************************************************************** -DECLARE_DEVICE_TYPE(BALLY_AS2888, bally_as2888_device) -DECLARE_DEVICE_TYPE(BALLY_AS3022, bally_as3022_device) -DECLARE_DEVICE_TYPE(BALLY_SOUNDS_PLUS, bally_sounds_plus_device) -DECLARE_DEVICE_TYPE(BALLY_CHEAP_SQUEAK, bally_cheap_squeak_device) +DECLARE_DEVICE_TYPE(BALLY_AS2888, bally_as2888_device) +DECLARE_DEVICE_TYPE(BALLY_AS3022, bally_as3022_device) +DECLARE_DEVICE_TYPE(BALLY_SOUNDS_PLUS, bally_sounds_plus_device) +DECLARE_DEVICE_TYPE(BALLY_CHEAP_SQUEAK, bally_cheap_squeak_device) +DECLARE_DEVICE_TYPE(BALLY_SQUAWK_N_TALK, bally_squawk_n_talk_device) +DECLARE_DEVICE_TYPE(BALLY_SQUAWK_N_TALK_AY, bally_squawk_n_talk_ay_device) //************************************************************************** @@ -47,8 +52,8 @@ public: const machine_config &mconfig, const char *tag, device_t *owner, - uint32_t clock = 3'579'545) : - bally_as2888_device(mconfig, BALLY_AS2888, tag, owner, clock) + uint32_t clock = 0) : + bally_as2888_device(mconfig, BALLY_AS2888, tag, owner) { } // read/write @@ -62,14 +67,13 @@ protected: const machine_config &mconfig, device_type type, const char *tag, - device_t *owner, - uint32_t clock) : - device_t(mconfig, type, tag, owner, clock), - device_mixer_interface(mconfig, *this), + device_t *owner) : + device_t(mconfig, type, tag, owner, 0), + device_mixer_interface(mconfig, *this), m_snd_prom(*this, "sound"), - m_discrete(*this, "discrete"), - m_timer_s_freq(*this, "timer_s_freq"), - m_snd_sustain_timer(*this, "timer_as2888") + m_discrete(*this, "discrete"), + m_timer_s_freq(*this, "timer_s_freq"), + m_snd_sustain_timer(*this, "timer_as2888") { } // device-level overrides @@ -78,20 +82,20 @@ protected: private: uint8_t m_sound_select; - uint8_t m_snd_sel; - uint8_t m_snd_tone_gen; - uint8_t m_snd_div; - required_region_ptr m_snd_prom; - required_device m_discrete; - required_device m_timer_s_freq; - required_device m_snd_sustain_timer; + uint8_t m_snd_sel; + uint8_t m_snd_tone_gen; + uint8_t m_snd_div; + required_region_ptr m_snd_prom; + required_device m_discrete; + required_device m_timer_s_freq; + required_device m_snd_sustain_timer; // internal communications TIMER_CALLBACK_MEMBER(sound_select_sync); TIMER_CALLBACK_MEMBER(sound_int_sync); - TIMER_DEVICE_CALLBACK_MEMBER(timer_s); - TIMER_DEVICE_CALLBACK_MEMBER(timer_as2888); + TIMER_DEVICE_CALLBACK_MEMBER(timer_s); + TIMER_DEVICE_CALLBACK_MEMBER(timer_as2888); }; @@ -122,11 +126,13 @@ protected: const char *tag, device_t *owner, uint32_t clock) : - device_t(mconfig, type, tag, owner, clock), - device_mixer_interface(mconfig, *this), - m_cpu(*this, "cpu"), - m_pia(*this, "pia"), - m_ay(*this, "ay"), + device_t(mconfig, type, tag, owner, clock), + device_mixer_interface(mconfig, *this), + m_cpu(*this, "cpu"), + m_pia(*this, "pia"), + m_ay_filters(*this, "ay_filter%u", 0), + m_ay(*this, "ay"), + m_mc3417_filter(*this, "mc3417_filter"), m_mc3417(*this, "mc3417") { } @@ -139,7 +145,9 @@ protected: // The schematics list an optional 555, but it never seemed to be used required_device m_cpu; required_device m_pia; + required_device_array m_ay_filters; required_device m_ay; + optional_device m_mc3417_filter; optional_device m_mc3417; // overwridden by children @@ -157,10 +165,10 @@ private: DECLARE_READ8_MEMBER(pia_porta_r); DECLARE_WRITE8_MEMBER(pia_porta_w); DECLARE_WRITE_LINE_MEMBER(pia_cb2_w); - DECLARE_WRITE_LINE_MEMBER(irq_w); + DECLARE_WRITE_LINE_MEMBER(pia_irq_w); DECLARE_READ8_MEMBER(ay_io_r); - void update_sound_selects(); + void update_ay_bus(); }; @@ -217,9 +225,9 @@ protected: const char *tag, device_t *owner, uint32_t clock) : - device_t(mconfig, type, tag, owner, clock), - device_mixer_interface(mconfig, *this), - m_cpu(*this, "cpu"), + device_t(mconfig, type, tag, owner, clock), + device_mixer_interface(mconfig, *this), + m_cpu(*this, "cpu"), m_dac(*this, "dac"), m_sound_ack_w_handler(*this) { } @@ -231,11 +239,12 @@ protected: // devices required_device m_cpu; - required_device m_dac; + required_device m_dac; private: uint8_t m_sound_select; bool m_sound_int; + bool m_sound_ack; devcb_write_line m_sound_ack_w_handler; @@ -245,6 +254,112 @@ private: DECLARE_WRITE8_MEMBER(out_p1_cb); DECLARE_READ8_MEMBER(in_p2_cb); DECLARE_WRITE8_MEMBER(out_p2_cb); + + void update_led(); }; +// ======================> bally_squawk_n_talk_device + +// This board comes in different configurations, with or without the DAC and/or AY8910. + +class bally_squawk_n_talk_device : public device_t, public device_mixer_interface +{ +public: + bally_squawk_n_talk_device( + const machine_config &mconfig, + const char *tag, + device_t *owner, + uint32_t clock = 3'579'545) : + bally_squawk_n_talk_device(mconfig, BALLY_SQUAWK_N_TALK, tag, owner, clock) + { } + + // read/write + DECLARE_INPUT_CHANGED_MEMBER(sw1); + DECLARE_WRITE8_MEMBER(sound_select); + DECLARE_WRITE_LINE_MEMBER(sound_int); + + void squawk_n_talk_map(address_map &map); + +protected: + bally_squawk_n_talk_device( + const machine_config &mconfig, + device_type type, + const char *tag, + device_t *owner, + uint32_t clock) : + device_t(mconfig, type, tag, owner, clock), + device_mixer_interface(mconfig, *this), + m_cpu(*this, "cpu"), + m_pia1(*this, "pia1"), + m_pia2(*this, "pia2"), + m_dac_filter(*this, "dac_filter"), + m_dac(*this, "dac"), + m_speech_filter(*this, "speech_filter"), + m_tms5200(*this, "tms5200"), + m_ay_filters(*this, "ay_filter%u", 0), + m_ay(*this, "ay") + { } + + // device-level overrides + virtual void device_add_mconfig(machine_config &config) override; + virtual void device_start() override; + virtual ioport_constructor device_input_ports() const override; + + // devices + required_device m_cpu; + required_device m_pia1; + required_device m_pia2; + required_device m_dac_filter; + required_device m_dac; + required_device m_speech_filter; + required_device m_tms5200; + optional_device_array m_ay_filters; + optional_device m_ay; + + uint8_t m_sound_select; + + DECLARE_READ8_MEMBER(pia2_porta_r); + +private: + // internal communications + TIMER_CALLBACK_MEMBER(sound_select_sync); + TIMER_CALLBACK_MEMBER(sound_int_sync); + DECLARE_WRITE8_MEMBER(pia1_portb_w); + DECLARE_WRITE_LINE_MEMBER(pia2_ca2_w); + DECLARE_WRITE_LINE_MEMBER(pia_irq_w); +}; + + +class bally_squawk_n_talk_ay_device : public bally_squawk_n_talk_device +{ +public: + bally_squawk_n_talk_ay_device( + const machine_config &mconfig, + const char *tag, + device_t *owner, + uint32_t clock = 3'579'545) : + bally_squawk_n_talk_device(mconfig, BALLY_SQUAWK_N_TALK_AY, tag, owner, clock) + { } + +protected: + // device-level overrides + virtual void device_add_mconfig(machine_config &config) override; + virtual void device_start() override; + + DECLARE_READ8_MEMBER(pia2_porta_r); + +private: + bool m_bc1; + bool m_bdir; + uint8_t m_ay_data; + + DECLARE_WRITE8_MEMBER(pia2_porta_w); + DECLARE_WRITE8_MEMBER(pia2_portb_w); + DECLARE_WRITE_LINE_MEMBER(pia2_cb2_w); + DECLARE_READ8_MEMBER(ay_io_r); + + void update_ay_bus(); +}; + + #endif // MAME_AUDIO_BALLY_H diff --git a/src/mame/audio/midway.cpp b/src/mame/audio/midway.cpp index f71b0da0ea7..982961ea684 100644 --- a/src/mame/audio/midway.cpp +++ b/src/mame/audio/midway.cpp @@ -20,10 +20,9 @@ // GLOBAL VARIABLES //************************************************************************** -DEFINE_DEVICE_TYPE(MIDWAY_SSIO, midway_ssio_device, "midssio", "Midway SSIO Sound Board") -DEFINE_DEVICE_TYPE(MIDWAY_SOUNDS_GOOD, midway_sounds_good_device, "midsg", "Midway Sounds Good Sound Board") -DEFINE_DEVICE_TYPE(MIDWAY_TURBO_CHEAP_SQUEAK, midway_turbo_cheap_squeak_device, "midtcs", "Midway Turbo Cheap Squeak Sound Board") -DEFINE_DEVICE_TYPE(MIDWAY_SQUAWK_N_TALK, midway_squawk_n_talk_device, "midsnt", "Midway Squawk 'n' Talk Sound Board") +DEFINE_DEVICE_TYPE(MIDWAY_SSIO, midway_ssio_device, "midssio", "Midway SSIO Sound Board") +DEFINE_DEVICE_TYPE(MIDWAY_SOUNDS_GOOD, midway_sounds_good_device, "midsg", "Midway Sounds Good Sound Board") +DEFINE_DEVICE_TYPE(MIDWAY_TURBO_CHEAP_SQUEAK, midway_turbo_cheap_squeak_device, "midtcs", "Midway Turbo Cheap Squeak Sound Board") //************************************************************************** @@ -797,211 +796,3 @@ void midway_turbo_cheap_squeak_device::device_timer(emu_timer &timer, device_tim // important, so we boost the interleave briefly while this happens machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100)); } - - -//************************************************************************** -// SQUAWK 'N' TALK BOARD -//************************************************************************** - -//------------------------------------------------- -// midway_squawk_n_talk_device - constructor -//------------------------------------------------- - -midway_squawk_n_talk_device::midway_squawk_n_talk_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, MIDWAY_SQUAWK_N_TALK, tag, owner, clock), - device_mixer_interface(mconfig, *this), - m_cpu(*this, "cpu"), - m_pia0(*this, "pia0"), - m_pia1(*this, "pia1"), - m_tms5200(*this, "tms5200"), - m_tms_command(0), - m_tms_strobes(0) -{ -} - - -//------------------------------------------------- -// write - handle an external write to the input -// latch -//------------------------------------------------- - -WRITE8_MEMBER(midway_squawk_n_talk_device::write) -{ - synchronize(0, data); -} - - -//------------------------------------------------- -// reset_write - write to the reset line -//------------------------------------------------- - -WRITE_LINE_MEMBER(midway_squawk_n_talk_device::reset_write) -{ - m_cpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE); -} - - -//------------------------------------------------- -// porta1_w - PIA #1 port A writes -//------------------------------------------------- - -WRITE8_MEMBER(midway_squawk_n_talk_device::porta1_w ) -{ - logerror("Write to AY-8912 = %02X\n", data); -} - - -//------------------------------------------------- -// dac_w - DAC data writes -//------------------------------------------------- - -WRITE8_MEMBER(midway_squawk_n_talk_device::dac_w) -{ - logerror("Write to DAC = %02X\n", data); -} - - -//------------------------------------------------- -// porta2_w - PIA #2 port A writes -//------------------------------------------------- - -WRITE8_MEMBER(midway_squawk_n_talk_device::porta2_w) -{ - m_tms_command = data; -} - - -//------------------------------------------------- -// portb2_w - PIA #2 port B writes -//------------------------------------------------- - -WRITE8_MEMBER(midway_squawk_n_talk_device::portb2_w) -{ - // bits 0-1 select read/write strobes on the TMS5200 - data &= 0x03; - - // write strobe -- pass the current command to the TMS5200 - if (((data ^ m_tms_strobes) & 0x02) && !(data & 0x02)) - { - m_tms5200->data_w(m_tms_command); - - // DoT expects the ready line to transition on a command/write here, so we oblige - m_pia1->ca2_w(1); - m_pia1->ca2_w(0); - } - - // read strobe -- read the current status from the TMS5200 - else if (((data ^ m_tms_strobes) & 0x01) && !(data & 0x01)) - { - m_pia1->write_porta(m_tms5200->status_r()); - - // DoT expects the ready line to transition on a command/write here, so we oblige - m_pia1->ca2_w(1); - m_pia1->ca2_w(0); - } - - // remember the state - m_tms_strobes = data; -} - - -//------------------------------------------------- -// irq_w - IRQ line state changes -//------------------------------------------------- - -WRITE_LINE_MEMBER(midway_squawk_n_talk_device::irq_w) -{ - int combined_state = m_pia0->irq_a_state() | m_pia0->irq_b_state() | m_pia1->irq_a_state() | m_pia1->irq_b_state(); - m_cpu->set_input_line(M6802_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE); -} - - -//------------------------------------------------- -// audio CPU map -//------------------------------------------------- - -// address map verified from schematics -// note that jumpers control the ROM sizes; if these are changed, use the alternate -// address map below -void midway_squawk_n_talk_device::squawkntalk_map(address_map &map) -{ - map.unmap_value_high(); - map(0x0000, 0x007f).ram(); // internal RAM - map(0x0080, 0x0083).mirror(0x4f6c).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0x0090, 0x0093).mirror(0x4f6c).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0x1000, 0x1fff).mirror(0x4000).w(FUNC(midway_squawk_n_talk_device::dac_w)); - map(0x8000, 0xbfff).mirror(0x4000).rom(); -} - -// alternate address map if the ROM jumpers are changed to support a smaller -// ROM size of 2k -#ifdef UNUSED_FUNCTION -void midway_squawk_n_talk_device::squawkntalk_alt_map(address_map &map) -{ - map.unmap_value_high(); - map(0x0000, 0x007f).ram(); // internal RAM - map(0x0080, 0x0083).mirror(0x676c).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0x0090, 0x0093).mirror(0x676c).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0x0800, 0x0fff).mirror(0x6000).w(FUNC(midway_squawk_n_talk_device::dac_w)); - map(0x8000, 0x9fff).mirror(0x6000).rom(); -} -#endif - - -//------------------------------------------------- -// device_add_mconfig - add device configuration -//------------------------------------------------- - -void midway_squawk_n_talk_device::device_add_mconfig(machine_config &config) -{ - M6802(config, m_cpu, DERIVED_CLOCK(1, 1)); - m_cpu->set_addrmap(AS_PROGRAM, &midway_squawk_n_talk_device::squawkntalk_map); - - PIA6821(config, m_pia0, 0); - m_pia0->writepa_handler().set(FUNC(midway_squawk_n_talk_device::porta1_w)); - m_pia0->irqa_handler().set(FUNC(midway_squawk_n_talk_device::irq_w)); - m_pia0->irqb_handler().set(FUNC(midway_squawk_n_talk_device::irq_w)); - - PIA6821(config, m_pia1, 0); - m_pia1->writepa_handler().set(FUNC(midway_squawk_n_talk_device::porta2_w)); - m_pia1->writepb_handler().set(FUNC(midway_squawk_n_talk_device::portb2_w)); - m_pia1->irqa_handler().set(FUNC(midway_squawk_n_talk_device::irq_w)); - m_pia1->irqb_handler().set(FUNC(midway_squawk_n_talk_device::irq_w)); - - // only used on Discs of Tron, which is stereo - TMS5200(config, m_tms5200, 640000).add_route(ALL_OUTPUTS, *this, 0.60); - - // the board also supports an AY-8912 and/or an 8-bit DAC, neither of - // which are populated on the Discs of Tron board -} - - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void midway_squawk_n_talk_device::device_start() -{ - save_item(NAME(m_tms_command)); - save_item(NAME(m_tms_strobes)); -} - - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void midway_squawk_n_talk_device::device_reset() -{ -} - - -//------------------------------------------------- -// device_timer - timer callbacks -//------------------------------------------------- - -void midway_squawk_n_talk_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) -{ - m_pia0->write_porta(~param & 0x0f); - m_pia0->cb1_w(BIT(~param, 4)); -} diff --git a/src/mame/audio/midway.h b/src/mame/audio/midway.h index 0e3aed92f29..5078db354f2 100644 --- a/src/mame/audio/midway.h +++ b/src/mame/audio/midway.h @@ -31,7 +31,6 @@ DECLARE_DEVICE_TYPE(MIDWAY_SSIO, midway_ssio_device) DECLARE_DEVICE_TYPE(MIDWAY_SOUNDS_GOOD, midway_sounds_good_device) DECLARE_DEVICE_TYPE(MIDWAY_TURBO_CHEAP_SQUEAK, midway_turbo_cheap_squeak_device) -DECLARE_DEVICE_TYPE(MIDWAY_SQUAWK_N_TALK, midway_squawk_n_talk_device) @@ -193,48 +192,4 @@ private: DECLARE_WRITE_LINE_MEMBER(irq_w); }; - -// ======================> midway_squawk_n_talk_device - -class midway_squawk_n_talk_device : public device_t, - public device_mixer_interface -{ -public: - // construction/destruction - midway_squawk_n_talk_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 3'579'545); - - // read/write - DECLARE_WRITE8_MEMBER(write); - DECLARE_WRITE_LINE_MEMBER(reset_write); - - // internal communications - DECLARE_WRITE8_MEMBER(dac_w); - - void squawkntalk_alt_map(address_map &map); - void squawkntalk_map(address_map &map); -protected: - // device-level overrides - virtual void device_add_mconfig(machine_config &config) override; - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; - -private: - // devices - required_device m_cpu; - required_device m_pia0; - required_device m_pia1; - optional_device m_tms5200; - - // internal state - uint8_t m_tms_command; - uint8_t m_tms_strobes; - - // internal communications - DECLARE_WRITE8_MEMBER(porta1_w); - DECLARE_WRITE8_MEMBER(porta2_w); - DECLARE_WRITE8_MEMBER(portb2_w); - DECLARE_WRITE_LINE_MEMBER(irq_w); -}; - #endif // MAME_AUDIO_MIDWAY_H diff --git a/src/mame/drivers/by35.cpp b/src/mame/drivers/by35.cpp index 2536ac78f6f..4b3b458f59b 100644 --- a/src/mame/drivers/by35.cpp +++ b/src/mame/drivers/by35.cpp @@ -56,7 +56,7 @@ Cheap Squeak 1390,1391,0A17,0A40,0A44,0B42 ToDo: - The Nuova Bell games don't boot. - The Bell games have major problems -- Sound +- Sound for the non-Bally games - Dips, Inputs, Solenoids vary per game - Bally: Add Strobe 5 (ST5) for extra inputs on later games - Bally: Add support for Solenoid Expanders on later games @@ -105,6 +105,8 @@ public: void as3022(machine_config &config); void sounds_plus(machine_config &config); void cheap_squeak(machine_config &config); + void squawk_n_talk(machine_config &config); + void squawk_n_talk_ay(machine_config &config); protected: typedef uint8_t solenoid_feature_data[20][4]; @@ -135,6 +137,8 @@ protected: , m_as3022(*this, "as3022") , m_sounds_plus(*this, "sounds_plus") , m_cheap_squeak(*this, "cheap_squeak") + , m_squawk_n_talk(*this, "squawk_n_talk") + , m_squawk_n_talk_ay(*this, "squawk_n_talk_ay") , m_sound_select_handler(*this) , m_sound_int_handler(*this) { } @@ -208,8 +212,10 @@ private: optional_device m_as3022; optional_device m_sounds_plus; optional_device m_cheap_squeak; - devcb_write8 m_sound_select_handler; - devcb_write_line m_sound_int_handler; + optional_device m_squawk_n_talk; + optional_device m_squawk_n_talk_ay; + devcb_write8 m_sound_select_handler; + devcb_write_line m_sound_int_handler; }; class playboy_state : public by35_state @@ -1546,6 +1552,29 @@ void by35_state::cheap_squeak(machine_config &config) m_cheap_squeak->sound_ack_w_handler().set(FUNC(by35_state::sound_ack_w)); } +void by35_state::squawk_n_talk(machine_config &config) +{ + by35(config); + + BALLY_SQUAWK_N_TALK(config, m_squawk_n_talk); + SPEAKER(config, "mono").front_center(); + m_squawk_n_talk->add_route(ALL_OUTPUTS, "mono", 1.00); + + m_sound_select_handler.bind().set(m_squawk_n_talk, FUNC(bally_squawk_n_talk_device::sound_select)); + m_sound_int_handler.bind().set(m_squawk_n_talk, FUNC(bally_squawk_n_talk_device::sound_int)); +} + +void by35_state::squawk_n_talk_ay(machine_config &config) +{ + by35(config); + + BALLY_SQUAWK_N_TALK_AY(config, m_squawk_n_talk_ay); + SPEAKER(config, "mono").front_center(); + m_squawk_n_talk_ay->add_route(ALL_OUTPUTS, "mono", 1.00); + + m_sound_select_handler.bind().set(m_squawk_n_talk_ay, FUNC(bally_squawk_n_talk_ay_device::sound_select)); + m_sound_int_handler.bind().set(m_squawk_n_talk_ay, FUNC(bally_squawk_n_talk_ay_device::sound_int)); +} /*-------------------------------- / Supersonic #1106 @@ -1869,9 +1898,9 @@ ROM_START(flashgdn) ROM_LOAD( "720-52_6.732", 0x1800, 0x0800, CRC(2a43d9fb) SHA1(9ff903c32b80780383578a9abaa3ef9d3bcecbc7)) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) - ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("834-20_2.532", 0xc000, 0x1000, CRC(2f8ced3e) SHA1(ecdeb07c31c22ec313b55774f4358a9923c5e9e7)) - ROM_LOAD("834-18_5.532", 0xf000, 0x1000, CRC(8799e80e) SHA1(f255b4e7964967c82cfc2de20ebe4b8d501e3cb0)) + ROM_REGION(0x10000, "squawk_n_talk_ay:cpu", 0) + ROM_LOAD("834-20_2.532", 0x8000, 0x1000, CRC(2f8ced3e) SHA1(ecdeb07c31c22ec313b55774f4358a9923c5e9e7)) + ROM_LOAD("834-18_5.532", 0xb000, 0x1000, CRC(8799e80e) SHA1(f255b4e7964967c82cfc2de20ebe4b8d501e3cb0)) ROM_END ROM_START(flashgdnf) @@ -1881,9 +1910,9 @@ ROM_START(flashgdnf) ROM_LOAD( "720-52_6.732", 0x1800, 0x0800, CRC(2a43d9fb) SHA1(9ff903c32b80780383578a9abaa3ef9d3bcecbc7)) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) - ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("834-35_2.532", 0xc000, 0x1000, CRC(dff3f711) SHA1(254a5670775ecb6c347f33af8ba7c350e4cfa550)) - ROM_LOAD("834-36_5.532", 0xf000, 0x1000, CRC(18691897) SHA1(3b445e0756c07d80f14c01af5a7f87744474ae15)) + ROM_REGION(0x10000, "squawk_n_talk_ay:cpu", 0) + ROM_LOAD("834-35_2.532", 0x8000, 0x1000, CRC(dff3f711) SHA1(254a5670775ecb6c347f33af8ba7c350e4cfa550)) + ROM_LOAD("834-36_5.532", 0xb000, 0x1000, CRC(18691897) SHA1(3b445e0756c07d80f14c01af5a7f87744474ae15)) ROM_END ROM_START(flashgdnv) @@ -1929,9 +1958,9 @@ ROM_START(fball_ii) ROM_LOAD( "720-52_6.732", 0x1800, 0x0800, CRC(2a43d9fb) SHA1(9ff903c32b80780383578a9abaa3ef9d3bcecbc7)) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) - ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("839-01_2.532", 0xc000, 0x1000, CRC(4aa473bd) SHA1(eaa12ded76f9999d33ce0fe6198df1708e007e12)) - ROM_LOAD("839-02_5.532", 0xf000, 0x1000, CRC(8bf904ff) SHA1(de78d08bddd546abac65c2f95f1d52797e716362)) + ROM_REGION(0x10000, "squawk_n_talk_ay:cpu", 0) + ROM_LOAD("839-01_2.532", 0x8000, 0x1000, CRC(4aa473bd) SHA1(eaa12ded76f9999d33ce0fe6198df1708e007e12)) + ROM_LOAD("839-02_5.532", 0xb000, 0x1000, CRC(8bf904ff) SHA1(de78d08bddd546abac65c2f95f1d52797e716362)) ROM_END /*-------------------------------- @@ -1944,11 +1973,11 @@ ROM_START(eballdlx) ROM_LOAD( "720-52_6.732", 0x1800, 0x0800, CRC(2a43d9fb) SHA1(9ff903c32b80780383578a9abaa3ef9d3bcecbc7)) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) - ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("838-08_3.532", 0xd000, 0x1000, CRC(c39478d7) SHA1(8148aca7c4113921ab882da32d6d88e66abb22cc)) - ROM_LOAD("838-09_4.716", 0xe000, 0x0800, CRC(518ea89e) SHA1(a387274ef530bb57f31819733b35615a39260126)) - ROM_RELOAD(0xe800, 0x0800) - ROM_LOAD("838-10_5.532", 0xf000, 0x1000, CRC(9c63925d) SHA1(abd1fa6308d3569e16ee10bfabce269a124d8f26)) + ROM_REGION(0x10000, "squawk_n_talk_ay:cpu", 0) + ROM_LOAD("838-08_3.532", 0x9000, 0x1000, CRC(c39478d7) SHA1(8148aca7c4113921ab882da32d6d88e66abb22cc)) + ROM_LOAD("838-09_4.716", 0xa000, 0x0800, CRC(518ea89e) SHA1(a387274ef530bb57f31819733b35615a39260126)) + ROM_RELOAD(0xa800, 0x0800) + ROM_LOAD("838-10_5.532", 0xb000, 0x1000, CRC(9c63925d) SHA1(abd1fa6308d3569e16ee10bfabce269a124d8f26)) ROM_END ROM_START(eballd14) @@ -1958,11 +1987,11 @@ ROM_START(eballd14) ROM_LOAD( "720-52_6.732", 0x1800, 0x0800, CRC(2a43d9fb) SHA1(9ff903c32b80780383578a9abaa3ef9d3bcecbc7)) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) - ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("838-08_3.532", 0xd000, 0x1000, CRC(c39478d7) SHA1(8148aca7c4113921ab882da32d6d88e66abb22cc)) - ROM_LOAD("838-09_4.716", 0xe000, 0x0800, CRC(518ea89e) SHA1(a387274ef530bb57f31819733b35615a39260126)) - ROM_RELOAD(0xe800, 0x0800) - ROM_LOAD("838-10_5.532", 0xf000, 0x1000, CRC(9c63925d) SHA1(abd1fa6308d3569e16ee10bfabce269a124d8f26)) + ROM_REGION(0x10000, "squawk_n_talk_ay:cpu", 0) + ROM_LOAD("838-08_3.532", 0x9000, 0x1000, CRC(c39478d7) SHA1(8148aca7c4113921ab882da32d6d88e66abb22cc)) + ROM_LOAD("838-09_4.716", 0xa000, 0x0800, CRC(518ea89e) SHA1(a387274ef530bb57f31819733b35615a39260126)) + ROM_RELOAD(0xa800, 0x0800) + ROM_LOAD("838-10_5.532", 0xb000, 0x1000, CRC(9c63925d) SHA1(abd1fa6308d3569e16ee10bfabce269a124d8f26)) ROM_END /*-------------------------------- @@ -1975,10 +2004,10 @@ ROM_START(embryon) ROM_LOAD( "720-52_6.732", 0x1800, 0x0800, CRC(2a43d9fb) SHA1(9ff903c32b80780383578a9abaa3ef9d3bcecbc7)) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) - ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("841-01_4.716", 0xe000, 0x0800, CRC(e8b234e3) SHA1(584e553748b1c6571491150e346d815005948b68)) - ROM_RELOAD(0xe800, 0x0800) - ROM_LOAD("841-02_5.532", 0xf000, 0x1000, CRC(9cd8c04e) SHA1(7d74d8f33a98c9832fda1054187eb7300dbf5f5e)) + ROM_REGION(0x10000, "squawk_n_talk:cpu", 0) + ROM_LOAD("841-01_4.716", 0xa000, 0x0800, CRC(e8b234e3) SHA1(584e553748b1c6571491150e346d815005948b68)) + ROM_RELOAD(0xa800, 0x0800) + ROM_LOAD("841-02_5.532", 0xb000, 0x1000, CRC(9cd8c04e) SHA1(7d74d8f33a98c9832fda1054187eb7300dbf5f5e)) ROM_END /*-------------------------------- @@ -1991,9 +2020,9 @@ ROM_START(fathom) ROM_LOAD( "720-53_6.732", 0x1800, 0x0800, CRC(c2e92f80) SHA1(61de956a4b6e9fb9ef2b25c01bff1fb5972284ad)) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) - ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("842-01_4.532", 0xe000, 0x1000, CRC(2ac02093) SHA1(a89c1d24f4f3e1f58ca4e476f408835efb368a90)) - ROM_LOAD("842-02_5.532", 0xf000, 0x1000, CRC(736800bc) SHA1(2679d4d76e7258ad18ffe05cf333f21c35adfe0e)) + ROM_REGION(0x10000, "squawk_n_talk:cpu", 0) + ROM_LOAD("842-01_4.532", 0xa000, 0x1000, CRC(2ac02093) SHA1(a89c1d24f4f3e1f58ca4e476f408835efb368a90)) + ROM_LOAD("842-02_5.532", 0xb000, 0x1000, CRC(736800bc) SHA1(2679d4d76e7258ad18ffe05cf333f21c35adfe0e)) ROM_END /*-------------------------------- @@ -2006,11 +2035,11 @@ ROM_START(centaur) ROM_LOAD( "720-53_6.732", 0x1800, 0x0800, CRC(c2e92f80) SHA1(61de956a4b6e9fb9ef2b25c01bff1fb5972284ad)) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) - ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("848-01_3.532", 0xd000, 0x1000, CRC(88322c8a) SHA1(424fd2b107f5fbc3ab8b58e3fa8c285170b1f09a)) - ROM_LOAD("848-02_4.532", 0xe000, 0x1000, CRC(d6dbd0e4) SHA1(62e4c8c1a747c5f6a3a4bf4d0bc80b06a1f70d13)) - ROM_LOAD("848-05_5.716", 0xf000, 0x0800, CRC(cbd765ba) SHA1(bdfae28af46c805f253f02d449dd81575aa9305b)) - ROM_RELOAD(0xf800, 0x0800) + ROM_REGION(0x10000, "squawk_n_talk:cpu", 0) + ROM_LOAD("848-01_3.532", 0x9000, 0x1000, CRC(88322c8a) SHA1(424fd2b107f5fbc3ab8b58e3fa8c285170b1f09a)) + ROM_LOAD("848-02_4.532", 0xa000, 0x1000, CRC(d6dbd0e4) SHA1(62e4c8c1a747c5f6a3a4bf4d0bc80b06a1f70d13)) + ROM_LOAD("848-05_5.716", 0xb000, 0x0800, CRC(cbd765ba) SHA1(bdfae28af46c805f253f02d449dd81575aa9305b)) + ROM_RELOAD(0xb800, 0x0800) ROM_END /*-------------------------------- @@ -2023,11 +2052,11 @@ ROM_START(medusa) ROM_LOAD( "720-53_6.732", 0x1800, 0x0800, CRC(c2e92f80) SHA1(61de956a4b6e9fb9ef2b25c01bff1fb5972284ad)) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) - ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("845-01_3.532", 0xd000, 0x1000, CRC(32200e02) SHA1(e75356a20f81a68e6b27d2fa04b8cc9b17f3976a)) - ROM_LOAD("845-02_4.532", 0xe000, 0x1000, CRC(ab95885a) SHA1(fa91cef2a244d25d408585d1e14e1ed8fdc8c845)) - ROM_LOAD("845-05_5.716", 0xf000, 0x0800, CRC(3792a812) SHA1(5c7cc43e57d8e8ded1cc109aa65c4f08052899b9)) - ROM_RELOAD(0xf800, 0x0800) + ROM_REGION(0x10000, "squawk_n_talk:cpu", 0) + ROM_LOAD("845-01_3.532", 0x9000, 0x1000, CRC(32200e02) SHA1(e75356a20f81a68e6b27d2fa04b8cc9b17f3976a)) + ROM_LOAD("845-02_4.532", 0xa000, 0x1000, CRC(ab95885a) SHA1(fa91cef2a244d25d408585d1e14e1ed8fdc8c845)) + ROM_LOAD("845-05_5.716", 0xb000, 0x0800, CRC(3792a812) SHA1(5c7cc43e57d8e8ded1cc109aa65c4f08052899b9)) + ROM_RELOAD(0xb800, 0x0800) ROM_END /*-------------------------------- @@ -2040,11 +2069,11 @@ ROM_START(vector) ROM_LOAD( "720-53_6.732", 0x1800, 0x0800, CRC(c2e92f80) SHA1(61de956a4b6e9fb9ef2b25c01bff1fb5972284ad)) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) - ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("858-01_2.532", 0xc000, 0x1000, CRC(bd2edef9) SHA1(8f129016440bad5e78d4b073268e76e542b61684)) - ROM_LOAD("858-02_3.532", 0xd000, 0x1000, CRC(c592fb35) SHA1(5201824f129812c907e7d8a4600de23d95fd1eb0)) - ROM_LOAD("858-03_4.532", 0xe000, 0x1000, CRC(8661d312) SHA1(36d04d875382ff5387991d660d031c662b414698)) - ROM_LOAD("858-06_5.532", 0xf000, 0x1000, CRC(3050edf6) SHA1(e028192d9a8c17123b07566c6d73302cec07b440)) + ROM_REGION(0x10000, "squawk_n_talk_ay:cpu", 0) + ROM_LOAD("858-01_2.532", 0x8000, 0x1000, CRC(bd2edef9) SHA1(8f129016440bad5e78d4b073268e76e542b61684)) + ROM_LOAD("858-02_3.532", 0x9000, 0x1000, CRC(c592fb35) SHA1(5201824f129812c907e7d8a4600de23d95fd1eb0)) + ROM_LOAD("858-03_4.532", 0xa000, 0x1000, CRC(8661d312) SHA1(36d04d875382ff5387991d660d031c662b414698)) + ROM_LOAD("858-06_5.532", 0xb000, 0x1000, CRC(3050edf6) SHA1(e028192d9a8c17123b07566c6d73302cec07b440)) ROM_END /*-------------------------------- @@ -2057,10 +2086,10 @@ ROM_START(elektra) ROM_LOAD( "720-53_6.732", 0x1800, 0x0800, CRC(c2e92f80) SHA1(61de956a4b6e9fb9ef2b25c01bff1fb5972284ad)) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) - ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("857-01_3.532", 0xd000, 0x1000, CRC(031548cc) SHA1(1f0204afd32dc07a301f404b4b064e34a83bd783)) - ROM_LOAD("857-02_4.532", 0xe000, 0x1000, CRC(efc870d9) SHA1(45132c123b3191d616e2e9372948ab66ff221228)) - ROM_LOAD("857-03_5.716", 0xf000, 0x0800, CRC(eae2c6a6) SHA1(ee3a9b01fa07e2df4eb6d2ab26da5f7f0e12475b)) + ROM_REGION(0x10000, "squawk_n_talk_ay:cpu", 0) + ROM_LOAD("857-01_3.532", 0x9000, 0x1000, CRC(031548cc) SHA1(1f0204afd32dc07a301f404b4b064e34a83bd783)) + ROM_LOAD("857-02_4.532", 0xa000, 0x1000, CRC(efc870d9) SHA1(45132c123b3191d616e2e9372948ab66ff221228)) + ROM_LOAD("857-03_5.716", 0xb000, 0x0800, CRC(eae2c6a6) SHA1(ee3a9b01fa07e2df4eb6d2ab26da5f7f0e12475b)) ROM_RELOAD(0xf800, 0x0800) ROM_END @@ -2074,11 +2103,11 @@ ROM_START(spectrm) ROM_LOAD( "720-53_6.732", 0x1800, 0x0800, CRC(c2e92f80) SHA1(61de956a4b6e9fb9ef2b25c01bff1fb5972284ad)) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) - ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("868-01_3.532", 0xd000, 0x1000, CRC(c3a16c66) SHA1(8c0a8b50fac0e218515b471621e80000ae475296)) - ROM_LOAD("868-02_4.532", 0xe000, 0x1000, CRC(6b441399) SHA1(aae9e805f76cd6bc264bf69dd2d57629ee58bfc2)) - ROM_LOAD("868-03_5.716", 0xf000, 0x0800, CRC(4a5ac3b8) SHA1(288feba40efd65f4eec5c0b2fcf013904e3dc24e)) - ROM_RELOAD(0xf800, 0x0800) + ROM_REGION(0x10000, "squawk_n_talk:cpu", 0) + ROM_LOAD("868-01_3.532", 0x9000, 0x1000, CRC(c3a16c66) SHA1(8c0a8b50fac0e218515b471621e80000ae475296)) + ROM_LOAD("868-02_4.532", 0xa000, 0x1000, CRC(6b441399) SHA1(aae9e805f76cd6bc264bf69dd2d57629ee58bfc2)) + ROM_LOAD("868-03_5.716", 0xb000, 0x0800, CRC(4a5ac3b8) SHA1(288feba40efd65f4eec5c0b2fcf013904e3dc24e)) + ROM_RELOAD(0xb800, 0x0800) ROM_END ROM_START(spectrm4) @@ -2088,11 +2117,11 @@ ROM_START(spectrm4) ROM_LOAD( "720-53_6.732", 0x1800, 0x0800, CRC(c2e92f80) SHA1(61de956a4b6e9fb9ef2b25c01bff1fb5972284ad)) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) - ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("868-01_3.532", 0xd000, 0x1000, CRC(c3a16c66) SHA1(8c0a8b50fac0e218515b471621e80000ae475296)) - ROM_LOAD("868-02_4.532", 0xe000, 0x1000, CRC(6b441399) SHA1(aae9e805f76cd6bc264bf69dd2d57629ee58bfc2)) - ROM_LOAD("868-03_5.716", 0xf000, 0x0800, CRC(4a5ac3b8) SHA1(288feba40efd65f4eec5c0b2fcf013904e3dc24e)) - ROM_RELOAD(0xf800, 0x0800) + ROM_REGION(0x10000, "squawk_n_talk:cpu", 0) + ROM_LOAD("868-01_3.532", 0x9000, 0x1000, CRC(c3a16c66) SHA1(8c0a8b50fac0e218515b471621e80000ae475296)) + ROM_LOAD("868-02_4.532", 0xa000, 0x1000, CRC(6b441399) SHA1(aae9e805f76cd6bc264bf69dd2d57629ee58bfc2)) + ROM_LOAD("868-03_5.716", 0xb000, 0x0800, CRC(4a5ac3b8) SHA1(288feba40efd65f4eec5c0b2fcf013904e3dc24e)) + ROM_RELOAD(0xb800, 0x0800) ROM_END /*-------------------------------------------------- @@ -2146,8 +2175,8 @@ ROM_START(rapidfip) ROM_LOAD( "869-03_6.732", 0x1800, 0x0800, CRC(f6af5e8d) SHA1(3cf782d4a0ca38e3953a20d23d0eb01af87ba445)) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) - ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("869-02_5.532", 0xf000, 0x1000, CRC(5a74cb86) SHA1(4fd09b0bc4257cb7b48cd8087b8b15fe768f7ddf)) + ROM_REGION(0x10000, "squawk_n_talk:cpu", 0) + ROM_LOAD("869-02_5.532", 0xb000, 0x1000, CRC(5a74cb86) SHA1(4fd09b0bc4257cb7b48cd8087b8b15fe768f7ddf)) ROM_END /*-------------------------------------- @@ -2160,9 +2189,9 @@ ROM_START(m_mpac) ROM_LOAD( "720-53_6.732", 0x1800, 0x0800, CRC(c2e92f80) SHA1(61de956a4b6e9fb9ef2b25c01bff1fb5972284ad)) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) - ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("872-01_4.532", 0xe000, 0x1000, CRC(d21ce16d) SHA1(3ee6e2629530e7e6e4d7eac713d34c48297a1047)) - ROM_LOAD("872-03_5.532", 0xf000, 0x1000, CRC(8fcdf853) SHA1(7c6bffcd974d2684e7f2c69d926f6cabb53e2f90)) + ROM_REGION(0x10000, "squawk_n_talk_ay:cpu", 0) + ROM_LOAD("872-01_4.532", 0xa000, 0x1000, CRC(d21ce16d) SHA1(3ee6e2629530e7e6e4d7eac713d34c48297a1047)) + ROM_LOAD("872-03_5.532", 0xb000, 0x1000, CRC(8fcdf853) SHA1(7c6bffcd974d2684e7f2c69d926f6cabb53e2f90)) ROM_END /*----------------------------------------------------------- @@ -2698,10 +2727,10 @@ ROM_START(bigbat) ROM_LOAD( "u6.bin", 0x1800, 0x0800, CRC(8f13469d) SHA1(00c626f7eb166f627f6498d75906b3c56bccdd62)) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) - ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("u3.bin", 0xd000, 0x1000, CRC(b87a9335) SHA1(8a21bcbcbe91da1bab0af06b71604bb8f247d0d4)) - ROM_LOAD("u4.bin", 0xe000, 0x1000, CRC(4ab75b31) SHA1(46acd1c9250a635b51bffccd77ea4e67a0c5edf5)) - ROM_LOAD("u5.bin", 0xf000, 0x1000, CRC(0aec8204) SHA1(f44216cccc3652399549345d8c74bcae54662aa3)) + ROM_REGION(0x10000, "squawk_n_talk_ay:cpu", 0) + ROM_LOAD("u3.bin", 0x9000, 0x1000, CRC(b87a9335) SHA1(8a21bcbcbe91da1bab0af06b71604bb8f247d0d4)) + ROM_LOAD("u4.bin", 0xa000, 0x1000, CRC(4ab75b31) SHA1(46acd1c9250a635b51bffccd77ea4e67a0c5edf5)) + ROM_LOAD("u5.bin", 0xb000, 0x1000, CRC(0aec8204) SHA1(f44216cccc3652399549345d8c74bcae54662aa3)) ROM_END /*----------------------------------------------------------------------------------------------- @@ -2714,9 +2743,9 @@ ROM_START(mdntmrdr) ROM_LOAD( "mdru6.732", 0x1800, 0x0800, CRC(ff55fb57) SHA1(4a44fc8732c8cbce38c9605c7958b02a6bc95da1)) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) - ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("u3.bin", 0xd000, 0x1000, CRC(3ba474e4) SHA1(4ee5c3ad2c9dca49e9394521506e97a95e3d9a17)) - ROM_LOAD("u5.bin", 0xf000, 0x1000, CRC(3ab40e35) SHA1(63b2ee074e5993a2616e67d3383bc3d3ac51b400)) + ROM_REGION(0x10000, "squawk_n_talk_ay:cpu", 0) + ROM_LOAD("u3.bin", 0x9000, 0x1000, CRC(3ba474e4) SHA1(4ee5c3ad2c9dca49e9394521506e97a95e3d9a17)) + ROM_LOAD("u5.bin", 0xb000, 0x1000, CRC(3ab40e35) SHA1(63b2ee074e5993a2616e67d3383bc3d3ac51b400)) ROM_END /*---------------------------- @@ -2779,22 +2808,22 @@ GAME( 1983, goldball, 0, as3022, by35, by35_state, init_by35_ GAME( 1983, goldballn, goldball, as3022, by35, by35_state, init_by35_7, ROT0, "Bally", "Gold Ball (Field Service Upgrade)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) // Squawk & Talk sound -GAME( 1981, flashgdn, 0, by35, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Flash Gordon", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1981, flashgdnf, flashgdn, by35, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Flash Gordon (French)", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1981, flashgdnv, flashgdn, sounds_plus, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Flash Gordon (Vocalizer sound)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) -GAME( 1981, fball_ii, 0, by35, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Fireball II", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1981, eballdlx, 0, by35, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Eight Ball Deluxe (rev. 15)", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1981, eballd14, eballdlx, by35, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Eight Ball Deluxe (rev. 14)", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1981, embryon, 0, by35, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Embryon", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1981, fathom, 0, by35, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Fathom", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1981, centaur, 0, by35, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Centaur", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1981, medusa, 0, by35, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Medusa", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1982, vector, 0, by35, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Vector", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1981, elektra, 0, by35, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Elektra", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1982, spectrm, 0, by35, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Spectrum", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1982, spectrm4, spectrm, by35, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Spectrum (ver 4)", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1982, rapidfip, 0, by35, by35, by35_state, init_by35_7, ROT0, "Bally", "Rapid Fire", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1982, m_mpac, 0, by35, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Mr. and Mrs. PacMan", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1981, flashgdn, 0, squawk_n_talk_ay, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Flash Gordon", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1981, flashgdnf, flashgdn, squawk_n_talk_ay, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Flash Gordon (French)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1981, flashgdnv, flashgdn, sounds_plus, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Flash Gordon (Vocalizer sound)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1981, fball_ii, 0, squawk_n_talk_ay, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Fireball II", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1981, eballdlx, 0, squawk_n_talk_ay, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Eight Ball Deluxe (rev. 15)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1981, eballd14, eballdlx, squawk_n_talk_ay, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Eight Ball Deluxe (rev. 14)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1981, embryon, 0, squawk_n_talk, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Embryon", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1981, fathom, 0, squawk_n_talk, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Fathom", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1981, centaur, 0, squawk_n_talk, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Centaur", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1981, medusa, 0, squawk_n_talk, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Medusa", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1982, vector, 0, squawk_n_talk_ay, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Vector", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1981, elektra, 0, squawk_n_talk_ay, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Elektra", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1982, spectrm, 0, squawk_n_talk, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Spectrum", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1982, spectrm4, spectrm, squawk_n_talk, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Spectrum (ver 4)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1982, rapidfip, 0, squawk_n_talk, by35, by35_state, init_by35_7, ROT0, "Bally", "Rapid Fire", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1982, m_mpac, 0, squawk_n_talk_ay, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Mr. and Mrs. PacMan", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) // Cheap Squeak sound GAME( 1984, kosteel, 0, cheap_squeak, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Kings of Steel", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) @@ -2805,25 +2834,25 @@ GAME( 1984, blakpyra, 0, cheap_squeak, by35_os5x, by35_state, init_by35_7, ROT0, GAME( 1985, cybrnaut, 0, cheap_squeak, by35_os5x, by35_state, init_by35_7, ROT0, "Bally", "Cybernaut", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) // Other manufacturers -GAME( 1984, suprbowl, xsandos, by35, by35, by35_state, init_by35_7, ROT0, "Bell Games", "Super Bowl", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1984, tigerrag, kosteel, by35, by35, by35_state, init_by35_7, ROT0, "Bell Games", "Tiger Rag", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1985, cosflash, flashgdn, by35, by35, by35_state, init_by35_7, ROT0, "Bell Games", "Cosmic Flash", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1985, newwave, blakpyra, by35, by35, by35_state, init_by35_7, ROT0, "Bell Games", "New Wave", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1985, saturn2, spyhuntr, by35, by35, by35_state, init_by35_7, ROT0, "Bell Games", "Saturn 2", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1985, worlddef, 0, by35, by35, by35_state, init_by35_7, ROT0, "Bell Games", "World Defender", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1986, spacehaw, cybrnaut, by35, by35, by35_state, init_by35_7, ROT0, "Nuova Bell Games", "Space Hawks", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1986, darkshad, 0, nuovo, by35, by35_state, init_by35_7, ROT0, "Nuova Bell Games", "Dark Shadow", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1986, skflight, 0, nuovo, by35, by35_state, init_by35_7, ROT0, "Nuova Bell Games", "Skill Flight", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1987, cobrap, 0, nuovo, by35, by35_state, init_by35_7, ROT0, "Nuova Bell Games", "Cobra", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1987, futrquen, 0, nuovo, by35, by35_state, init_by35_7, ROT0, "Nuova Bell Games", "Future Queen", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1987, f1gpp, 0, nuovo, by35, by35_state, init_by35_7, ROT0, "Nuova Bell Games", "F1 Grand Prix (Nuova Bell Games)", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1988, toppin, 0, nuovo, by35, by35_state, init_by35_7, ROT0, "Nuova Bell Games", "Top Pin", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1988, uboat65, 0, nuovo, by35, by35_state, init_by35_7, ROT0, "Nuova Bell Games", "U-boat 65", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1986, bullseye, 0, by35, by35, by35_state, init_by35_7, ROT0, "Grand Products", "301/Bullseye (301 Darts Scoring)", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1986, bullseyn, bullseye, by35, by35, by35_state, init_by35_7, ROT0, "Grand Products", "301/Bullseye (Traditional Scoring)", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1988, bbbowlin, 0, by35, by35, by35_state, init_by35_7, ROT0, "United", "Big Ball Bowling (Bowler)", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1988, monrobwl, 0, by35, by35, by35_state, init_by35_7, ROT0, "Monroe Bowling Co.", "Stars & Strikes (Bowler)", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1984, bigbat, 0, by35, by35, by35_state, init_by35_7, ROT0, "Bally Midway", "Big Bat (Bat game)", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1984, mdntmrdr, 0, by35, by35, by35_state, init_by35_6, ROT0, "Bally Midway", "Midnight Marauders (Gun game)", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1988, blbeauty, 0, by35, by35, by35_state, init_by35_7, ROT0, "Stern", "Black Beauty (Shuffle)", MACHINE_IS_SKELETON_MECHANICAL) -GAME( 1984, myststar, 0, by35, by35, by35_state, init_by35_6, ROT0, "Zaccaria", "Mystic Star", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1984, suprbowl, xsandos, by35, by35, by35_state, init_by35_7, ROT0, "Bell Games", "Super Bowl", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1984, tigerrag, kosteel, by35, by35, by35_state, init_by35_7, ROT0, "Bell Games", "Tiger Rag", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1985, cosflash, flashgdn, by35, by35, by35_state, init_by35_7, ROT0, "Bell Games", "Cosmic Flash", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1985, newwave, blakpyra, by35, by35, by35_state, init_by35_7, ROT0, "Bell Games", "New Wave", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1985, saturn2, spyhuntr, by35, by35, by35_state, init_by35_7, ROT0, "Bell Games", "Saturn 2", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1985, worlddef, 0, by35, by35, by35_state, init_by35_7, ROT0, "Bell Games", "World Defender", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1986, spacehaw, cybrnaut, by35, by35, by35_state, init_by35_7, ROT0, "Nuova Bell Games", "Space Hawks", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1986, darkshad, 0, nuovo, by35, by35_state, init_by35_7, ROT0, "Nuova Bell Games", "Dark Shadow", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1986, skflight, 0, nuovo, by35, by35_state, init_by35_7, ROT0, "Nuova Bell Games", "Skill Flight", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1987, cobrap, 0, nuovo, by35, by35_state, init_by35_7, ROT0, "Nuova Bell Games", "Cobra", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1987, futrquen, 0, nuovo, by35, by35_state, init_by35_7, ROT0, "Nuova Bell Games", "Future Queen", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1987, f1gpp, 0, nuovo, by35, by35_state, init_by35_7, ROT0, "Nuova Bell Games", "F1 Grand Prix (Nuova Bell Games)", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1988, toppin, 0, nuovo, by35, by35_state, init_by35_7, ROT0, "Nuova Bell Games", "Top Pin", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1988, uboat65, 0, nuovo, by35, by35_state, init_by35_7, ROT0, "Nuova Bell Games", "U-boat 65", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1986, bullseye, 0, by35, by35, by35_state, init_by35_7, ROT0, "Grand Products", "301/Bullseye (301 Darts Scoring)", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1986, bullseyn, bullseye, by35, by35, by35_state, init_by35_7, ROT0, "Grand Products", "301/Bullseye (Traditional Scoring)", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1988, bbbowlin, 0, by35, by35, by35_state, init_by35_7, ROT0, "United", "Big Ball Bowling (Bowler)", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1988, monrobwl, 0, by35, by35, by35_state, init_by35_7, ROT0, "Monroe Bowling Co.", "Stars & Strikes (Bowler)", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1984, bigbat, 0, squawk_n_talk_ay, by35, by35_state, init_by35_7, ROT0, "Bally Midway", "Big Bat (Bat game)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1984, mdntmrdr, 0, squawk_n_talk_ay, by35, by35_state, init_by35_6, ROT0, "Bally Midway", "Midnight Marauders (Gun game)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1988, blbeauty, 0, by35, by35, by35_state, init_by35_7, ROT0, "Stern", "Black Beauty (Shuffle)", MACHINE_IS_SKELETON_MECHANICAL) +GAME( 1984, myststar, 0, by35, by35, by35_state, init_by35_6, ROT0, "Zaccaria", "Mystic Star", MACHINE_IS_SKELETON_MECHANICAL) diff --git a/src/mame/drivers/mcr.cpp b/src/mame/drivers/mcr.cpp index 7ffb68a44cd..1b56fa9afcf 100644 --- a/src/mame/drivers/mcr.cpp +++ b/src/mame/drivers/mcr.cpp @@ -621,7 +621,8 @@ WRITE8_MEMBER(mcr_state::dotron_op4_w) /* bit 4 = SEL0 (J1-8) on squawk n talk board */ /* bits 3-0 = MD3-0 connected to squawk n talk (J1-4,3,2,1) */ - m_squawk_n_talk->write(space, offset, data); + m_squawk_n_talk->sound_select(machine().dummy_space(), offset, data & 0x0f); + m_squawk_n_talk->sound_int(BIT(data, 4)); } @@ -650,7 +651,8 @@ WRITE8_MEMBER(mcr_nflfoot_state::op4_w) /* bit 4 = SEL0 (J1-8) on squawk n talk board */ /* bits 3-0 = MD3-0 connected to squawk n talk (J1-4,3,2,1) */ - m_squawk_n_talk->write(space, offset, data); + m_squawk_n_talk->sound_select(machine().dummy_space(), offset, data & 0x0f); + m_squawk_n_talk->sound_int(BIT(data, 4)); } @@ -1861,7 +1863,7 @@ void mcr_state::mcr_91490_snt(machine_config &config) mcr_91490(config); /* basic machine hardware */ - MIDWAY_SQUAWK_N_TALK(config, m_squawk_n_talk); + BALLY_SQUAWK_N_TALK(config, m_squawk_n_talk); m_squawk_n_talk->add_route(ALL_OUTPUTS, "lspeaker", 1.0); m_squawk_n_talk->add_route(ALL_OUTPUTS, "rspeaker", 1.0); } diff --git a/src/mame/includes/mcr.h b/src/mame/includes/mcr.h index 12742d2cc1d..6205110d251 100644 --- a/src/mame/includes/mcr.h +++ b/src/mame/includes/mcr.h @@ -17,6 +17,7 @@ #include "machine/z80pio.h" #include "machine/z80dart.h" #include "machine/watchdog.h" +#include "audio/bally.h" #include "audio/midway.h" #include "audio/csd.h" #include "sound/samples.h" @@ -126,7 +127,7 @@ protected: optional_device m_cheap_squeak_deluxe; optional_device m_sounds_good; optional_device m_turbo_cheap_squeak; - optional_device m_squawk_n_talk; + optional_device m_squawk_n_talk; optional_device m_samples; required_device m_gfxdecode; required_device m_palette; diff --git a/src/mame/layout/by35.lay b/src/mame/layout/by35.lay index 9d6b30a7bc8..eeb77c790d8 100644 --- a/src/mame/layout/by35.lay +++ b/src/mame/layout/by35.lay @@ -725,6 +725,7 @@ + @@ -1012,18 +1013,6 @@ - - - - - - - - - - - - @@ -1184,20 +1173,32 @@ - + - - - + + + + + + + + + + + - - - + + + + - - - + + + + + + -- cgit v1.2.3