summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2016-02-12 22:20:25 +1100
committer Vas Crabb <vas@vastheman.com>2016-02-12 22:21:21 +1100
commit5ad3e6664d52b2bf379936c4b764ceb35a2f6f2a (patch)
tree439d77e841e832efc2aaa2a49ad0abab746f6efb
parent12a23988b3d9d42bfae59d188c988e929c8bf21e (diff)
Make Zaccaria 1B11142 sound board a device in preparation for netlist sound
-rw-r--r--scripts/target/mame/arcade.lua2
-rw-r--r--src/mame/audio/laserbat.cpp10
-rw-r--r--src/mame/audio/zaccaria.cpp294
-rw-r--r--src/mame/audio/zaccaria.h80
-rw-r--r--src/mame/drivers/laserbat.cpp4
-rw-r--r--src/mame/drivers/zaccaria.cpp262
-rw-r--r--src/mame/includes/laserbat.h2
-rw-r--r--src/mame/includes/zaccaria.h85
8 files changed, 441 insertions, 298 deletions
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua
index ba487965464..f59119796fc 100644
--- a/scripts/target/mame/arcade.lua
+++ b/scripts/target/mame/arcade.lua
@@ -4021,6 +4021,8 @@ files {
createMAMEProjects(_target, _subtarget, "zaccaria")
files {
+ MAME_DIR .. "src/mame/audio/zaccaria.cpp",
+ MAME_DIR .. "src/mame/audio/zaccaria.h",
MAME_DIR .. "src/mame/drivers/laserbat.cpp",
MAME_DIR .. "src/mame/includes/laserbat.h",
MAME_DIR .. "src/mame/video/laserbat.cpp",
diff --git a/src/mame/audio/laserbat.cpp b/src/mame/audio/laserbat.cpp
index ef26a168f31..a10e749757f 100644
--- a/src/mame/audio/laserbat.cpp
+++ b/src/mame/audio/laserbat.cpp
@@ -355,16 +355,6 @@ WRITE8_MEMBER(catnmous_state::pia_portb_w)
m_psg2->data_address_w(space, (data >> 2) & 0x01, m_pia->a_output());
}
-WRITE_LINE_MEMBER(catnmous_state::pia_irqa)
-{
- m_audiocpu->set_input_line(INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE);
-}
-
-WRITE_LINE_MEMBER(catnmous_state::pia_irqb)
-{
- m_audiocpu->set_input_line(INPUT_LINE_IRQ0, state ? ASSERT_LINE : CLEAR_LINE);
-}
-
WRITE8_MEMBER(catnmous_state::psg1_porta_w)
{
// similar to zaccaria.c since we have no clue how this board really works
diff --git a/src/mame/audio/zaccaria.cpp b/src/mame/audio/zaccaria.cpp
new file mode 100644
index 00000000000..9f9b71c9a7b
--- /dev/null
+++ b/src/mame/audio/zaccaria.cpp
@@ -0,0 +1,294 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
+#include "emu.h"
+#include "audio/zaccaria.h"
+
+#include "cpu/m6800/m6800.h"
+#include "machine/clock.h"
+#include "sound/dac.h"
+
+
+device_type const ZACCARIA_1B11142 = &device_creator<zac1b11142_audio_device>;
+
+
+/*
+ * slave sound cpu, produces music and sound effects
+ * mapping:
+ * A15 A14 A13 A12 A11 A10 A09 A08 A07 A06 A05 A04 A03 A02 A01 A00
+ * 0 0 0 0 0 0 0 0 0 * * * * * * * RW 6802 internal ram
+ * 0 0 0 x x x x x x x x x x x x x Open bus (for area that doesn't overlap ram)
+ * 0 0 1 x x x x x x x x x x x x x Open bus
+ * 0 1 0 x x x x x x x x x 0 0 x x Open bus
+ * 0 1 0 x x x x x x x x x 0 1 x x Open bus
+ * 0 1 0 x x x x x x x x x 1 0 x x Open bus
+ * 0 1 0 x x x x x x x x x 1 1 * * RW 6821 PIA @ 4I
+ * 0 1 1 x x x x x x x x x x x x x Open bus
+ * 1 0 % % * * * * * * * * * * * * R /CS4A: Enable ROM 13
+ * 1 1 % % * * * * * * * * * * * * R /CS5A: Enable ROM 9
+ * note that the % bits go to pins 2 (6802 A12) and 26 (6802 A13) of the roms
+ * monymony and jackrabt both use 2764 roms, which use pin 2 as A12 and pin 26 as N/C don't care
+ * hence for actual chips used, the mem map is:
+ * 1 0 x * * * * * * * * * * * * * R /CS4A: Enable ROM 13
+ * 1 1 x * * * * * * * * * * * * * R /CS5A: Enable ROM 9
+ *
+ * 6821 PIA:
+ * CA1 comes from the master sound cpu's latch bit 7 (which is also connected to the AY chip at 4G's IOB1)
+ * CB1 comes from the 6802's clock divided by 4096*2 (about 437Hz)
+ * CA2 and CB2 are not connected
+ * PA0-7 connect to the data busses of the AY-3-8910 chips
+ * PB0 and PB1 connect to the BC1 and BDIR pins of the AY chip at 4G
+ * PB2 and PB3 connect to the BC1 and BDIR pins of the AY chip at 4H.
+ */
+static ADDRESS_MAP_START(zac1b11142_melody_map, AS_PROGRAM, 8, zac1b11142_audio_device)
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x007f) AM_RAM // 6802 internal RAM
+ AM_RANGE(0x400c, 0x400f) AM_MIRROR(0x1ff0) AM_DEVREADWRITE("pia_4i", pia6821_device, read, write)
+ AM_RANGE(0x8000, 0x9fff) AM_MIRROR(0x2000) AM_ROM // rom 13
+ AM_RANGE(0xc000, 0xdfff) AM_MIRROR(0x2000) AM_ROM // rom 9
+ADDRESS_MAP_END
+
+
+/*
+ * master sound cpu, controls speech directly
+ * mapping:
+ * A15 A14 A13 A12 A11 A10 A09 A08 A07 A06 A05 A04 A03 A02 A01 A00
+ * 0 0 0 0 0 0 0 0 0 * * * * * * * RW 6802 internal ram
+ * x 0 0 0 x x x x 1 x x 0 x x * * Open bus (test mode writes as if there was another PIA here)
+ * x 0 0 0 x x x x 1 x x 1 x x * * RW 6821 PIA @ 1I
+ * x 0 0 1 0 0 x x x x x x x x x x W MC1408 DAC
+ * x x 0 1 0 1 x x x x x x x x x x W Command to slave melody cpu
+ * x x 0 1 1 0 x x x x x x x x x x R Command read latch from z80
+ * x x 0 1 1 1 x x x x x x x x x x Open bus
+ * % % 1 0 * * * * * * * * * * * * R /CS1A: Enable ROM 8
+ * % % 1 1 * * * * * * * * * * * * R /CS0A: Enable ROM 7
+ * note that the % bits go to pins 2 (6802 A14) and 26 (6802 A15) of the roms
+ * monymony and jackrabt both use 2764 roms, which use pin 2 as A12 and pin 26 as N/C don't care
+ * hence for actual chips used, the mem map is:
+ * x * 1 0 * * * * * * * * * * * * R /CS1A: Enable ROM 8
+ * x * 1 1 * * * * * * * * * * * * R /CS0A: Enable ROM 7
+ *
+ * 6821 PIA:
+ * PA0-7, PB0-1, CA2 and CB1 connect to the TMS5200
+ * CA1 and CB2 are not connected, though the test mode assumes there's something connected to CB2 (possibly another LED like the one connected to PB4)
+ * PB3 connects to 'ACS' which goes to the Z80
+ */
+static ADDRESS_MAP_START(zac1b11142_audio_map, AS_PROGRAM, 8, zac1b11142_audio_device)
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x007f) AM_RAM // 6802 internal RAM
+ AM_RANGE(0x0090, 0x0093) AM_MIRROR(0x8f6c) AM_DEVREADWRITE("pia_1i", pia6821_device, read, write)
+ AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x83ff) AM_DEVWRITE("dac_1f", dac_device, write_unsigned8) // MC1408
+ AM_RANGE(0x1400, 0x1400) AM_MIRROR(0xc3ff) AM_WRITE(melody_command_w)
+ AM_RANGE(0x1800, 0x1800) AM_MIRROR(0xc3ff) AM_READ(host_command_r)
+ AM_RANGE(0x2000, 0x2fff) AM_MIRROR(0x8000) AM_ROM // ROM 8 with A12 low
+ AM_RANGE(0x3000, 0x3fff) AM_MIRROR(0x8000) AM_ROM // ROM 7 with A12 low
+ AM_RANGE(0x6000, 0x6fff) AM_MIRROR(0x8000) AM_ROM // ROM 8 with A12 high
+ AM_RANGE(0x7000, 0x7fff) AM_MIRROR(0x8000) AM_ROM // ROM 7 with A12 high
+ADDRESS_MAP_END
+
+
+MACHINE_CONFIG_FRAGMENT(zac1b11142_config)
+ MCFG_CPU_ADD("melodycpu", M6802, XTAL_3_579545MHz) // verified on pcb
+ MCFG_CPU_PROGRAM_MAP(zac1b11142_melody_map)
+
+ MCFG_DEVICE_ADD("timebase", CLOCK, XTAL_3_579545MHz/4096/2) // CPU clock divided using 4040 and half of 74LS74
+ MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("pia_4i", pia6821_device, cb1_w))
+
+ MCFG_DEVICE_ADD("pia_4i", PIA6821, 0)
+ MCFG_PIA_READPA_HANDLER(READ8(zac1b11142_audio_device, pia_4i_porta_r))
+ MCFG_PIA_WRITEPA_HANDLER(WRITE8(zac1b11142_audio_device, pia_4i_porta_w))
+ MCFG_PIA_WRITEPB_HANDLER(WRITE8(zac1b11142_audio_device, pia_4i_portb_w))
+ MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("melodycpu", m6802_cpu_device, nmi_line))
+ MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("melodycpu", m6802_cpu_device, irq_line))
+
+ MCFG_SOUND_ADD("ay_4g", AY8910, XTAL_3_579545MHz/2) // CPU clock divided using 4040
+ MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(zac1b11142_audio_device, ay_4g_porta_w))
+ MCFG_AY8910_PORT_B_READ_CB(READ8(zac1b11142_audio_device, ay_4g_portb_r))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.15)
+
+ MCFG_SOUND_ADD("ay_4h", AY8910, XTAL_3_579545MHz/2) // CPU clock divided using 4040
+ MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(zac1b11142_audio_device, ay_4h_porta_w))
+ MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(zac1b11142_audio_device, ay_4h_portb_w))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.15)
+
+ MCFG_CPU_ADD("audiocpu", M6802, XTAL_3_579545MHz) // verified on pcb
+ MCFG_CPU_PROGRAM_MAP(zac1b11142_audio_map)
+ MCFG_CPU_PERIODIC_INT_DRIVER(zac1b11142_audio_device, input_poll, 60)
+
+ MCFG_DEVICE_ADD("pia_1i", PIA6821, 0)
+ MCFG_PIA_READPA_HANDLER(DEVREAD8("speech", tms5220_device, status_r))
+ MCFG_PIA_WRITEPA_HANDLER(DEVWRITE8("speech", tms5220_device, data_w))
+ MCFG_PIA_WRITEPB_HANDLER(WRITE8(zac1b11142_audio_device, pia_1i_portb_w))
+
+ MCFG_DAC_ADD("dac_1f")
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.80)
+
+ // There is no xtal, the clock is obtained from a RC oscillator as shown in the TMS5220 datasheet (R=100kOhm C=22pF)
+ // 162kHz measured on pin 3 20 minutes after power on, clock would then be 162.3*4=649.2kHz
+ MCFG_SOUND_ADD("speech", TMS5200, 649200) // ROMCLK pin measured at 162.3Khz, OSC is exactly *4 of that)
+ MCFG_TMS52XX_IRQ_HANDLER(DEVWRITELINE("pia_1i", pia6821_device, cb1_w))
+ MCFG_TMS52XX_READYQ_HANDLER(DEVWRITELINE("pia_1i", pia6821_device, ca2_w))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.80)
+MACHINE_CONFIG_END
+
+
+INPUT_PORTS_START(zac1b11142_ioports)
+ PORT_START("1B11142")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("P1")
+INPUT_PORTS_END
+
+
+zac1b11142_audio_device::zac1b11142_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, ZACCARIA_1B11142, "Zaccaria 1B11142 Sound Board", tag, owner, clock, "zac1b11142", __FILE__)
+ , device_mixer_interface(mconfig, *this, 1)
+ , m_acs_cb(*this)
+ , m_melodycpu(*this, "melodycpu")
+ , m_pia_4i(*this, "pia_4i")
+ , m_ay_4g(*this, "ay_4g")
+ , m_ay_4h(*this, "ay_4h")
+ , m_audiocpu(*this, "audiocpu")
+ , m_pia_1i(*this, "pia_1i")
+ , m_speech(*this, "speech")
+ , m_inputs(*this, "1B11142")
+ , m_host_command(0)
+ , m_melody_command(0)
+{
+}
+
+WRITE8_MEMBER(zac1b11142_audio_device::hs_w)
+{
+ m_host_command = data;
+ m_audiocpu->set_input_line(INPUT_LINE_IRQ0, (data & 0x80) ? CLEAR_LINE : ASSERT_LINE);
+}
+
+READ_LINE_MEMBER(zac1b11142_audio_device::acs_r)
+{
+ return (~m_pia_1i->b_output() >> 3) & 0x01;
+}
+
+WRITE_LINE_MEMBER(zac1b11142_audio_device::ressound_w)
+{
+ // TODO: there is a pulse-stretching network attached that should be simulated
+ m_melodycpu->set_input_line(INPUT_LINE_RESET, state);
+ // TODO: holds the reset line of m_pia_4i - can't implement this in MAME at this time
+ // TODO: holds the reset line of m_ay_4g - can't implement this in MAME at this time
+ // TODO: holds the reset line of m_ay_4h - can't implement this in MAME at this time
+ m_audiocpu->set_input_line(INPUT_LINE_RESET, state);
+ // TODO: holds the reset line of m_pia_1i - can't implement this in MAME at this time
+ // TODO: does some funky stuff with the VDD and VSS lines on the speech chip
+}
+
+READ8_MEMBER(zac1b11142_audio_device::pia_4i_porta_r)
+{
+ UINT8 const control = m_pia_4i->b_output();
+ UINT8 data = 0xff;
+
+ if (0x01 == (control & 0x03))
+ data &= m_ay_4g->data_r(space, 0);
+
+ if (0x04 == (control & 0x0c))
+ data &= m_ay_4h->data_r(space, 0);
+
+ return data;
+}
+
+WRITE8_MEMBER(zac1b11142_audio_device::pia_4i_porta_w)
+{
+ UINT8 const control = m_pia_4i->b_output();
+
+ if (control & 0x02)
+ m_ay_4g->data_address_w(space, (control >> 0) & 0x01, data);
+
+ if (control & 0x08)
+ m_ay_4h->data_address_w(space, (control >> 2) & 0x01, data);
+}
+
+WRITE8_MEMBER(zac1b11142_audio_device::pia_4i_portb_w)
+{
+ if (data & 0x02)
+ m_ay_4g->data_address_w(space, (data >> 0) & 0x01, m_pia_4i->a_output());
+
+ if (data & 0x08)
+ m_ay_4h->data_address_w(space, (data >> 2) & 0x01, m_pia_4i->a_output());
+}
+
+WRITE8_MEMBER(zac1b11142_audio_device::ay_4g_porta_w)
+{
+ // TODO: (data & 0x07) controls tromba mix volume
+ // TODO: (data & 0x08) controls cassa gate
+ // TODO: (data & 0x10) controls rullante gate
+}
+
+READ8_MEMBER(zac1b11142_audio_device::ay_4g_portb_r)
+{
+ return m_melody_command;
+}
+
+WRITE8_MEMBER(zac1b11142_audio_device::ay_4h_porta_w)
+{
+ // TODO: data & 0x01 controls LEVEL
+ // TODO: data & 0x02 controls LEVELT
+}
+
+WRITE8_MEMBER(zac1b11142_audio_device::ay_4h_portb_w)
+{
+ // TODO: data & 0x01 controls ANAL3 filter
+}
+
+READ8_MEMBER(zac1b11142_audio_device::host_command_r)
+{
+ return m_host_command;
+}
+
+WRITE8_MEMBER(zac1b11142_audio_device::melody_command_w)
+{
+ m_melody_command = data;
+ m_pia_4i->ca1_w((data >> 7) & 0x01);
+}
+
+WRITE8_MEMBER(zac1b11142_audio_device::pia_1i_portb_w)
+{
+ m_speech->rsq_w((data >> 0) & 0x01);
+ m_speech->wsq_w((data >> 1) & 0x01);
+ m_acs_cb((~data >> 3) & 0x01);
+ // TODO: a LED output().set_led_value(0, (data >> 4) & 0x01);
+}
+
+INTERRUPT_GEN_MEMBER(zac1b11142_audio_device::input_poll)
+{
+ m_audiocpu->set_input_line(INPUT_LINE_NMI, (m_inputs->read() & 0x80) ? CLEAR_LINE : ASSERT_LINE);
+}
+
+machine_config_constructor zac1b11142_audio_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME(zac1b11142_config);
+}
+
+ioport_constructor zac1b11142_audio_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(zac1b11142_ioports);
+}
+
+void zac1b11142_audio_device::device_config_complete()
+{
+}
+
+void zac1b11142_audio_device::device_start()
+{
+ m_acs_cb.resolve_safe();
+
+ save_item(NAME(m_host_command));
+ save_item(NAME(m_melody_command));
+}
+
+void zac1b11142_audio_device::device_reset()
+{
+ m_host_command = 0;
+ m_melody_command = 0;
+}
diff --git a/src/mame/audio/zaccaria.h b/src/mame/audio/zaccaria.h
new file mode 100644
index 00000000000..de796f9cf06
--- /dev/null
+++ b/src/mame/audio/zaccaria.h
@@ -0,0 +1,80 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
+#pragma once
+
+#ifndef __AUDIO_ZACCARIA_H__
+#define __AUDIO_ZACCARIA_H__
+
+#include "emu.h"
+#include "machine/6821pia.h"
+#include "machine/netlist.h"
+#include "sound/ay8910.h"
+#include "sound/tms5220.h"
+
+
+extern device_type const ZACCARIA_1B11142;
+
+
+#define MCFG_ZACCARIA_1B11142(_tag) \
+ MCFG_DEVICE_ADD(_tag, ZACCARIA_1B11142, 0)
+
+#define MCFG_ZACCARIA_1B11142_SET_ACS_CALLBACK(_devcb) \
+ devcb = &zac1b11142_audio_device::static_set_acs_cb(*device, DEVCB_##_devcb);
+
+
+class zac1b11142_audio_device : public device_t, public device_mixer_interface
+{
+public:
+ template<class _Object> static devcb_base &static_set_acs_cb(device_t &device, _Object object)
+ { return downcast<zac1b11142_audio_device &>(device).m_acs_cb.set_callback(object); }
+
+ zac1b11142_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock);
+ ~zac1b11142_audio_device() { }
+
+ // host interface
+ DECLARE_WRITE8_MEMBER(hs_w);
+ DECLARE_READ_LINE_MEMBER(acs_r);
+ DECLARE_WRITE_LINE_MEMBER(ressound_w);
+
+ // melody section handlers
+ DECLARE_READ8_MEMBER(pia_4i_porta_r);
+ DECLARE_WRITE8_MEMBER(pia_4i_porta_w);
+ DECLARE_WRITE8_MEMBER(pia_4i_portb_w);
+ DECLARE_WRITE8_MEMBER(ay_4g_porta_w);
+ DECLARE_READ8_MEMBER(ay_4g_portb_r);
+ DECLARE_WRITE8_MEMBER(ay_4h_porta_w);
+ DECLARE_WRITE8_MEMBER(ay_4h_portb_w);
+
+ // master audio section handlers
+ DECLARE_READ8_MEMBER(host_command_r);
+ DECLARE_WRITE8_MEMBER(melody_command_w);
+ DECLARE_WRITE8_MEMBER(pia_1i_portb_w);
+
+ // input ports don't push
+ INTERRUPT_GEN_MEMBER(input_poll);
+
+protected:
+ virtual machine_config_constructor device_mconfig_additions() const override;
+ virtual ioport_constructor device_input_ports() const override;
+ virtual void device_config_complete() override;
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ devcb_write_line m_acs_cb;
+
+ required_device<cpu_device> m_melodycpu;
+ required_device<pia6821_device> m_pia_4i;
+ required_device<ay8910_device> m_ay_4g;
+ required_device<ay8910_device> m_ay_4h;
+
+ required_device<cpu_device> m_audiocpu;
+ required_device<pia6821_device> m_pia_1i;
+ required_device<tms5220_device> m_speech;
+
+ required_ioport m_inputs;
+
+ UINT8 m_host_command;
+ UINT8 m_melody_command;
+};
+
+#endif // __AUDIO_ZACCARIA_H__ \ No newline at end of file
diff --git a/src/mame/drivers/laserbat.cpp b/src/mame/drivers/laserbat.cpp
index c1a072ac821..60aeeef360b 100644
--- a/src/mame/drivers/laserbat.cpp
+++ b/src/mame/drivers/laserbat.cpp
@@ -555,8 +555,8 @@ static MACHINE_CONFIG_DERIVED_CLASS( catnmous, laserbat_base, catnmous_state )
MCFG_PIA_READPA_HANDLER(READ8(catnmous_state, pia_porta_r))
MCFG_PIA_WRITEPA_HANDLER(WRITE8(catnmous_state, pia_porta_w))
MCFG_PIA_WRITEPB_HANDLER(WRITE8(catnmous_state, pia_portb_w))
- MCFG_PIA_IRQA_HANDLER(WRITELINE(catnmous_state, pia_irqa))
- MCFG_PIA_IRQB_HANDLER(WRITELINE(catnmous_state, pia_irqb))
+ MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("audiocpu", m6802_cpu_device, nmi_line))
+ MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("audiocpu", m6802_cpu_device, irq_line))
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/zaccaria.cpp b/src/mame/drivers/zaccaria.cpp
index 3cc556bf7ab..328c9614af7 100644
--- a/src/mame/drivers/zaccaria.cpp
+++ b/src/mame/drivers/zaccaria.cpp
@@ -41,29 +41,19 @@ Notes:
#include "emu.h"
#include "cpu/z80/z80.h"
-#include "cpu/m6800/m6800.h"
#include "machine/i8255.h"
-#include "sound/dac.h"
#include "includes/zaccaria.h"
void zaccaria_state::machine_start()
{
save_item(NAME(m_dsw_sel));
- save_item(NAME(m_active_8910));
- save_item(NAME(m_port0a));
- save_item(NAME(m_acs));
- save_item(NAME(m_last_port0b));
save_item(NAME(m_nmi_mask));
}
void zaccaria_state::machine_reset()
{
m_dsw_sel = 0;
- m_active_8910 = 0;
- m_port0a = 0;
- m_acs = 0;
- m_last_port0b = 0;
m_nmi_mask = 0;
}
@@ -71,21 +61,21 @@ WRITE8_MEMBER(zaccaria_state::dsw_sel_w)
{
switch (data & 0xf0)
{
- case 0xe0:
- m_dsw_sel = 0;
- break;
+ case 0xe0:
+ m_dsw_sel = 0;
+ break;
- case 0xd0:
- m_dsw_sel = 1;
- break;
+ case 0xd0:
+ m_dsw_sel = 1;
+ break;
- case 0xb0:
- m_dsw_sel = 2;
- break;
+ case 0xb0:
+ m_dsw_sel = 2;
+ break;
- default:
- logerror("%s: portsel = %02x\n", machine().describe_context(), data);
- break;
+ default:
+ logerror("%s: portsel = %02x\n", machine().describe_context(), data);
+ break;
}
}
@@ -95,94 +85,6 @@ READ8_MEMBER(zaccaria_state::dsw_r)
}
-WRITE8_MEMBER(zaccaria_state::ay8910_port0a_w)
-{
- /* bits 0-2 go to a 74LS156 with open collector outputs
- * one out of 8 Resitors is than used to form a resistor
- * divider with Analog input 5 (tromba)
- */
-
- // bits 3-4 control the analog drum emulation on 8910 #0 ch. A
-
- static const int table[8] = { 8200, 5600, 3300, 1500, 820, 390, 150, 47 };
- int b0, b1, b2, ba, v;
- b0 = data & 0x01;
- b1 = (data & 0x02) >> 1;
- b2 = (data & 0x04) >> 2;
- ba = (b0<<2) | (b1<<1) | b2;
- /* 150 below to scale to volume 100 */
- v = (150 * table[ba]) / (4700 + table[ba]);
- //printf("dac1w %02d %04d\n", ba, v);
- m_ay2->set_volume(1, v);
-}
-
-READ8_MEMBER(zaccaria_state::port0a_r)
-{
- return (m_active_8910 == 0) ? m_ay1->data_r(space, 0) : m_ay2->data_r(space, 0);
-}
-
-WRITE8_MEMBER(zaccaria_state::port0a_w)
-{
- m_port0a = data;
-}
-
-WRITE8_MEMBER(zaccaria_state::port0b_w)
-{
- /* bit 1 goes to 8910 #0 BDIR pin */
- if ((m_last_port0b & 0x02) == 0x02 && (data & 0x02) == 0x00)
- {
- /* bit 0 goes to the 8910 #0 BC1 pin */
- m_ay1->data_address_w(space, m_last_port0b, m_port0a);
- }
- else if ((m_last_port0b & 0x02) == 0x00 && (data & 0x02) == 0x02)
- {
- /* bit 0 goes to the 8910 #0 BC1 pin */
- if (m_last_port0b & 0x01)
- m_active_8910 = 0;
- }
- /* bit 3 goes to 8910 #1 BDIR pin */
- if ((m_last_port0b & 0x08) == 0x08 && (data & 0x08) == 0x00)
- {
- /* bit 2 goes to the 8910 #1 BC1 pin */
- m_ay2->data_address_w(space, m_last_port0b >> 2, m_port0a);
- }
- else if ((m_last_port0b & 0x08) == 0x00 && (data & 0x08) == 0x08)
- {
- /* bit 2 goes to the 8910 #1 BC1 pin */
- if (m_last_port0b & 0x04)
- m_active_8910 = 1;
- }
-
- m_last_port0b = data;
-}
-
-WRITE8_MEMBER(zaccaria_state::port1b_w)
-{
- // bit 0 = /RS
- m_tms->rsq_w((data >> 0) & 0x01);
- // bit 1 = /WS
- m_tms->wsq_w((data >> 1) & 0x01);
-
- // bit 3 = "ACS" (goes, inverted, to input port 6 bit 3)
- m_acs = ~data & 0x08;
-
- // bit 4 = led (for testing?)
- output().set_led_value(0,~data & 0x10);
-}
-
-
-WRITE8_MEMBER(zaccaria_state::sound_command_w)
-{
- soundlatch_byte_w(space, 0, data);
- m_audio2->set_input_line(0, (data & 0x80) ? CLEAR_LINE : ASSERT_LINE);
-}
-
-WRITE8_MEMBER(zaccaria_state::sound1_command_w)
-{
- m_pia0->ca1_w(data & 0x80);
- soundlatch2_byte_w(space, 0, data);
-}
-
GAME_EXTERN(monymony);
READ8_MEMBER(zaccaria_state::prot1_r)
@@ -245,83 +147,23 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, zaccaria_state )
AM_RANGE(0x6800, 0x683f) AM_WRITE(attributes_w) AM_SHARE("attributesram")
AM_RANGE(0x6840, 0x685f) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x6881, 0x68c0) AM_RAM AM_SHARE("spriteram2")
- AM_RANGE(0x6c00, 0x6c00) AM_WRITE(flip_screen_x_w)
- AM_RANGE(0x6c01, 0x6c01) AM_WRITE(flip_screen_y_w)
- AM_RANGE(0x6c02, 0x6c02) AM_WRITENOP /* sound reset */
- AM_RANGE(0x6c06, 0x6c06) AM_WRITE(coin_w)
- AM_RANGE(0x6c07, 0x6c07) AM_WRITE(nmi_mask_w)
- AM_RANGE(0x6c00, 0x6c07) AM_READ(prot2_r)
- AM_RANGE(0x6e00, 0x6e00) AM_READWRITE(dsw_r, sound_command_w)
+ AM_RANGE(0x6c00, 0x6c00) AM_MIRROR(0x81f8) AM_WRITE(flip_screen_x_w)
+ AM_RANGE(0x6c01, 0x6c01) AM_MIRROR(0x81f8) AM_WRITE(flip_screen_y_w)
+ AM_RANGE(0x6c02, 0x6c02) AM_MIRROR(0x81f8) AM_WRITE(ressound_w)
+ AM_RANGE(0x6c06, 0x6c06) AM_MIRROR(0x81f8) AM_WRITE(coin_w)
+ AM_RANGE(0x6c07, 0x6c07) AM_MIRROR(0x81f8) AM_WRITE(nmi_mask_w)
+ AM_RANGE(0x6c00, 0x6c07) AM_MIRROR(0x81f8) AM_READ(prot2_r)
+ AM_RANGE(0x6e00, 0x6e00) AM_MIRROR(0x81f8) AM_READ(dsw_r) AM_DEVWRITE("audiopcb", zac1b11142_audio_device, hs_w)
AM_RANGE(0x7000, 0x77ff) AM_RAM
AM_RANGE(0x7800, 0x7803) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
AM_RANGE(0x7c00, 0x7c00) AM_READ(watchdog_reset_r)
AM_RANGE(0x8000, 0xdfff) AM_ROM
ADDRESS_MAP_END
-/* slave sound cpu, produces music and sound effects */
-/* mapping:
- A15 A14 A13 A12 A11 A10 A09 A08 A07 A06 A05 A04 A03 A02 A01 A00
- 0 0 0 0 0 0 0 0 0 * * * * * * * RW 6802 internal ram
- 0 0 0 x x x x x x x x x x x x x Open bus (for area that doesn't overlap ram)
- 0 0 1 x x x x x x x x x x x x x Open bus
- 0 1 0 x x x x x x x x x 0 0 x x Open bus
- 0 1 0 x x x x x x x x x 0 1 x x Open bus
- 0 1 0 x x x x x x x x x 1 0 x x Open bus
- 0 1 0 x x x x x x x x x 1 1 * * RW 6821 PIA @ 4I
- 0 1 1 x x x x x x x x x x x x x Open bus
- 1 0 % % * * * * * * * * * * * * R /CS4A: Enable Rom 13
- 1 1 % % * * * * * * * * * * * * R /CS5A: Enable Rom 9
- note that the % bits go to pins 2 (6802 A12) and 26 (6802 A13) of the roms
- monymony and jackrabt both use 2764 roms, which use pin 2 as A12 and pin 26 as N/C don't care
- hence for actual chips used, the mem map is:
- 1 0 x * * * * * * * * * * * * * R /CS4A: Enable Rom 13
- 1 1 x * * * * * * * * * * * * * R /CS5A: Enable Rom 9
-
- 6821 PIA: CA1 comes from the master sound cpu's latch bit 7 (which is also connected to the AY chip at 4G's IOB1); CB1 comes from a periodic counter clocked by the 6802's clock, divided by 4096. CA2 and CB2 are disconnected. PA0-7 connect to the data busses of the AY-3-8910 chips; PB0 and PB1 connect to the BC1 and BDIR pins of the AY chip at 4G; PB2 and PB3 connect to the BC1 and BDIR pins of the AY chip at 4H.
-*/
-static ADDRESS_MAP_START( sound_map_1, AS_PROGRAM, 8, zaccaria_state )
- AM_RANGE(0x0000, 0x007f) AM_RAM
- AM_RANGE(0x500c, 0x500f) AM_DEVREADWRITE("pia0", pia6821_device, read, write) AM_MIRROR(0x1ff0)
- AM_RANGE(0x8000, 0x9fff) AM_ROM AM_MIRROR(0x2000) // rom 13
- AM_RANGE(0xc000, 0xdfff) AM_ROM AM_MIRROR(0x2000) // rom 9
-ADDRESS_MAP_END
-
-/* master sound cpu, controls speech directly */
-/* mapping:
- A15 A14 A13 A12 A11 A10 A09 A08 A07 A06 A05 A04 A03 A02 A01 A00
- 0 0 0 0 0 0 0 0 0 * * * * * * * RW 6802 internal ram
-**** x 0 0 0 x x x x 1 x x 0 x x * * Open bus (test mode writes as if there was another PIA here)
- x 0 0 0 x x x x 1 x x 1 x x * * RW 6821 PIA @ 1I
- x 0 0 1 0 0 x x x x x x x x x x W MC1408 DAC
- x x 0 1 0 1 x x x x x x x x x x W Command to slave sound1 cpu
- x x 0 1 1 0 x x x x x x x x x x R Command read latch from z80
- x x 0 1 1 1 x x x x x x x x x x Open bus
- % % 1 0 * * * * * * * * * * * * R /CS1A: Enable Rom 8
- % % 1 1 * * * * * * * * * * * * R /CS0A: Enable Rom 7
- note that the % bits go to pins 2 (6802 A14) and 26 (6802 A15) of the roms
- monymony and jackrabt both use 2764 roms, which use pin 2 as A12 and pin 26 as N/C don't care
- hence for actual chips used, the mem map is:
- x * 1 0 * * * * * * * * * * * * R /CS1A: Enable Rom 8
- x * 1 1 * * * * * * * * * * * * R /CS0A: Enable Rom 7
-
- 6821 PIA: PA0-7, CA2 and CB1 connect to the TMS5200; CA1 and CB2 are disconnected, though the test mode assumes there's something connected to CB2 (possibly another LED like the one connected to PB4); PB3 connects to 'ACS' which goes to the z80.
-*/
-static ADDRESS_MAP_START( sound_map_2, AS_PROGRAM, 8, zaccaria_state )
- AM_RANGE(0x0000, 0x007f) AM_RAM /* 6802 internal ram */
- AM_RANGE(0x0090, 0x0093) AM_DEVREADWRITE("pia1", pia6821_device, read, write) AM_MIRROR(0x8F6C)
- AM_RANGE(0x1000, 0x1000) AM_DEVWRITE("mc1408", dac_device, write_unsigned8) AM_MIRROR(0x83FF) /* MC1408 */
- AM_RANGE(0x1400, 0x1400) AM_WRITE(sound1_command_w) AM_MIRROR(0xC3FF)
- AM_RANGE(0x1800, 0x1800) AM_READ(soundlatch_byte_r) AM_MIRROR(0xC3FF)
- AM_RANGE(0x2000, 0x2fff) AM_ROM AM_MIRROR(0x8000) // rom 8 with A12 low
- AM_RANGE(0x3000, 0x3fff) AM_ROM AM_MIRROR(0x8000) // rom 7 with A12 low
- AM_RANGE(0x6000, 0x6fff) AM_ROM AM_MIRROR(0x8000) // rom 8 with A12 high
- AM_RANGE(0x7000, 0x7fff) AM_ROM AM_MIRROR(0x8000) // rom 7 with A12 high
-ADDRESS_MAP_END
-
-CUSTOM_INPUT_MEMBER(zaccaria_state::acs_r)
+WRITE8_MEMBER(zaccaria_state::ressound_w)
{
- return (m_acs & 0x08) ? 1 : 0;
+ m_audiopcb->ressound_w(data & 0x01);
}
static INPUT_PORTS_START( monymony )
@@ -429,7 +271,7 @@ static INPUT_PORTS_START( monymony )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, zaccaria_state,acs_r, NULL) /* "ACS" - from pin 13 of a PIA on the sound board */
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("audiopcb", zac1b11142_audio_device, acs_r)
/* other bits come from a protection device */
INPUT_PORTS_END
@@ -500,36 +342,12 @@ static MACHINE_CONFIG_START( zaccaria, zaccaria_state )
MCFG_CPU_VBLANK_INT_DRIVER("screen", zaccaria_state, vblank_irq)
// MCFG_QUANTUM_TIME(attotime::from_hz(1000000))
- MCFG_CPU_ADD("audiocpu", M6802,XTAL_3_579545MHz) /* verified on pcb */
- MCFG_CPU_PROGRAM_MAP(sound_map_1)
-
- MCFG_DEVICE_ADD("timebase", CLOCK, XTAL_3_579545MHz/4096/2) /* verified on pcb */
- MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("pia0", pia6821_device, cb1_w))
-
-// MCFG_QUANTUM_TIME(attotime::from_hz(1000000))
-
- MCFG_CPU_ADD("audio2", M6802,XTAL_3_579545MHz) /* verified on pcb */
- MCFG_CPU_PROGRAM_MAP(sound_map_2)
-// MCFG_QUANTUM_TIME(attotime::from_hz(1000000))
-
MCFG_DEVICE_ADD("ppi8255", I8255A, 0)
MCFG_I8255_IN_PORTA_CB(IOPORT("P1"))
MCFG_I8255_IN_PORTB_CB(IOPORT("P2"))
MCFG_I8255_IN_PORTC_CB(IOPORT("SYSTEM"))
MCFG_I8255_OUT_PORTC_CB(WRITE8(zaccaria_state, dsw_sel_w))
- MCFG_DEVICE_ADD( "pia0", PIA6821, 0)
- MCFG_PIA_READPA_HANDLER(READ8(zaccaria_state, port0a_r))
- MCFG_PIA_WRITEPA_HANDLER(WRITE8(zaccaria_state, port0a_w))
- MCFG_PIA_WRITEPB_HANDLER(WRITE8(zaccaria_state, port0b_w))
- MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("audiocpu", m6802_cpu_device, nmi_line))
- MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("audiocpu", m6802_cpu_device, irq_line))
-
- MCFG_DEVICE_ADD( "pia1", PIA6821, 0)
- MCFG_PIA_READPA_HANDLER(DEVREAD8("tms", tms5220_device, status_r))
- MCFG_PIA_WRITEPA_HANDLER(DEVWRITE8("tms", tms5220_device, data_w))
- MCFG_PIA_WRITEPB_HANDLER(WRITE8(zaccaria_state,port1b_w))
-
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60.57) /* verified on pcb */
@@ -546,24 +364,8 @@ static MACHINE_CONFIG_START( zaccaria, zaccaria_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
-
- MCFG_SOUND_ADD("ay1", AY8910, XTAL_3_579545MHz/2) /* verified on pcb */
- MCFG_AY8910_PORT_B_READ_CB(READ8(driver_device, soundlatch2_byte_r))
- MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(zaccaria_state, ay8910_port0a_w))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
-
- MCFG_SOUND_ADD("ay2", AY8910, XTAL_3_579545MHz/2) /* verified on pcb */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
-
- MCFG_DAC_ADD("mc1408")
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
-
- /* There is no xtal, the clock is obtained from a RC oscillator as shown in the TMS5220 datasheet (R=100kOhm C=22pF) */
- /* 162kHz measured on pin 3 20 minutesa fter power on. Clock would then be 162*4=648kHz. */
- MCFG_SOUND_ADD("tms", TMS5200, 649200) /* ROMCLK pin measured at 162.3Khz, OSC is exactly *4 of that) */
- MCFG_TMS52XX_IRQ_HANDLER(DEVWRITELINE("pia1", pia6821_device, cb1_w))
- MCFG_TMS52XX_READYQ_HANDLER(DEVWRITELINE("pia1", pia6821_device, ca2_w))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
+ MCFG_ZACCARIA_1B11142("audiopcb")
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
MACHINE_CONFIG_END
@@ -589,11 +391,11 @@ ROM_START( monymony )
ROM_LOAD( "cpu6.2c", 0x5000, 0x1000, CRC(31da62b1) SHA1(486f07087244f8537510afacb64ddd59eb512a4d) )
ROM_CONTINUE( 0xd000, 0x1000 )
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for first 6802 */
+ ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 ) /* 64k for first 6802 */
ROM_LOAD( "snd13.2g", 0x8000, 0x2000, CRC(78b01b98) SHA1(2aabed56cdae9463deb513c0c5021f6c8dfd271e) )
ROM_LOAD( "snd9.1i", 0xc000, 0x2000, CRC(94e3858b) SHA1(04961f67b95798b530bd83355dec612389f22255) )
- ROM_REGION( 0x10000, "audio2", 0 ) /* 64k for second 6802 */
+ ROM_REGION( 0x10000, "audiopcb:audiocpu", 0 ) /* 64k for second 6802 */
ROM_LOAD( "snd8.1h", 0x2000, 0x1000, CRC(aad76193) SHA1(e08fc184efced392ee902c4cc9daaaf3310cdfe2) )
ROM_CONTINUE( 0x6000, 0x1000 )
ROM_LOAD( "snd7.1g", 0x3000, 0x1000, CRC(1e8ffe3e) SHA1(858ee7abe88d5801237e519cae2b50ae4bf33a58) )
@@ -624,11 +426,11 @@ ROM_START( jackrabt )
ROM_LOAD( "cpu-01.5h", 0xc000, 0x1000, CRC(785e1a01) SHA1(a748d300be9455cad4f912e01c2279bb8465edfe) )
ROM_LOAD( "cpu-01.6h", 0xd000, 0x1000, CRC(dd5979cf) SHA1(e9afe7002b2258a1c3132bdd951c6e20d473fb6a) )
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for first 6802 */
+ ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 ) /* 64k for first 6802 */
ROM_LOAD( "13snd.2g", 0x8000, 0x2000, CRC(fc05654e) SHA1(ed9c66672fe89c41e320e1d27b53f5efa92dce9c) )
ROM_LOAD( "9snd.1i", 0xc000, 0x2000, CRC(3dab977f) SHA1(3e79c06d2e70b050f01b7ac58be5127ba87904b0) )
- ROM_REGION( 0x10000, "audio2", 0 ) /* 64k for second 6802 */
+ ROM_REGION( 0x10000, "audiopcb:audiocpu", 0 ) /* 64k for second 6802 */
ROM_LOAD( "8snd.1h", 0x2000, 0x1000, CRC(f4507111) SHA1(0513f0831b94aeda84aa4f3b4a7c60dfc5113b2d) )
ROM_CONTINUE( 0x6000, 0x1000 )
ROM_LOAD( "7snd.1g", 0x3000, 0x1000, CRC(c722eff8) SHA1(d8d1c091ab80ea2d6616e4dc030adc9905c0a496) )
@@ -663,11 +465,11 @@ ROM_START( jackrabt2 )
ROM_LOAD( "6cpu2.2c", 0x5000, 0x1000, CRC(404496eb) SHA1(44381e27e540fe9d8cacab4c3b1fe9a4f20d26a8) )
ROM_CONTINUE( 0xd000, 0x1000 )
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for first 6802 */
+ ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 ) /* 64k for first 6802 */
ROM_LOAD( "13snd.2g", 0x8000, 0x2000, CRC(fc05654e) SHA1(ed9c66672fe89c41e320e1d27b53f5efa92dce9c) )
ROM_LOAD( "9snd.1i", 0xc000, 0x2000, CRC(3dab977f) SHA1(3e79c06d2e70b050f01b7ac58be5127ba87904b0) )
- ROM_REGION( 0x10000, "audio2", 0 ) /* 64k for second 6802 */
+ ROM_REGION( 0x10000, "audiopcb:audiocpu", 0 ) /* 64k for second 6802 */
ROM_LOAD( "8snd.1h", 0x2000, 0x1000, CRC(f4507111) SHA1(0513f0831b94aeda84aa4f3b4a7c60dfc5113b2d) )
ROM_CONTINUE( 0x6000, 0x1000 )
ROM_LOAD( "7snd.1g", 0x3000, 0x1000, CRC(c722eff8) SHA1(d8d1c091ab80ea2d6616e4dc030adc9905c0a496) )
@@ -704,11 +506,11 @@ ROM_START( jackrabts )
ROM_LOAD( "6cpu.2c", 0x5000, 0x1000, CRC(f53d6356) SHA1(9b167edca59cf81a2468368a372bab132f15e2ea) )
ROM_CONTINUE( 0xd000, 0x1000 )
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for first 6802 */
+ ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 ) /* 64k for first 6802 */
ROM_LOAD( "13snd.2g", 0x8000, 0x2000, CRC(fc05654e) SHA1(ed9c66672fe89c41e320e1d27b53f5efa92dce9c) )
ROM_LOAD( "9snd.1i", 0xc000, 0x2000, CRC(3dab977f) SHA1(3e79c06d2e70b050f01b7ac58be5127ba87904b0) )
- ROM_REGION( 0x10000, "audio2", 0 ) /* 64k for second 6802 */
+ ROM_REGION( 0x10000, "audiopcb:audiocpu", 0 ) /* 64k for second 6802 */
ROM_LOAD( "8snd.1h", 0x2000, 0x1000, CRC(f4507111) SHA1(0513f0831b94aeda84aa4f3b4a7c60dfc5113b2d) )
ROM_CONTINUE( 0x6000, 0x1000 )
ROM_LOAD( "7snd.1g", 0x3000, 0x1000, CRC(c722eff8) SHA1(d8d1c091ab80ea2d6616e4dc030adc9905c0a496) )
diff --git a/src/mame/includes/laserbat.h b/src/mame/includes/laserbat.h
index 1df1e972b4e..a07cdd97a87 100644
--- a/src/mame/includes/laserbat.h
+++ b/src/mame/includes/laserbat.h
@@ -203,8 +203,6 @@ public:
DECLARE_READ8_MEMBER(pia_porta_r);
DECLARE_WRITE8_MEMBER(pia_porta_w);
DECLARE_WRITE8_MEMBER(pia_portb_w);
- DECLARE_WRITE_LINE_MEMBER(pia_irqa);
- DECLARE_WRITE_LINE_MEMBER(pia_irqb);
// PSG handlers
DECLARE_WRITE8_MEMBER(psg1_porta_w);
diff --git a/src/mame/includes/zaccaria.h b/src/mame/includes/zaccaria.h
index 62a76a1df44..6bcfa72798d 100644
--- a/src/mame/includes/zaccaria.h
+++ b/src/mame/includes/zaccaria.h
@@ -1,60 +1,25 @@
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
-#include "machine/6821pia.h"
-#include "machine/clock.h"
-#include "sound/ay8910.h"
-#include "sound/tms5220.h"
+#include "emu.h"
+#include "audio/zaccaria.h"
class zaccaria_state : public driver_device
{
public:
zaccaria_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_audio2(*this, "audio2"),
- m_pia0(*this, "pia0"),
- m_ay1(*this, "ay1"),
- m_ay2(*this, "ay2"),
- m_tms(*this, "tms"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette"),
- m_videoram(*this, "videoram"),
- m_attributesram(*this, "attributesram"),
- m_spriteram(*this, "spriteram"),
- m_spriteram2(*this, "spriteram2"),
- m_dsw_port(*this, "DSW") { }
-
-
-
- /* devices */
- required_device<cpu_device> m_maincpu;
- required_device<cpu_device> m_audio2;
- required_device<pia6821_device> m_pia0;
- required_device<ay8910_device> m_ay1;
- required_device<ay8910_device> m_ay2;
- required_device<tms5220_device> m_tms;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
-
- /* memory pointers */
- required_shared_ptr<UINT8> m_videoram;
- required_shared_ptr<UINT8> m_attributesram;
- required_shared_ptr<UINT8> m_spriteram;
- required_shared_ptr<UINT8> m_spriteram2;
-
- required_ioport_array<3> m_dsw_port;
-
- int m_dsw_sel;
- int m_active_8910;
- int m_port0a;
- int m_acs;
- int m_last_port0b;
- tilemap_t *m_bg_tilemap;
- UINT8 m_nmi_mask;
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_gfxdecode(*this, "gfxdecode")
+ , m_palette(*this, "palette")
+ , m_audiopcb(*this, "audiopcb")
+ , m_videoram(*this, "videoram")
+ , m_attributesram(*this, "attributesram")
+ , m_spriteram(*this, "spriteram")
+ , m_spriteram2(*this, "spriteram2")
+ , m_dsw_port(*this, "DSW")
+ { }
DECLARE_READ8_MEMBER(dsw_r);
- DECLARE_WRITE8_MEMBER(sound_command_w);
- DECLARE_WRITE8_MEMBER(sound1_command_w);
DECLARE_READ8_MEMBER(prot1_r);
DECLARE_READ8_MEMBER(prot2_r);
DECLARE_WRITE8_MEMBER(coin_w);
@@ -63,13 +28,8 @@ public:
DECLARE_WRITE8_MEMBER(attributes_w);
DECLARE_WRITE8_MEMBER(flip_screen_x_w);
DECLARE_WRITE8_MEMBER(flip_screen_y_w);
- DECLARE_CUSTOM_INPUT_MEMBER(acs_r);
+ DECLARE_WRITE8_MEMBER(ressound_w);
DECLARE_WRITE8_MEMBER(dsw_sel_w);
- DECLARE_WRITE8_MEMBER(ay8910_port0a_w);
- DECLARE_READ8_MEMBER(port0a_r);
- DECLARE_WRITE8_MEMBER(port0a_w);
- DECLARE_WRITE8_MEMBER(port0b_w);
- DECLARE_WRITE8_MEMBER(port1b_w);
TILE_GET_INFO_MEMBER(get_tile_info);
virtual void machine_start() override;
virtual void machine_reset() override;
@@ -78,4 +38,21 @@ public:
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(vblank_irq);
void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,UINT8 *spriteram,int color,int section);
+
+protected:
+ required_device<cpu_device> m_maincpu;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<palette_device> m_palette;
+ required_device<zac1b11142_audio_device> m_audiopcb;
+
+ required_shared_ptr<UINT8> m_videoram;
+ required_shared_ptr<UINT8> m_attributesram;
+ required_shared_ptr<UINT8> m_spriteram;
+ required_shared_ptr<UINT8> m_spriteram2;
+
+ required_ioport_array<3> m_dsw_port;
+
+ int m_dsw_sel;
+ tilemap_t *m_bg_tilemap;
+ UINT8 m_nmi_mask;
};