summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author R. Belmont <rb6502@users.noreply.github.com>2016-11-25 11:15:34 -0500
committer GitHub <noreply@github.com>2016-11-25 11:15:34 -0500
commitf668f46427e4ec4623757d34850a375fbd159805 (patch)
tree8ee745cbc63a2cf36379792c1f1df43c3dd5b028
parent37fde072b93e2c9819178bdb1c767e440d0d090f (diff)
parent8fa5f5f1ec6203001f193e252d28f011c088b555 (diff)
Merge pull request #1776 from ajrhacker/seibu_sound_cleanup
Seibu sound device cleanup (nw)
-rw-r--r--src/mame/audio/seibu.cpp151
-rw-r--r--src/mame/audio/seibu.h167
-rw-r--r--src/mame/drivers/airraid.cpp35
-rw-r--r--src/mame/drivers/bloodbro.cpp18
-rw-r--r--src/mame/drivers/cabal.cpp17
-rw-r--r--src/mame/drivers/dcon.cpp38
-rw-r--r--src/mame/drivers/deadang.cpp49
-rw-r--r--src/mame/drivers/dynduke.cpp19
-rw-r--r--src/mame/drivers/goodejan.cpp18
-rw-r--r--src/mame/drivers/legionna.cpp107
-rw-r--r--src/mame/drivers/nmk16.cpp34
-rw-r--r--src/mame/drivers/r2dx_v33.cpp21
-rw-r--r--src/mame/drivers/raiden.cpp23
-rw-r--r--src/mame/drivers/raiden2.cpp81
-rw-r--r--src/mame/drivers/seicupbl.cpp1
-rw-r--r--src/mame/drivers/sengokmj.cpp18
-rw-r--r--src/mame/drivers/shanghai.cpp40
-rw-r--r--src/mame/drivers/toki.cpp31
-rw-r--r--src/mame/includes/raiden2.h3
19 files changed, 538 insertions, 333 deletions
diff --git a/src/mame/audio/seibu.cpp b/src/mame/audio/seibu.cpp
index 93bd765d25a..d1a287f5906 100644
--- a/src/mame/audio/seibu.cpp
+++ b/src/mame/audio/seibu.cpp
@@ -36,9 +36,6 @@
#include "emu.h"
#include "audio/seibu.h"
-#include "sound/3812intf.h"
-#include "sound/ym2151.h"
-#include "sound/2203intf.h"
#include "sound/okiadpcm.h"
#include "sound/okim6295.h"
@@ -78,7 +75,10 @@ const device_type SEIBU_SOUND = &device_creator<seibu_sound_device>;
seibu_sound_device::seibu_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SEIBU_SOUND, "Seibu Sound System", tag, owner, clock, "seibu_sound", __FILE__),
- m_sound_rom(*this, ":audiocpu"),
+ m_ym_read_cb(*this),
+ m_ym_write_cb(*this),
+ m_sound_cpu(*this, finder_base::DUMMY_TAG),
+ m_sound_rom(*this, finder_base::DUMMY_TAG),
m_main2sub_pending(0),
m_sub2main_pending(0),
m_rst10_irq(0xff),
@@ -88,9 +88,11 @@ seibu_sound_device::seibu_sound_device(const machine_config &mconfig, const char
m_decrypted_opcodes = nullptr;
}
-void seibu_sound_device::set_encryption(int mode)
+void seibu_sound_device::set_cpu_tag_and_encryption(device_t &device, const char *tag, int mode)
{
- m_encryption_mode = mode;
+ downcast<seibu_sound_device &>(device).m_sound_cpu.set_tag(tag);
+ downcast<seibu_sound_device &>(device).m_sound_rom.set_tag(tag);
+ downcast<seibu_sound_device &>(device).m_encryption_mode = mode;
}
//-------------------------------------------------
@@ -99,6 +101,9 @@ void seibu_sound_device::set_encryption(int mode)
void seibu_sound_device::device_start()
{
+ m_ym_read_cb.resolve_safe(0);
+ m_ym_write_cb.resolve_safe();
+
if (m_sound_rom.length() > 0x10000)
{
membank(":seibu_bank1")->configure_entries(0, (m_sound_rom.length() - 0x10000) / 0x8000, &m_sound_rom[0x10000], 0x8000);
@@ -141,7 +146,6 @@ void seibu_sound_device::device_start()
void seibu_sound_device::device_reset()
{
- m_sound_cpu = machine().device(":audiocpu");
update_irq_lines(VECTOR_INIT);
}
@@ -233,12 +237,12 @@ void seibu_sound_device::update_irq_lines(int param)
break;
}
- if (m_sound_cpu != nullptr)
+ if (m_sound_cpu.found())
{
if ((m_rst10_irq & m_rst18_irq) == 0xff) /* no IRQs pending */
- m_sound_cpu->execute().set_input_line(0, CLEAR_LINE);
+ m_sound_cpu->set_input_line(0, CLEAR_LINE);
else /* IRQ pending */
- m_sound_cpu->execute().set_input_line_and_vector(0, ASSERT_LINE, m_rst10_irq & m_rst18_irq);
+ m_sound_cpu->set_input_line_and_vector(0, ASSERT_LINE, m_rst10_irq & m_rst18_irq);
}
else
return;
@@ -266,6 +270,16 @@ WRITE_LINE_MEMBER( seibu_sound_device::fm_irqhandler )
update_irq_lines(state ? RST10_ASSERT : RST10_CLEAR);
}
+READ8_MEMBER( seibu_sound_device::ym_r )
+{
+ return m_ym_read_cb(offset);
+}
+
+WRITE8_MEMBER( seibu_sound_device::ym_w )
+{
+ m_ym_write_cb(offset, data);
+}
+
WRITE8_MEMBER( seibu_sound_device::bank_w )
{
membank(":seibu_bank1")->set_entry(data & 1);
@@ -371,7 +385,7 @@ ADDRESS_MAP_START( seibu_sound_map, AS_PROGRAM, 8, seibu_sound_device )
AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst10_ack_w)
AM_RANGE(0x4003, 0x4003) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst18_ack_w)
AM_RANGE(0x4007, 0x4007) AM_DEVWRITE("seibu_sound", seibu_sound_device, bank_w)
- AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write)
+ AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("seibu_sound", seibu_sound_device, ym_r, ym_w)
AM_RANGE(0x4010, 0x4011) AM_DEVREAD("seibu_sound", seibu_sound_device, soundlatch_r)
AM_RANGE(0x4012, 0x4012) AM_DEVREAD("seibu_sound", seibu_sound_device, main_data_pending_r)
AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN")
@@ -381,121 +395,6 @@ ADDRESS_MAP_START( seibu_sound_map, AS_PROGRAM, 8, seibu_sound_device )
AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
ADDRESS_MAP_END
-ADDRESS_MAP_START( seibu2_airraid_sound_map, AS_PROGRAM, 8, seibu_sound_device )
- AM_RANGE(0x0000, 0x1fff) AM_ROM
- AM_RANGE(0x2000, 0x27ff) AM_RAM
- AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("seibu_sound", seibu_sound_device, pending_w)
- AM_RANGE(0x4001, 0x4001) AM_DEVWRITE("seibu_sound", seibu_sound_device, irq_clear_w)
- AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst10_ack_w)
- AM_RANGE(0x4003, 0x4003) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst18_ack_w)
- AM_RANGE(0x4007, 0x4007) AM_DEVWRITE("seibu_sound", seibu_sound_device, bank_w)
- AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
- AM_RANGE(0x4010, 0x4011) AM_DEVREAD("seibu_sound", seibu_sound_device, soundlatch_r)
- AM_RANGE(0x4012, 0x4012) AM_DEVREAD("seibu_sound", seibu_sound_device, main_data_pending_r)
- AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN")
- AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
- AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
-// AM_RANGE(0x6000, 0x6000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
- AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
-ADDRESS_MAP_END
-
-ADDRESS_MAP_START( seibu2_sound_map, AS_PROGRAM, 8, seibu_sound_device )
- AM_RANGE(0x0000, 0x1fff) AM_ROM
- AM_RANGE(0x2000, 0x27ff) AM_RAM
- AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("seibu_sound", seibu_sound_device, pending_w)
- AM_RANGE(0x4001, 0x4001) AM_DEVWRITE("seibu_sound", seibu_sound_device, irq_clear_w)
- AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst10_ack_w)
- AM_RANGE(0x4003, 0x4003) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst18_ack_w)
- AM_RANGE(0x4007, 0x4007) AM_DEVWRITE("seibu_sound", seibu_sound_device, bank_w)
- AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
- AM_RANGE(0x4010, 0x4011) AM_DEVREAD("seibu_sound", seibu_sound_device, soundlatch_r)
- AM_RANGE(0x4012, 0x4012) AM_DEVREAD("seibu_sound", seibu_sound_device, main_data_pending_r)
- AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN")
- AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
- AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
- AM_RANGE(0x6000, 0x6000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
- AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
-ADDRESS_MAP_END
-
-ADDRESS_MAP_START( seibu2_raiden2_sound_map, AS_PROGRAM, 8, seibu_sound_device )
- AM_RANGE(0x0000, 0x1fff) AM_ROM
- AM_RANGE(0x2000, 0x27ff) AM_RAM
- AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("seibu_sound", seibu_sound_device, pending_w)
- AM_RANGE(0x4001, 0x4001) AM_DEVWRITE("seibu_sound", seibu_sound_device, irq_clear_w)
- AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst10_ack_w)
- AM_RANGE(0x4003, 0x4003) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst18_ack_w)
- AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
- AM_RANGE(0x4010, 0x4011) AM_DEVREAD("seibu_sound", seibu_sound_device, soundlatch_r)
- AM_RANGE(0x4012, 0x4012) AM_DEVREAD("seibu_sound", seibu_sound_device, main_data_pending_r)
- AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN")
- AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
- AM_RANGE(0x401a, 0x401a) AM_DEVWRITE("seibu_sound", seibu_sound_device, bank_w)
- AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
- AM_RANGE(0x6000, 0x6000) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
- AM_RANGE(0x6002, 0x6002) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
- AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
- AM_RANGE(0x4004, 0x4004) AM_NOP
- AM_RANGE(0x401a, 0x401a) AM_NOP
-ADDRESS_MAP_END
-
-ADDRESS_MAP_START( seibu_newzeroteam_sound_map, AS_PROGRAM, 8, seibu_sound_device )
- AM_RANGE(0x0000, 0x1fff) AM_ROM
- AM_RANGE(0x2000, 0x27ff) AM_RAM
- AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("seibu_sound", seibu_sound_device, pending_w)
- AM_RANGE(0x4001, 0x4001) AM_DEVWRITE("seibu_sound", seibu_sound_device, irq_clear_w)
- AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst10_ack_w)
- AM_RANGE(0x4003, 0x4003) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst18_ack_w)
- AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write)
- AM_RANGE(0x4010, 0x4011) AM_DEVREAD("seibu_sound", seibu_sound_device, soundlatch_r)
- AM_RANGE(0x4012, 0x4012) AM_DEVREAD("seibu_sound", seibu_sound_device, main_data_pending_r)
- AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN")
- AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
- AM_RANGE(0x401a, 0x401a) AM_DEVWRITE("seibu_sound", seibu_sound_device, bank_w)
- AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
- AM_RANGE(0x6000, 0x6000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
- AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
-ADDRESS_MAP_END
-
-ADDRESS_MAP_START( seibu3_sound_map, AS_PROGRAM, 8, seibu_sound_device )
- AM_RANGE(0x0000, 0x1fff) AM_ROM
- AM_RANGE(0x2000, 0x27ff) AM_RAM
- AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("seibu_sound", seibu_sound_device, pending_w)
- AM_RANGE(0x4001, 0x4001) AM_DEVWRITE("seibu_sound", seibu_sound_device, irq_clear_w)
- AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst10_ack_w)
- AM_RANGE(0x4003, 0x4003) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst18_ack_w)
- AM_RANGE(0x4007, 0x4007) AM_DEVWRITE("seibu_sound", seibu_sound_device, bank_w)
- AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("ym1", ym2203_device, read, write)
- AM_RANGE(0x4010, 0x4011) AM_DEVREAD("seibu_sound", seibu_sound_device, soundlatch_r)
- AM_RANGE(0x4012, 0x4012) AM_DEVREAD("seibu_sound", seibu_sound_device, main_data_pending_r)
- AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN")
- AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
- AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
- AM_RANGE(0x6008, 0x6009) AM_DEVREADWRITE("ym2", ym2203_device, read, write)
- AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
-ADDRESS_MAP_END
-
-ADDRESS_MAP_START( seibu3_adpcm_sound_map, AS_PROGRAM, 8, seibu_sound_device )
- AM_RANGE(0x0000, 0x1fff) AM_ROM
- AM_RANGE(0x2000, 0x27ff) AM_RAM
- AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("seibu_sound", seibu_sound_device, pending_w)
- AM_RANGE(0x4001, 0x4001) AM_DEVWRITE("seibu_sound", seibu_sound_device, irq_clear_w)
- AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst10_ack_w)
- AM_RANGE(0x4003, 0x4003) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst18_ack_w)
- AM_RANGE(0x4005, 0x4006) AM_DEVWRITE("adpcm1", seibu_adpcm_device, adr_w)
- AM_RANGE(0x4007, 0x4007) AM_DEVWRITE("seibu_sound", seibu_sound_device, bank_w)
- AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("ym1", ym2203_device, read, write)
- AM_RANGE(0x4010, 0x4011) AM_DEVREAD("seibu_sound", seibu_sound_device, soundlatch_r)
- AM_RANGE(0x4012, 0x4012) AM_DEVREAD("seibu_sound", seibu_sound_device, main_data_pending_r)
- AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN")
- AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
- AM_RANGE(0x401a, 0x401a) AM_DEVWRITE("adpcm1", seibu_adpcm_device, ctl_w)
- AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
- AM_RANGE(0x6005, 0x6006) AM_DEVWRITE("adpcm2", seibu_adpcm_device, adr_w)
- AM_RANGE(0x6008, 0x6009) AM_DEVREADWRITE("ym2", ym2203_device, read, write)
- AM_RANGE(0x601a, 0x601a) AM_DEVWRITE("adpcm2", seibu_adpcm_device, ctl_w)
- AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
-ADDRESS_MAP_END
-
/***************************************************************************
Seibu ADPCM device
(MSM5205 with interface to sample ROM provided by YM3931)
diff --git a/src/mame/audio/seibu.h b/src/mame/audio/seibu.h
index 31e3cfd6a5a..f35fb49c93f 100644
--- a/src/mame/audio/seibu.h
+++ b/src/mame/audio/seibu.h
@@ -26,19 +26,10 @@
***************************************************************************/
#include "cpu/z80/z80.h"
-#include "sound/3812intf.h"
-#include "sound/ym2151.h"
-#include "sound/2203intf.h"
-#include "sound/okim6295.h"
+#include "sound/okiadpcm.h"
ADDRESS_MAP_EXTERN(seibu_sound_decrypted_opcodes_map, 8);
ADDRESS_MAP_EXTERN(seibu_sound_map, 8);
-ADDRESS_MAP_EXTERN(seibu2_sound_map, 8);
-ADDRESS_MAP_EXTERN(seibu2_airraid_sound_map, 8);
-ADDRESS_MAP_EXTERN(seibu2_raiden2_sound_map, 8);
-ADDRESS_MAP_EXTERN(seibu_newzeroteam_sound_map, 8);
-ADDRESS_MAP_EXTERN(seibu3_sound_map, 8);
-ADDRESS_MAP_EXTERN(seibu3_adpcm_sound_map, 8);
class seibu_sound_device : public device_t
{
@@ -46,12 +37,19 @@ public:
seibu_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
~seibu_sound_device() {}
+ // static configuration
+ static void set_cpu_tag_and_encryption(device_t &device, const char *tag, int mode);
+ template<class _Object> static devcb_base &set_ym_read_callback(device_t &device, _Object object) { return downcast<seibu_sound_device &>(device).m_ym_read_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_ym_write_callback(device_t &device, _Object object) { return downcast<seibu_sound_device &>(device).m_ym_write_cb.set_callback(object); }
+
DECLARE_READ16_MEMBER( main_word_r );
DECLARE_WRITE16_MEMBER( main_word_w );
DECLARE_WRITE16_MEMBER( main_mustb_w );
DECLARE_WRITE8_MEMBER( irq_clear_w );
DECLARE_WRITE8_MEMBER( rst10_ack_w );
DECLARE_WRITE8_MEMBER( rst18_ack_w );
+ DECLARE_READ8_MEMBER( ym_r );
+ DECLARE_WRITE8_MEMBER( ym_w );
DECLARE_WRITE8_MEMBER( bank_w );
DECLARE_WRITE8_MEMBER( coin_w );
WRITE_LINE_MEMBER( fm_irqhandler );
@@ -61,7 +59,6 @@ public:
DECLARE_WRITE8_MEMBER( pending_w );
static void apply_decrypt(uint8_t *rom, uint8_t *opcodes, int length);
- void set_encryption(int mode);
uint8_t *get_custom_decrypt();
void update_irq_lines(int param);
@@ -70,12 +67,16 @@ protected:
virtual void device_start() override;
virtual void device_reset() override;
- private:
+private:
int m_encryption_mode;
std::unique_ptr<uint8_t[]> m_decrypted_opcodes;
+ // device callbacks
+ devcb_read8 m_ym_read_cb;
+ devcb_write8 m_ym_write_cb;
+
// internal state
- device_t *m_sound_cpu;
+ required_device<cpu_device> m_sound_cpu;
required_region_ptr<uint8_t> m_sound_rom;
uint8_t m_main2sub[2];
uint8_t m_sub2main[2];
@@ -117,7 +118,7 @@ protected:
// sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
- private:
+private:
// internal state
oki_adpcm_state m_adpcm;
sound_stream *m_stream;
@@ -154,128 +155,22 @@ extern const device_type SEIBU_ADPCM;
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) \
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
+#define MCFG_SEIBU_SOUND_CPU(_audiocputag) \
+ seibu_sound_device::set_cpu_tag_and_encryption(*device, "^" _audiocputag, 0);
+
+#define MCFG_SEIBU_SOUND_CPU_ENCRYPTED_LOW(_audiocputag) \
+ seibu_sound_device::set_cpu_tag_and_encryption(*device, "^" _audiocputag, 1);
+
+#define MCFG_SEIBU_SOUND_CPU_ENCRYPTED_FULL(_audiocputag) \
+ seibu_sound_device::set_cpu_tag_and_encryption(*device, "^" _audiocputag, 2);
+
+#define MCFG_SEIBU_SOUND_CPU_ENCRYPTED_CUSTOM(_audiocputag) \
+ seibu_sound_device::set_cpu_tag_and_encryption(*device, "^" _audiocputag, 3);
+
+#define MCFG_SEIBU_SOUND_YM_READ_CB(_devcb) \
+ devcb = &seibu_sound_device::set_ym_read_callback(*device, DEVCB_##_devcb);
-#define SEIBU_SOUND_SYSTEM_CPU(freq) \
- MCFG_CPU_ADD("audiocpu", Z80, freq) \
- MCFG_CPU_PROGRAM_MAP(seibu_sound_map) \
- MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
-
-#define SEIBU2_SOUND_SYSTEM_CPU(freq) \
- MCFG_CPU_ADD("audiocpu", Z80, freq) \
- MCFG_CPU_PROGRAM_MAP(seibu2_sound_map) \
- MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
-
-#define SEIBU2_AIRRAID_SOUND_SYSTEM_CPU(freq) \
- MCFG_CPU_ADD("audiocpu", Z80, freq) \
- MCFG_CPU_PROGRAM_MAP(seibu2_airraid_sound_map) \
- MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
-
-#define SEIBU2_RAIDEN2_SOUND_SYSTEM_CPU(freq) \
- MCFG_CPU_ADD("audiocpu", Z80, freq) \
- MCFG_CPU_PROGRAM_MAP(seibu2_raiden2_sound_map) \
- MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
-
-#define SEIBU_NEWZEROTEAM_SOUND_SYSTEM_CPU(freq) \
- MCFG_CPU_ADD("audiocpu", Z80, freq) \
- MCFG_CPU_PROGRAM_MAP(seibu_newzeroteam_sound_map) \
- MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
-
-#define SEIBU3_SOUND_SYSTEM_CPU(freq) \
- MCFG_CPU_ADD("audiocpu", Z80, freq) \
- MCFG_CPU_PROGRAM_MAP(seibu3_sound_map) \
- MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
-
-#define SEIBU3A_SOUND_SYSTEM_CPU(freq) \
- MCFG_CPU_ADD("audiocpu", Z80, freq) \
- MCFG_CPU_PROGRAM_MAP(seibu3_adpcm_sound_map) \
- MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
-
-#define SEIBU_SOUND_SYSTEM_ENCRYPTED_LOW() \
- MCFG_DEVICE_MODIFY("seibu_sound") \
- downcast<seibu_sound_device *>(device)->set_encryption(1); \
- MCFG_DEVICE_MODIFY("audiocpu") \
- MCFG_CPU_DECRYPTED_OPCODES_MAP(seibu_sound_decrypted_opcodes_map)
-
-#define SEIBU_SOUND_SYSTEM_ENCRYPTED_FULL() \
- MCFG_DEVICE_MODIFY("seibu_sound") \
- downcast<seibu_sound_device *>(device)->set_encryption(2); \
- MCFG_DEVICE_MODIFY("audiocpu") \
- MCFG_CPU_DECRYPTED_OPCODES_MAP(seibu_sound_decrypted_opcodes_map)
-
-#define SEIBU_SOUND_SYSTEM_ENCRYPTED_CUSTOM() \
- MCFG_DEVICE_MODIFY("seibu_sound") \
- downcast<seibu_sound_device *>(device)->set_encryption(3); \
- MCFG_DEVICE_MODIFY("audiocpu") \
- MCFG_CPU_DECRYPTED_OPCODES_MAP(seibu_sound_decrypted_opcodes_map)
-
-#define SEIBU_SOUND_SYSTEM_YM3812_INTERFACE(freq1,freq2) \
- MCFG_SPEAKER_STANDARD_MONO("mono") \
- \
- MCFG_SOUND_ADD("ymsnd", YM3812, freq1) \
- MCFG_YM3812_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler)) \
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) \
- \
- MCFG_OKIM6295_ADD("oki", freq2, OKIM6295_PIN7_LOW) \
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
-
-#define SEIBU_SOUND_SYSTEM_YM3812_RAIDEN_INTERFACE(freq1,freq2) \
- MCFG_SPEAKER_STANDARD_MONO("mono") \
- \
- MCFG_SOUND_ADD("ymsnd", YM3812, freq1) \
- MCFG_YM3812_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler)) \
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) \
- \
- MCFG_OKIM6295_ADD("oki", freq2, OKIM6295_PIN7_HIGH) \
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-
-#define SEIBU_SOUND_SYSTEM_YM2151_INTERFACE(freq1,freq2) \
- MCFG_SPEAKER_STANDARD_MONO("mono") \
- \
- MCFG_YM2151_ADD("ymsnd", freq1) \
- MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler)) \
- MCFG_SOUND_ROUTE(0, "mono", 0.50) \
- MCFG_SOUND_ROUTE(1, "mono", 0.50) \
- \
- MCFG_OKIM6295_ADD("oki", freq2, OKIM6295_PIN7_LOW) \
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
-
-#define SEIBU_AIRRAID_SOUND_SYSTEM_YM2151_INTERFACE(freq1) \
- MCFG_SPEAKER_STANDARD_MONO("mono") \
- \
- MCFG_YM2151_ADD("ymsnd", freq1) \
- MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler)) \
- MCFG_SOUND_ROUTE(0, "mono", 0.50) \
- MCFG_SOUND_ROUTE(1, "mono", 0.50)
-
-#define SEIBU_SOUND_SYSTEM_YM2151_RAIDEN2_INTERFACE(freq1, freq2, regiona, regionb) \
- MCFG_SPEAKER_STANDARD_MONO("mono") \
- \
- MCFG_YM2151_ADD("ymsnd", freq1) \
- MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler)) \
- MCFG_SOUND_ROUTE(0, "mono", 0.50) \
- MCFG_SOUND_ROUTE(1, "mono", 0.50) \
- \
- MCFG_OKIM6295_ADD("oki1", freq2, OKIM6295_PIN7_HIGH) \
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) \
- \
- MCFG_OKIM6295_ADD("oki2", freq2, OKIM6295_PIN7_HIGH) \
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
-
-#define SEIBU_SOUND_SYSTEM_YM2203_INTERFACE(freq) \
- MCFG_SPEAKER_STANDARD_MONO("mono") \
- \
- MCFG_SOUND_ADD("ym1", YM2203, freq) \
- MCFG_YM2203_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler)) \
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) \
- \
- MCFG_SOUND_ADD("ym2", YM2203, freq) \
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
-
-#define SEIBU_SOUND_SYSTEM_ADPCM_INTERFACE \
- MCFG_SOUND_ADD("adpcm1", SEIBU_ADPCM, 8000) \
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) \
- \
- MCFG_SOUND_ADD("adpcm2", SEIBU_ADPCM, 8000) \
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+#define MCFG_SEIBU_SOUND_YM_WRITE_CB(_devcb) \
+ devcb = &seibu_sound_device::set_ym_write_callback(*device, DEVCB_##_devcb);
/**************************************************************************/
diff --git a/src/mame/drivers/airraid.cpp b/src/mame/drivers/airraid.cpp
index 8adb5abd932..df9a92bdadb 100644
--- a/src/mame/drivers/airraid.cpp
+++ b/src/mame/drivers/airraid.cpp
@@ -150,6 +150,7 @@ Stephh's notes (based on the game Z80 code and some tests) :
#include "emu.h"
#include "cpu/z80/z80.h"
+#include "sound/ym2151.h"
#include "audio/seibu.h"
#include "video/airraid_dev.h"
@@ -277,6 +278,23 @@ static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, airrai
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( airraid_sound_map, AS_PROGRAM, 8, airraid_state )
+ AM_RANGE(0x0000, 0x1fff) AM_ROM
+ AM_RANGE(0x2000, 0x27ff) AM_RAM
+ AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("seibu_sound", seibu_sound_device, pending_w)
+ AM_RANGE(0x4001, 0x4001) AM_DEVWRITE("seibu_sound", seibu_sound_device, irq_clear_w)
+ AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst10_ack_w)
+ AM_RANGE(0x4003, 0x4003) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst18_ack_w)
+ AM_RANGE(0x4007, 0x4007) AM_DEVWRITE("seibu_sound", seibu_sound_device, bank_w)
+ AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("seibu_sound", seibu_sound_device, ym_r, ym_w)
+ AM_RANGE(0x4010, 0x4011) AM_DEVREAD("seibu_sound", seibu_sound_device, soundlatch_r)
+ AM_RANGE(0x4012, 0x4012) AM_DEVREAD("seibu_sound", seibu_sound_device, main_data_pending_r)
+ AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN")
+ AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
+ AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
+ AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
+ADDRESS_MAP_END
+
static INPUT_PORTS_START( airraid )
PORT_START("IN0") /* IN0 (0xc200) */
@@ -368,8 +386,9 @@ static MACHINE_CONFIG_START( airraid, airraid_state )
MCFG_CPU_PROGRAM_MAP(airraid_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", airraid_state, cshooter_scanline, "airraid_vid:screen", 0, 1)
- SEIBU2_AIRRAID_SOUND_SYSTEM_CPU(XTAL_14_31818MHz/4) /* verified on pcb */
- SEIBU_SOUND_SYSTEM_ENCRYPTED_LOW()
+ MCFG_CPU_ADD("audiocpu", Z80, XTAL_14_31818MHz/4) /* verified on pcb */
+ MCFG_CPU_PROGRAM_MAP(airraid_sound_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(seibu_sound_decrypted_opcodes_map)
MCFG_QUANTUM_PERFECT_CPU("maincpu")
@@ -379,7 +398,17 @@ static MACHINE_CONFIG_START( airraid, airraid_state )
MCFG_AIRRAID_VIDEO_ADD("airraid_vid")
/* sound hardware */
- SEIBU_AIRRAID_SOUND_SYSTEM_YM2151_INTERFACE(XTAL_14_31818MHz/4)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_YM2151_ADD("ymsnd", XTAL_14_31818MHz/4)
+ MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(0, "mono", 0.50)
+ MCFG_SOUND_ROUTE(1, "mono", 0.50)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU_ENCRYPTED_LOW("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym2151_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym2151_device, write))
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/bloodbro.cpp b/src/mame/drivers/bloodbro.cpp
index 1b766e0bfb4..f4bd0d168e0 100644
--- a/src/mame/drivers/bloodbro.cpp
+++ b/src/mame/drivers/bloodbro.cpp
@@ -133,6 +133,7 @@ DIP locations verified for Blood Bros. & Sky Smasher via manual & DIP-SW setting
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
#include "sound/3812intf.h"
+#include "sound/okim6295.h"
#include "includes/bloodbro.h"
#include "video/seibu_crtc.h"
@@ -484,7 +485,8 @@ static MACHINE_CONFIG_START( bloodbro, bloodbro_state )
MCFG_CPU_PROGRAM_MAP(bloodbro_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", bloodbro_state, irq4_line_hold)
- SEIBU_SOUND_SYSTEM_CPU(XTAL_7_15909MHz/2) /* verified on pcb */
+ MCFG_CPU_ADD("audiocpu", Z80, XTAL_7_15909MHz/2) /* verified on pcb */
+ MCFG_CPU_PROGRAM_MAP(seibu_sound_map)
// video hardware
@@ -506,7 +508,19 @@ static MACHINE_CONFIG_START( bloodbro, bloodbro_state )
MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR)
// sound hardware
- SEIBU_SOUND_SYSTEM_YM3812_RAIDEN_INTERFACE(XTAL_7_15909MHz/2, XTAL_12MHz/12)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_7_15909MHz/2)
+ MCFG_YM3812_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_OKIM6295_ADD("oki", XTAL_12MHz/12, OKIM6295_PIN7_HIGH)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym3812_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym3812_device, write))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( weststry, bloodbro )
diff --git a/src/mame/drivers/cabal.cpp b/src/mame/drivers/cabal.cpp
index 9b05f35a714..da52cb506d9 100644
--- a/src/mame/drivers/cabal.cpp
+++ b/src/mame/drivers/cabal.cpp
@@ -189,7 +189,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, cabal_state )
AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst10_ack_w)
AM_RANGE(0x4003, 0x4003) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst18_ack_w)
AM_RANGE(0x4005, 0x4006) AM_DEVWRITE("adpcm1", seibu_adpcm_device, adr_w)
- AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
+ AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("seibu_sound", seibu_sound_device, ym_r, ym_w)
AM_RANGE(0x4010, 0x4011) AM_DEVREAD("seibu_sound", seibu_sound_device, soundlatch_r)
AM_RANGE(0x4012, 0x4012) AM_DEVREAD("seibu_sound", seibu_sound_device, main_data_pending_r)
AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN")
@@ -496,6 +496,9 @@ static MACHINE_CONFIG_START( cabal_base, cabal_state )
/* sound hardware */
MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym2151_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym2151_device, write))
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -511,11 +514,19 @@ static MACHINE_CONFIG_START( cabal_base, cabal_state )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( cabal, cabal_base )
- SEIBU_SOUND_SYSTEM_ENCRYPTED_LOW()
+ MCFG_DEVICE_MODIFY("seibu_sound")
+ MCFG_SEIBU_SOUND_CPU_ENCRYPTED_LOW("audiocpu")
+
+ MCFG_DEVICE_MODIFY("audiocpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(seibu_sound_decrypted_opcodes_map)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( cabalbl2, cabal_base )
- SEIBU_SOUND_SYSTEM_ENCRYPTED_CUSTOM()
+ MCFG_DEVICE_MODIFY("seibu_sound")
+ MCFG_SEIBU_SOUND_CPU_ENCRYPTED_CUSTOM("audiocpu")
+
+ MCFG_DEVICE_MODIFY("audiocpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(seibu_sound_decrypted_opcodes_map)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/dcon.cpp b/src/mame/drivers/dcon.cpp
index 488e1527c4a..987a560f180 100644
--- a/src/mame/drivers/dcon.cpp
+++ b/src/mame/drivers/dcon.cpp
@@ -17,6 +17,9 @@
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
+#include "sound/3812intf.h"
+#include "sound/ym2151.h"
+#include "sound/okim6295.h"
#include "audio/seibu.h"
#include "includes/dcon.h"
#include "video/seibu_crtc.h"
@@ -261,7 +264,8 @@ static MACHINE_CONFIG_START( dcon, dcon_state )
MCFG_CPU_PROGRAM_MAP(dcon_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", dcon_state, irq4_line_hold)
- SEIBU_SOUND_SYSTEM_CPU(4000000) /* Perhaps 14318180/4? */
+ MCFG_CPU_ADD("audiocpu", Z80, 4000000) /* Perhaps 14318180/4? */
+ MCFG_CPU_PROGRAM_MAP(seibu_sound_map)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -281,7 +285,19 @@ static MACHINE_CONFIG_START( dcon, dcon_state )
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
/* sound hardware */
- SEIBU_SOUND_SYSTEM_YM3812_INTERFACE(4000000,1320000)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, 4000000)
+ MCFG_YM3812_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_OKIM6295_ADD("oki", 1320000, OKIM6295_PIN7_LOW)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym3812_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym3812_device, write))
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( sdgndmps, dcon_state )
@@ -291,7 +307,8 @@ static MACHINE_CONFIG_START( sdgndmps, dcon_state )
MCFG_CPU_PROGRAM_MAP(dcon_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", dcon_state, irq4_line_hold)
- SEIBU2_SOUND_SYSTEM_CPU(14318180/4)
+ MCFG_CPU_ADD("audiocpu", Z80, 14318180/4)
+ MCFG_CPU_PROGRAM_MAP(seibu_sound_map)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -311,7 +328,20 @@ static MACHINE_CONFIG_START( sdgndmps, dcon_state )
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
/* sound hardware */
- SEIBU_SOUND_SYSTEM_YM2151_INTERFACE(14318180/4,1320000)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_YM2151_ADD("ymsnd", 14318180/4)
+ MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(0, "mono", 0.50)
+ MCFG_SOUND_ROUTE(1, "mono", 0.50)
+
+ MCFG_OKIM6295_ADD("oki", 1320000, OKIM6295_PIN7_LOW)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym2151_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym2151_device, write))
MACHINE_CONFIG_END
/***************************************************************************/
diff --git a/src/mame/drivers/deadang.cpp b/src/mame/drivers/deadang.cpp
index 0f996db2c44..cbcfe4d6277 100644
--- a/src/mame/drivers/deadang.cpp
+++ b/src/mame/drivers/deadang.cpp
@@ -88,6 +88,28 @@ static ADDRESS_MAP_START( sub_map, AS_PROGRAM, 16, deadang_state )
AM_RANGE(0xe0000, 0xfffff) AM_ROM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, deadang_state )
+ AM_RANGE(0x0000, 0x1fff) AM_ROM
+ AM_RANGE(0x2000, 0x27ff) AM_RAM
+ AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("seibu_sound", seibu_sound_device, pending_w)
+ AM_RANGE(0x4001, 0x4001) AM_DEVWRITE("seibu_sound", seibu_sound_device, irq_clear_w)
+ AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst10_ack_w)
+ AM_RANGE(0x4003, 0x4003) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst18_ack_w)
+ AM_RANGE(0x4005, 0x4006) AM_DEVWRITE("adpcm1", seibu_adpcm_device, adr_w)
+ AM_RANGE(0x4007, 0x4007) AM_DEVWRITE("seibu_sound", seibu_sound_device, bank_w)
+ AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("seibu_sound", seibu_sound_device, ym_r, ym_w)
+ AM_RANGE(0x4010, 0x4011) AM_DEVREAD("seibu_sound", seibu_sound_device, soundlatch_r)
+ AM_RANGE(0x4012, 0x4012) AM_DEVREAD("seibu_sound", seibu_sound_device, main_data_pending_r)
+ AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN")
+ AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
+ AM_RANGE(0x401a, 0x401a) AM_DEVWRITE("adpcm1", seibu_adpcm_device, ctl_w)
+ AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
+ AM_RANGE(0x6005, 0x6006) AM_DEVWRITE("adpcm2", seibu_adpcm_device, adr_w)
+ AM_RANGE(0x6008, 0x6009) AM_DEVREADWRITE("ym2", ym2203_device, read, write)
+ AM_RANGE(0x601a, 0x601a) AM_DEVWRITE("adpcm2", seibu_adpcm_device, ctl_w)
+ AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
+ADDRESS_MAP_END
+
/* Input Ports */
static INPUT_PORTS_START( deadang )
@@ -246,8 +268,9 @@ static MACHINE_CONFIG_START( deadang, deadang_state )
MCFG_CPU_PROGRAM_MAP(sub_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer2", deadang_state, sub_scanline, "screen", 0, 1)
- SEIBU3A_SOUND_SYSTEM_CPU(XTAL_14_31818MHz/4)
- SEIBU_SOUND_SYSTEM_ENCRYPTED_LOW()
+ MCFG_CPU_ADD("audiocpu", Z80, XTAL_14_31818MHz/4)
+ MCFG_CPU_PROGRAM_MAP(sound_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(seibu_sound_decrypted_opcodes_map)
MCFG_QUANTUM_TIME(attotime::from_hz(60)) // the game stops working with higher interleave rates..
@@ -266,10 +289,26 @@ static MACHINE_CONFIG_START( deadang, deadang_state )
MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR)
-
/* sound hardware */
- SEIBU_SOUND_SYSTEM_YM2203_INTERFACE(XTAL_14_31818MHz/4)
- SEIBU_SOUND_SYSTEM_ADPCM_INTERFACE
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU_ENCRYPTED_LOW("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ym1", ym2203_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ym1", ym2203_device, write))
+
+ MCFG_SOUND_ADD("ym1", YM2203, XTAL_14_31818MHz/4)
+ MCFG_YM2203_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
+
+ MCFG_SOUND_ADD("ym2", YM2203, XTAL_14_31818MHz/4)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
+
+ MCFG_SOUND_ADD("adpcm1", SEIBU_ADPCM, 8000)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+
+ MCFG_SOUND_ADD("adpcm2", SEIBU_ADPCM, 8000)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
MACHINE_CONFIG_END
/* ROMs */
diff --git a/src/mame/drivers/dynduke.cpp b/src/mame/drivers/dynduke.cpp
index 25d6b1f974c..878099ce5c2 100644
--- a/src/mame/drivers/dynduke.cpp
+++ b/src/mame/drivers/dynduke.cpp
@@ -285,8 +285,9 @@ static MACHINE_CONFIG_START( dynduke, dynduke_state )
MCFG_CPU_PROGRAM_MAP(slave_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", dynduke_state, interrupt)
- SEIBU_SOUND_SYSTEM_CPU(14318180/4)
- SEIBU_SOUND_SYSTEM_ENCRYPTED_FULL()
+ MCFG_CPU_ADD("audiocpu", Z80, 14318180/4)
+ MCFG_CPU_PROGRAM_MAP(seibu_sound_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(seibu_sound_decrypted_opcodes_map)
MCFG_QUANTUM_TIME(attotime::from_hz(3600))
@@ -308,7 +309,19 @@ static MACHINE_CONFIG_START( dynduke, dynduke_state )
MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR)
// sound hardware
- SEIBU_SOUND_SYSTEM_YM3812_INTERFACE(14318180/4,1320000)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, 14318180/4)
+ MCFG_YM3812_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_OKIM6295_ADD("oki", 1320000, OKIM6295_PIN7_LOW)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU_ENCRYPTED_FULL("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym3812_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym3812_device, write))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( dbldyn, dynduke )
diff --git a/src/mame/drivers/goodejan.cpp b/src/mame/drivers/goodejan.cpp
index 9d3eb5f1284..0d546506d34 100644
--- a/src/mame/drivers/goodejan.cpp
+++ b/src/mame/drivers/goodejan.cpp
@@ -74,6 +74,7 @@ Secret menu hack [totmejan only] (I couldn't find official way to enter, so it's
#include "cpu/nec/nec.h"
#include "audio/seibu.h"
#include "sound/3812intf.h"
+#include "sound/okim6295.h"
#include "video/seibu_crtc.h"
@@ -634,7 +635,8 @@ static MACHINE_CONFIG_START( goodejan, goodejan_state )
MCFG_CPU_IO_MAP(goodejan_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", goodejan_state, irq)
- SEIBU_SOUND_SYSTEM_CPU(GOODEJAN_MHZ1/2)
+ MCFG_CPU_ADD("audiocpu", Z80, GOODEJAN_MHZ1/2)
+ MCFG_CPU_PROGRAM_MAP(seibu_sound_map)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -654,7 +656,19 @@ static MACHINE_CONFIG_START( goodejan, goodejan_state )
MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR)
/* sound hardware */
- SEIBU_SOUND_SYSTEM_YM3812_INTERFACE(GOODEJAN_MHZ1/2,GOODEJAN_MHZ2/16)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, GOODEJAN_MHZ1/2)
+ MCFG_YM3812_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_OKIM6295_ADD("oki", GOODEJAN_MHZ2/16, OKIM6295_PIN7_LOW)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym3812_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym3812_device, write))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( totmejan, goodejan )
diff --git a/src/mame/drivers/legionna.cpp b/src/mame/drivers/legionna.cpp
index 3877657df2a..2cd7d796634 100644
--- a/src/mame/drivers/legionna.cpp
+++ b/src/mame/drivers/legionna.cpp
@@ -83,6 +83,7 @@ Preliminary COP MCU memory map
#include "emu.h"
#include "cpu/z80/z80.h"
#include "sound/3812intf.h"
+#include "sound/ym2151.h"
#include "cpu/m68000/m68000.h"
#include "machine/seicop.h"
#include "includes/legionna.h"
@@ -1157,7 +1158,8 @@ static MACHINE_CONFIG_START( legionna, legionna_state )
MCFG_CPU_PROGRAM_MAP(legionna_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", legionna_state, irq4_line_hold)/* VBL */
- SEIBU_SOUND_SYSTEM_CPU(14318180/4)
+ MCFG_CPU_ADD("audiocpu", Z80, 14318180/4)
+ MCFG_CPU_PROGRAM_MAP(seibu_sound_map)
MCFG_DEVICE_ADD("raiden2cop", RAIDEN2COP, 0)
MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(WRITE16(legionna_state, videowrite_cb_w))
@@ -1183,7 +1185,19 @@ static MACHINE_CONFIG_START( legionna, legionna_state )
MCFG_VIDEO_START_OVERRIDE(legionna_state,legionna)
/* sound hardware */
- SEIBU_SOUND_SYSTEM_YM3812_INTERFACE(14318180/4,1320000)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, 14318180/4)
+ MCFG_YM3812_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_OKIM6295_ADD("oki", 1320000, OKIM6295_PIN7_LOW)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym3812_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym3812_device, write))
MACHINE_CONFIG_END
@@ -1194,7 +1208,8 @@ static MACHINE_CONFIG_START( heatbrl, legionna_state )
MCFG_CPU_PROGRAM_MAP(heatbrl_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", legionna_state, irq4_line_hold)/* VBL */
- SEIBU_SOUND_SYSTEM_CPU(14318180/4)
+ MCFG_CPU_ADD("audiocpu", Z80, 14318180/4)
+ MCFG_CPU_PROGRAM_MAP(seibu_sound_map)
MCFG_DEVICE_ADD("raiden2cop", RAIDEN2COP, 0)
MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(WRITE16(legionna_state, videowrite_cb_w))
@@ -1222,7 +1237,19 @@ static MACHINE_CONFIG_START( heatbrl, legionna_state )
MCFG_VIDEO_START_OVERRIDE(legionna_state,heatbrl)
/* sound hardware */
- SEIBU_SOUND_SYSTEM_YM3812_INTERFACE(14318180/4,1320000)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, 14318180/4)
+ MCFG_YM3812_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_OKIM6295_ADD("oki", 1320000, OKIM6295_PIN7_LOW)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym3812_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym3812_device, write))
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( godzilla, legionna_state )
@@ -1232,7 +1259,8 @@ static MACHINE_CONFIG_START( godzilla, legionna_state )
MCFG_CPU_PROGRAM_MAP(godzilla_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", legionna_state, irq4_line_hold)
- SEIBU2_SOUND_SYSTEM_CPU(14318180/4)
+ MCFG_CPU_ADD("audiocpu", Z80, 14318180/4)
+ MCFG_CPU_PROGRAM_MAP(seibu_sound_map)
MCFG_DEVICE_ADD("raiden2cop", RAIDEN2COP, 0)
MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(WRITE16(legionna_state, videowrite_cb_w))
@@ -1261,7 +1289,20 @@ static MACHINE_CONFIG_START( godzilla, legionna_state )
MCFG_VIDEO_START_OVERRIDE(legionna_state,godzilla)
/* sound hardware */
- SEIBU_SOUND_SYSTEM_YM2151_INTERFACE(14318180/4,1320000)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_YM2151_ADD("ymsnd", 14318180/4)
+ MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(0, "mono", 0.50)
+ MCFG_SOUND_ROUTE(1, "mono", 0.50)
+
+ MCFG_OKIM6295_ADD("oki", 1320000, OKIM6295_PIN7_LOW)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym2151_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym2151_device, write))
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( denjinmk, legionna_state )
@@ -1271,7 +1312,8 @@ static MACHINE_CONFIG_START( denjinmk, legionna_state )
MCFG_CPU_PROGRAM_MAP(denjinmk_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", legionna_state, irq4_line_hold)
- SEIBU2_SOUND_SYSTEM_CPU(14318180/4)
+ MCFG_CPU_ADD("audiocpu", Z80, 14318180/4)
+ MCFG_CPU_PROGRAM_MAP(seibu_sound_map)
MCFG_DEVICE_ADD("raiden2cop", RAIDEN2COP, 0)
MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(WRITE16(legionna_state, videowrite_cb_w))
@@ -1299,7 +1341,20 @@ static MACHINE_CONFIG_START( denjinmk, legionna_state )
MCFG_VIDEO_START_OVERRIDE(legionna_state,denjinmk)
/* sound hardware */
- SEIBU_SOUND_SYSTEM_YM2151_INTERFACE(14318180/4,1320000)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_YM2151_ADD("ymsnd", 14318180/4)
+ MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(0, "mono", 0.50)
+ MCFG_SOUND_ROUTE(1, "mono", 0.50)
+
+ MCFG_OKIM6295_ADD("oki", 1320000, OKIM6295_PIN7_LOW)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym2151_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym2151_device, write))
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( grainbow, legionna_state )
@@ -1309,7 +1364,8 @@ static MACHINE_CONFIG_START( grainbow, legionna_state )
MCFG_CPU_PROGRAM_MAP(grainbow_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", legionna_state, irq4_line_hold)
- SEIBU2_SOUND_SYSTEM_CPU(14318180/4)
+ MCFG_CPU_ADD("audiocpu", Z80, 14318180/4)
+ MCFG_CPU_PROGRAM_MAP(seibu_sound_map)
MCFG_DEVICE_ADD("raiden2cop", RAIDEN2COP, 0)
MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(WRITE16(legionna_state, videowrite_cb_w))
@@ -1337,7 +1393,20 @@ static MACHINE_CONFIG_START( grainbow, legionna_state )
MCFG_VIDEO_START_OVERRIDE(legionna_state,grainbow)
/* sound hardware */
- SEIBU_SOUND_SYSTEM_YM2151_INTERFACE(14318180/4,1320000)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_YM2151_ADD("ymsnd", 14318180/4)
+ MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(0, "mono", 0.50)
+ MCFG_SOUND_ROUTE(1, "mono", 0.50)
+
+ MCFG_OKIM6295_ADD("oki", 1320000, OKIM6295_PIN7_LOW)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym2151_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym2151_device, write))
MACHINE_CONFIG_END
@@ -1348,7 +1417,8 @@ static MACHINE_CONFIG_START( cupsoc, legionna_state )
MCFG_CPU_PROGRAM_MAP(cupsoc_mem)
MCFG_CPU_VBLANK_INT_DRIVER("screen", legionna_state, irq4_line_hold)/* VBL */
- SEIBU_SOUND_SYSTEM_CPU(14318180/4)
+ MCFG_CPU_ADD("audiocpu", Z80, 14318180/4)
+ MCFG_CPU_PROGRAM_MAP(seibu_sound_map)
MCFG_DEVICE_ADD("raiden2cop", RAIDEN2COP, 0)
MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(WRITE16(legionna_state, videowrite_cb_w))
@@ -1376,7 +1446,20 @@ static MACHINE_CONFIG_START( cupsoc, legionna_state )
MCFG_VIDEO_START_OVERRIDE(legionna_state,cupsoc)
/* sound hardware */
- SEIBU_SOUND_SYSTEM_YM3812_INTERFACE(14318180/4,1320000)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_YM2151_ADD("ymsnd", 14318180/4)
+ MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(0, "mono", 0.50)
+ MCFG_SOUND_ROUTE(1, "mono", 0.50)
+
+ MCFG_OKIM6295_ADD("oki", 1320000, OKIM6295_PIN7_LOW)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym2151_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym2151_device, write))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( cupsocs, cupsoc )
diff --git a/src/mame/drivers/nmk16.cpp b/src/mame/drivers/nmk16.cpp
index 92b46e83315..83610b6d36f 100644
--- a/src/mame/drivers/nmk16.cpp
+++ b/src/mame/drivers/nmk16.cpp
@@ -154,6 +154,7 @@ Afega stands for "Art-Fiction Electronic Game"
#include "sound/2203intf.h"
#include "sound/okim6295.h"
#include "sound/3812intf.h"
+#include "sound/ym2151.h"
#include "machine/nmk004.h"
#include "cpu/pic16c5x/pic16c5x.h"
#include "includes/nmk16.h"
@@ -3950,7 +3951,8 @@ static MACHINE_CONFIG_START( mustangb, nmk16_state )
MCFG_CPU_PROGRAM_MAP(mustangb_map)
NMK_HACKY_INTERRUPT_TIMING
- SEIBU_SOUND_SYSTEM_CPU(14318180/4)
+ MCFG_CPU_ADD("audiocpu", Z80, 14318180/4)
+ MCFG_CPU_PROGRAM_MAP(seibu_sound_map)
/* video hardware */
NMK_HACKY_SCREEN_LOWRES
@@ -3964,8 +3966,19 @@ static MACHINE_CONFIG_START( mustangb, nmk16_state )
MCFG_VIDEO_START_OVERRIDE(nmk16_state,macross)
/* sound hardware */
- SEIBU_SOUND_SYSTEM_YM3812_INTERFACE(14318180/4, 1320000)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, 14318180/4)
+ MCFG_YM3812_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_OKIM6295_ADD("oki", 1320000, OKIM6295_PIN7_LOW)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym3812_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym3812_device, write))
MACHINE_CONFIG_END
#define BIOSHIP_CRYSTAL1 10000000
@@ -4124,7 +4137,8 @@ static MACHINE_CONFIG_START( tdragonb, nmk16_state ) /* bootleg using Raiden
MCFG_CPU_PROGRAM_MAP(tdragonb_map)
NMK_HACKY_INTERRUPT_TIMING
- SEIBU_SOUND_SYSTEM_CPU(14318180/4)
+ MCFG_CPU_ADD("audiocpu", Z80, 14318180/4)
+ MCFG_CPU_PROGRAM_MAP(seibu_sound_map)
/* video hardware */
NMK_HACKY_SCREEN_LOWRES
@@ -4138,7 +4152,19 @@ static MACHINE_CONFIG_START( tdragonb, nmk16_state ) /* bootleg using Raiden
MCFG_VIDEO_START_OVERRIDE(nmk16_state,macross)
/* sound hardware */
- SEIBU_SOUND_SYSTEM_YM3812_INTERFACE(14318180/4, 1320000)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, 14318180/4)
+ MCFG_YM3812_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_OKIM6295_ADD("oki", 1320000, OKIM6295_PIN7_LOW)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym3812_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym3812_device, write))
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( tdragon, nmk16_state )
diff --git a/src/mame/drivers/r2dx_v33.cpp b/src/mame/drivers/r2dx_v33.cpp
index 8fabce316aa..e7582d8bfbf 100644
--- a/src/mame/drivers/r2dx_v33.cpp
+++ b/src/mame/drivers/r2dx_v33.cpp
@@ -66,6 +66,8 @@ Then it puts settings at 0x9e08 and 0x9e0a (bp 91acb)
#include "cpu/nec/nec.h"
#include "cpu/z80/z80.h"
#include "machine/eepromser.h"
+#include "sound/3812intf.h"
+//#include "sound/ym2151.h"
#include "sound/okim6295.h"
#include "includes/raiden2.h"
#include "machine/r2crypt.h"
@@ -804,9 +806,8 @@ static MACHINE_CONFIG_START( nzerotea, r2dx_v33_state )
MCFG_MACHINE_RESET_OVERRIDE(r2dx_v33_state,nzeroteam)
-
- // SEIBU2_RAIDEN2_SOUND_SYSTEM_CPU(14318180/4)
- SEIBU_NEWZEROTEAM_SOUND_SYSTEM_CPU(14318180/4)
+ MCFG_CPU_ADD("audiocpu", Z80, 14318180/4)
+ MCFG_CPU_PROGRAM_MAP(zeroteam_sound_map)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK)
@@ -827,9 +828,19 @@ static MACHINE_CONFIG_START( nzerotea, r2dx_v33_state )
MCFG_SEIBU_CRTC_LAYER_SCROLL_CB(WRITE16(raiden2_state, tile_scroll_w))
/* sound hardware */
-// SEIBU_SOUND_SYSTEM_YM2151_RAIDEN2_INTERFACE(28636360/8,28636360/28,1,2)
- SEIBU_SOUND_SYSTEM_YM3812_INTERFACE(14318180/4,1320000)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, 14318180/4)
+ MCFG_YM3812_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_OKIM6295_ADD("oki", 1320000, OKIM6295_PIN7_LOW)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym3812_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym3812_device, write))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( zerotm2k, nzerotea )
diff --git a/src/mame/drivers/raiden.cpp b/src/mame/drivers/raiden.cpp
index b98ac455aae..25285f95408 100644
--- a/src/mame/drivers/raiden.cpp
+++ b/src/mame/drivers/raiden.cpp
@@ -276,7 +276,8 @@ static MACHINE_CONFIG_START( raiden, raiden_state )
MCFG_CPU_PROGRAM_MAP(sub_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", raiden_state, raiden_interrupt)
- SEIBU_SOUND_SYSTEM_CPU(XTAL_14_31818MHz/4) /* verified on pcb */
+ MCFG_CPU_ADD("audiocpu", Z80, XTAL_14_31818MHz/4) /* verified on pcb */
+ MCFG_CPU_PROGRAM_MAP(seibu_sound_map)
MCFG_QUANTUM_TIME(attotime::from_hz(12000))
@@ -297,11 +298,27 @@ static MACHINE_CONFIG_START( raiden, raiden_state )
MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR)
/* sound hardware */
- SEIBU_SOUND_SYSTEM_YM3812_RAIDEN_INTERFACE(XTAL_14_31818MHz/4,XTAL_12MHz/12) // frequency and pin 7 verified (pin set in audio\seibu.h)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_14_31818MHz/4)
+ MCFG_YM3812_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_OKIM6295_ADD("oki", XTAL_12MHz/12, OKIM6295_PIN7_HIGH) // frequency and pin 7 verified
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym3812_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym3812_device, write))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( raidene, raiden )
- SEIBU_SOUND_SYSTEM_ENCRYPTED_FULL()
+ MCFG_DEVICE_MODIFY("seibu_sound")
+ MCFG_SEIBU_SOUND_CPU_ENCRYPTED_FULL("audiocpu")
+
+ MCFG_DEVICE_MODIFY("audiocpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(seibu_sound_decrypted_opcodes_map)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( raidenu, raidene )
diff --git a/src/mame/drivers/raiden2.cpp b/src/mame/drivers/raiden2.cpp
index d17e3143b7c..d35ba423225 100644
--- a/src/mame/drivers/raiden2.cpp
+++ b/src/mame/drivers/raiden2.cpp
@@ -68,7 +68,7 @@ PCB Layout
|----------------------------------------------------------|
Notes:
V30 clock - 16.000MHz [32/2]. Chip is stamped "NEC D70116HG-16 V30 NEC '84" (QFP52)
- Z80 clock - 3.579545MHz [28.63636/8]
+ Z80 clock - 3.579545MHz [28.63636/8]. /NMI, /BUSREQ and /WAIT tied high/unused.
YM2151 clock - 3.579545MHz [28.63636/8]
M6295 clocks - 1.022MHz [28.63636/28] and pin 7 HIGH (both)
CXK58258 - Sony CXK58258 32k x8 SRAM (= 62256)
@@ -173,6 +173,8 @@ Protection Notes:
#include "cpu/nec/nec.h"
#include "cpu/z80/z80.h"
#include "machine/eepromser.h"
+#include "sound/3812intf.h"
+#include "sound/ym2151.h"
#include "sound/okim6295.h"
#include "includes/raiden2.h"
#include "machine/r2crypt.h"
@@ -1060,6 +1062,45 @@ static ADDRESS_MAP_START( xsedae_mem, AS_PROGRAM, 16, raiden2_state )
AM_RANGE(0x20000, 0xfffff) AM_ROM AM_REGION("maincpu", 0x20000)
ADDRESS_MAP_END
+ADDRESS_MAP_START( raiden2_sound_map, AS_PROGRAM, 8, raiden2_state )
+ AM_RANGE(0x0000, 0x1fff) AM_ROM
+ AM_RANGE(0x2000, 0x27ff) AM_RAM
+ AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("seibu_sound", seibu_sound_device, pending_w)
+ AM_RANGE(0x4001, 0x4001) AM_DEVWRITE("seibu_sound", seibu_sound_device, irq_clear_w)
+ AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst10_ack_w)
+ AM_RANGE(0x4003, 0x4003) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst18_ack_w)
+ AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("seibu_sound", seibu_sound_device, ym_r, ym_w)
+ AM_RANGE(0x4010, 0x4011) AM_DEVREAD("seibu_sound", seibu_sound_device, soundlatch_r)
+ AM_RANGE(0x4012, 0x4012) AM_DEVREAD("seibu_sound", seibu_sound_device, main_data_pending_r)
+ AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN")
+ AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
+ AM_RANGE(0x401a, 0x401a) AM_DEVWRITE("seibu_sound", seibu_sound_device, bank_w)
+ AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
+ AM_RANGE(0x6000, 0x6000) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
+ AM_RANGE(0x6002, 0x6002) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
+ AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
+ AM_RANGE(0x4004, 0x4004) AM_NOP
+ AM_RANGE(0x401a, 0x401a) AM_NOP
+ADDRESS_MAP_END
+
+ADDRESS_MAP_START( zeroteam_sound_map, AS_PROGRAM, 8, raiden2_state )
+ AM_RANGE(0x0000, 0x1fff) AM_ROM
+ AM_RANGE(0x2000, 0x27ff) AM_RAM
+ AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("seibu_sound", seibu_sound_device, pending_w)
+ AM_RANGE(0x4001, 0x4001) AM_DEVWRITE("seibu_sound", seibu_sound_device, irq_clear_w)
+ AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst10_ack_w)
+ AM_RANGE(0x4003, 0x4003) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst18_ack_w)
+ AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("seibu_sound", seibu_sound_device, ym_r, ym_w)
+ AM_RANGE(0x4010, 0x4011) AM_DEVREAD("seibu_sound", seibu_sound_device, soundlatch_r)
+ AM_RANGE(0x4012, 0x4012) AM_DEVREAD("seibu_sound", seibu_sound_device, main_data_pending_r)
+ AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN")
+ AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
+ AM_RANGE(0x401a, 0x401a) AM_DEVWRITE("seibu_sound", seibu_sound_device, bank_w)
+ AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
+ AM_RANGE(0x6000, 0x6000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
+ AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
+ADDRESS_MAP_END
+
/* INPUT PORTS */
@@ -1377,7 +1418,8 @@ static MACHINE_CONFIG_START( raiden2, raiden2_state )
MCFG_MACHINE_RESET_OVERRIDE(raiden2_state,raiden2)
- SEIBU2_RAIDEN2_SOUND_SYSTEM_CPU(XTAL_28_63636MHz/8)
+ MCFG_CPU_ADD("audiocpu", Z80, XTAL_28_63636MHz/8)
+ MCFG_CPU_PROGRAM_MAP(raiden2_sound_map)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -1399,13 +1441,23 @@ static MACHINE_CONFIG_START( raiden2, raiden2_state )
MCFG_VIDEO_START_OVERRIDE(raiden2_state,raiden2)
/* sound hardware */
- SEIBU_SOUND_SYSTEM_YM2151_RAIDEN2_INTERFACE(XTAL_28_63636MHz/8,XTAL_28_63636MHz/28,1,2)
- // the sound z80 has /NMI, /BUSREQ and /WAIT tied high/unused
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_YM2151_ADD("ymsnd", XTAL_28_63636MHz/8)
+ MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(0, "mono", 0.50)
+ MCFG_SOUND_ROUTE(1, "mono", 0.50)
-/* Sound hardware infos: Z80 and YM2151 are clocked at XTAL_28_63636MHz/8 */
-/* The 2 Oki M6295 are clocked at XTAL_28_63636MHz/28 and pin 7 is high for both */
+ MCFG_OKIM6295_ADD("oki1", XTAL_28_63636MHz/28, OKIM6295_PIN7_HIGH)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+ MCFG_OKIM6295_ADD("oki2", XTAL_28_63636MHz/28, OKIM6295_PIN7_HIGH)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym2151_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym2151_device, write))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( xsedae, raiden2 )
@@ -1436,7 +1488,8 @@ static MACHINE_CONFIG_START( zeroteam, raiden2_state )
MCFG_MACHINE_RESET_OVERRIDE(raiden2_state,zeroteam)
- SEIBU_NEWZEROTEAM_SOUND_SYSTEM_CPU(XTAL_28_63636MHz/8)
+ MCFG_CPU_ADD("audiocpu", Z80, XTAL_28_63636MHz/8)
+ MCFG_CPU_PROGRAM_MAP(zeroteam_sound_map)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -1459,7 +1512,19 @@ static MACHINE_CONFIG_START( zeroteam, raiden2_state )
MCFG_VIDEO_START_OVERRIDE(raiden2_state,raiden2)
/* sound hardware */
- SEIBU_SOUND_SYSTEM_YM3812_INTERFACE(XTAL_28_63636MHz/8, 1320000/* ? */)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_28_63636MHz/8)
+ MCFG_YM3812_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_OKIM6295_ADD("oki", 1320000/* ? */, OKIM6295_PIN7_LOW)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym3812_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym3812_device, write))
MACHINE_CONFIG_END
/* ROM LOADING */
diff --git a/src/mame/drivers/seicupbl.cpp b/src/mame/drivers/seicupbl.cpp
index aa22ca69c77..8662811ba53 100644
--- a/src/mame/drivers/seicupbl.cpp
+++ b/src/mame/drivers/seicupbl.cpp
@@ -546,7 +546,6 @@ static MACHINE_CONFIG_START( cupsocbl, seicupbl_state )
MCFG_DEVICE_SEIBUCOP_BOOTLEG_ADD("seibucop_boot")
/*Different Sound hardware*/
- //SEIBU_SOUND_SYSTEM_CPU(14318180/4)
MCFG_CPU_ADD("audiocpu", Z80,14318180/4)
MCFG_CPU_PROGRAM_MAP(cupsocbl_sound_mem)
//MCFG_PERIODIC_INT("screen", nmi_line_pulse)
diff --git a/src/mame/drivers/sengokmj.cpp b/src/mame/drivers/sengokmj.cpp
index 37b58279579..fa6d50e17ca 100644
--- a/src/mame/drivers/sengokmj.cpp
+++ b/src/mame/drivers/sengokmj.cpp
@@ -57,6 +57,7 @@ RSSENGO2.72 chr.
#include "cpu/nec/nec.h"
#include "audio/seibu.h"
#include "sound/3812intf.h"
+#include "sound/okim6295.h"
#include "video/seibu_crtc.h"
#include "machine/nvram.h"
@@ -570,7 +571,8 @@ static MACHINE_CONFIG_START( sengokmj, sengokmj_state )
MCFG_CPU_IO_MAP(sengokmj_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", sengokmj_state, interrupt)
- SEIBU_SOUND_SYSTEM_CPU(14318180/4)
+ MCFG_CPU_ADD("audiocpu", Z80, 14318180/4)
+ MCFG_CPU_PROGRAM_MAP(seibu_sound_map)
MCFG_NVRAM_ADD_0FILL("nvram")
@@ -592,7 +594,19 @@ static MACHINE_CONFIG_START( sengokmj, sengokmj_state )
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
/* sound hardware */
- SEIBU_SOUND_SYSTEM_YM3812_INTERFACE(14318180/4,1320000)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, 14318180/4)
+ MCFG_YM3812_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_OKIM6295_ADD("oki", 1320000, OKIM6295_PIN7_LOW)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym3812_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym3812_device, write))
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/shanghai.cpp b/src/mame/drivers/shanghai.cpp
index 07d14a4cf2b..97ce2bcd7dd 100644
--- a/src/mame/drivers/shanghai.cpp
+++ b/src/mame/drivers/shanghai.cpp
@@ -21,6 +21,7 @@ displayed.
#include "emu.h"
#include "cpu/nec/nec.h"
+#include "sound/2203intf.h"
#include "audio/seibu.h"
#include "video/hd63484.h"
@@ -133,6 +134,25 @@ static ADDRESS_MAP_START( kothello_map, AS_PROGRAM, 16, shanghai_state )
AM_RANGE(0x80000, 0xfffff) AM_ROM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( kothello_sound_map, AS_PROGRAM, 8, shanghai_state )
+ AM_RANGE(0x0000, 0x1fff) AM_ROM
+ AM_RANGE(0x2000, 0x27ff) AM_RAM
+ AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("seibu_sound", seibu_sound_device, pending_w)
+ AM_RANGE(0x4001, 0x4001) AM_DEVWRITE("seibu_sound", seibu_sound_device, irq_clear_w)
+ AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst10_ack_w)
+ AM_RANGE(0x4003, 0x4003) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst18_ack_w)
+ AM_RANGE(0x4005, 0x4006) AM_DEVWRITE("adpcm", seibu_adpcm_device, adr_w)
+ AM_RANGE(0x4007, 0x4007) AM_DEVWRITE("seibu_sound", seibu_sound_device, bank_w)
+ AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("seibu_sound", seibu_sound_device, ym_r, ym_w)
+ AM_RANGE(0x4010, 0x4011) AM_DEVREAD("seibu_sound", seibu_sound_device, soundlatch_r)
+ AM_RANGE(0x4012, 0x4012) AM_DEVREAD("seibu_sound", seibu_sound_device, main_data_pending_r)
+ AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN")
+ AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
+ AM_RANGE(0x401a, 0x401a) AM_DEVWRITE("adpcm", seibu_adpcm_device, ctl_w)
+ AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
+ AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
+ADDRESS_MAP_END
+
static INPUT_PORTS_START( kothello )
SEIBU_COIN_INPUTS /* coin inputs read through sound cpu */
@@ -436,7 +456,8 @@ static MACHINE_CONFIG_START( kothello, shanghai_state )
MCFG_CPU_PROGRAM_MAP(kothello_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", shanghai_state, interrupt)
- SEIBU3A_SOUND_SYSTEM_CPU(XTAL_16MHz/4)
+ MCFG_CPU_ADD("audiocpu", Z80, XTAL_16MHz/4)
+ MCFG_CPU_PROGRAM_MAP(kothello_sound_map)
MCFG_QUANTUM_TIME(attotime::from_hz(12000))
@@ -457,16 +478,19 @@ static MACHINE_CONFIG_START( kothello, shanghai_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
- /* same as standard seibu ym2203, but "ym1" also reads "DSW" */
- MCFG_SOUND_ADD("ym1", YM2203, XTAL_16MHz/4)
+ /* same as standard seibu ym2203, but also reads "DSW" */
+ MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_16MHz/4)
MCFG_YM2203_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW"))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
- MCFG_SOUND_ADD("ym2", YM2203, XTAL_16MHz/4)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym2203_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym2203_device, write))
- SEIBU_SOUND_SYSTEM_ADPCM_INTERFACE
+ MCFG_SOUND_ADD("adpcm", SEIBU_ADPCM, 8000) // actually MSM5205
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MACHINE_CONFIG_END
/***************************************************************************
@@ -621,10 +645,8 @@ ROM_START( kothello )
ROM_LOAD( "rom5.5l", 0x00000, 0x02000, CRC(7eb6e697) SHA1(4476e13f9a9e04472581f2c069760f53b33d5672))
ROM_CONTINUE( 0x10000, 0x0e000 )
- ROM_REGION( 0x10000, "adpcm1", 0 )
+ ROM_REGION( 0x10000, "adpcm", 0 )
ROM_LOAD( "rom6.7m", 0x00000, 0x10000, CRC(4ab1335d) SHA1(3a803e8a7e9b0c2a26ee23e7ac9c89c70cf2504b))
-
- ROM_REGION( 0x10000, "adpcm2", ROMREGION_ERASE00 )
ROM_END
diff --git a/src/mame/drivers/toki.cpp b/src/mame/drivers/toki.cpp
index d4c59f0a4e1..b823573da5a 100644
--- a/src/mame/drivers/toki.cpp
+++ b/src/mame/drivers/toki.cpp
@@ -97,7 +97,7 @@ Notes:
#include "cpu/z80/z80.h"
#include "machine/watchdog.h"
#include "sound/3812intf.h"
-#include "sound/3812intf.h"
+#include "sound/okim6295.h"
#include "includes/toki.h"
WRITE16_MEMBER(toki_state::tokib_soundcommand_w)
@@ -438,7 +438,8 @@ static MACHINE_CONFIG_START( toki, toki_state ) /* KOYO 20.000MHz near the cpu *
MCFG_CPU_PROGRAM_MAP(toki_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", toki_state, irq1_line_hold)/* VBL */
- SEIBU_SOUND_SYSTEM_CPU(XTAL_14_31818MHz/4) /* verifed on pcb */
+ MCFG_CPU_ADD("audiocpu", Z80, XTAL_14_31818MHz/4) // verified on pcb
+ MCFG_CPU_PROGRAM_MAP(seibu_sound_map)
/* video hardware */
MCFG_BUFFERED_SPRITERAM16_ADD("spriteram")
@@ -456,15 +457,35 @@ static MACHINE_CONFIG_START( toki, toki_state ) /* KOYO 20.000MHz near the cpu *
MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR)
/* sound hardware */
- SEIBU_SOUND_SYSTEM_YM3812_RAIDEN_INTERFACE(XTAL_14_31818MHz/4,XTAL_12MHz/12) /* verifed on pcb */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_14_31818MHz/4)
+ MCFG_YM3812_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_OKIM6295_ADD("oki", XTAL_12MHz/12, OKIM6295_PIN7_HIGH) // verified on pcb
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+ MCFG_SEIBU_SOUND_CPU("audiocpu")
+ MCFG_SEIBU_SOUND_YM_READ_CB(DEVREAD8("ymsnd", ym3812_device, read))
+ MCFG_SEIBU_SOUND_YM_WRITE_CB(DEVWRITE8("ymsnd", ym3812_device, write))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( tokie, toki )
- SEIBU_SOUND_SYSTEM_ENCRYPTED_LOW()
+ MCFG_DEVICE_MODIFY("seibu_sound")
+ MCFG_SEIBU_SOUND_CPU_ENCRYPTED_LOW("audiocpu")
+
+ MCFG_DEVICE_MODIFY("audiocpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(seibu_sound_decrypted_opcodes_map)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( tokic, toki )
- SEIBU_SOUND_SYSTEM_ENCRYPTED_CUSTOM()
+ MCFG_DEVICE_MODIFY("seibu_sound")
+ MCFG_SEIBU_SOUND_CPU_ENCRYPTED_CUSTOM("audiocpu")
+
+ MCFG_DEVICE_MODIFY("audiocpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(seibu_sound_decrypted_opcodes_map)
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( tokib, toki_state )
diff --git a/src/mame/includes/raiden2.h b/src/mame/includes/raiden2.h
index 52adc726ed8..7a18699594a 100644
--- a/src/mame/includes/raiden2.h
+++ b/src/mame/includes/raiden2.h
@@ -4,6 +4,9 @@
#include "machine/seibucop/seibucop.h"
#include "video/seibu_crtc.h"
+ADDRESS_MAP_EXTERN(raiden2_sound_map, 8);
+ADDRESS_MAP_EXTERN(zeroteam_sound_map, 8);
+
class raiden2_state : public driver_device
{
public: