summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2018-12-01 09:49:05 -0500
committer AJR <ajrhacker@users.noreply.github.com>2018-12-01 09:49:05 -0500
commit61324bebc8d6c6be8fb20a6d946d661a3be8e6ac (patch)
tree52c4a771ab2773c0ea5ec8aded283124f9852f04
parent0e6bff870e68bae444caa4ff607a4c65183a7276 (diff)
balsente.cpp: Separate emulation (and ROM) of 6VB audio board from driver
-rw-r--r--scripts/target/mame/arcade.lua2
-rw-r--r--src/mame/audio/sente6vb.cpp526
-rw-r--r--src/mame/audio/sente6vb.h99
-rw-r--r--src/mame/drivers/balsente.cpp218
-rw-r--r--src/mame/includes/balsente.h50
-rw-r--r--src/mame/machine/balsente.cpp317
6 files changed, 645 insertions, 567 deletions
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua
index 2c2dca39817..d2303668b4b 100644
--- a/scripts/target/mame/arcade.lua
+++ b/scripts/target/mame/arcade.lua
@@ -2708,6 +2708,8 @@ files {
MAME_DIR .. "src/mame/audio/midway.h",
MAME_DIR .. "src/mame/audio/csd.cpp",
MAME_DIR .. "src/mame/audio/csd.h",
+ MAME_DIR .. "src/mame/audio/sente6vb.cpp",
+ MAME_DIR .. "src/mame/audio/sente6vb.h",
}
createMAMEProjects(_target, _subtarget, "namco")
diff --git a/src/mame/audio/sente6vb.cpp b/src/mame/audio/sente6vb.cpp
new file mode 100644
index 00000000000..358e646182d
--- /dev/null
+++ b/src/mame/audio/sente6vb.cpp
@@ -0,0 +1,526 @@
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles
+/***************************************************************************
+
+ Bally/Sente 6VB audio board emulation
+
+ This serial audio board appears to be based on the Sequential Circuits
+ Six-Trak synthesizer.
+
+ The later revision of this board replaces the 8253-5 PIT and much
+ associated logic with a ST1001 custom gate array.
+
+****************************************************************************
+
+ Memory map
+
+****************************************************************************
+
+ ========================================================================
+ Z80 CPU
+ ========================================================================
+ 0000-1FFF R xxxxxxxx Program ROM
+ 2000-3FFF R/W xxxxxxxx Option RAM/ROM (assumed to be RAM for now)
+ 4000-5FFF R/W xxxxxxxx Program RAM
+ 6000-6001 W xxxxxxxx 6850 UART output (to main board)
+ E000-E001 R xxxxxxxx 6850 UART input (from main board)
+ ========================================================================
+ 0000-0003 R/W xxxxxxxx 8253 counter chip I/O
+ 0008 R ------xx Counter state
+ R ------x- State of counter #0 OUT signal (active high)
+ R -------x State of flip-flop feeding counter #0 (active low)
+ 0008 W --xxxxxx Counter control
+ W --x----- NMI enable (1=enabled, 0=disabled/clear)
+ W ---x---- CLEAR on flip-flop feeding counter #0 (active low)
+ W ----x--- Input of flip-flop feeding counter #0
+ W -----x-- PRESET on flip-flop feeding counter #0 (active low)
+ W ------x- GATE signal for counter #0 (active high)
+ W -------x Audio enable
+ 000A W --xxxxxx DAC data latch (upper 6 bits)
+ 000B W xxxxxx-- DAC data latch (lower 6 bits)
+ 000C W -----xxx CEM3394 register select
+ 000E W --xxxxxx CEM3394 chip enable (active high)
+ W --x----- CEM3394 chip 0 enable
+ W ---x---- CEM3394 chip 1 enable
+ W ----x--- CEM3394 chip 2 enable
+ W -----x-- CEM3394 chip 3 enable
+ W ------x- CEM3394 chip 4 enable
+ W -------x CEM3394 chip 5 enable
+ ========================================================================
+ Interrupts:
+ INT generated by counter #2 OUT signal on 8253
+ NMI generated by 6850 UART
+ ========================================================================
+
+***************************************************************************/
+
+#include "emu.h"
+#include "audio/sente6vb.h"
+#include "cpu/z80/z80.h"
+#include "machine/clock.h"
+#include "speaker.h"
+
+
+#define LOG_CEM_WRITES 0
+
+DEFINE_DEVICE_TYPE(SENTE6VB, sente6vb_device, "sente6vb", "Bally Sente 6VB Audio Board")
+
+/*************************************
+ *
+ * Sound CPU memory handlers
+ *
+ *************************************/
+
+void sente6vb_device::mem_map(address_map &map)
+{
+ map(0x0000, 0x1fff).rom().region("audiocpu", 0);
+ map(0x2000, 0x5fff).ram();
+ map(0x6000, 0x6001).mirror(0x1ffe).w(m_uart, FUNC(acia6850_device::write));
+ map(0xe000, 0xe001).mirror(0x1ffe).r(m_uart, FUNC(acia6850_device::read));
+}
+
+
+void sente6vb_device::io_map(address_map &map)
+{
+ map.global_mask(0xff);
+ map(0x00, 0x03).rw(m_pit, FUNC(pit8253_device::read), FUNC(pit8253_device::write));
+ map(0x08, 0x0f).r(FUNC(sente6vb_device::counter_state_r));
+ map(0x08, 0x09).w(FUNC(sente6vb_device::counter_control_w));
+ map(0x0a, 0x0b).w(FUNC(sente6vb_device::dac_data_w));
+ map(0x0c, 0x0d).w(FUNC(sente6vb_device::register_addr_w));
+ map(0x0e, 0x0f).w(FUNC(sente6vb_device::chip_select_w));
+}
+
+
+/*************************************
+ *
+ * Device configuration
+ *
+ *************************************/
+
+void sente6vb_device::device_add_mconfig(machine_config &config)
+{
+ Z80(config, m_audiocpu, 8_MHz_XTAL / 2);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &sente6vb_device::mem_map);
+ m_audiocpu->set_addrmap(AS_IO, &sente6vb_device::io_map);
+
+ ACIA6850(config, m_uart, 0);
+ m_uart->txd_handler().set([this] (int state) { m_send_cb(state); });
+ m_uart->irq_handler().set([this] (int state) { m_uint = bool(state); });
+
+ clock_device &uartclock(CLOCK(config, "uartclock", 8_MHz_XTAL / 16)); // 500 kHz
+ uartclock.signal_handler().set(FUNC(sente6vb_device::uart_clock_w));
+ uartclock.signal_handler().append(m_uart, FUNC(acia6850_device::write_txc));
+ uartclock.signal_handler().append(m_uart, FUNC(acia6850_device::write_rxc));
+
+ TIMER(config, m_counter_0_timer, 0).configure_generic(timer_device::expired_delegate(FUNC(sente6vb_device::clock_counter_0_ff), this));
+
+ PIT8253(config, m_pit, 0);
+ m_pit->out_handler<0>().set(FUNC(sente6vb_device::counter_0_set_out));
+ m_pit->out_handler<2>().set_inputline(m_audiocpu, INPUT_LINE_IRQ0);
+ m_pit->set_clk<1>(8_MHz_XTAL / 4);
+ m_pit->set_clk<2>(8_MHz_XTAL / 4);
+
+ SPEAKER(config, "mono").front_center();
+
+ for (auto &cem_device : m_cem_device)
+ {
+ CEM3394(config, cem_device, 0);
+ cem_device->set_vco_zero_freq(431.894);
+ cem_device->set_filter_zero_freq(1300.0);
+ cem_device->add_route(ALL_OUTPUTS, "mono", 0.90);
+ }
+
+ m_cem_device[0]->set_ext_input_callback(FUNC(sente6vb_device::noise_gen_0), this);
+ m_cem_device[1]->set_ext_input_callback(FUNC(sente6vb_device::noise_gen_1), this);
+ m_cem_device[2]->set_ext_input_callback(FUNC(sente6vb_device::noise_gen_2), this);
+ m_cem_device[3]->set_ext_input_callback(FUNC(sente6vb_device::noise_gen_3), this);
+ m_cem_device[4]->set_ext_input_callback(FUNC(sente6vb_device::noise_gen_4), this);
+ m_cem_device[5]->set_ext_input_callback(FUNC(sente6vb_device::noise_gen_5), this);
+}
+
+
+/*************************************
+ *
+ * ROM definition
+ *
+ *************************************/
+
+ROM_START( sente6vb )
+ ROM_REGION( 0x2000, "audiocpu", 0 )
+ ROM_LOAD( "8002-10 9-25-84.5", 0x0000, 0x2000, CRC(4dd0a525) SHA1(f0c447adc5b67917851a9df978df851247e75c43) )
+ROM_END
+
+
+const tiny_rom_entry *sente6vb_device::device_rom_region() const
+{
+ return ROM_NAME(sente6vb);
+}
+
+
+/*************************************
+ *
+ * Device initialization
+ *
+ *************************************/
+
+sente6vb_device::sente6vb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, SENTE6VB, tag, owner, clock)
+ , m_pit(*this, "pit")
+ , m_counter_0_timer(*this, "8253_0_timer")
+ , m_cem_device(*this, "cem%u", 1U)
+ , m_audiocpu(*this, "audiocpu")
+ , m_uart(*this, "uart")
+ , m_send_cb(*this)
+ , m_clock_out_cb(*this)
+{
+}
+
+
+void sente6vb_device::device_start()
+{
+ // create the polynomial tables
+ poly17_init();
+
+ m_send_cb.resolve_safe();
+ m_clock_out_cb.resolve_safe();
+ m_uart->write_cts(0);
+ m_uart->write_dcd(0);
+
+ save_item(NAME(m_counter_control));
+ save_item(NAME(m_counter_0_ff));
+ save_item(NAME(m_counter_0_out));
+ save_item(NAME(m_counter_0_timer_active));
+
+ save_item(NAME(m_dac_value));
+ save_item(NAME(m_dac_register));
+ save_item(NAME(m_chip_select));
+
+ save_item(NAME(m_uint));
+
+ save_item(NAME(m_noise_position));
+}
+
+
+void sente6vb_device::device_reset()
+{
+ // reset the manual counter 0 clock
+ m_counter_control = 0x00;
+ m_counter_0_ff = false;
+ m_counter_0_out = false;
+ m_counter_0_timer_active = false;
+ m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+
+ // reset the CEM3394 I/O states
+ m_dac_value = 0;
+ m_dac_register = 0;
+ m_chip_select = 0x3f;
+
+ // reset the noise generator
+ memset(m_noise_position, 0, sizeof(m_noise_position));
+}
+
+
+
+/*************************************
+ *
+ * MM5837 noise generator
+ *
+ * NOTE: this is stolen straight from
+ * POKEY.c
+ *
+ *************************************/
+
+void sente6vb_device::poly17_init()
+{
+ uint32_t i, x = 0;
+ uint8_t *p;
+
+ // allocate memory
+ p = m_poly17;
+
+ // generate the polynomial
+ for (i = 0; i < POLY17_SIZE; i++)
+ {
+ // store new values
+ *p++ = x & 1;
+
+ // calculate next bit
+ x = ((x << POLY17_SHL) + (x >> POLY17_SHR) + POLY17_ADD) & POLY17_SIZE;
+ }
+}
+
+
+inline void sente6vb_device::noise_gen_chip(int chip, int count, short *buffer)
+{
+ // noise generator runs at 100kHz
+ uint32_t step = (100000 << 14) / cem3394_device::SAMPLE_RATE;
+ uint32_t noise_counter = m_noise_position[chip];
+
+ while (count--)
+ {
+ *buffer++ = m_poly17[(noise_counter >> 14) & POLY17_SIZE] << 12;
+ noise_counter += step;
+ }
+
+ // remember the noise position
+ m_noise_position[chip] = noise_counter;
+}
+
+CEM3394_EXT_INPUT(sente6vb_device::noise_gen_0) { noise_gen_chip(0, count, buffer); }
+CEM3394_EXT_INPUT(sente6vb_device::noise_gen_1) { noise_gen_chip(1, count, buffer); }
+CEM3394_EXT_INPUT(sente6vb_device::noise_gen_2) { noise_gen_chip(2, count, buffer); }
+CEM3394_EXT_INPUT(sente6vb_device::noise_gen_3) { noise_gen_chip(3, count, buffer); }
+CEM3394_EXT_INPUT(sente6vb_device::noise_gen_4) { noise_gen_chip(4, count, buffer); }
+CEM3394_EXT_INPUT(sente6vb_device::noise_gen_5) { noise_gen_chip(5, count, buffer); }
+
+
+/*************************************
+ *
+ * 6850 UART communications
+ *
+ *************************************/
+
+WRITE_LINE_MEMBER(sente6vb_device::rec_w)
+{
+ m_uart->write_rxd(state);
+}
+
+
+WRITE_LINE_MEMBER(sente6vb_device::uart_clock_w)
+{
+ if (state && BIT(m_counter_control, 5))
+ m_audiocpu->set_input_line(INPUT_LINE_NMI, m_uint ? ASSERT_LINE : CLEAR_LINE);
+
+ m_clock_out_cb(!state);
+}
+
+
+
+/*************************************
+ *
+ * Sound CPU counter 0 emulation
+ *
+ *************************************/
+
+WRITE_LINE_MEMBER(sente6vb_device::counter_0_set_out)
+{
+ // OUT on counter 0 is hooked to the GATE line on counter 1 through an inverter
+ m_pit->write_gate1(!state);
+
+ // remember the out state
+ m_counter_0_out = state;
+}
+
+
+WRITE_LINE_MEMBER(sente6vb_device::set_counter_0_ff)
+{
+ // the flip/flop output is inverted, so if we went high to low, that's a clock
+ m_pit->write_clk0(!state);
+
+ // remember the new state
+ m_counter_0_ff = state;
+}
+
+
+TIMER_DEVICE_CALLBACK_MEMBER(sente6vb_device::clock_counter_0_ff)
+{
+ // clock the D value through the flip-flop
+ set_counter_0_ff(BIT(m_counter_control, 3));
+}
+
+
+void sente6vb_device::update_counter_0_timer()
+{
+ double maxfreq = 0.0;
+ int i;
+
+ // if there's already a timer, remove it
+ if (m_counter_0_timer_active)
+ m_counter_0_timer->reset();
+ m_counter_0_timer_active = false;
+
+ // find the counter with the maximum frequency
+ // this is used to calibrate the timers at startup
+ for (i = 0; i < 6; i++)
+ if (m_cem_device[i]->get_parameter(cem3394_device::FINAL_GAIN) < 10.0)
+ {
+ double tempfreq;
+
+ // if the filter resonance is high, then they're calibrating the filter frequency
+ if (m_cem_device[i]->get_parameter(cem3394_device::FILTER_RESONANCE) > 0.9)
+ tempfreq = m_cem_device[i]->get_parameter(cem3394_device::FILTER_FREQENCY);
+
+ // otherwise, they're calibrating the VCO frequency
+ else
+ tempfreq = m_cem_device[i]->get_parameter(cem3394_device::VCO_FREQUENCY);
+
+ if (tempfreq > maxfreq) maxfreq = tempfreq;
+ }
+
+ // reprime the timer
+ if (maxfreq > 0.0)
+ {
+ m_counter_0_timer_active = true;
+ m_counter_0_timer->adjust(attotime::from_hz(maxfreq), 0, attotime::from_hz(maxfreq));
+ }
+}
+
+
+
+/*************************************
+ *
+ * Sound CPU counter handlers
+ *
+ *************************************/
+
+READ8_MEMBER(sente6vb_device::counter_state_r)
+{
+ // bit D0 is the inverse of the flip-flop state
+ int result = !m_counter_0_ff;
+
+ // bit D1 is the OUT value from counter 0
+ if (m_counter_0_out) result |= 0x02;
+
+ return result;
+}
+
+
+WRITE8_MEMBER(sente6vb_device::counter_control_w)
+{
+ uint8_t diff_counter_control = m_counter_control ^ data;
+
+ // set the new global value
+ m_counter_control = data;
+
+ // bit D0 enables/disables audio
+ if (BIT(diff_counter_control, 0))
+ {
+ for (auto & elem : m_cem_device)
+ elem->set_output_gain(0, BIT(data, 0) ? 1.0 : 0);
+ }
+
+ // bit D1 is hooked to counter 0's gate
+ if (BIT(diff_counter_control, 1))
+ {
+ // if we gate on, start a pulsing timer to clock it
+ if (BIT(data, 1) && !m_counter_0_timer_active)
+ {
+ update_counter_0_timer();
+ }
+
+ // if we gate off, remove the timer
+ else if (!BIT(data, 1) && m_counter_0_timer_active)
+ {
+ m_counter_0_timer->reset();
+ m_counter_0_timer_active = false;
+ }
+ }
+
+ // set the actual gate
+ m_pit->write_gate0(BIT(data, 1));
+
+ // bits D2 and D4 control the clear/reset flags on the flip-flop that feeds counter 0
+ if (!BIT(data, 4))
+ set_counter_0_ff(0);
+ else if (!BIT(data, 2))
+ set_counter_0_ff(1);
+
+ // bit 5 clears the NMI interrupt
+ if (BIT(diff_counter_control, 5) && !BIT(data, 5))
+ m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+}
+
+
+
+/*************************************
+ *
+ * CEM3394 Interfaces
+ *
+ *************************************/
+
+WRITE8_MEMBER(sente6vb_device::chip_select_w)
+{
+ static constexpr uint8_t register_map[8] =
+ {
+ cem3394_device::VCO_FREQUENCY,
+ cem3394_device::FINAL_GAIN,
+ cem3394_device::FILTER_RESONANCE,
+ cem3394_device::FILTER_FREQENCY,
+ cem3394_device::MIXER_BALANCE,
+ cem3394_device::MODULATION_AMOUNT,
+ cem3394_device::PULSE_WIDTH,
+ cem3394_device::WAVE_SELECT
+ };
+
+ double voltage = (double)m_dac_value * (8.0 / 4096.0) - 4.0;
+ int diffchip = data ^ m_chip_select, i;
+ int reg = register_map[m_dac_register];
+
+ // remember the new select value
+ m_chip_select = data;
+
+ // check all six chip enables
+ for (i = 0; i < 6; i++)
+ if ((diffchip & (1 << i)) && (data & (1 << i)))
+ {
+#if LOG_CEM_WRITES
+ double temp = 0;
+
+ // remember the previous value
+ temp =
+#endif
+ m_cem_device[i]->get_parameter(reg);
+
+ // set the voltage
+ m_cem_device[i]->set_voltage(reg, voltage);
+
+ // only log changes
+#if LOG_CEM_WRITES
+ if (temp != m_cem_device[i]->get_parameter(reg))
+ {
+ static const char *const names[] =
+ {
+ "VCO_FREQUENCY",
+ "FINAL_GAIN",
+ "FILTER_RESONANCE",
+ "FILTER_FREQENCY",
+ "MIXER_BALANCE",
+ "MODULATION_AMOUNT",
+ "PULSE_WIDTH",
+ "WAVE_SELECT"
+ };
+ logerror("s%04X: CEM#%d:%s=%f\n", m_audiocpu->pcbase(), i, names[m_dac_register], voltage);
+ }
+#endif
+ }
+
+ // if a timer for counter 0 is running, recompute
+ if (m_counter_0_timer_active)
+ update_counter_0_timer();
+}
+
+
+
+WRITE8_MEMBER(sente6vb_device::dac_data_w)
+{
+ // LSB or MSB?
+ if (offset & 1)
+ m_dac_value = (m_dac_value & 0xfc0) | ((data >> 2) & 0x03f);
+ else
+ m_dac_value = (m_dac_value & 0x03f) | ((data << 6) & 0xfc0);
+
+ // if there are open channels, force the values in
+ if ((m_chip_select & 0x3f) != 0x3f)
+ {
+ uint8_t temp = m_chip_select;
+ chip_select_w(space, 0, 0x3f);
+ chip_select_w(space, 0, temp);
+ }
+}
+
+
+WRITE8_MEMBER(sente6vb_device::register_addr_w)
+{
+ m_dac_register = data & 7;
+}
diff --git a/src/mame/audio/sente6vb.h b/src/mame/audio/sente6vb.h
new file mode 100644
index 00000000000..ae1afa49a3a
--- /dev/null
+++ b/src/mame/audio/sente6vb.h
@@ -0,0 +1,99 @@
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles
+/***************************************************************************
+
+ Bally/Sente 6VB audio board emulation
+
+***************************************************************************/
+
+#ifndef MAME_AUDIO_SENTE6VB_H
+#define MAME_AUDIO_SENTE6VB_H
+
+#pragma once
+
+#include "machine/6850acia.h"
+#include "machine/pit8253.h"
+#include "machine/timer.h"
+#include "sound/cem3394.h"
+
+
+#define POLY17_BITS 17
+#define POLY17_SIZE ((1 << POLY17_BITS) - 1)
+#define POLY17_SHL 7
+#define POLY17_SHR 10
+#define POLY17_ADD 0x18000
+
+
+class sente6vb_device : public device_t
+{
+public:
+ sente6vb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+
+ auto send_cb() { return m_send_cb.bind(); }
+ auto clock_out_cb() { return m_clock_out_cb.bind(); }
+
+ DECLARE_WRITE_LINE_MEMBER(rec_w);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ DECLARE_READ8_MEMBER(counter_state_r);
+ DECLARE_WRITE8_MEMBER(counter_control_w);
+ DECLARE_WRITE8_MEMBER(chip_select_w);
+ DECLARE_WRITE8_MEMBER(dac_data_w);
+ DECLARE_WRITE8_MEMBER(register_addr_w);
+ DECLARE_WRITE_LINE_MEMBER(uart_clock_w);
+ DECLARE_WRITE_LINE_MEMBER(counter_0_set_out);
+
+ void update_counter_0_timer();
+ TIMER_DEVICE_CALLBACK_MEMBER(clock_counter_0_ff);
+ void poly17_init();
+ DECLARE_WRITE_LINE_MEMBER(set_counter_0_ff);
+ inline void noise_gen_chip(int chip, int count, short *buffer);
+ CEM3394_EXT_INPUT(noise_gen_0);
+ CEM3394_EXT_INPUT(noise_gen_1);
+ CEM3394_EXT_INPUT(noise_gen_2);
+ CEM3394_EXT_INPUT(noise_gen_3);
+ CEM3394_EXT_INPUT(noise_gen_4);
+ CEM3394_EXT_INPUT(noise_gen_5);
+
+ void mem_map(address_map &map);
+ void io_map(address_map &map);
+
+ required_device<pit8253_device> m_pit;
+ required_device<timer_device> m_counter_0_timer;
+ required_device_array<cem3394_device, 6> m_cem_device;
+ required_device<cpu_device> m_audiocpu;
+ required_device<acia6850_device> m_uart;
+
+ devcb_write_line m_send_cb;
+ devcb_write_line m_clock_out_cb;
+
+ // manually clocked counter 0 states
+ uint8_t m_counter_control;
+ bool m_counter_0_ff;
+ bool m_counter_0_out;
+ bool m_counter_0_timer_active;
+
+ // random number generator states
+ uint8_t m_poly17[POLY17_SIZE + 1];
+
+ // CEM3394 DAC control states
+ uint16_t m_dac_value;
+ uint8_t m_dac_register;
+ uint8_t m_chip_select;
+
+ // sound CPU 6850 states
+ bool m_uint;
+
+ // noise generator states
+ uint32_t m_noise_position[6];
+};
+
+DECLARE_DEVICE_TYPE(SENTE6VB, sente6vb_device)
+
+#endif // MAME_AUDIO_SENTE6VB_H
diff --git a/src/mame/drivers/balsente.cpp b/src/mame/drivers/balsente.cpp
index 471076f8e1b..3c13b98fd37 100644
--- a/src/mame/drivers/balsente.cpp
+++ b/src/mame/drivers/balsente.cpp
@@ -68,7 +68,7 @@
****************************************************************************
========================================================================
- CPU #1
+ 68A09E CPU
========================================================================
0000-007F R/W xxxxxxxx Sprite RAM (32 entries x 4 bytes)
R/W x------- (0: Vertical flip)
@@ -128,42 +128,6 @@
========================================================================
- CPU #2
- ========================================================================
- 0000-1FFF R xxxxxxxx Program ROM
- 2000-3FFF R/W xxxxxxxx Option RAM/ROM (assumed to be RAM for now)
- 4000-5FFF R/W xxxxxxxx Program RAM
- 6000-6001 W xxxxxxxx 6850 UART output (to main board)
- E000-E001 R xxxxxxxx 6850 UART input (from main board)
- ========================================================================
- 0000-0003 R/W xxxxxxxx 8253 counter chip I/O
- 0008 R ------xx Counter state
- R ------x- State of counter #0 OUT signal (active high)
- R -------x State of flip-flop feeding counter #0 (active low)
- 0008 W --xxxxxx Counter control
- W --x----- NMI enable (1=enabled, 0=disabled/clear)
- W ---x---- CLEAR on flip-flop feeding counter #0 (active low)
- W ----x--- Input of flip-flop feeding counter #0
- W -----x-- PRESET on flip-flop feeding counter #0 (active low)
- W ------x- GATE signal for counter #0 (active high)
- W -------x Audio enable
- 000A W --xxxxxx DAC data latch (upper 6 bits)
- 000B W xxxxxx-- DAC data latch (lower 6 bits)
- 000C W -----xxx CEM3394 register select
- 000E W --xxxxxx CEM3394 chip enable (active high)
- W --x----- CEM3394 chip 0 enable
- W ---x---- CEM3394 chip 1 enable
- W ----x--- CEM3394 chip 2 enable
- W -----x-- CEM3394 chip 3 enable
- W ------x- CEM3394 chip 4 enable
- W -------x CEM3394 chip 5 enable
- ========================================================================
- Interrupts:
- INT generated by counter #2 OUT signal on 8253
- NMI generated by 6850 UART
- ========================================================================
-
- ========================================================================
Shrike SHM
Many thanks to Owen Rubin and Brian Deuel ( http://www.atarimuseum.com/orubin/ ) for their time,
interest, and memories!
@@ -247,12 +211,11 @@ DIP locations verified for:
#include "cpu/z80/z80.h"
#include "cpu/m6809/m6809.h"
#include "cpu/m68000/m68000.h"
-#include "machine/clock.h"
#include "machine/watchdog.h"
+#include "audio/sente6vb.h"
#include "machine/z80ctc.h"
#include "sound/ay8910.h"
#include "sound/msm5205.h"
-#include "sound/cem3394.h"
#include "speaker.h"
#include "stocker.lh"
@@ -311,27 +274,6 @@ void balsente_state::cpu1_smudge_map(address_map &map)
*
*************************************/
-void balsente_state::cpu2_map(address_map &map)
-{
- map(0x0000, 0x1fff).rom();
- map(0x2000, 0x5fff).ram();
- map(0x6000, 0x6001).mirror(0x1ffe).w("audiouart", FUNC(acia6850_device::write));
- map(0xe000, 0xe001).mirror(0x1ffe).r("audiouart", FUNC(acia6850_device::read));
-}
-
-
-void balsente_state::cpu2_io_map(address_map &map)
-{
- map.global_mask(0xff);
- map(0x00, 0x03).rw(m_pit, FUNC(pit8253_device::read), FUNC(pit8253_device::write));
- map(0x08, 0x0f).r(FUNC(balsente_state::counter_state_r));
- map(0x08, 0x09).w(FUNC(balsente_state::counter_control_w));
- map(0x0a, 0x0b).w(FUNC(balsente_state::dac_data_w));
- map(0x0c, 0x0d).w(FUNC(balsente_state::register_addr_w));
- map(0x0e, 0x0f).w(FUNC(balsente_state::chip_select_w));
-}
-
-
// TODO: banking (Trivial hardware from Maibesa)
void balsente_state::cpu2_triviamb_map(address_map &map)
{
@@ -1343,38 +1285,16 @@ void balsente_state::balsente(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &balsente_state::cpu1_map);
m_maincpu->set_vblank_int("screen", FUNC(balsente_state::update_analog_inputs));
- Z80(config, m_audiocpu, 8_MHz_XTAL / 2); /* xtal verified but not speed */
- m_audiocpu->set_addrmap(AS_PROGRAM, &balsente_state::cpu2_map);
- m_audiocpu->set_addrmap(AS_IO, &balsente_state::cpu2_io_map);
-
ACIA6850(config, m_acia, 0);
- m_acia->txd_handler().set(m_audiouart, FUNC(acia6850_device::write_rxd));
+ m_acia->txd_handler().set("audio6vb", FUNC(sente6vb_device::rec_w));
m_acia->irq_handler().set_inputline(m_maincpu, M6809_FIRQ_LINE);
- ACIA6850(config, m_audiouart, 0);
- m_audiouart->txd_handler().set(m_acia, FUNC(acia6850_device::write_rxd));
- m_audiouart->irq_handler().set([this] (int state) { m_uint = bool(state); });
-
- clock_device &uartclock(CLOCK(config, "uartclock", 8_MHz_XTAL / 16)); // 500 kHz
- uartclock.signal_handler().set(FUNC(balsente_state::uint_propagate_w));
- uartclock.signal_handler().append(m_audiouart, FUNC(acia6850_device::write_txc));
- uartclock.signal_handler().append(m_audiouart, FUNC(acia6850_device::write_rxc));
- uartclock.signal_handler().append(m_acia, FUNC(acia6850_device::write_txc)).invert();
- uartclock.signal_handler().append(m_acia, FUNC(acia6850_device::write_rxc)).invert();
-
X2212(config, "nov0").set_auto_save(true); // system NOVRAM
X2212(config, "nov1").set_auto_save(true); // cart NOVRAM
WATCHDOG_TIMER(config, "watchdog");
TIMER(config, m_scanline_timer, 0).configure_generic(timer_device::expired_delegate(FUNC(balsente_state::interrupt_timer), this));
- TIMER(config, m_counter_0_timer, 0).configure_generic(timer_device::expired_delegate(FUNC(balsente_state::clock_counter_0_ff), this));
-
- PIT8253(config, m_pit, 0);
- m_pit->out_handler<0>().set(FUNC(balsente_state::counter_0_set_out));
- m_pit->out_handler<2>().set_inputline(m_audiocpu, INPUT_LINE_IRQ0);
- m_pit->set_clk<1>(8_MHz_XTAL / 4);
- m_pit->set_clk<2>(8_MHz_XTAL / 4);
LS259(config, m_outlatch); // U9H
// these outputs are generally used to control the various lamps
@@ -1399,43 +1319,10 @@ void balsente_state::balsente(machine_config &config)
/* sound hardware */
- SPEAKER(config, "mono").front_center();
-
- CEM3394(config, m_cem_device[0], 0);
- m_cem_device[0]->set_ext_input_callback(FUNC(balsente_state::noise_gen_0), this);
- m_cem_device[0]->set_vco_zero_freq(431.894);
- m_cem_device[0]->set_filter_zero_freq(1300.0);
- m_cem_device[0]->add_route(ALL_OUTPUTS, "mono", 0.90);
-
- CEM3394(config, m_cem_device[1], 0);
- m_cem_device[1]->set_ext_input_callback(FUNC(balsente_state::noise_gen_1), this);
- m_cem_device[1]->set_vco_zero_freq(431.894);
- m_cem_device[1]->set_filter_zero_freq(1300.0);
- m_cem_device[1]->add_route(ALL_OUTPUTS, "mono", 0.90);
-
- CEM3394(config, m_cem_device[2], 0);
- m_cem_device[2]->set_ext_input_callback(FUNC(balsente_state::noise_gen_2), this);
- m_cem_device[2]->set_vco_zero_freq(431.894);
- m_cem_device[2]->set_filter_zero_freq(1300.0);
- m_cem_device[2]->add_route(ALL_OUTPUTS, "mono", 0.90);
-
- CEM3394(config, m_cem_device[3], 0);
- m_cem_device[3]->set_ext_input_callback(FUNC(balsente_state::noise_gen_3), this);
- m_cem_device[3]->set_vco_zero_freq(431.894);
- m_cem_device[3]->set_filter_zero_freq(1300.0);
- m_cem_device[3]->add_route(ALL_OUTPUTS, "mono", 0.90);
-
- CEM3394(config, m_cem_device[4], 0);
- m_cem_device[4]->set_ext_input_callback(FUNC(balsente_state::noise_gen_4), this);
- m_cem_device[4]->set_vco_zero_freq(431.894);
- m_cem_device[4]->set_filter_zero_freq(1300.0);
- m_cem_device[4]->add_route(ALL_OUTPUTS, "mono", 0.90);
-
- CEM3394(config, m_cem_device[5], 0);
- m_cem_device[5]->set_ext_input_callback(FUNC(balsente_state::noise_gen_5), this);
- m_cem_device[5]->set_vco_zero_freq(431.894);
- m_cem_device[5]->set_filter_zero_freq(1300.0);
- m_cem_device[5]->add_route(ALL_OUTPUTS, "mono", 0.90);
+ sente6vb_device &audio6vb(SENTE6VB(config, "audio6vb"));
+ audio6vb.send_cb().set(m_acia, FUNC(acia6850_device::write_rxd));
+ audio6vb.clock_out_cb().set(m_acia, FUNC(acia6850_device::write_txc));
+ audio6vb.clock_out_cb().append(m_acia, FUNC(acia6850_device::write_rxc));
}
@@ -1465,6 +1352,7 @@ void balsente_state::triviamb(machine_config &config)
balsente(config);
// sound PCB has: 2x Z80CTC, 2x AY8910A, 1x M5205, 1x 8MHz XTAL (divisor unknown for every device)
+ Z80(config, m_audiocpu, 8_MHz_XTAL / 2);
m_audiocpu->set_addrmap(AS_PROGRAM, &balsente_state::cpu2_triviamb_map);
m_audiocpu->set_addrmap(AS_IO, &balsente_state::cpu2_triviamb_io_map);
@@ -1476,12 +1364,8 @@ void balsente_state::triviamb(machine_config &config)
MSM5205(config, "msm", 384000).add_route(ALL_OUTPUTS, "mono", 0.90);
- config.device_remove("cem1");
- config.device_remove("cem2");
- config.device_remove("cem3");
- config.device_remove("cem4");
- config.device_remove("cem5");
- config.device_remove("cem6");
+ m_acia->txd_handler().set_nop();
+ config.device_remove("audiovb");
}
/*************************************
@@ -1494,16 +1378,10 @@ void balsente_state::triviamb(machine_config &config)
ROM_REGION( 0x00104, "motherbrd_pals", 0) /* Motherboard PAL's */ \
ROM_LOAD( "u01508001100b.u20f", 0x00000, 0x00104, CRC(2d2e2102) SHA1(de094f9955d6085f1714f1aa7c71e1f047e96c5f) ) /* PAL16L8, dumped from Board 007-8001-01-0C Rev C1 */
-#define SOUNDBOARD_ROMS \
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 */ \
- ROM_LOAD( "8002-10 9-25-84.5", 0x00000, 0x2000, CRC(4dd0a525) SHA1(f0c447adc5b67917851a9df978df851247e75c43) )
-
ROM_START( sentetst )
ROM_REGION( 0x40000, "maincpu", 0 ) /* 64k for code for the first CPU, plus 128k of banked ROMs */
ROM_LOAD( "sdiagef.bin", 0x2e000, 0x2000, CRC(2a39fc53) SHA1(04ea68bfad455cc928e57390eba5597c38bbab69) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "sdiaggr0.bin", 0x00000, 0x2000, CRC(5e0ff62a) SHA1(3f0ebebb2f58530af7fac57a4780dfb37ef1ee1d) )
@@ -1522,8 +1400,6 @@ ROM_START( cshift )
ROM_LOAD( "cs-cd.bin", 0x2c000, 0x2000, CRC(f555a0b2) SHA1(49668f8363fdcec4686ec80bf2e99003cd11e2c1) )
ROM_LOAD( "cs-ef.bin", 0x2e000, 0x2000, CRC(368b1ce3) SHA1(8003ef99adcb26feb42e1b0945b1185e438582b2) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "cs-gr0.bin", 0x00000, 0x2000, CRC(67f9d3b3) SHA1(4f3f80e4272b20611206636b6ccb627087efd0c3) )
ROM_LOAD( "cs-gr1.bin", 0x02000, 0x2000, CRC(78973d50) SHA1(de7891ef47c277d733d9b4810d68621718644655) )
@@ -1546,8 +1422,6 @@ ROM_START( gghost )
ROM_LOAD( "ggh-cd.bin", 0x2c000, 0x2000, CRC(d3d75f84) SHA1(f19f99ea05ad5b7e4b0485e80d7b6a329b8ef4d8) )
ROM_LOAD( "ggh-ef.bin", 0x2e000, 0x2000, CRC(a02b4243) SHA1(f242fc017c9ae1997409825c34e8f5c6e6a0615e) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "ggh-gr0.bin", 0x00000, 0x2000, CRC(03515526) SHA1(bceb7c8c3aa4c39b6cf1b976c5765c920399fe31) )
ROM_LOAD( "ggh-gr1.bin", 0x02000, 0x2000, CRC(b4293435) SHA1(5e2b96c19c4f5c63a5afa2de504d29fe64a4c908) )
@@ -1568,8 +1442,6 @@ ROM_START( hattrick )
ROM_LOAD( "rom-cd.u3a", 0x2c000, 0x2000, CRC(fc44f36c) SHA1(227d0c93c579d743b615b1fa6da56128e8202e51) )
ROM_LOAD( "rom-ef.u2a", 0x2e000, 0x2000, CRC(d8f910fb) SHA1(b74a305dd848c7bf574e4b0aa32147b8d5c89e9e) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "rom-gr0.u9b", 0x00000, 0x2000, CRC(9f41baba) SHA1(fa817a8e4d2f7b86a2294132e3991f7b6d8cb11a) )
ROM_LOAD( "rom-gr1.u8b", 0x02000, 0x2000, CRC(951f08c9) SHA1(059a575dd35cd8e822e12ac2606b47b6272bbb41) )
@@ -1584,8 +1456,6 @@ ROM_START( teamht )
ROM_LOAD( "hattrk.u7a", 0x14000, 0x4000, CRC(5f2a0b24) SHA1(da1950a7e11014e47438a7c5831433390c1b1fd3) )
ROM_LOAD( "hattrk.u1a", 0x2c000, 0x4000, CRC(6c6cf2be) SHA1(80e82ae4bd129000e74c4a5fd06d2109d5417e39) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "hattrk.u6b", 0x00000, 0x4000, CRC(6e299728) SHA1(f10fc020fdf8f61d059ac57306b0353ac7dbfb24) )
@@ -1604,8 +1474,6 @@ ROM_START( otwalls )
ROM_LOAD( "otw-cd.bin", 0x2c000, 0x2000, CRC(8e2d15ab) SHA1(8043fdf637de7752e8d42554ebad2e155a6f5939) )
ROM_LOAD( "otw-ef.bin", 0x2e000, 0x2000, CRC(57eab299) SHA1(475d800c03d6b2786bd23861d61dc113b837a585) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "otw-gr0.bin", 0x00000, 0x2000, CRC(210bad3c) SHA1(703769c6a569b17f2ad18441da7de0237be4721e) )
ROM_LOAD( "otw-gr1.bin", 0x02000, 0x2000, CRC(13e6aaa5) SHA1(ac8b9d16d2159d4a578d8fa988b59c058c5efc88) )
@@ -1629,8 +1497,6 @@ ROM_START( snakepit )
ROM_LOAD( "spit-cd.bin", 0x2c000, 0x2000, CRC(54095cbb) SHA1(a43b78b2876359a29ecb2f169c876a0026375ea2) )
ROM_LOAD( "spit-ef.bin", 0x2e000, 0x2000, CRC(5f836a66) SHA1(cc3c11003f9e49cac10c0296ab6d156e5677d0f8) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "spit-gr0.bin", 0x00000, 0x2000, CRC(f77fd85d) SHA1(f8e69d1d0030412d6129a8ebfee40b3f1f189d8d) )
ROM_LOAD( "spit-gr1.bin", 0x02000, 0x2000, CRC(3ad10334) SHA1(1d82a7948fbee627c80a9e03ade90e57972a6a31) )
@@ -1654,8 +1520,6 @@ ROM_START( snakepit2 )
ROM_LOAD( "cd.bin", 0x2c000, 0x2000, CRC(f357172e) SHA1(822012360526459e85196692e4cb408fe25fb1cc) )
ROM_LOAD( "ef.bin", 0x2e000, 0x2000, CRC(5e9d1de2) SHA1(5a04c4444aed9c2677fc85ad733fec69398403d6) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr0.bin", 0x00000, 0x2000, CRC(f77fd85d) SHA1(f8e69d1d0030412d6129a8ebfee40b3f1f189d8d) )
ROM_LOAD( "gr1.bin", 0x02000, 0x2000, CRC(3ad10334) SHA1(1d82a7948fbee627c80a9e03ade90e57972a6a31) )
@@ -1677,8 +1541,6 @@ ROM_START( snakjack )
ROM_LOAD( "rom-cd.u3a", 0x2c000, 0x2000, CRC(7b44ca4c) SHA1(8697055da489fcf0244dc94fe5393418a8003bf7) )
ROM_LOAD( "rom-ef.u1a", 0x2e000, 0x2000, CRC(f5309b38) SHA1(864f759dc6822b548742140b7ea2ea2aba43beba) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "rom-gr0.u9b", 0x00000, 0x2000, CRC(3e64b5d5) SHA1(ab681eabb4f8e5b946c288ffb8df0624c0473d82) )
ROM_LOAD( "rom-gr1.u8b", 0x02000, 0x2000, CRC(b3b8baee) SHA1(b37638784a3903f2dcd698104da75b4ab59e8257) )
@@ -1699,8 +1561,6 @@ ROM_START( stocker )
ROM_LOAD( "ab23.u7a", 0x14000, 0x4000, CRC(48e432c2) SHA1(af87009089a3e83fab5c935696edbbf2a15215f9) )
ROM_LOAD( "cd6ef.u1a",0x2c000, 0x4000, CRC(83e6e5c9) SHA1(f0e38a95cb2ea385a587f330c48fc787db0cc65e) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr01.u6b", 0x00000, 0x4000, CRC(2e66ac35) SHA1(c65b4991a88f8359c85f904f66a7fe73330aface) )
ROM_LOAD( "gr23.u5b", 0x04000, 0x4000, CRC(6fa43631) SHA1(7000907b914bf851b09811e3736af8c02e1aeda9) )
@@ -1722,9 +1582,6 @@ ROM_START( stocker )
ROM_LOAD( "stkr-cd.bin", 0x2c000, 0x2000, BAD_DUMP CRC(53dbc4e5) SHA1(e389978b5472174681fa180c6a2edf49903a6514) ) // 1 bad byte
ROM_LOAD( "stkr-ef.bin", 0x2e000, 0x2000, BAD_DUMP CRC(cdcf46bc) SHA1(8b1e801dab1efed002d484135264998d255dc041) ) // 1 bad byte
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 */
- ROM_LOAD( "sentesnd", 0x00000, 0x2000, CRC(4dd0a525) SHA1(f0c447adc5b67917851a9df978df851247e75c43) )
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "stkr-gr0.bin", 0x00000, 0x2000, CRC(76d5694c) SHA1(e2b155fc7178886eb37a532d961b99b8c864397c) )
ROM_LOAD( "stkr-gr1.bin", 0x02000, 0x2000, CRC(4a5cc00b) SHA1(9ce46ed94e715a5997998aee6377baf2869ab3a6) )
@@ -1749,8 +1606,6 @@ ROM_START( triviag1 )
ROM_LOAD( "tpg1-cd.bin", 0x2c000, 0x2000, CRC(35c9b9c2) SHA1(aac57022098656dac99bf9ceeaa2bf9a3d139986) )
ROM_LOAD( "tpg1-ef.bin", 0x2e000, 0x2000, CRC(64878342) SHA1(dd93d64b3fe351a9d2bd4c473ecefde58f0b0041) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "tpg1-gr0.bin", 0x00000, 0x2000, CRC(20c9217a) SHA1(79ef058633149da8d2835405954ac31c661bf660) )
ROM_LOAD( "tpg1-gr1.bin", 0x02000, 0x2000, CRC(d7f44504) SHA1(804dbc4c006b20bdb01bdf02754e0d98f6fbacbe) )
@@ -1773,8 +1628,6 @@ ROM_START( trivia12 )
ROM_LOAD( "cd.u3a", 0x2c000, 0x2000, CRC(12d870ba) SHA1(b86a8cbf8037df78437056f5ff57e7b8b5e4c94e) )
ROM_LOAD( "ef.u2a", 0x2e000, 0x2000, CRC(d902ee28) SHA1(18e3c96e1ac50f847d1b9f4f868f19e074d147ff) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr0.u9b", 0x00000, 0x2000, CRC(20c9217a) SHA1(79ef058633149da8d2835405954ac31c661bf660) )
ROM_LOAD( "gr1.u8b", 0x02000, 0x2000, CRC(d7f44504) SHA1(804dbc4c006b20bdb01bdf02754e0d98f6fbacbe) )
@@ -1796,8 +1649,6 @@ ROM_START( triviag2 )
ROM_LOAD( "cd45.bin", 0x28000, 0x4000, CRC(fc9c752a) SHA1(239507fb5d75e86aca295978aab1dd4514d8d761) )
ROM_LOAD( "cd6ef.bin", 0x2c000, 0x4000, CRC(23b56fb8) SHA1(9ac726de69e4b374886a3542829745f7477d7556) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr01.bin", 0x00000, 0x4000, CRC(6829de8e) SHA1(4ec494883ba358f2ac7ce8d5a623a2f34b5bc843) )
ROM_LOAD( "gr23.bin", 0x04000, 0x4000, CRC(89398700) SHA1(771ee04baa9a31d435a6234490105878713e7845) )
@@ -1816,8 +1667,6 @@ ROM_START( triviasp )
ROM_LOAD( "allsport.3a", 0x28000, 0x4000, CRC(e45d09d6) SHA1(8bde18d25f8bd1056e42672d428473be23eab260) )
ROM_LOAD( "allsport.1a", 0x2c000, 0x4000, CRC(8bb3e831) SHA1(ecc8fb0f2143e3ea03bb52773cc0a81d4dcc742d) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr01.bin", 0x00000, 0x4000, CRC(6829de8e) SHA1(4ec494883ba358f2ac7ce8d5a623a2f34b5bc843) )
ROM_LOAD( "gr23.bin", 0x04000, 0x4000, CRC(89398700) SHA1(771ee04baa9a31d435a6234490105878713e7845) )
@@ -1836,8 +1685,6 @@ ROM_START( triviayp )
ROM_LOAD( "cd45.bin", 0x28000, 0x4000, CRC(ac45809e) SHA1(1151c4e55f21a7e2eb8e163ac782b4449af84cdc) )
ROM_LOAD( "cd6ef.bin", 0x2c000, 0x4000, CRC(a008059f) SHA1(45e4cfc259e801a189ec19fdc58135dbbbe130ea) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr01.bin", 0x00000, 0x4000, CRC(6829de8e) SHA1(4ec494883ba358f2ac7ce8d5a623a2f34b5bc843) )
ROM_LOAD( "gr23.bin", 0x04000, 0x4000, CRC(89398700) SHA1(771ee04baa9a31d435a6234490105878713e7845) )
@@ -1856,8 +1703,6 @@ ROM_START( triviabb )
ROM_LOAD( "cd45.u2a", 0x28000, 0x4000, CRC(07fd88ff) SHA1(c3168ecf6562e09790c4f18cdd91c7a347223323) )
ROM_LOAD( "cd6ef.u1a", 0x2c000, 0x4000, CRC(2d03f241) SHA1(986ca6ea20c306e83ae88acc2d6837c7ed5fe351) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr01.u6b", 0x00000, 0x4000, CRC(6829de8e) SHA1(4ec494883ba358f2ac7ce8d5a623a2f34b5bc843) )
ROM_LOAD( "gr23.u5b", 0x04000, 0x4000, CRC(89398700) SHA1(771ee04baa9a31d435a6234490105878713e7845) )
@@ -1880,8 +1725,6 @@ ROM_START( triviaes )
ROM_LOAD( "tp_a6.bin", 0x28000, 0x04000, CRC(421c1a29) SHA1(3e0de8734a39fb887aff40e89cb0936d4cacf9a5) )
ROM_LOAD( "tp_a3.bin", 0x2c000, 0x04000, CRC(c6254f46) SHA1(47f3d05d0c31983ed1576f91fa193fe58e80bb60) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "tp_gr3.bin", 0x00000, 0x4000, CRC(6829de8e) SHA1(4ec494883ba358f2ac7ce8d5a623a2f34b5bc843) )
ROM_LOAD( "tp_gr2.bin", 0x04000, 0x4000, CRC(89398700) SHA1(771ee04baa9a31d435a6234490105878713e7845) )
@@ -1901,7 +1744,7 @@ ROM_START( triviaes2 )
ROM_LOAD( "tpe-2cdef.u1a", 0x24000, 0x04000, CRC(22f9e1b4) SHA1(f5f5d9dadcd12f8e8f3a715854243f6da8678c23) )
ROM_LOAD( "tpe-2ab45.u6a", 0x28000, 0x04000, CRC(cf48b8eb) SHA1(f63590bcdd7e17d85f4f490640785e8828358f93) )
- SOUNDBOARD_ROMS // 2764 labeled with handwritten 'PANEA'
+ // 2764 on sound board labeled with handwritten 'PANEA'
ROM_REGION( 0x10000, "gfx1", 0 ) // all 27128
ROM_LOAD( "tpegr01.u6b", 0x00000, 0x4000, CRC(6829de8e) SHA1(4ec494883ba358f2ac7ce8d5a623a2f34b5bc843) )
@@ -1918,8 +1761,6 @@ ROM_START( gimeabrk )
ROM_LOAD( "ab45.u6a", 0x18000, 0x4000, CRC(5dca4f33) SHA1(aa45d5a960491c85f332f22cffe61999fe3db826) )
ROM_LOAD( "cd6ef.u1a", 0x2c000, 0x4000, CRC(5e2b3510) SHA1(e3501b9bd73bc724aee0436700625bd2af94f72d) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr01.u6b", 0x00000, 0x4000, CRC(e3cdc476) SHA1(2f17c3f84767850d45192dfb507dd2716ecadc20) )
ROM_LOAD( "gr23.u5b", 0x04000, 0x4000, CRC(0555d9c0) SHA1(da0d1f207ad056b2d82a5ad6382372066883d161) )
@@ -1940,8 +1781,6 @@ ROM_START( grudge )
ROM_LOAD( "gm-5a.bin", 0x38000, 0x8000, CRC(1de8dd2e) SHA1(6b538dcf35105bca1ae1bb5387a08b4d1d4f410c) ) // same as 2a, not being used, confirmed as identical on PCB
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gm-6a.bin", 0x00000, 0x8000, CRC(b9681f53) SHA1(bb0c516408f1769e018f0ec8707786d4d1e9ef7e) )
@@ -1955,9 +1794,6 @@ ROM_START( grudgep )
ROM_LOAD( "grudge.cd0", 0x20000, 0x8000, CRC(e51db1f2) SHA1(57fc0f1df358dd6ea982dcbe9c3f79b3f072be53) )
ROM_LOAD( "grudge.cd4", 0x28000, 0x8000, CRC(6b60e47e) SHA1(5a399942d4ef9b7349fffd07c07092b667cf6247) )
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 */
- ROM_LOAD( "sentesnd", 0x00000, 0x2000, CRC(4dd0a525) SHA1(f0c447adc5b67917851a9df978df851247e75c43) )
-
ROM_REGION( 0x8000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "grudge.gr0", 0x00000, 0x8000, CRC(b9681f53) SHA1(bb0c516408f1769e018f0ec8707786d4d1e9ef7e) )
@@ -1972,8 +1808,6 @@ ROM_START( minigolf )
ROM_LOAD( "ab67.u5a", 0x1c000, 0x4000, CRC(6a311c9a) SHA1(b0409e5f4bd3bf898b8701561aac6dbbc28417bd) )
ROM_LOAD( "1a-ver2", 0x20000, 0x10000, CRC(60b6cd58) SHA1(f79bf2d1f6c4e63f666073c5ecb22604c1ab57d8) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr01.u6b", 0x00000, 0x4000, CRC(8e24d594) SHA1(d35329fb78f90ec478418917aa1ef06d0967e6f8) )
ROM_LOAD( "gr23.u5b", 0x04000, 0x4000, CRC(3bf355ef) SHA1(691df25b35b00e21ad09d17a21fe98a353aa3dda) )
@@ -1995,8 +1829,6 @@ ROM_START( minigolf2 )
ROM_LOAD( "cd23.u3a", 0x24000, 0x4000, CRC(52279801) SHA1(d8de92c296d5c91db3bea7a0093260158961036e) )
ROM_LOAD( "cd6ef.u1a", 0x2c000, 0x4000, CRC(34c64f4c) SHA1(ce55f5f6ebddcacf20cb78fb738b5f569b531b61) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr01.u6b", 0x00000, 0x4000, CRC(8e24d594) SHA1(d35329fb78f90ec478418917aa1ef06d0967e6f8) )
ROM_LOAD( "gr23.u5b", 0x04000, 0x4000, CRC(3bf355ef) SHA1(691df25b35b00e21ad09d17a21fe98a353aa3dda) )
@@ -2020,8 +1852,6 @@ ROM_START( toggle )
ROM_LOAD( "tgle-cd.bin", 0x2c000, 0x2000, CRC(0a2bb949) SHA1(350dc782fc21640794c6ecb502554cb693adbb7d) )
ROM_LOAD( "tgle-ef.bin", 0x2e000, 0x2000, CRC(3ec10804) SHA1(ae719081e8114ccc23c6b24c7fe904a11fbdd992) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "tgle-gr0.bin", 0x00000, 0x2000, CRC(0e0e5d0e) SHA1(363858ce08767f8a9b8eaec56405377cdd74b178) )
ROM_LOAD( "tgle-gr1.bin", 0x02000, 0x2000, CRC(3b141ad2) SHA1(72430fd616adbc72d86a5f10672572a31bed0b5d) )
@@ -2049,8 +1879,6 @@ ROM_START( nametune )
ROM_LOAD( "nttcd6ef.bin", 0x2c000, 0x4000, CRC(0459e6f8) SHA1(7dbdbfa8f2e9e3956af926f5f782b8d3c3334099) )
ROM_CONTINUE( 0x5c000, 0x4000 )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "nttgr0.bin", 0x00000, 0x8000, CRC(6b75bb4b) SHA1(e7131d112fb0b36985c5b6383700f55728a1c4fd) )
@@ -2076,8 +1904,6 @@ ROM_START( nametune2 )
ROM_LOAD( "cd 6 ef.u1a", 0x2c000, 0x4000, CRC(e73c7cda) SHA1(c6f751923d0c7930db2e173f680674759f94c8bb) )
ROM_CONTINUE( 0x5c000, 0x4000 )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr 0.u3c", 0x00000, 0x8000, CRC(a0121b80) SHA1(ba38e9b738baac85fa33ae3751d02cb223fa3e65) )
@@ -2105,8 +1931,6 @@ ROM_START( nstocker )
ROM_LOAD( "cd45.u2a", 0x28000, 0x4000, CRC(9bb292fe) SHA1(6fc7abcc110c2cf7399d11a478cfdadb3439b6ab) )
ROM_LOAD( "cd6ef.u1a", 0x2c000, 0x4000, CRC(e77c1aea) SHA1(9e2e595530cb15c634a6052c773ff5d998c0c828) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr01.u4c", 0x00000, 0x4000, CRC(fd0c38be) SHA1(b9e12e76f44f2b2b3ca6a57c58f0cbb019b1971f) )
ROM_LOAD( "gr23.u3c", 0x04000, 0x4000, CRC(35d4433e) SHA1(399d04c2a29d993f77d0d5c2d62915081d4a85dd) )
@@ -2136,8 +1960,6 @@ ROM_START( nstocker2 )
ROM_LOAD( "cd45.u2a", 0x28000, 0x4000, CRC(9bb292fe) SHA1(6fc7abcc110c2cf7399d11a478cfdadb3439b6ab) )
ROM_LOAD( "cd6ef.u1a", 0x2c000, 0x4000, CRC(c77d2302) SHA1(2b0956a7d6bdff5e4f77084149a9528fb07154dc) ) // sldh
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr01.u4c", 0x00000, 0x4000, CRC(fd0c38be) SHA1(b9e12e76f44f2b2b3ca6a57c58f0cbb019b1971f) )
ROM_LOAD( "gr23.u3c", 0x04000, 0x4000, CRC(35d4433e) SHA1(399d04c2a29d993f77d0d5c2d62915081d4a85dd) )
@@ -2164,8 +1986,6 @@ ROM_START( sfootbal )
ROM_LOAD( "ab45.u6a", 0x18000, 0x4000, CRC(91ad42c5) SHA1(0b6fc3ed3a633c825809668d49f209c130f3e978) )
ROM_LOAD( "cd6ef.u1a", 0x2c000, 0x4000, CRC(bf80bb1a) SHA1(2b70b36d946c36e3f354c7edfd3e34784ffce406) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr01.u4c", 0x00000, 0x4000, CRC(e3108d35) SHA1(05b7f1a1a18d7f72a3d3f6102cb8ab42421b7366) )
ROM_LOAD( "gr23.u3c", 0x04000, 0x4000, CRC(5c5af726) SHA1(04cdd476e6689d17273659fb1fe0ca642edbe5a8) )
@@ -2185,8 +2005,6 @@ ROM_START( spiker )
ROM_LOAD( "ab23.u7a", 0x14000, 0x4000, CRC(3be87edf) SHA1(0d4f1ff501d5d865abc3906f6b232ec04586d3dc) )
ROM_LOAD( "cd6ef.u1a", 0x2c000, 0x4000, CRC(f2c73ece) SHA1(4fc108823102fd17c5b7d9be1a0c76667788ba1a) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr01.u4c", 0x00000, 0x4000, CRC(0caa6e3e) SHA1(ce6765d44e444d24129ec99f04a41a866a32eee2) )
ROM_LOAD( "gr23.u3c", 0x04000, 0x4000, CRC(970c81f6) SHA1(f22189e172a795d115597feb48ccbc04be3859b9) )
@@ -2205,8 +2023,6 @@ ROM_START( spiker2 ) /* Spiker U.R. 5/5/86 */
ROM_LOAD( "ab23.u7a", 0x14000, 0x4000, CRC(ffb23288) SHA1(3458e486794f6c936d15e837be0f419027b01311) ) // sldh
ROM_LOAD( "cd6ef.u1a", 0x2c000, 0x4000, CRC(7f04774d) SHA1(c49ac3aa86425cdbab9877fc253999329bb99a49) ) // sldh
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr01.u4c", 0x00000, 0x4000, CRC(1228b7a3) SHA1(70a207714ba7bc4f4dbc492768480afa424b31c0) ) // sldh
ROM_LOAD( "gr23.u3c", 0x04000, 0x4000, CRC(970c81f6) SHA1(f22189e172a795d115597feb48ccbc04be3859b9) )
@@ -2225,8 +2041,6 @@ ROM_START( spiker3 ) /* Spiker U.R. 6/9/86 */
ROM_LOAD( "ab23.u7a", 0x14000, 0x4000, CRC(3be87edf) SHA1(0d4f1ff501d5d865abc3906f6b232ec04586d3dc) )
ROM_LOAD( "cd6ef.u1a", 0x2c000, 0x4000, CRC(5b5a6d86) SHA1(a173637991601adc87f0fc8fd1ee9102f5fb2b81) ) // sldh
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr01.u4c", 0x00000, 0x4000, CRC(0caa6e3e) SHA1(ce6765d44e444d24129ec99f04a41a866a32eee2) )
ROM_LOAD( "gr23.u3c", 0x04000, 0x4000, CRC(970c81f6) SHA1(f22189e172a795d115597feb48ccbc04be3859b9) )
@@ -2248,8 +2062,6 @@ ROM_START( stompin )
ROM_LOAD( "cd 23.u3a", 0x24000, 0x4000, CRC(52b29048) SHA1(e0873137201ad9b2e87a17dd68046e88dbeeb5e1) )
ROM_LOAD( "cd 6 ef.u1a", 0x2c000, 0x4000, CRC(b880961a) SHA1(11700af516517b7176a840fd5a8fd5ed0fb9bd6e) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr 01.u4c", 0x00000, 0x4000, CRC(14ffdd1e) SHA1(4528548c07789f9dca2cabd2c64ea1ff8f36a99e) )
ROM_LOAD( "gr 23.u3c", 0x04000, 0x4000, CRC(761abb80) SHA1(a1278e93a4fa66cc4d347954dd45121120da568d) )
@@ -2270,8 +2082,6 @@ ROM_START( rescraid )
ROM_LOAD( "cd 8.a16", 0x20000, 0x8000, CRC(90917a43) SHA1(3abd68d0c147ed792ace41f701c04bc225efede4) )
ROM_LOAD( "cd 12.a18", 0x28000, 0x8000, CRC(0450e9d7) SHA1(b5d0a79d1bac3596d241f80ac4e3e13c98d28709) )
- SOUNDBOARD_ROMS
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr 0.a5", 0x00000, 0x8000, CRC(e0dfc133) SHA1(0b120b4410098d8db26b5819043d4fe7c426b948) )
ROM_LOAD( "gr 4.a7", 0x08000, 0x8000, CRC(952ade30) SHA1(f065368f645616d6d84be469ba45a9afa8788eda) )
@@ -2294,9 +2104,6 @@ ROM_START( rescraida )
ROM_LOAD( "cd8-sa.a16", 0x20000, 0x8000, CRC(9dfb50c2) SHA1(24280b48106cbcedeb6d7b10f951db906a123819) )
ROM_LOAD( "cd12-sa.a18", 0x28000, 0x8000, CRC(18c62613) SHA1(a55b4b948805bdd5d1e8c8ff803826a7bbfa383e) )
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 */
- ROM_LOAD( "sentesnd", 0x00000, 0x2000, CRC(4dd0a525) SHA1(f0c447adc5b67917851a9df978df851247e75c43) )
-
ROM_REGION( 0x10000, "gfx1", 0 ) /* up to 64k of sprites */
ROM_LOAD( "gr0.a5", 0x00000, 0x8000, CRC(e0dfc133) SHA1(0b120b4410098d8db26b5819043d4fe7c426b948) )
ROM_LOAD( "gr4.a7", 0x08000, 0x8000, CRC(952ade30) SHA1(f065368f645616d6d84be469ba45a9afa8788eda) )
@@ -2321,9 +2128,6 @@ ROM_START( shrike )
ROM_LOAD( "savgu21.bin", 0x2c000, 0x2000, CRC(c22b93e1) SHA1(15d3925abb3e7e928925f5781f228d1bc0dfe31c) )
ROM_LOAD( "savgu36.bin", 0x2e000, 0x2000, CRC(28431c4a) SHA1(522df8224c559f51c36d2bc01c189b019fabc5eb) )
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 */
- ROM_LOAD( "sentesnd", 0x00000, 0x2000, CRC(4dd0a525) SHA1(f0c447adc5b67917851a9df978df851247e75c43) )
-
ROM_REGION( 0x4000, "68k", 0 ) /* 16k for M68000 */
ROM_LOAD16_BYTE( "savgu22.bin", 0x00000, 0x2000, CRC(c7787162) SHA1(52d8d148206c6ceb9c28ba747b301121a7790802) )
ROM_LOAD16_BYTE( "savgu24.bin", 0x00001, 0x2000, CRC(a9105ca8) SHA1(1a94a052a4a8d221e1eafec0cd5b0ada6f1987f4) )
diff --git a/src/mame/includes/balsente.h b/src/mame/includes/balsente.h
index dc13b61082b..b61c054a304 100644
--- a/src/mame/includes/balsente.h
+++ b/src/mame/includes/balsente.h
@@ -13,11 +13,9 @@
#pragma once
#include "machine/6850acia.h"
-#include "machine/pit8253.h"
#include "machine/timer.h"
#include "machine/x2212.h"
#include "machine/74259.h"
-#include "sound/cem3394.h"
#include "emupal.h"
#include "screen.h"
@@ -45,9 +43,6 @@ public:
balsente_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_scanline_timer(*this, "scan_timer")
- , m_pit(*this, "pit")
- , m_counter_0_timer(*this, "8253_0_timer")
- , m_cem_device(*this, "cem%u", 1U)
, m_spriteram(*this, "spriteram")
, m_videoram(*this, "videoram")
, m_shrike_io(*this, "shrike_io")
@@ -60,7 +55,6 @@ public:
, m_outlatch(*this, "outlatch")
, m_novram(*this, "nov%u", 0U)
, m_acia(*this, "acia")
- , m_audiouart(*this, "audiouart")
, m_generic_paletteram_8(*this, "paletteram")
{ }
@@ -111,14 +105,8 @@ private:
DECLARE_READ8_MEMBER(novram_8bit_r);
DECLARE_WRITE8_MEMBER(novram_8bit_w);
DECLARE_WRITE8_MEMBER(acia_w);
- DECLARE_WRITE_LINE_MEMBER(uint_propagate_w);
DECLARE_READ8_MEMBER(adc_data_r);
DECLARE_WRITE8_MEMBER(adc_select_w);
- DECLARE_READ8_MEMBER(counter_state_r);
- DECLARE_WRITE8_MEMBER(counter_control_w);
- DECLARE_WRITE8_MEMBER(chip_select_w);
- DECLARE_WRITE8_MEMBER(dac_data_w);
- DECLARE_WRITE8_MEMBER(register_addr_w);
DECLARE_WRITE8_MEMBER(spiker_expand_w);
DECLARE_READ8_MEMBER(spiker_expand_r);
DECLARE_READ8_MEMBER(grudge_steering_r);
@@ -128,9 +116,7 @@ private:
DECLARE_READ16_MEMBER(shrike_io_68k_r);
DECLARE_READ8_MEMBER(teamht_extra_r);
DECLARE_WRITE8_MEMBER(teamht_multiplex_select_w);
- DECLARE_WRITE_LINE_MEMBER(counter_0_set_out);
- void update_counter_0_timer();
DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(palette_select_w);
DECLARE_WRITE8_MEMBER(paletteram_w);
@@ -144,32 +130,21 @@ private:
TIMER_CALLBACK_MEMBER(irq_off);
TIMER_CALLBACK_MEMBER(adc_finished);
TIMER_DEVICE_CALLBACK_MEMBER(interrupt_timer);
- TIMER_DEVICE_CALLBACK_MEMBER(clock_counter_0_ff);
void draw_one_sprite(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t *sprite);
void poly17_init();
- DECLARE_WRITE_LINE_MEMBER(set_counter_0_ff);
void update_grudge_steering();
void expand_roms(uint8_t cd_rom_mask);
inline void config_shooter_adc(uint8_t shooter, uint8_t adc_shift);
- inline void noise_gen_chip(int chip, int count, short *buffer);
- CEM3394_EXT_INPUT(noise_gen_0);
- CEM3394_EXT_INPUT(noise_gen_1);
- CEM3394_EXT_INPUT(noise_gen_2);
- CEM3394_EXT_INPUT(noise_gen_3);
- CEM3394_EXT_INPUT(noise_gen_4);
- CEM3394_EXT_INPUT(noise_gen_5);
void cpu1_base_map(address_map &map);
void cpu1_map(address_map &map);
void cpu1_smudge_map(address_map &map);
- void cpu2_io_map(address_map &map);
- void cpu2_map(address_map &map);
void cpu2_triviamb_io_map(address_map &map);
void cpu2_triviamb_map(address_map &map);
void shrike68k_map(address_map &map);
required_device<timer_device> m_scanline_timer;
- required_device<pit8253_device> m_pit;
+
/* global data */
uint8_t m_shooter;
@@ -177,33 +152,13 @@ private:
uint8_t m_shooter_y;
uint8_t m_adc_shift;
- /* manually clocked counter 0 states */
- uint8_t m_counter_control;
- bool m_counter_0_ff;
- bool m_counter_0_out;
- required_device<timer_device> m_counter_0_timer;
- bool m_counter_0_timer_active;
-
/* random number generator states */
- uint8_t m_poly17[POLY17_SIZE + 1];
uint8_t m_rand17[POLY17_SIZE + 1];
/* ADC I/O states */
int8_t m_analog_input_data[4];
uint8_t m_adc_value;
- /* CEM3394 DAC control states */
- uint16_t m_dac_value;
- uint8_t m_dac_register;
- uint8_t m_chip_select;
-
- /* sound CPU 6850 states */
- bool m_uint;
-
- /* noise generator states */
- uint32_t m_noise_position[6];
- required_device_array<cem3394_device, 6> m_cem_device;
-
/* game-specific states */
uint8_t m_nstocker_bits;
uint8_t m_spiker_expand_color;
@@ -226,14 +181,13 @@ private:
optional_shared_ptr<uint16_t> m_shrike_io;
optional_shared_ptr<uint16_t> m_shrike_shared;
required_device<cpu_device> m_maincpu;
- required_device<cpu_device> m_audiocpu;
+ optional_device<cpu_device> m_audiocpu;
optional_device<cpu_device> m_68k;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_device<ls259_device> m_outlatch;
required_device_array<x2212_device, 2> m_novram;
required_device<acia6850_device> m_acia;
- required_device<acia6850_device> m_audiouart;
required_shared_ptr<uint8_t> m_generic_paletteram_8;
};
diff --git a/src/mame/machine/balsente.cpp b/src/mame/machine/balsente.cpp
index 6a59c4231c3..d2571058ff3 100644
--- a/src/mame/machine/balsente.cpp
+++ b/src/mame/machine/balsente.cpp
@@ -11,11 +11,8 @@
#include "emu.h"
#include "cpu/m6809/m6809.h"
#include "includes/balsente.h"
-#include "sound/cem3394.h"
-#define LOG_CEM_WRITES 0
-
/*************************************
*
* Interrupt handling
@@ -69,29 +66,8 @@ TIMER_DEVICE_CALLBACK_MEMBER(balsente_state::interrupt_timer)
void balsente_state::machine_start()
{
- /* create the polynomial tables */
- poly17_init();
-
m_acia->write_cts(0);
m_acia->write_dcd(0);
- m_audiouart->write_cts(0);
- m_audiouart->write_dcd(0);
-
- save_item(NAME(m_counter_control));
- save_item(NAME(m_counter_0_ff));
- save_item(NAME(m_counter_0_out));
- save_item(NAME(m_counter_0_timer_active));
-
- save_item(NAME(m_analog_input_data));
- save_item(NAME(m_adc_value));
-
- save_item(NAME(m_dac_value));
- save_item(NAME(m_dac_register));
- save_item(NAME(m_chip_select));
-
- save_item(NAME(m_uint));
-
- save_item(NAME(m_noise_position));
save_item(NAME(m_nstocker_bits));
save_item(NAME(m_spiker_expand_color));
@@ -104,31 +80,17 @@ void balsente_state::machine_start()
void balsente_state::machine_reset()
{
- int numbanks;
-
- /* reset the manual counter 0 clock */
- m_counter_control = 0x00;
- m_counter_0_ff = false;
- m_counter_0_out = false;
- m_counter_0_timer_active = false;
- m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+ /* create the polynomial tables */
+ poly17_init();
/* reset the ADC states */
m_adc_value = 0;
- /* reset the CEM3394 I/O states */
- m_dac_value = 0;
- m_dac_register = 0;
- m_chip_select = 0x3f;
-
/* reset game-specific states */
m_grudge_steering_result = 0;
- /* reset the noise generator */
- memset(m_noise_position, 0, sizeof(m_noise_position));
-
/* point the banks to bank 0 */
- numbanks = (memregion("maincpu")->bytes() > 0x40000) ? 16 : 8;
+ int numbanks = (memregion("maincpu")->bytes() > 0x40000) ? 16 : 8;
membank("bank1")->configure_entries(0, numbanks, &memregion("maincpu")->base()[0x10000], 0x6000);
membank("bank2")->configure_entries(0, numbanks, &memregion("maincpu")->base()[0x12000], 0x6000);
membank("bank1")->set_entry(0);
@@ -143,7 +105,7 @@ void balsente_state::machine_reset()
/*************************************
*
- * MM5837 noise generator
+ * Hardware random numbers
*
* NOTE: this is stolen straight from
* POKEY.c
@@ -153,17 +115,15 @@ void balsente_state::machine_reset()
void balsente_state::poly17_init()
{
uint32_t i, x = 0;
- uint8_t *p, *r;
+ uint8_t *r;
/* allocate memory */
- p = m_poly17;
r = m_rand17;
/* generate the polynomial */
for (i = 0; i < POLY17_SIZE; i++)
{
/* store new values */
- *p++ = x & 1;
*r++ = x >> 3;
/* calculate next bit */
@@ -171,37 +131,6 @@ void balsente_state::poly17_init()
}
}
-
-inline void balsente_state::noise_gen_chip(int chip, int count, short *buffer)
-{
- /* noise generator runs at 100kHz */
- uint32_t step = (100000 << 14) / cem3394_device::SAMPLE_RATE;
- uint32_t noise_counter = m_noise_position[chip];
-
- while (count--)
- {
- *buffer++ = m_poly17[(noise_counter >> 14) & POLY17_SIZE] << 12;
- noise_counter += step;
- }
-
- /* remember the noise position */
- m_noise_position[chip] = noise_counter;
-}
-
-CEM3394_EXT_INPUT(balsente_state::noise_gen_0) { noise_gen_chip(0, count, buffer); }
-CEM3394_EXT_INPUT(balsente_state::noise_gen_1) { noise_gen_chip(1, count, buffer); }
-CEM3394_EXT_INPUT(balsente_state::noise_gen_2) { noise_gen_chip(2, count, buffer); }
-CEM3394_EXT_INPUT(balsente_state::noise_gen_3) { noise_gen_chip(3, count, buffer); }
-CEM3394_EXT_INPUT(balsente_state::noise_gen_4) { noise_gen_chip(4, count, buffer); }
-CEM3394_EXT_INPUT(balsente_state::noise_gen_5) { noise_gen_chip(5, count, buffer); }
-
-
-/*************************************
- *
- * Hardware random numbers
- *
- *************************************/
-
WRITE8_MEMBER(balsente_state::random_reset_w)
{
/* reset random number generator */
@@ -333,12 +262,6 @@ WRITE8_MEMBER(balsente_state::acia_w)
m_acia->write(space, offset, (BIT(offset, 0) && data == 0xe0) ? 0 : data);
}
-WRITE_LINE_MEMBER(balsente_state::uint_propagate_w)
-{
- if (state && BIT(m_counter_control, 5))
- m_audiocpu->set_input_line(INPUT_LINE_NMI, m_uint ? ASSERT_LINE : CLEAR_LINE);
-}
-
/*************************************
@@ -439,236 +362,6 @@ WRITE8_MEMBER(balsente_state::teamht_multiplex_select_w)
/*************************************
*
- * Sound CPU counter 0 emulation
- *
- *************************************/
-
-WRITE_LINE_MEMBER(balsente_state::counter_0_set_out)
-{
- /* OUT on counter 0 is hooked to the GATE line on counter 1 through an inverter */
- m_pit->write_gate1(!state);
-
- /* remember the out state */
- m_counter_0_out = state;
-}
-
-
-WRITE_LINE_MEMBER(balsente_state::set_counter_0_ff)
-{
- /* the flip/flop output is inverted, so if we went high to low, that's a clock */
- m_pit->write_clk0(!state);
-
- /* remember the new state */
- m_counter_0_ff = state;
-}
-
-
-TIMER_DEVICE_CALLBACK_MEMBER(balsente_state::clock_counter_0_ff)
-{
- /* clock the D value through the flip-flop */
- set_counter_0_ff(BIT(m_counter_control, 3));
-}
-
-
-void balsente_state::update_counter_0_timer()
-{
- double maxfreq = 0.0;
- int i;
-
- /* if there's already a timer, remove it */
- if (m_counter_0_timer_active)
- m_counter_0_timer->reset();
- m_counter_0_timer_active = false;
-
- /* find the counter with the maximum frequency */
- /* this is used to calibrate the timers at startup */
- for (i = 0; i < 6; i++)
- if (m_cem_device[i]->get_parameter(cem3394_device::FINAL_GAIN) < 10.0)
- {
- double tempfreq;
-
- /* if the filter resonance is high, then they're calibrating the filter frequency */
- if (m_cem_device[i]->get_parameter(cem3394_device::FILTER_RESONANCE) > 0.9)
- tempfreq = m_cem_device[i]->get_parameter(cem3394_device::FILTER_FREQENCY);
-
- /* otherwise, they're calibrating the VCO frequency */
- else
- tempfreq = m_cem_device[i]->get_parameter(cem3394_device::VCO_FREQUENCY);
-
- if (tempfreq > maxfreq) maxfreq = tempfreq;
- }
-
- /* reprime the timer */
- if (maxfreq > 0.0)
- {
- m_counter_0_timer_active = true;
- m_counter_0_timer->adjust(attotime::from_hz(maxfreq), 0, attotime::from_hz(maxfreq));
- }
-}
-
-
-
-/*************************************
- *
- * Sound CPU counter handlers
- *
- *************************************/
-
-READ8_MEMBER(balsente_state::counter_state_r)
-{
- /* bit D0 is the inverse of the flip-flop state */
- int result = !m_counter_0_ff;
-
- /* bit D1 is the OUT value from counter 0 */
- if (m_counter_0_out) result |= 0x02;
-
- return result;
-}
-
-
-WRITE8_MEMBER(balsente_state::counter_control_w)
-{
- uint8_t diff_counter_control = m_counter_control ^ data;
-
- /* set the new global value */
- m_counter_control = data;
-
- /* bit D0 enables/disables audio */
- if (BIT(diff_counter_control, 0))
- {
- for (auto & elem : m_cem_device)
- elem->set_output_gain(0, BIT(data, 0) ? 1.0 : 0);
- }
-
- /* bit D1 is hooked to counter 0's gate */
- if (BIT(diff_counter_control, 1))
- {
- /* if we gate on, start a pulsing timer to clock it */
- if (BIT(data, 1) && !m_counter_0_timer_active)
- {
- update_counter_0_timer();
- }
-
- /* if we gate off, remove the timer */
- else if (!BIT(data, 1) && m_counter_0_timer_active)
- {
- m_counter_0_timer->reset();
- m_counter_0_timer_active = false;
- }
- }
-
- /* set the actual gate */
- m_pit->write_gate0(BIT(data, 1));
-
- /* bits D2 and D4 control the clear/reset flags on the flip-flop that feeds counter 0 */
- if (!BIT(data, 4))
- set_counter_0_ff(0);
- else if (!BIT(data, 2))
- set_counter_0_ff(1);
-
- /* bit 5 clears the NMI interrupt */
- if (BIT(diff_counter_control, 5) && !BIT(data, 5))
- m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
-}
-
-
-
-/*************************************
- *
- * CEM3394 Interfaces
- *
- *************************************/
-
-WRITE8_MEMBER(balsente_state::chip_select_w)
-{
- static constexpr uint8_t register_map[8] =
- {
- cem3394_device::VCO_FREQUENCY,
- cem3394_device::FINAL_GAIN,
- cem3394_device::FILTER_RESONANCE,
- cem3394_device::FILTER_FREQENCY,
- cem3394_device::MIXER_BALANCE,
- cem3394_device::MODULATION_AMOUNT,
- cem3394_device::PULSE_WIDTH,
- cem3394_device::WAVE_SELECT
- };
-
- double voltage = (double)m_dac_value * (8.0 / 4096.0) - 4.0;
- int diffchip = data ^ m_chip_select, i;
- int reg = register_map[m_dac_register];
-
- /* remember the new select value */
- m_chip_select = data;
-
- /* check all six chip enables */
- for (i = 0; i < 6; i++)
- if ((diffchip & (1 << i)) && (data & (1 << i)))
- {
-#if LOG_CEM_WRITES
- double temp = 0;
-
- /* remember the previous value */
- temp =
-#endif
- m_cem_device[i]->get_parameter(reg);
-
- /* set the voltage */
- m_cem_device[i]->set_voltage(reg, voltage);
-
- /* only log changes */
-#if LOG_CEM_WRITES
- if (temp != m_cem_device[i]->get_parameter(reg))
- {
- static const char *const names[] =
- {
- "VCO_FREQUENCY",
- "FINAL_GAIN",
- "FILTER_RESONANCE",
- "FILTER_FREQENCY",
- "MIXER_BALANCE",
- "MODULATION_AMOUNT",
- "PULSE_WIDTH",
- "WAVE_SELECT"
- };
- logerror("s%04X: CEM#%d:%s=%f\n", m_audiocpu->pcbase(), i, names[m_dac_register], voltage);
- }
-#endif
- }
-
- /* if a timer for counter 0 is running, recompute */
- if (m_counter_0_timer_active)
- update_counter_0_timer();
-}
-
-
-
-WRITE8_MEMBER(balsente_state::dac_data_w)
-{
- /* LSB or MSB? */
- if (offset & 1)
- m_dac_value = (m_dac_value & 0xfc0) | ((data >> 2) & 0x03f);
- else
- m_dac_value = (m_dac_value & 0x03f) | ((data << 6) & 0xfc0);
-
- /* if there are open channels, force the values in */
- if ((m_chip_select & 0x3f) != 0x3f)
- {
- uint8_t temp = m_chip_select;
- chip_select_w(space, 0, 0x3f);
- chip_select_w(space, 0, temp);
- }
-}
-
-
-WRITE8_MEMBER(balsente_state::register_addr_w)
-{
- m_dac_register = data & 7;
-}
-
-
-
-/*************************************
- *
* Game-specific handlers
*
*************************************/