summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2016-06-01 07:16:38 +0200
committer Ivan Vangelista <mesgnet@yahoo.it>2016-06-01 07:16:38 +0200
commitfaaabd3e11e8996b18a2bc04ecf1fe8cca853fac (patch)
tree4c178583fa4df16e2e5359f6f5176d0d1848cef4 /src
parent086789add2e86df535ae3be4dd8c30ea4c2cbf5c (diff)
more gen_latch-ification (nw)
Diffstat (limited to 'src')
-rw-r--r--src/mame/audio/hyprolyb.cpp18
-rw-r--r--src/mame/audio/hyprolyb.h4
-rw-r--r--src/mame/audio/scramble.cpp5
-rw-r--r--src/mame/audio/timeplt.cpp3
-rw-r--r--src/mame/drivers/88games.cpp7
-rw-r--r--src/mame/drivers/airbustr.cpp14
-rw-r--r--src/mame/drivers/ajax.cpp4
-rw-r--r--src/mame/drivers/aliens.cpp6
-rw-r--r--src/mame/drivers/battlnts.cpp7
-rw-r--r--src/mame/drivers/bladestl.cpp6
-rw-r--r--src/mame/drivers/blockhl.cpp7
-rw-r--r--src/mame/drivers/bottom9.cpp7
-rw-r--r--src/mame/drivers/chqflag.cpp11
-rw-r--r--src/mame/drivers/circusc.cpp7
-rw-r--r--src/mame/drivers/combatsc.cpp16
-rw-r--r--src/mame/drivers/contra.cpp13
-rw-r--r--src/mame/drivers/crimfght.cpp6
-rw-r--r--src/mame/drivers/dbz.cpp6
-rw-r--r--src/mame/drivers/djboy.cpp6
-rw-r--r--src/mame/drivers/fastfred.cpp10
-rw-r--r--src/mame/drivers/finalizr.cpp7
-rw-r--r--src/mame/drivers/flkatck.cpp6
-rw-r--r--src/mame/drivers/galaxian.cpp24
-rw-r--r--src/mame/drivers/gijoe.cpp11
-rw-r--r--src/mame/drivers/gradius3.cpp7
-rw-r--r--src/mame/drivers/gyruss.cpp12
-rw-r--r--src/mame/drivers/hcastle.cpp7
-rw-r--r--src/mame/drivers/hvyunit.cpp9
-rw-r--r--src/mame/drivers/hyperspt.cpp15
-rw-r--r--src/mame/drivers/ironhors.cpp10
-rw-r--r--src/mame/drivers/junofrst.cpp12
-rw-r--r--src/mame/drivers/kaneko16.cpp11
-rw-r--r--src/mame/drivers/lethal.cpp15
-rw-r--r--src/mame/drivers/mainevt.cpp13
-rw-r--r--src/mame/drivers/megasys1.cpp35
-rw-r--r--src/mame/drivers/megazone.cpp21
-rw-r--r--src/mame/drivers/mikie.cpp7
-rw-r--r--src/mame/drivers/moo.cpp16
-rw-r--r--src/mame/drivers/mystwarr.cpp22
-rw-r--r--src/mame/drivers/nemesis.cpp51
-rw-r--r--src/mame/drivers/pandoras.cpp12
-rw-r--r--src/mame/drivers/plygonet.cpp18
-rw-r--r--src/mame/drivers/pooyan.cpp6
-rw-r--r--src/mame/drivers/rallyx.cpp5
-rw-r--r--src/mame/drivers/rockrage.cpp6
-rw-r--r--src/mame/drivers/rocnrope.cpp6
-rw-r--r--src/mame/drivers/rungun.cpp11
-rw-r--r--src/mame/drivers/sandscrp.cpp20
-rw-r--r--src/mame/drivers/sbasketb.cpp7
-rw-r--r--src/mame/drivers/scobra.cpp14
-rw-r--r--src/mame/drivers/scotrsht.cpp6
-rw-r--r--src/mame/drivers/scramble.cpp17
-rw-r--r--src/mame/drivers/spy.cpp7
-rw-r--r--src/mame/drivers/thunderx.cpp7
-rw-r--r--src/mame/drivers/timeplt.cpp6
-rw-r--r--src/mame/drivers/tmnt.cpp29
-rw-r--r--src/mame/drivers/tp84.cpp9
-rw-r--r--src/mame/drivers/trackfld.cpp20
-rw-r--r--src/mame/drivers/tutankhm.cpp8
-rw-r--r--src/mame/drivers/twin16.cpp11
-rw-r--r--src/mame/drivers/ultraman.cpp6
-rw-r--r--src/mame/drivers/wecleman.cpp16
-rw-r--r--src/mame/drivers/xexex.cpp18
-rw-r--r--src/mame/drivers/xmen.cpp19
-rw-r--r--src/mame/includes/airbustr.h7
-rw-r--r--src/mame/includes/ajax.h7
-rw-r--r--src/mame/includes/aliens.h3
-rw-r--r--src/mame/includes/bladestl.h4
-rw-r--r--src/mame/includes/chqflag.h3
-rw-r--r--src/mame/includes/combatsc.h10
-rw-r--r--src/mame/includes/contra.h1
-rw-r--r--src/mame/includes/crimfght.h4
-rw-r--r--src/mame/includes/dbz.h5
-rw-r--r--src/mame/includes/djboy.h5
-rw-r--r--src/mame/includes/flkatck.h14
-rw-r--r--src/mame/includes/gijoe.h9
-rw-r--r--src/mame/includes/ironhors.h4
-rw-r--r--src/mame/includes/kaneko16.h3
-rw-r--r--src/mame/includes/lethal.h1
-rw-r--r--src/mame/includes/megasys1.h23
-rw-r--r--src/mame/includes/megazone.h1
-rw-r--r--src/mame/includes/moo.h9
-rw-r--r--src/mame/includes/mystwarr.h8
-rw-r--r--src/mame/includes/plygonet.h22
-rw-r--r--src/mame/includes/rockrage.h3
-rw-r--r--src/mame/includes/rungun.h17
-rw-r--r--src/mame/includes/scotrsht.h5
-rw-r--r--src/mame/includes/scramble.h6
-rw-r--r--src/mame/includes/ultraman.h6
-rw-r--r--src/mame/includes/wecleman.h8
-rw-r--r--src/mame/includes/xexex.h10
-rw-r--r--src/mame/includes/xmen.h6
-rw-r--r--src/mame/machine/ajax.cpp4
-rw-r--r--src/mame/video/megasys1.cpp17
94 files changed, 662 insertions, 321 deletions
diff --git a/src/mame/audio/hyprolyb.cpp b/src/mame/audio/hyprolyb.cpp
index c816e4bb603..c7402dd4dcf 100644
--- a/src/mame/audio/hyprolyb.cpp
+++ b/src/mame/audio/hyprolyb.cpp
@@ -9,21 +9,13 @@ const device_type HYPROLYB_ADPCM = &device_creator<hyprolyb_adpcm_device>;
hyprolyb_adpcm_device::hyprolyb_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, HYPROLYB_ADPCM, "Hyper Olympics Audio", tag, owner, clock, "hyprolyb_adpcm", __FILE__),
device_sound_interface(mconfig, *this),
+ m_soundlatch2(*this, ":soundlatch2"),
m_adpcm_ready(0),
m_adpcm_busy(0),
m_vck_ready(0)
{
}
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void hyprolyb_adpcm_device::device_config_complete()
-{
-}
//-------------------------------------------------
// device_start - device-specific startup
@@ -51,8 +43,7 @@ void hyprolyb_adpcm_device::device_reset()
WRITE8_MEMBER( hyprolyb_adpcm_device::write )
{
- driver_device *drvstate = space.machine().driver_data<driver_device>();
- drvstate->soundlatch2_byte_w(*m_space, offset, data);
+ m_soundlatch2->write(*m_space, offset, data);
m_adpcm_ready = 0x80;
}
@@ -81,9 +72,8 @@ READ8_MEMBER( hyprolyb_adpcm_device::ready_r )
READ8_MEMBER( hyprolyb_adpcm_device::data_r )
{
- driver_device *drvstate = space.machine().driver_data<driver_device>();
m_adpcm_ready = 0x00;
- return drvstate->soundlatch2_byte_r(*m_space, offset);
+ return m_soundlatch2->read(*m_space, offset);
}
static ADDRESS_MAP_START( hyprolyb_adpcm_map, AS_PROGRAM, 8, driver_device )
@@ -117,6 +107,8 @@ MACHINE_CONFIG_FRAGMENT( hyprolyb_adpcm )
MCFG_CPU_ADD("adpcm", M6802, XTAL_14_31818MHz/8) /* unknown clock */
MCFG_CPU_PROGRAM_MAP(hyprolyb_adpcm_map)
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+
MCFG_SOUND_ADD("hyprolyb_adpcm", HYPROLYB_ADPCM, 0)
MCFG_SOUND_ADD("msm", MSM5205, 384000)
diff --git a/src/mame/audio/hyprolyb.h b/src/mame/audio/hyprolyb.h
index f5b1c3dc116..abbbd77c689 100644
--- a/src/mame/audio/hyprolyb.h
+++ b/src/mame/audio/hyprolyb.h
@@ -1,5 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Chris Hardy
+
+#include "machine/gen_latch.h"
#include "sound/msm5205.h"
class hyprolyb_adpcm_device : public device_t,
@@ -21,7 +23,6 @@ public:
protected:
// device-level overrides
- virtual void device_config_complete() override;
virtual void device_start() override;
virtual void device_reset() override;
@@ -30,6 +31,7 @@ protected:
private:
// internal state
+ required_device<generic_latch_8_device> m_soundlatch2;
msm5205_device *m_msm;
address_space *m_space;
UINT8 m_adpcm_ready; // only bootlegs
diff --git a/src/mame/audio/scramble.cpp b/src/mame/audio/scramble.cpp
index bafc07653cb..7d575414907 100644
--- a/src/mame/audio/scramble.cpp
+++ b/src/mame/audio/scramble.cpp
@@ -121,7 +121,7 @@ WRITE8_MEMBER(scramble_state::hotshock_sh_irqtrigger_w)
READ8_MEMBER( scramble_state::hotshock_soundlatch_r )
{
m_audiocpu->set_input_line(0, CLEAR_LINE);
- return soundlatch_byte_r(m_audiocpu->space(AS_PROGRAM),0);
+ return m_soundlatch->read(m_audiocpu->space(AS_PROGRAM),0);
}
static void filter_w(device_t *device, int data)
@@ -312,6 +312,9 @@ MACHINE_CONFIG_FRAGMENT( ad2083_audio )
MCFG_TMSPROM_CTL_CB(DEVWRITE8("tms", tms5110_device, ctl_w)) /* tms ctl func */
MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("ay1", AY8910, 14318000/8)
MCFG_AY8910_PORT_A_READ_CB(READ8(scramble_state, scramble_portB_r))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
diff --git a/src/mame/audio/timeplt.cpp b/src/mame/audio/timeplt.cpp
index eb1dd3ef6e9..fed195048f6 100644
--- a/src/mame/audio/timeplt.cpp
+++ b/src/mame/audio/timeplt.cpp
@@ -14,6 +14,7 @@
#include "emu.h"
#include "audio/timeplt.h"
+#include "machine/gen_latch.h"
#define MASTER_CLOCK XTAL_14_31818MHz
@@ -188,7 +189,7 @@ MACHINE_CONFIG_FRAGMENT( timeplt_sound )
MCFG_SOUND_ADD("timeplt_audio", TIMEPLT_AUDIO, 0)
MCFG_SOUND_ADD("ay1", AY8910, MASTER_CLOCK/8)
- MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r))
+ MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read))
MCFG_AY8910_PORT_B_READ_CB(DEVREAD8("timeplt_audio", timeplt_audio_device, portB_r))
MCFG_SOUND_ROUTE(0, "filter.0.0", 0.60)
MCFG_SOUND_ROUTE(1, "filter.0.1", 0.60)
diff --git a/src/mame/drivers/88games.cpp b/src/mame/drivers/88games.cpp
index c6fb22de23d..ab9c1508f9b 100644
--- a/src/mame/drivers/88games.cpp
+++ b/src/mame/drivers/88games.cpp
@@ -10,6 +10,7 @@
#include "cpu/m6809/konami.h"
#include "cpu/z80/z80.h"
#include "sound/2151intf.h"
+#include "machine/gen_latch.h"
#include "machine/nvram.h"
#include "machine/watchdog.h"
#include "includes/88games.h"
@@ -125,7 +126,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, _88games_state )
AM_RANGE(0x3800, 0x3fff) AM_READWRITE(bankedram_r, bankedram_w) AM_SHARE("ram")
AM_RANGE(0x5f84, 0x5f84) AM_WRITE(k88games_5f84_w)
AM_RANGE(0x5f88, 0x5f88) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
- AM_RANGE(0x5f8c, 0x5f8c) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x5f8c, 0x5f8c) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x5f90, 0x5f90) AM_WRITE(k88games_sh_irqtrigger_w)
AM_RANGE(0x5f94, 0x5f94) AM_READ_PORT("IN0")
AM_RANGE(0x5f95, 0x5f95) AM_READ_PORT("IN1")
@@ -141,7 +142,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, _88games_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM
AM_RANGE(0x9000, 0x9000) AM_WRITE(speech_msg_w)
- AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0xe000, 0xe000) AM_WRITE(speech_control_w)
ADDRESS_MAP_END
@@ -341,6 +342,8 @@ static MACHINE_CONFIG_START( 88games, _88games_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", 3579545)
MCFG_SOUND_ROUTE(0, "mono", 0.75)
MCFG_SOUND_ROUTE(1, "mono", 0.75)
diff --git a/src/mame/drivers/airbustr.cpp b/src/mame/drivers/airbustr.cpp
index cc23b1837f1..29aa298c9fb 100644
--- a/src/mame/drivers/airbustr.cpp
+++ b/src/mame/drivers/airbustr.cpp
@@ -293,32 +293,29 @@ READ8_MEMBER(airbustr_state::soundcommand_status_r)
READ8_MEMBER(airbustr_state::soundcommand_r)
{
m_soundlatch_status = 0; // soundlatch has been read
- return soundlatch_byte_r(space, 0);
+ return m_soundlatch->read(space, 0);
}
READ8_MEMBER(airbustr_state::soundcommand2_r)
{
m_soundlatch2_status = 0; // soundlatch2 has been read
- return soundlatch2_byte_r(space, 0);
+ return m_soundlatch2->read(space, 0);
}
WRITE8_MEMBER(airbustr_state::soundcommand_w)
{
- soundlatch_byte_w(space, 0, data);
+ m_soundlatch->write(space, 0, data);
m_soundlatch_status = 1; // soundlatch has been written
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); // cause a nmi to sub cpu
}
WRITE8_MEMBER(airbustr_state::soundcommand2_w)
{
- soundlatch2_byte_w(space, 0, data);
+ m_soundlatch2->write(space, 0, data);
m_soundlatch2_status = 1; // soundlatch2 has been written
}
-
-
-
WRITE8_MEMBER(airbustr_state::airbustr_coin_counter_w)
{
machine().bookkeeping().coin_counter_w(0, data & 1);
@@ -625,6 +622,9 @@ static MACHINE_CONFIG_START( airbustr, airbustr_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+
MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_12MHz/4) /* verified on pcb */
MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW1")) // DSW-1 connected to port A
MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW2")) // DSW-2 connected to port B
diff --git a/src/mame/drivers/ajax.cpp b/src/mame/drivers/ajax.cpp
index 85f8f809e2f..143c7633f1e 100644
--- a/src/mame/drivers/ajax.cpp
+++ b/src/mame/drivers/ajax.cpp
@@ -51,7 +51,7 @@ static ADDRESS_MAP_START( ajax_sound_map, AS_PROGRAM, 8, ajax_state )
AM_RANGE(0xb80c, 0xb80c) AM_WRITE(k007232_extvol_w) /* extra volume, goes to the 007232 w/ A11 */
/* selecting a different latch for the external port */
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) /* YM2151 */
- AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r) /* soundlatch_byte_r */
+ AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
ADDRESS_MAP_END
@@ -210,6 +210,8 @@ static MACHINE_CONFIG_START( ajax, ajax_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", 3579545)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
diff --git a/src/mame/drivers/aliens.cpp b/src/mame/drivers/aliens.cpp
index b39437c2de2..8b35cd22888 100644
--- a/src/mame/drivers/aliens.cpp
+++ b/src/mame/drivers/aliens.cpp
@@ -42,7 +42,7 @@ WRITE8_MEMBER(aliens_state::aliens_coin_counter_w)
WRITE8_MEMBER(aliens_state::aliens_sh_irqtrigger_w)
{
- soundlatch_byte_w(space, offset, data);
+ m_soundlatch->write(space, offset, data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
@@ -107,7 +107,7 @@ static ADDRESS_MAP_START( aliens_sound_map, AS_PROGRAM, 8, aliens_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM /* ROM g04_b03.bin */
AM_RANGE(0x8000, 0x87ff) AM_RAM /* RAM */
AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
- AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r) /* soundlatch_byte_r */
+ AM_RANGE(0xc000, 0xc000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xe000, 0xe00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
ADDRESS_MAP_END
@@ -233,6 +233,8 @@ static MACHINE_CONFIG_START( aliens, aliens_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", XTAL_3_579545MHz) /* verified on pcb */
MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(aliens_state,aliens_snd_bankswitch_w))
MCFG_SOUND_ROUTE(0, "mono", 0.60)
diff --git a/src/mame/drivers/battlnts.cpp b/src/mame/drivers/battlnts.cpp
index b4d00a994d8..acfac32642b 100644
--- a/src/mame/drivers/battlnts.cpp
+++ b/src/mame/drivers/battlnts.cpp
@@ -15,6 +15,7 @@
#include "emu.h"
#include "cpu/m6809/hd6309.h"
#include "cpu/z80/z80.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/3812intf.h"
#include "includes/konamipt.h"
@@ -71,7 +72,7 @@ static ADDRESS_MAP_START( battlnts_map, AS_PROGRAM, 8, battlnts_state )
AM_RANGE(0x2e08, 0x2e08) AM_WRITE(battlnts_bankswitch_w) /* bankswitch control */
AM_RANGE(0x2e0c, 0x2e0c) AM_WRITE(battlnts_spritebank_w) /* sprite bank select */
AM_RANGE(0x2e10, 0x2e10) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
- AM_RANGE(0x2e14, 0x2e14) AM_WRITE(soundlatch_byte_w) /* sound code # */
+ AM_RANGE(0x2e14, 0x2e14) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* sound code # */
AM_RANGE(0x2e18, 0x2e18) AM_WRITE(battlnts_sh_irqtrigger_w) /* cause interrupt on audio CPU */
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("rombank") /* banked ROM */
AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM 777e02.bin */
@@ -82,7 +83,7 @@ static ADDRESS_MAP_START( battlnts_sound_map, AS_PROGRAM, 8, battlnts_state )
AM_RANGE(0x8000, 0x87ff) AM_RAM /* RAM */
AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ym1", ym3812_device, read, write) /* YM3812 (chip 1) */
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ym2", ym3812_device, read, write) /* YM3812 (chip 2) */
- AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r) /* soundlatch_byte_r */
+ AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
ADDRESS_MAP_END
/*************************************
@@ -263,6 +264,8 @@ static MACHINE_CONFIG_START( battlnts, battlnts_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("ym1", YM3812, XTAL_24MHz / 8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
diff --git a/src/mame/drivers/bladestl.cpp b/src/mame/drivers/bladestl.cpp
index a15997f06c4..a3d9d00834c 100644
--- a/src/mame/drivers/bladestl.cpp
+++ b/src/mame/drivers/bladestl.cpp
@@ -85,7 +85,7 @@ WRITE8_MEMBER(bladestl_state::bladestl_bankswitch_w)
WRITE8_MEMBER(bladestl_state::bladestl_sh_irqtrigger_w)
{
- soundlatch_byte_w(space, offset, data);
+ m_soundlatch->write(space, offset, data);
m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
//logerror("(sound) write %02x\n", data);
}
@@ -150,7 +150,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, bladestl_state )
AM_RANGE(0x3000, 0x3000) AM_WRITE(bladestl_speech_ctrl_w) /* UPD7759 */
AM_RANGE(0x4000, 0x4000) AM_READ(bladestl_speech_busy_r) /* UPD7759 */
AM_RANGE(0x5000, 0x5000) AM_WRITENOP /* ??? */
- AM_RANGE(0x6000, 0x6000) AM_READ(soundlatch_byte_r) /* soundlatch_byte_r */
+ AM_RANGE(0x6000, 0x6000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -342,6 +342,8 @@ static MACHINE_CONFIG_START( bladestl, bladestl_state )
called at initialization time */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("upd", UPD7759, UPD7759_STANDARD_CLOCK)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
diff --git a/src/mame/drivers/blockhl.cpp b/src/mame/drivers/blockhl.cpp
index 7117471785e..a59c5313544 100644
--- a/src/mame/drivers/blockhl.cpp
+++ b/src/mame/drivers/blockhl.cpp
@@ -21,6 +21,7 @@
#include "cpu/m6809/konami.h"
#include "cpu/z80/z80.h"
#include "machine/bankdev.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "video/k052109.h"
#include "video/k051960.h"
@@ -72,7 +73,7 @@ private:
//**************************************************************************
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, blockhl_state )
- AM_RANGE(0x1f84, 0x1f84) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x1f84, 0x1f84) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x1f88, 0x1f88) AM_WRITE(sound_irq_w)
AM_RANGE(0x1f8c, 0x1f8c) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x1f94, 0x1f94) AM_READ_PORT("DSW3")
@@ -95,7 +96,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( audio_map, AS_PROGRAM, 8, blockhl_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM
- AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0xe00c, 0xe00d) AM_WRITENOP // leftover from missing 007232?
ADDRESS_MAP_END
@@ -310,6 +311,8 @@ static MACHINE_CONFIG_START( blockhl, blockhl_state )
// sound hardware
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", XTAL_3_579545MHz)
MCFG_SOUND_ROUTE(0, "mono", 0.60)
MCFG_SOUND_ROUTE(1, "mono", 0.60)
diff --git a/src/mame/drivers/bottom9.cpp b/src/mame/drivers/bottom9.cpp
index 9a88444c5a6..e82ae67dca4 100644
--- a/src/mame/drivers/bottom9.cpp
+++ b/src/mame/drivers/bottom9.cpp
@@ -17,6 +17,7 @@
#include "emu.h"
#include "cpu/z80/z80.h"
#include "cpu/m6809/m6809.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "includes/konamipt.h"
#include "includes/bottom9.h"
@@ -160,7 +161,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, bottom9_state )
AM_RANGE(0x1f80, 0x1f80) AM_WRITE(bankswitch_w)
AM_RANGE(0x1f90, 0x1f90) AM_WRITE(bottom9_1f90_w)
AM_RANGE(0x1fa0, 0x1fa0) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
- AM_RANGE(0x1fb0, 0x1fb0) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x1fb0, 0x1fb0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x1fc0, 0x1fc0) AM_WRITE(bottom9_sh_irqtrigger_w)
AM_RANGE(0x1fd0, 0x1fd0) AM_READ_PORT("SYSTEM")
AM_RANGE(0x1fd1, 0x1fd1) AM_READ_PORT("P1")
@@ -181,7 +182,7 @@ static ADDRESS_MAP_START( audio_map, AS_PROGRAM, 8, bottom9_state )
AM_RANGE(0x9000, 0x9000) AM_WRITE(sound_bank_w)
AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE("k007232_1", k007232_device, read, write)
AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232_2", k007232_device, read, write)
- AM_RANGE(0xd000, 0xd000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xd000, 0xd000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xf000, 0xf000) AM_WRITE(nmi_enable_w)
ADDRESS_MAP_END
@@ -336,6 +337,8 @@ static MACHINE_CONFIG_START( bottom9, bottom9_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("k007232_1", K007232, 3579545)
MCFG_K007232_PORT_WRITE_HANDLER(WRITE8(bottom9_state, volume_callback0))
MCFG_SOUND_ROUTE(0, "mono", 0.40)
diff --git a/src/mame/drivers/chqflag.cpp b/src/mame/drivers/chqflag.cpp
index 289df90540e..2a89ee1919b 100644
--- a/src/mame/drivers/chqflag.cpp
+++ b/src/mame/drivers/chqflag.cpp
@@ -112,7 +112,7 @@ READ8_MEMBER(chqflag_state::analog_read_r)
WRITE8_MEMBER(chqflag_state::chqflag_sh_irqtrigger_w)
{
- soundlatch2_byte_w(space, 0, data);
+ m_soundlatch2->write(space, 0, data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
@@ -125,7 +125,7 @@ static ADDRESS_MAP_START( chqflag_map, AS_PROGRAM, 8, chqflag_state )
AM_RANGE(0x2000, 0x2007) AM_DEVREADWRITE("k051960", k051960_device, k051937_r, k051937_w) /* Sprite control registers */
AM_RANGE(0x2400, 0x27ff) AM_DEVREADWRITE("k051960", k051960_device, k051960_r, k051960_w) /* Sprite RAM */
AM_RANGE(0x2800, 0x2fff) AM_READ(k051316_2_ramrom_r) AM_DEVWRITE("k051316_2", k051316_device, write) /* 051316 zoom/rotation (chip 2) */
- AM_RANGE(0x3000, 0x3000) AM_WRITE(soundlatch_byte_w) /* sound code # */
+ AM_RANGE(0x3000, 0x3000) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* sound code # */
AM_RANGE(0x3001, 0x3001) AM_WRITE(chqflag_sh_irqtrigger_w) /* cause interrupt on audio CPU */
AM_RANGE(0x3002, 0x3002) AM_WRITE(chqflag_bankswitch_w) /* bankswitch control */
AM_RANGE(0x3003, 0x3003) AM_WRITE(chqflag_vreg_w) /* enable K051316 ROM reading */
@@ -175,8 +175,8 @@ static ADDRESS_MAP_START( chqflag_sound_map, AS_PROGRAM, 8, chqflag_state )
/* selecting a different latch for the external port */
AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232_2", k007232_device, read, write) /* 007232 (chip 2) */
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) /* YM2151 */
- AM_RANGE(0xd000, 0xd000) AM_READ(soundlatch_byte_r) /* soundlatch_byte_r */
- AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch2_byte_r) /* engine sound volume */
+ AM_RANGE(0xd000, 0xd000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
+ AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) /* engine sound volume */
AM_RANGE(0xf000, 0xf000) AM_WRITENOP /* ??? */
ADDRESS_MAP_END
@@ -341,6 +341,9 @@ static MACHINE_CONFIG_START( chqflag, chqflag_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+
MCFG_YM2151_ADD("ymsnd", XTAL_3_579545MHz) /* verified on pcb */
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI))
MCFG_SOUND_ROUTE(0, "lspeaker", 1.00)
diff --git a/src/mame/drivers/circusc.cpp b/src/mame/drivers/circusc.cpp
index a63a76c93cd..ced692dc44d 100644
--- a/src/mame/drivers/circusc.cpp
+++ b/src/mame/drivers/circusc.cpp
@@ -55,6 +55,7 @@ This bug is due to 380_r02.6h, it differs from 380_q02.6h by 2 bytes, at
#include "cpu/z80/z80.h"
#include "machine/konami1.h"
#include "cpu/m6809/m6809.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/dac.h"
#include "sound/discrete.h"
@@ -146,7 +147,7 @@ static ADDRESS_MAP_START( circusc_map, AS_PROGRAM, 8, circusc_state )
AM_RANGE(0x0003, 0x0004) AM_MIRROR(0x03f8) AM_WRITE(circusc_coin_counter_w) /* COIN1, COIN2 */
AM_RANGE(0x0005, 0x0005) AM_MIRROR(0x03f8) AM_WRITEONLY AM_SHARE("spritebank") /* OBJ CHENG */
AM_RANGE(0x0400, 0x0400) AM_MIRROR(0x03ff) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) /* WDOG */
- AM_RANGE(0x0800, 0x0800) AM_MIRROR(0x03ff) AM_WRITE(soundlatch_byte_w) /* SOUND DATA */
+ AM_RANGE(0x0800, 0x0800) AM_MIRROR(0x03ff) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* SOUND DATA */
AM_RANGE(0x0c00, 0x0c00) AM_MIRROR(0x03ff) AM_WRITE(circusc_sh_irqtrigger_w) /* SOUND-ON causes interrupt on audio CPU */
AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x03fc) AM_READ_PORT("SYSTEM")
AM_RANGE(0x1001, 0x1001) AM_MIRROR(0x03fc) AM_READ_PORT("P1")
@@ -167,7 +168,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, circusc_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0x1c00) AM_RAM
- AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x1fff) AM_READ(soundlatch_byte_r) /* CS0 */
+ AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x1fff) AM_DEVREAD("soundlatch", generic_latch_8_device, read) /* CS0 */
AM_RANGE(0x8000, 0x8000) AM_MIRROR(0x1fff) AM_READ(circusc_sh_timer_r) /* CS1 */
AM_RANGE(0xa000, 0xa07f) AM_MIRROR(0x1f80) AM_WRITE(circusc_sound_w) /* CS2 - CS6 */
ADDRESS_MAP_END
@@ -363,6 +364,8 @@ static MACHINE_CONFIG_START( circusc, circusc_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("sn1", SN76496, XTAL_14_31818MHz/8)
MCFG_SOUND_ROUTE_EX(0, "fltdisc", 1.0, 0)
diff --git a/src/mame/drivers/combatsc.cpp b/src/mame/drivers/combatsc.cpp
index b7ae2deb8e0..2d346e77212 100644
--- a/src/mame/drivers/combatsc.cpp
+++ b/src/mame/drivers/combatsc.cpp
@@ -6,7 +6,7 @@
TODO:
- Ugly text flickering in various places, namely the text when you finish level 1.
- This is due of completely busted sprite limit hook-up. (check konicdev.c and MT #00185)
+ This is due of completely busted sprite limit hook-up. (check k007121.cpp and MT #00185)
- it seems that to get correct target colors in firing range III we have to
use the WRONG lookup table (the one for tiles instead of the one for
sprites).
@@ -112,7 +112,7 @@ SOUND CPU:
9000 uPD7759
b000 uPD7759
c000 uPD7759
-d000 soundlatch_byte_r
+d000 soundlatch read
e000-e001 YM2203
@@ -150,7 +150,7 @@ WRITE8_MEMBER(combatsc_state::combatsc_vreg_w)
WRITE8_MEMBER(combatsc_state::combatscb_sh_irqtrigger_w)
{
- soundlatch_byte_w(space, offset, data);
+ m_soundlatch->write(space, offset, data);
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
@@ -363,7 +363,7 @@ static ADDRESS_MAP_START( combatsc_map, AS_PROGRAM, 8, combatsc_state )
AM_RANGE(0x0408, 0x0408) AM_WRITE(combatsc_coin_counter_w) /* coin counters */
AM_RANGE(0x040c, 0x040c) AM_WRITE(combatsc_vreg_w)
AM_RANGE(0x0410, 0x0410) AM_WRITE(combatsc_bankselect_w)
- AM_RANGE(0x0414, 0x0414) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x0414, 0x0414) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x0418, 0x0418) AM_WRITE(combatsc_sh_irqtrigger_w)
AM_RANGE(0x041c, 0x041c) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) /* watchdog reset? */
@@ -393,7 +393,7 @@ static ADDRESS_MAP_START( combatsc_sound_map, AS_PROGRAM, 8, combatsc_state )
AM_RANGE(0xb000, 0xb000) AM_READ(combatsc_busy_r) /* upd7759 busy? */
AM_RANGE(0xc000, 0xc000) AM_WRITE(combatsc_voice_reset_w) /* upd7759 reset? */
- AM_RANGE(0xd000, 0xd000) AM_READ(soundlatch_byte_r) /* soundlatch_byte_r? */
+ AM_RANGE(0xd000, 0xd000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) /* soundlatch read? */
AM_RANGE(0xe000, 0xe001) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write) /* YM 2203 intercepted */
ADDRESS_MAP_END
@@ -416,7 +416,7 @@ static ADDRESS_MAP_START( combatscb_sound_map, AS_PROGRAM, 8, combatsc_state )
AM_RANGE(0x9000, 0x9001) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write) /* YM 2203 */
AM_RANGE(0x9008, 0x9009) AM_DEVREAD("ymsnd", ym2203_device, read) /* ??? */
AM_RANGE(0x9800, 0x9800) AM_WRITE(combatscb_dac_w)
- AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r) /* soundlatch_byte_r? */
+ AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) /* soundlatch read? */
AM_RANGE(0xc000, 0xffff) AM_ROMBANK("bl_abank")
ADDRESS_MAP_END
@@ -732,6 +732,8 @@ static MACHINE_CONFIG_START( combatsc, combatsc_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("ymsnd", YM2203, 3000000)
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(combatsc_state, combatsc_portA_w))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
@@ -776,6 +778,8 @@ static MACHINE_CONFIG_START( combatscb, combatsc_state )
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("ymsnd", YM2203, 3000000)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
diff --git a/src/mame/drivers/contra.cpp b/src/mame/drivers/contra.cpp
index 868741667dd..82550236657 100644
--- a/src/mame/drivers/contra.cpp
+++ b/src/mame/drivers/contra.cpp
@@ -21,6 +21,7 @@ Dip locations and factory settings verified with manual
#include "emu.h"
#include "cpu/m6809/hd6309.h"
#include "cpu/m6809/m6809.h"
+#include "machine/gen_latch.h"
#include "sound/2151intf.h"
#include "includes/konamipt.h"
#include "includes/contra.h"
@@ -52,12 +53,6 @@ WRITE8_MEMBER(contra_state::contra_coin_counter_w)
machine().bookkeeping().coin_counter_w(1, (data & 0x02) >> 1);
}
-WRITE8_MEMBER(contra_state::cpu_sound_command_w)
-{
- soundlatch_byte_w(space, offset, data);
-}
-
-
static ADDRESS_MAP_START( contra_map, AS_PROGRAM, 8, contra_state )
AM_RANGE(0x0000, 0x0007) AM_WRITE(contra_K007121_ctrl_0_w)
@@ -71,7 +66,7 @@ static ADDRESS_MAP_START( contra_map, AS_PROGRAM, 8, contra_state )
AM_RANGE(0x0018, 0x0018) AM_WRITE(contra_coin_counter_w)
AM_RANGE(0x001a, 0x001a) AM_WRITE(contra_sh_irqtrigger_w)
- AM_RANGE(0x001c, 0x001c) AM_WRITE(cpu_sound_command_w)
+ AM_RANGE(0x001c, 0x001c) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x001e, 0x001e) AM_WRITENOP /* ? */
AM_RANGE(0x0060, 0x0067) AM_WRITE(contra_K007121_ctrl_1_w)
@@ -97,7 +92,7 @@ static ADDRESS_MAP_START( contra_map, AS_PROGRAM, 8, contra_state )
ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, contra_state )
- AM_RANGE(0x0000, 0x0000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x0000, 0x0000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x2000, 0x2001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0x4000, 0x4000) AM_WRITENOP /* read triggers irq reset and latch read (in the hardware only). */
AM_RANGE(0x6000, 0x67ff) AM_RAM
@@ -236,6 +231,8 @@ static MACHINE_CONFIG_START( contra, contra_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", XTAL_3_579545MHz)
MCFG_SOUND_ROUTE(0, "lspeaker", 0.60)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.60)
diff --git a/src/mame/drivers/crimfght.cpp b/src/mame/drivers/crimfght.cpp
index 1d77ed5b684..89adee82837 100644
--- a/src/mame/drivers/crimfght.cpp
+++ b/src/mame/drivers/crimfght.cpp
@@ -56,7 +56,7 @@ WRITE8_MEMBER(crimfght_state::k052109_051960_w)
WRITE8_MEMBER(crimfght_state::sound_w)
{
// writing the latch asserts the irq line
- soundlatch_write(0, data);
+ m_soundlatch->write(space, offset, data);
m_audiocpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE);
}
@@ -107,7 +107,7 @@ static ADDRESS_MAP_START( crimfght_sound_map, AS_PROGRAM, 8, crimfght_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x1800) AM_RAM
AM_RANGE(0xa000, 0xa001) AM_MIRROR(0x1ffe) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
- AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x1fff) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x1fff) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xe000, 0xe00f) AM_MIRROR(0x1ff0) AM_DEVREADWRITE("k007232", k007232_device, read, write)
ADDRESS_MAP_END
@@ -340,6 +340,8 @@ static MACHINE_CONFIG_START( crimfght, crimfght_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", XTAL_3_579545MHz) /* verified on pcb */
MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(crimfght_state, ym2151_ct_w))
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
diff --git a/src/mame/drivers/dbz.cpp b/src/mame/drivers/dbz.cpp
index c23e895dc27..074a34826f7 100644
--- a/src/mame/drivers/dbz.cpp
+++ b/src/mame/drivers/dbz.cpp
@@ -95,7 +95,7 @@ WRITE16_MEMBER(dbz_state::dbzcontrol_w)
WRITE16_MEMBER(dbz_state::dbz_sound_command_w)
{
- soundlatch_byte_w(space, 0, data >> 8);
+ m_soundlatch->write(space, 0, data >> 8);
}
WRITE16_MEMBER(dbz_state::dbz_sound_cause_nmi)
@@ -146,7 +146,7 @@ static ADDRESS_MAP_START( dbz_sound_map, AS_PROGRAM, 8, dbz_state )
AM_RANGE(0x8000, 0xbfff) AM_RAM
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0xd000, 0xd002) AM_DEVREADWRITE("oki", okim6295_device, read, write)
- AM_RANGE(0xe000, 0xe001) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xe000, 0xe001) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
ADDRESS_MAP_END
static ADDRESS_MAP_START( dbz_sound_io_map, AS_IO, 8, dbz_state )
@@ -370,6 +370,8 @@ static MACHINE_CONFIG_START( dbz, dbz_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", 4000000)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
diff --git a/src/mame/drivers/djboy.cpp b/src/mame/drivers/djboy.cpp
index bbd3eb25706..cec8d17afe6 100644
--- a/src/mame/drivers/djboy.cpp
+++ b/src/mame/drivers/djboy.cpp
@@ -230,7 +230,7 @@ WRITE8_MEMBER(djboy_state::coin_count_w)
WRITE8_MEMBER(djboy_state::trigger_nmi_on_sound_cpu2)
{
- soundlatch_byte_w(space, 0, data);
+ m_soundlatch->write(space, 0, data);
m_cpu2->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
} /* trigger_nmi_on_sound_cpu2 */
@@ -291,7 +291,7 @@ static ADDRESS_MAP_START( cpu2_port_am, AS_IO, 8, djboy_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_WRITE(cpu2_bankswitch_w)
AM_RANGE(0x02, 0x03) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write)
- AM_RANGE(0x04, 0x04) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x04, 0x04) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x06, 0x06) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
AM_RANGE(0x07, 0x07) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
ADDRESS_MAP_END
@@ -584,6 +584,8 @@ static MACHINE_CONFIG_START( djboy, djboy_state )
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("ymsnd", YM2203, 3000000)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
diff --git a/src/mame/drivers/fastfred.cpp b/src/mame/drivers/fastfred.cpp
index 99f4f8ce5c7..88442b52d86 100644
--- a/src/mame/drivers/fastfred.cpp
+++ b/src/mame/drivers/fastfred.cpp
@@ -13,6 +13,7 @@
#include "emu.h"
#include "cpu/z80/z80.h"
#include "includes/fastfred.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
@@ -201,7 +202,7 @@ static ADDRESS_MAP_START( fastfred_map, AS_PROGRAM, 8, fastfred_state )
AM_RANGE(0xf007, 0xf007) AM_WRITE(fastfred_flip_screen_y_w)
AM_RANGE(0xf116, 0xf116) AM_WRITE(fastfred_flip_screen_x_w)
AM_RANGE(0xf117, 0xf117) AM_WRITE(fastfred_flip_screen_y_w)
- AM_RANGE(0xf800, 0xf800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0xf800, 0xf800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
ADDRESS_MAP_END
@@ -256,13 +257,13 @@ static ADDRESS_MAP_START( imago_map, AS_PROGRAM, 8, fastfred_state )
AM_RANGE(0xf007, 0xf007) AM_WRITE(fastfred_flip_screen_y_w)
AM_RANGE(0xf400, 0xf400) AM_WRITENOP // writes 0 or 2
AM_RANGE(0xf401, 0xf401) AM_WRITE(imago_sprites_bank_w)
- AM_RANGE(0xf800, 0xf800) AM_READNOP AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0xf800, 0xf800) AM_READNOP AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, fastfred_state )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x2000, 0x23ff) AM_RAM
- AM_RANGE(0x3000, 0x3000) AM_READ(soundlatch_byte_r) AM_WRITE(sound_nmi_mask_w)
+ AM_RANGE(0x3000, 0x3000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(sound_nmi_mask_w)
AM_RANGE(0x4000, 0x4000) AM_WRITEONLY // Reset PSG's
AM_RANGE(0x5000, 0x5001) AM_DEVWRITE("ay8910.1", ay8910_device, address_data_w)
AM_RANGE(0x6000, 0x6001) AM_DEVWRITE("ay8910.2", ay8910_device, address_data_w)
@@ -676,6 +677,8 @@ static MACHINE_CONFIG_START( fastfred, fastfred_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("ay8910.1", AY8910, XTAL_12_432MHz/8) /* 1.554 MHz; xtal from pcb pics, divider not verified */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
@@ -695,6 +698,7 @@ static MACHINE_CONFIG_DERIVED( jumpcoas, fastfred )
MCFG_GFXDECODE_MODIFY("gfxdecode", jumpcoas)
/* sound hardware */
+ MCFG_DEVICE_REMOVE("soundlatch")
MCFG_DEVICE_REMOVE("ay8910.2")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/finalizr.cpp b/src/mame/drivers/finalizr.cpp
index 1eb060a9169..79c0cfbb869 100644
--- a/src/mame/drivers/finalizr.cpp
+++ b/src/mame/drivers/finalizr.cpp
@@ -16,6 +16,7 @@
#include "machine/konami1.h"
#include "cpu/m6809/m6809.h"
#include "cpu/mcs48/mcs48.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/sn76496.h"
#include "sound/dac.h"
@@ -114,7 +115,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, finalizr_state )
AM_RANGE(0x081a, 0x081a) AM_DEVWRITE("snsnd", sn76489a_device, write) /* This address triggers the SN chip to read the data port. */
AM_RANGE(0x081b, 0x081b) AM_WRITENOP /* Loads the snd command into the snd latch */
AM_RANGE(0x081c, 0x081c) AM_WRITE(finalizr_i8039_irq_w) /* custom sound chip */
- AM_RANGE(0x081d, 0x081d) AM_WRITE(soundlatch_byte_w) /* custom sound chip */
+ AM_RANGE(0x081d, 0x081d) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* custom sound chip */
AM_RANGE(0x2000, 0x23ff) AM_RAM AM_SHARE("colorram")
AM_RANGE(0x2400, 0x27ff) AM_RAM AM_SHARE("videoram")
AM_RANGE(0x2800, 0x2bff) AM_RAM AM_SHARE("colorram2")
@@ -131,7 +132,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, finalizr_state )
ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, finalizr_state )
- AM_RANGE(0x00, 0xff) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x00, 0xff) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_DEVWRITE("dac", dac_device, write_unsigned8)
AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(i8039_irqen_w)
AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_WRITE(i8039_T0_w)
@@ -288,6 +289,8 @@ static MACHINE_CONFIG_START( finalizr, finalizr_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("snsnd", SN76489A, XTAL_18_432MHz/12)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
diff --git a/src/mame/drivers/flkatck.cpp b/src/mame/drivers/flkatck.cpp
index 140729c7167..6a2cc418a79 100644
--- a/src/mame/drivers/flkatck.cpp
+++ b/src/mame/drivers/flkatck.cpp
@@ -66,7 +66,7 @@ WRITE8_MEMBER(flkatck_state::flkatck_ls138_w)
flkatck_bankswitch_w(space, 0, data);
break;
case 0x05: /* sound code number */
- soundlatch_byte_w(space, 0, data);
+ m_soundlatch->write(space, 0, data);
break;
case 0x06: /* Cause interrupt on audio CPU */
m_audiocpu->set_input_line(0, HOLD_LINE);
@@ -107,7 +107,7 @@ static ADDRESS_MAP_START( flkatck_sound_map, AS_PROGRAM, 8, flkatck_state )
// AM_RANGE(0x9001, 0x9001) AM_RAM /* ??? */
AM_RANGE(0x9004, 0x9004) AM_READNOP /* ??? */
AM_RANGE(0x9006, 0x9006) AM_WRITENOP /* ??? */
- AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r) /* soundlatch_byte_r */
+ AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write) /* 007232 registers */
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) /* YM2151 */
ADDRESS_MAP_END
@@ -238,6 +238,8 @@ static MACHINE_CONFIG_START( flkatck, flkatck_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", 3579545)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
diff --git a/src/mame/drivers/galaxian.cpp b/src/mame/drivers/galaxian.cpp
index e222e403291..9f7ce09e0e3 100644
--- a/src/mame/drivers/galaxian.cpp
+++ b/src/mame/drivers/galaxian.cpp
@@ -5825,13 +5825,13 @@ static MACHINE_CONFIG_DERIVED( scramble, galaxian_base )
MCFG_I8255_IN_PORTA_CB(IOPORT("IN0"))
MCFG_I8255_IN_PORTB_CB(IOPORT("IN1"))
MCFG_I8255_IN_PORTC_CB(IOPORT("IN2"))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, konami_portc_0_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, scramble_protection_w))
MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w))
MCFG_I8255_OUT_PORTB_CB(WRITE8(galaxian_state, konami_sound_control_w))
MCFG_I8255_IN_PORTC_CB(READ8(galaxian_state, scramble_protection_r))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, scramble_protection_w))
+ //MCFG_I8255_OUT_PORTC_CB(WRITE8())
MACHINE_CONFIG_END
@@ -10442,6 +10442,25 @@ ROM_START( scramrf )
ROM_LOAD( "c01s.6e", 0x0000, 0x0020, CRC(4e3caeab) SHA1(a25083c3e36d28afdefe4af6e6d4f3155e303625) )
ROM_END
+ROM_START( scrammr )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "301.CD2", 0x0000, 0x1000, CRC(680c9355) SHA1(e23cfc1ec839b9bf3d8d9d5d09f0df5c67f8bbb5) )
+ ROM_LOAD( "302.E2", 0x1000, 0x1000, CRC(5b500c90) SHA1(45b1bad1d93f3e474395a193d2fe00e105ba39e5) )
+ ROM_LOAD( "303.FG2", 0x2000, 0x1000, CRC(664437d7) SHA1(1fb7cb724b0dcfe6fcd2213f8e47dfd46e51f90f) )
+ ROM_LOAD( "304.H2", 0x3000, 0x1000, CRC(b66c90d6) SHA1(7aea3055b0b538ea8197623ff5d5aae76133f156) )
+
+ ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_LOAD( "305.C5", 0x0000, 0x1000, CRC(684a0866) SHA1(fa9acfff7ea6f35b9ff219ac84611a7d9debc711) )
+ ROM_LOAD( "313.D5", 0x1000, 0x0800, CRC(ba2fa933) SHA1(1f976d8595706730e29f93027e7ab4620075c078) )
+
+ ROM_REGION( 0x1000, "gfx1", 0 )
+ ROM_LOAD( "310.H5", 0x0000, 0x0800, CRC(4708845b) SHA1(a8b1ad19a95a9d35050a2ab7194cc96fc5afcdc9) )
+ ROM_LOAD( "309.FG5", 0x0800, 0x0800, CRC(11fd2887) SHA1(69844e48bb4d372cac7ae83c953df573c7ecbb7f) )
+
+ ROM_REGION( 0x0020, "proms", 0 )
+ ROM_LOAD( "74188.K6", 0x0000, 0x0020, CRC(aec6cb4e) SHA1(747c442d338b1b679619dfffc8a7c7fa9a43a073) )
+ROM_END
+
ROM_START( scramblebf )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "scf1.2d", 0x0000, 0x0800, CRC(b126aa1f) SHA1(1e4db9ee891711e880273241e74e932b0f4e3a0b) )
@@ -11595,6 +11614,7 @@ GAME( 1981, scrambp, scramble, scramble, scramble, galaxian_state, scram
GAME( 1981, scramce, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg (Centromatic S.A.)", "Scramble (Centromatic S.A., Spanish bootleg)", MACHINE_SUPPORTS_SAVE ) // similar to above
GAME( 1981, scrampt, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg (Petaco S.A.)", "Scramble (Petaco S.A., Spanish bootleg)", MACHINE_SUPPORTS_SAVE ) // ^^
GAME( 1981, scramrf, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg (Recreativos Franco)", "Scramble (Recreativos Franco, Spanish bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, scrammr, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg (Model Racing)", "Scramble (Model Racing, Spanish bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, scramblebb, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg?", "Scramble (bootleg?)", MACHINE_SUPPORTS_SAVE )
GAME( 198?, bomber, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg (Alca)", "Bomber (bootleg of Scramble)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/gijoe.cpp b/src/mame/drivers/gijoe.cpp
index 0881057487b..7f29fd19907 100644
--- a/src/mame/drivers/gijoe.cpp
+++ b/src/mame/drivers/gijoe.cpp
@@ -194,7 +194,7 @@ WRITE16_MEMBER(gijoe_state::sound_cmd_w)
if (ACCESSING_BITS_0_7)
{
data &= 0xff;
- soundlatch_byte_w(space, 0, data);
+ m_soundlatch->write(space, 0, data);
}
}
@@ -205,7 +205,7 @@ WRITE16_MEMBER(gijoe_state::sound_irq_w)
READ16_MEMBER(gijoe_state::sound_status_r)
{
- return soundlatch2_byte_r(space, 0);
+ return m_soundlatch2->read(space, 0);
}
static ADDRESS_MAP_START( gijoe_map, AS_PROGRAM, 16, gijoe_state )
@@ -242,8 +242,8 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, gijoe_state )
AM_RANGE(0xf000, 0xf7ff) AM_RAM
AM_RANGE(0xf800, 0xfa2f) AM_DEVREADWRITE("k054539", k054539_device, read, write)
- AM_RANGE(0xfc00, 0xfc00) AM_WRITE(soundlatch2_byte_w)
- AM_RANGE(0xfc02, 0xfc02) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xfc00, 0xfc00) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write)
+ AM_RANGE(0xfc02, 0xfc02) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x0000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -344,6 +344,9 @@ static MACHINE_CONFIG_START( gijoe, gijoe_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+
MCFG_DEVICE_ADD("k054539", K054539, XTAL_18_432MHz)
MCFG_K054539_TIMER_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI))
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
diff --git a/src/mame/drivers/gradius3.cpp b/src/mame/drivers/gradius3.cpp
index aaf3b913224..cd9111eb19e 100644
--- a/src/mame/drivers/gradius3.cpp
+++ b/src/mame/drivers/gradius3.cpp
@@ -26,6 +26,7 @@
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/2151intf.h"
#include "includes/konamipt.h"
@@ -158,7 +159,7 @@ static ADDRESS_MAP_START( gradius3_map, AS_PROGRAM, 16, gradius3_state )
AM_RANGE(0x0d0002, 0x0d0003) AM_READ_PORT("DSW2")
AM_RANGE(0x0d8000, 0x0d8001) AM_WRITE(cpuB_irqtrigger_w)
AM_RANGE(0x0e0000, 0x0e0001) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w)
- AM_RANGE(0x0e8000, 0x0e8001) AM_WRITE8(soundlatch_byte_w, 0xff00)
+ AM_RANGE(0x0e8000, 0x0e8001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0xff00)
AM_RANGE(0x0f0000, 0x0f0001) AM_WRITE(sound_irq_w)
AM_RANGE(0x100000, 0x103fff) AM_RAM AM_SHARE("share1")
AM_RANGE(0x14c000, 0x153fff) AM_READWRITE(k052109_halfword_r, k052109_halfword_w)
@@ -182,7 +183,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( gradius3_s_map, AS_PROGRAM, 8, gradius3_state )
AM_RANGE(0x0000, 0xefff) AM_ROM
AM_RANGE(0xf000, 0xf000) AM_WRITE(sound_bank_w) /* 007232 bankswitch */
- AM_RANGE(0xf010, 0xf010) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xf010, 0xf010) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xf020, 0xf02d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
AM_RANGE(0xf030, 0xf031) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0xf800, 0xffff) AM_RAM
@@ -317,6 +318,8 @@ static MACHINE_CONFIG_START( gradius3, gradius3_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", 3579545)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
diff --git a/src/mame/drivers/gyruss.cpp b/src/mame/drivers/gyruss.cpp
index a88dea9ea8b..c9edc5c9640 100644
--- a/src/mame/drivers/gyruss.cpp
+++ b/src/mame/drivers/gyruss.cpp
@@ -60,6 +60,7 @@ and 1 SFX channel controlled by an 8039:
#include "emu.h"
#include "cpu/z80/z80.h"
#include "cpu/m6809/m6809.h"
+#include "machine/gen_latch.h"
#include "machine/konami1.h"
#include "cpu/mcs48/mcs48.h"
#include "sound/ay8910.h"
@@ -182,7 +183,7 @@ static ADDRESS_MAP_START( main_cpu1_map, AS_PROGRAM, 8, gyruss_state )
AM_RANGE(0xc0a0, 0xc0a0) AM_READ_PORT("P1")
AM_RANGE(0xc0c0, 0xc0c0) AM_READ_PORT("P2")
AM_RANGE(0xc0e0, 0xc0e0) AM_READ_PORT("DSW1")
- AM_RANGE(0xc100, 0xc100) AM_READ_PORT("DSW3") AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0xc100, 0xc100) AM_READ_PORT("DSW3") AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0xc180, 0xc180) AM_WRITE(master_nmi_mask_w)
AM_RANGE(0xc185, 0xc185) AM_WRITEONLY AM_SHARE("flipscreen")
ADDRESS_MAP_END
@@ -200,7 +201,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( audio_cpu1_map, AS_PROGRAM, 8, gyruss_state )
AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_RANGE(0x6000, 0x63ff) AM_RAM
- AM_RANGE(0x8000, 0x8000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x8000, 0x8000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
ADDRESS_MAP_END
static ADDRESS_MAP_START( audio_cpu1_io_map, AS_IO, 8, gyruss_state )
@@ -221,7 +222,7 @@ static ADDRESS_MAP_START( audio_cpu1_io_map, AS_IO, 8, gyruss_state )
AM_RANGE(0x11, 0x11) AM_DEVREAD("ay5", ay8910_device, data_r)
AM_RANGE(0x12, 0x12) AM_DEVWRITE("ay5", ay8910_device, data_w)
AM_RANGE(0x14, 0x14) AM_WRITE(gyruss_i8039_irq_w)
- AM_RANGE(0x18, 0x18) AM_WRITE(soundlatch2_byte_w)
+ AM_RANGE(0x18, 0x18) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write)
ADDRESS_MAP_END
static ADDRESS_MAP_START( audio_cpu2_map, AS_PROGRAM, 8, gyruss_state )
@@ -229,7 +230,7 @@ static ADDRESS_MAP_START( audio_cpu2_map, AS_PROGRAM, 8, gyruss_state )
ADDRESS_MAP_END
static ADDRESS_MAP_START( audio_cpu2_io_map, AS_IO, 8, gyruss_state )
- AM_RANGE(0x00, 0xff) AM_READ(soundlatch2_byte_r)
+ AM_RANGE(0x00, 0xff) AM_DEVREAD("soundlatch2", generic_latch_8_device, read)
AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_WRITE(gyruss_dac_w)
AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(gyruss_irq_clear_w)
ADDRESS_MAP_END
@@ -494,6 +495,9 @@ static MACHINE_CONFIG_START( gyruss, gyruss_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+
MCFG_SOUND_ADD("ay1", AY8910, SOUND_CLOCK/8)
MCFG_AY8910_OUTPUT_TYPE(AY8910_DISCRETE_OUTPUT)
MCFG_AY8910_RES_LOADS(RES_K(3.3), RES_K(3.3), RES_K(3.3))
diff --git a/src/mame/drivers/hcastle.cpp b/src/mame/drivers/hcastle.cpp
index 851694a5cb1..6a82dc5e833 100644
--- a/src/mame/drivers/hcastle.cpp
+++ b/src/mame/drivers/hcastle.cpp
@@ -11,6 +11,7 @@
#include "emu.h"
#include "cpu/m6809/konami.h"
#include "cpu/z80/z80.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/3812intf.h"
#include "sound/k051649.h"
@@ -42,7 +43,7 @@ static ADDRESS_MAP_START( hcastle_map, AS_PROGRAM, 8, hcastle_state )
AM_RANGE(0x0200, 0x0207) AM_WRITE(hcastle_pf2_control_w)
AM_RANGE(0x0220, 0x023f) AM_RAM /* rowscroll? */
AM_RANGE(0x0400, 0x0400) AM_WRITE(hcastle_bankswitch_w)
- AM_RANGE(0x0404, 0x0404) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x0404, 0x0404) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x0408, 0x0408) AM_WRITE(hcastle_soundirq_w)
AM_RANGE(0x040c, 0x040c) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x0410, 0x0410) AM_READ_PORT("SYSTEM") AM_WRITE(hcastle_coin_w)
@@ -82,7 +83,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, hcastle_state )
AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write)
AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
AM_RANGE(0xc000, 0xc000) AM_WRITE(sound_bank_w) /* 7232 bankswitch */
- AM_RANGE(0xd000, 0xd000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xd000, 0xd000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
ADDRESS_MAP_END
/*****************************************************************************/
@@ -222,6 +223,8 @@ static MACHINE_CONFIG_START( hcastle, hcastle_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("k007232", K007232, 3579545)
MCFG_K007232_PORT_WRITE_HANDLER(WRITE8(hcastle_state, volume_callback))
MCFG_SOUND_ROUTE(0, "mono", 0.44)
diff --git a/src/mame/drivers/hvyunit.cpp b/src/mame/drivers/hvyunit.cpp
index a8446a8537c..a26dda49928 100644
--- a/src/mame/drivers/hvyunit.cpp
+++ b/src/mame/drivers/hvyunit.cpp
@@ -62,6 +62,7 @@ To Do:
#include "emu.h"
#include "cpu/z80/z80.h"
#include "cpu/mcs51/mcs51.h"
+#include "machine/gen_latch.h"
#include "sound/2203intf.h"
#include "video/kan_pand.h"
@@ -85,6 +86,7 @@ public:
m_pandora(*this, "pandora"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
+ m_soundlatch(*this, "soundlatch"),
m_videoram(*this, "videoram"),
m_colorram(*this, "colorram")
{ }
@@ -97,6 +99,7 @@ public:
required_device<kaneko_pandora_device> m_pandora;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ required_device<generic_latch_8_device> m_soundlatch;
/* Video */
required_shared_ptr<UINT8> m_videoram;
@@ -269,7 +272,7 @@ READ8_MEMBER(hvyunit_state::mermaid_status_r)
WRITE8_MEMBER(hvyunit_state::trigger_nmi_on_sound_cpu2)
{
- soundlatch_byte_w(space, 0, data);
+ m_soundlatch->write(space, 0, data);
m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
@@ -463,7 +466,7 @@ static ADDRESS_MAP_START( sound_io, AS_IO, 8, hvyunit_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_WRITE(sound_bankswitch_w)
AM_RANGE(0x02, 0x03) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write)
- AM_RANGE(0x04, 0x04) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x04, 0x04) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
ADDRESS_MAP_END
@@ -680,6 +683,8 @@ static MACHINE_CONFIG_START( hvyunit, hvyunit_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("ymsnd", YM2203, 3000000)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/hyperspt.cpp b/src/mame/drivers/hyperspt.cpp
index 2a835eda64c..fcdb0081961 100644
--- a/src/mame/drivers/hyperspt.cpp
+++ b/src/mame/drivers/hyperspt.cpp
@@ -4,7 +4,7 @@
Based on drivers from Juno First emulator by Chris Hardy (chrish@kcbbs.gen.nz)
-- DIPs verified and defaults (when avaialble) are set from manuals
+- DIPs verified and defaults (when available) are set from manuals
***************************************************************************/
@@ -15,6 +15,7 @@ Based on drivers from Juno First emulator by Chris Hardy (chrish@kcbbs.gen.nz)
#include "sound/dac.h"
#include "machine/konami1.h"
#include "machine/nvram.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "includes/konamipt.h"
#include "audio/trackfld.h"
@@ -40,7 +41,7 @@ static ADDRESS_MAP_START( hyperspt_map, AS_PROGRAM, 8, hyperspt_state )
AM_RANGE(0x1481, 0x1481) AM_DEVWRITE("trackfld_audio", trackfld_audio_device, konami_sh_irqtrigger_w) /* cause interrupt on audio CPU */
AM_RANGE(0x1483, 0x1484) AM_WRITE(hyperspt_coin_counter_w)
AM_RANGE(0x1487, 0x1487) AM_WRITE(irq_mask_w) /* Interrupt enable */
- AM_RANGE(0x1500, 0x1500) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x1500, 0x1500) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x1600, 0x1600) AM_READ_PORT("DSW2")
AM_RANGE(0x1680, 0x1680) AM_READ_PORT("SYSTEM")
AM_RANGE(0x1681, 0x1681) AM_READ_PORT("P1_P2")
@@ -61,7 +62,7 @@ static ADDRESS_MAP_START( roadf_map, AS_PROGRAM, 8, hyperspt_state )
AM_RANGE(0x1481, 0x1481) AM_DEVWRITE("trackfld_audio", trackfld_audio_device, konami_sh_irqtrigger_w) /* cause interrupt on audio CPU */
AM_RANGE(0x1483, 0x1484) AM_WRITE(hyperspt_coin_counter_w)
AM_RANGE(0x1487, 0x1487) AM_WRITE(irq_mask_w) /* Interrupt enable */
- AM_RANGE(0x1500, 0x1500) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x1500, 0x1500) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x1600, 0x1600) AM_READ_PORT("DSW2")
AM_RANGE(0x1680, 0x1680) AM_READ_PORT("SYSTEM")
AM_RANGE(0x1681, 0x1681) AM_READ_PORT("P1")
@@ -77,7 +78,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, hyperspt_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x4fff) AM_RAM
- AM_RANGE(0x6000, 0x6000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x6000, 0x6000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x8000, 0x8000) AM_DEVREAD("trackfld_audio", trackfld_audio_device, hyperspt_sh_timer_r)
AM_RANGE(0xa000, 0xa000) AM_DEVWRITE("vlm", vlm5030_device, data_w) /* speech data */
AM_RANGE(0xc000, 0xdfff) AM_DEVWRITE("trackfld_audio", trackfld_audio_device, hyperspt_sound_w) /* speech and output control */
@@ -89,7 +90,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( roadf_sound_map, AS_PROGRAM, 8, hyperspt_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x4fff) AM_RAM
- AM_RANGE(0x6000, 0x6000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x6000, 0x6000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x8000, 0x8000) AM_DEVREAD("trackfld_audio", trackfld_audio_device, hyperspt_sh_timer_r)
AM_RANGE(0xa000, 0xa000) AM_NOP // No VLM
AM_RANGE(0xc000, 0xdfff) AM_NOP // No VLM
@@ -101,7 +102,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( soundb_map, AS_PROGRAM, 8, hyperspt_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x4fff) AM_RAM
- AM_RANGE(0x6000, 0x6000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x6000, 0x6000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x8000, 0x8000) AM_DEVREAD("trackfld_audio", trackfld_audio_device, hyperspt_sh_timer_r)
AM_RANGE(0xa000, 0xa000) AM_NOP
AM_RANGE(0xc000, 0xdfff) AM_DEVWRITE("hyprolyb_adpcm", hyprolyb_adpcm_device, write) /* speech and output control */
@@ -321,6 +322,8 @@ static MACHINE_CONFIG_START( hyperspt, hyperspt_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("trackfld_audio", TRACKFLD_AUDIO, 0)
MCFG_DAC_ADD("dac")
diff --git a/src/mame/drivers/ironhors.cpp b/src/mame/drivers/ironhors.cpp
index 0d5ea8c8c38..3289e1b7e83 100644
--- a/src/mame/drivers/ironhors.cpp
+++ b/src/mame/drivers/ironhors.cpp
@@ -65,7 +65,7 @@ static ADDRESS_MAP_START( master_map, AS_PROGRAM, 8, ironhors_state )
AM_RANGE(0x0020, 0x003f) AM_RAM AM_SHARE("scroll")
AM_RANGE(0x0040, 0x005f) AM_RAM
AM_RANGE(0x0060, 0x00df) AM_RAM
- AM_RANGE(0x0800, 0x0800) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x0800, 0x0800) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x0900, 0x0900) AM_READ_PORT("DSW3") AM_WRITE(sh_irqtrigger_w)
AM_RANGE(0x0a00, 0x0a00) AM_READ_PORT("DSW2") AM_WRITE(palettebank_w)
AM_RANGE(0x0b00, 0x0b00) AM_READ_PORT("DSW1") AM_WRITE(flipscreen_w)
@@ -88,7 +88,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( slave_map, AS_PROGRAM, 8, ironhors_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x43ff) AM_RAM
- AM_RANGE(0x8000, 0x8000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x8000, 0x8000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
ADDRESS_MAP_END
static ADDRESS_MAP_START( slave_io_map, AS_IO, 8, ironhors_state )
@@ -104,7 +104,7 @@ static ADDRESS_MAP_START( farwest_master_map, AS_PROGRAM, 8, ironhors_state )
AM_RANGE(0x31db, 0x31fa) AM_RAM AM_SHARE("scroll")
AM_RANGE(0x0040, 0x005f) AM_RAM
AM_RANGE(0x0060, 0x00ff) AM_RAM
- AM_RANGE(0x0800, 0x0800) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x0800, 0x0800) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x0900, 0x0900) /*AM_READ_PORT("DSW3") */AM_WRITE(sh_irqtrigger_w)
AM_RANGE(0x0a00, 0x0a00) AM_READ_PORT("DSW2") //AM_WRITE(palettebank_w)
AM_RANGE(0x0b00, 0x0b00) AM_READ_PORT("DSW1") AM_WRITE(flipscreen_w)
@@ -385,6 +385,8 @@ static MACHINE_CONFIG_START( ironhors, ironhors_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("ym2203", YM2203, 18432000/6)
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(ironhors_state, filter_w))
@@ -417,7 +419,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(ironhors_state::farwest_irq)
READ8_MEMBER(ironhors_state::farwest_soundlatch_r)
{
- return soundlatch_byte_r(m_soundcpu->space(AS_PROGRAM), 0);
+ return m_soundlatch->read(m_soundcpu->space(AS_PROGRAM), 0);
}
static MACHINE_CONFIG_DERIVED( farwest, ironhors )
diff --git a/src/mame/drivers/junofrst.cpp b/src/mame/drivers/junofrst.cpp
index 498599dd144..af23aeba49b 100644
--- a/src/mame/drivers/junofrst.cpp
+++ b/src/mame/drivers/junofrst.cpp
@@ -83,6 +83,7 @@ Blitter source graphics
#include "cpu/m6809/m6809.h"
#include "cpu/mcs48/mcs48.h"
#include "cpu/z80/z80.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
#include "sound/dac.h"
@@ -304,7 +305,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, junofrst_state )
AM_RANGE(0x8033, 0x8033) AM_WRITEONLY AM_SHARE("scroll") /* not used in Juno */
AM_RANGE(0x8034, 0x8035) AM_WRITE(flip_screen_w)
AM_RANGE(0x8040, 0x8040) AM_WRITE(sh_irqtrigger_w)
- AM_RANGE(0x8050, 0x8050) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x8050, 0x8050) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x8060, 0x8060) AM_WRITE(bankselect_w)
AM_RANGE(0x8070, 0x8073) AM_WRITE(blitter_w)
AM_RANGE(0x8100, 0x8fff) AM_RAM
@@ -316,11 +317,11 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( audio_map, AS_PROGRAM, 8, junofrst_state )
AM_RANGE(0x0000, 0x0fff) AM_ROM
AM_RANGE(0x2000, 0x23ff) AM_RAM
- AM_RANGE(0x3000, 0x3000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x3000, 0x3000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("aysnd", ay8910_device, address_w)
AM_RANGE(0x4001, 0x4001) AM_DEVREAD("aysnd", ay8910_device, data_r)
AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("aysnd", ay8910_device, data_w)
- AM_RANGE(0x5000, 0x5000) AM_WRITE(soundlatch2_byte_w)
+ AM_RANGE(0x5000, 0x5000) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write)
AM_RANGE(0x6000, 0x6000) AM_WRITE(i8039_irq_w)
ADDRESS_MAP_END
@@ -331,7 +332,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( mcu_io_map, AS_IO, 8, junofrst_state )
- AM_RANGE(0x00, 0xff) AM_READ(soundlatch2_byte_r)
+ AM_RANGE(0x00, 0xff) AM_DEVREAD("soundlatch2", generic_latch_8_device, read)
AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_DEVWRITE("dac", dac_device, write_unsigned8)
AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(i8039_irqen_and_status_w)
ADDRESS_MAP_END
@@ -440,6 +441,9 @@ static MACHINE_CONFIG_START( junofrst, junofrst_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+
MCFG_SOUND_ADD("aysnd", AY8910, 14318000/8)
MCFG_AY8910_PORT_A_READ_CB(READ8(junofrst_state, portA_r))
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(junofrst_state, portB_w))
diff --git a/src/mame/drivers/kaneko16.cpp b/src/mame/drivers/kaneko16.cpp
index 48fc27f4184..568e625ca37 100644
--- a/src/mame/drivers/kaneko16.cpp
+++ b/src/mame/drivers/kaneko16.cpp
@@ -102,7 +102,6 @@ Non-Bugs (happen on real PCB)
#include "includes/kaneko16.h"
#include "machine/watchdog.h"
#include "sound/2151intf.h"
-#include "sound/okim6295.h"
#include "machine/kaneko_hit.h"
@@ -162,7 +161,7 @@ WRITE16_MEMBER(kaneko16_state::kaneko16_soundlatch_w)
{
if (ACCESSING_BITS_8_15)
{
- soundlatch_byte_w(space, 0, (data & 0xff00) >> 8 );
+ m_soundlatch->write(space, 0, (data & 0xff00) >> 8 );
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
}
@@ -769,7 +768,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( blazeon_soundport, AS_IO, 8, kaneko16_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x02, 0x03) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
- AM_RANGE(0x06, 0x06) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x06, 0x06) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
ADDRESS_MAP_END
/***************************************************************************
@@ -788,7 +787,7 @@ static ADDRESS_MAP_START( wingforc_soundport, AS_IO, 8, kaneko16_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
// AM_RANGE(0x00, 0x00) // 02 written at boot
AM_RANGE(0x02, 0x03) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
- AM_RANGE(0x06, 0x06) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x06, 0x06) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x0a, 0x0a) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0x0c, 0x0c) AM_WRITE(wingforc_oki_bank_w)
ADDRESS_MAP_END
@@ -2036,6 +2035,8 @@ static MACHINE_CONFIG_START( blazeon, kaneko16_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", 4000000)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
@@ -2088,6 +2089,8 @@ static MACHINE_CONFIG_START( wingforc, kaneko16_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", XTAL_16MHz/4)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.4)
diff --git a/src/mame/drivers/lethal.cpp b/src/mame/drivers/lethal.cpp
index bd834f9fd94..86594d4309a 100644
--- a/src/mame/drivers/lethal.cpp
+++ b/src/mame/drivers/lethal.cpp
@@ -250,6 +250,7 @@ maybe some sprite placement issues
#include "cpu/m6809/m6809.h"
#include "cpu/m6809/hd6309.h"
#include "cpu/z80/z80.h"
+#include "machine/gen_latch.h"
#include "machine/eepromser.h"
#include "sound/k054539.h"
#include "includes/lethal.h"
@@ -287,11 +288,6 @@ INTERRUPT_GEN_MEMBER(lethal_state::lethalen_interrupt)
device.execute().set_input_line(HD6309_IRQ_LINE, HOLD_LINE);
}
-WRITE8_MEMBER(lethal_state::sound_cmd_w)
-{
- soundlatch_byte_w(space, 0, data);
-}
-
WRITE8_MEMBER(lethal_state::sound_irq_w)
{
m_soundcpu->set_input_line(0, HOLD_LINE);
@@ -364,7 +360,7 @@ static ADDRESS_MAP_START( bank4000_map, AS_PROGRAM, 8, lethal_state )
// VRD = 0 or 1, CBNK = 0
AM_RANGE(0x0840, 0x084f) AM_MIRROR(0x8000) AM_DEVREADWRITE("k053244", k05324x_device, k053244_r, k053244_w)
AM_RANGE(0x0880, 0x089f) AM_MIRROR(0x8000) AM_DEVREADWRITE("k054000", k054000_device, read, write)
- AM_RANGE(0x08c6, 0x08c6) AM_MIRROR(0x8000) AM_WRITE(sound_cmd_w)
+ AM_RANGE(0x08c6, 0x08c6) AM_MIRROR(0x8000) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) //cmd_w
AM_RANGE(0x08c7, 0x08c7) AM_MIRROR(0x8000) AM_WRITE(sound_irq_w)
AM_RANGE(0x08ca, 0x08ca) AM_MIRROR(0x8000) AM_READ(sound_status_r)
AM_RANGE(0x1000, 0x17ff) AM_MIRROR(0x8000) AM_DEVREADWRITE("k053244", k05324x_device, k053245_r, k053245_w)
@@ -386,8 +382,8 @@ static ADDRESS_MAP_START( le_sound, AS_PROGRAM, 8, lethal_state )
AM_RANGE(0x0000, 0xefff) AM_ROM
AM_RANGE(0xf000, 0xf7ff) AM_RAM
AM_RANGE(0xf800, 0xfa2f) AM_DEVREADWRITE("k054539", k054539_device, read, write)
- AM_RANGE(0xfc00, 0xfc00) AM_WRITE(soundlatch2_byte_w)
- AM_RANGE(0xfc02, 0xfc02) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xfc00, 0xfc00) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write)
+ AM_RANGE(0xfc02, 0xfc02) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xfc03, 0xfc03) AM_READNOP
ADDRESS_MAP_END
@@ -538,6 +534,9 @@ static MACHINE_CONFIG_START( lethalen, lethal_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+
MCFG_DEVICE_ADD("k054539", K054539, XTAL_18_432MHz)
MCFG_K054539_TIMER_HANDLER(INPUTLINE("soundcpu", INPUT_LINE_NMI))
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
diff --git a/src/mame/drivers/mainevt.cpp b/src/mame/drivers/mainevt.cpp
index c0c9df9ff43..df053833820 100644
--- a/src/mame/drivers/mainevt.cpp
+++ b/src/mame/drivers/mainevt.cpp
@@ -26,6 +26,7 @@ Notes:
#include "cpu/z80/z80.h"
#include "cpu/m6809/hd6309.h"
#include "cpu/m6809/m6809.h"
+#include "machine/gen_latch.h"
#include "sound/2151intf.h"
#include "includes/konamipt.h"
#include "includes/mainevt.h"
@@ -152,7 +153,7 @@ WRITE8_MEMBER(mainevt_state::k052109_051960_w)
static ADDRESS_MAP_START( mainevt_map, AS_PROGRAM, 8, mainevt_state )
AM_RANGE(0x1f80, 0x1f80) AM_WRITE(mainevt_bankswitch_w)
- AM_RANGE(0x1f84, 0x1f84) AM_WRITE(soundlatch_byte_w) /* probably */
+ AM_RANGE(0x1f84, 0x1f84) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* probably */
AM_RANGE(0x1f88, 0x1f88) AM_WRITE(mainevt_sh_irqtrigger_w) /* probably */
AM_RANGE(0x1f8c, 0x1f8d) AM_WRITENOP /* ??? */
AM_RANGE(0x1f90, 0x1f90) AM_WRITE(mainevt_coin_w) /* coin counters + lamps */
@@ -177,7 +178,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( devstors_map, AS_PROGRAM, 8, mainevt_state )
AM_RANGE(0x1f80, 0x1f80) AM_WRITE(mainevt_bankswitch_w)
- AM_RANGE(0x1f84, 0x1f84) AM_WRITE(soundlatch_byte_w) /* probably */
+ AM_RANGE(0x1f84, 0x1f84) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* probably */
AM_RANGE(0x1f88, 0x1f88) AM_WRITE(mainevt_sh_irqtrigger_w) /* probably */
AM_RANGE(0x1f90, 0x1f90) AM_WRITE(mainevt_coin_w) /* coin counters + lamps */
AM_RANGE(0x1fb2, 0x1fb2) AM_WRITE(dv_nmienable_w)
@@ -203,7 +204,7 @@ static ADDRESS_MAP_START( mainevt_sound_map, AS_PROGRAM, 8, mainevt_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x83ff) AM_RAM
AM_RANGE(0x9000, 0x9000) AM_DEVWRITE("upd", upd7759_device, port_w)
- AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
AM_RANGE(0xd000, 0xd000) AM_READ(mainevt_sh_busy_r)
AM_RANGE(0xe000, 0xe000) AM_WRITE(mainevt_sh_irqcontrol_w)
@@ -213,7 +214,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( devstors_sound_map, AS_PROGRAM, 8, mainevt_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x83ff) AM_RAM
- AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device,read,write)
AM_RANGE(0xe000, 0xe000) AM_WRITE(devstor_sh_irqcontrol_w)
@@ -438,6 +439,8 @@ static MACHINE_CONFIG_START( mainevt, mainevt_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("k007232", K007232, 3579545)
MCFG_K007232_PORT_WRITE_HANDLER(WRITE8(mainevt_state, volume_callback))
MCFG_SOUND_ROUTE(0, "mono", 0.20)
@@ -486,6 +489,8 @@ static MACHINE_CONFIG_START( devstors, mainevt_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", 3579545)
MCFG_SOUND_ROUTE(0, "mono", 0.30)
MCFG_SOUND_ROUTE(1, "mono", 0.30)
diff --git a/src/mame/drivers/megasys1.cpp b/src/mame/drivers/megasys1.cpp
index 707c3628dcb..c2ab5bbd87a 100644
--- a/src/mame/drivers/megasys1.cpp
+++ b/src/mame/drivers/megasys1.cpp
@@ -188,7 +188,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(megasys1_state::megasys1A_iganinju_scanline)
int scanline = param;
// TODO: there's more than one hint that MCU controls IRQ signals via work RAM buffers.
- // This is a bare miminum guessing for this specific game, it definitely don't like neither lv 1 nor 2.
+ // This is a bare minimum guessing for this specific game, it definitely don't like neither lv 1 nor 2.
// Of course MCU is probably doing a lot more to mask and probably set a specific line too.
if(m_ram[0] == 0)
return;
@@ -197,14 +197,13 @@ TIMER_DEVICE_CALLBACK_MEMBER(megasys1_state::megasys1A_iganinju_scanline)
m_maincpu->set_input_line(2, HOLD_LINE);
}
-static ADDRESS_MAP_START( megasys1A_map, AS_PROGRAM, 16, megasys1_state )
+static ADDRESS_MAP_START( megasys1Z_map, AS_PROGRAM, 16, megasys1_state )
ADDRESS_MAP_GLOBAL_MASK(0xfffff)
AM_RANGE(0x000000, 0x05ffff) AM_ROM
AM_RANGE(0x080000, 0x080001) AM_READ_PORT("SYSTEM")
AM_RANGE(0x080002, 0x080003) AM_READ_PORT("P1")
AM_RANGE(0x080004, 0x080005) AM_READ_PORT("P2")
AM_RANGE(0x080006, 0x080007) AM_READ_PORT("DSW")
- AM_RANGE(0x080008, 0x080009) AM_READ(soundlatch2_word_r) /* from sound cpu */
AM_RANGE(0x084000, 0x0843ff) AM_RAM_WRITE(megasys1_vregs_A_w) AM_SHARE("vregs")
AM_RANGE(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x08e000, 0x08ffff) AM_RAM AM_SHARE("objectram")
@@ -214,6 +213,11 @@ static ADDRESS_MAP_START( megasys1A_map, AS_PROGRAM, 16, megasys1_state )
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(ms1_ram_w) AM_SHARE("ram")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( megasys1A_map, AS_PROGRAM, 16, megasys1_state )
+ ADDRESS_MAP_GLOBAL_MASK(0xfffff)
+ AM_IMPORT_FROM(megasys1Z_map)
+ AM_RANGE(0x080008, 0x080009) AM_DEVREAD("soundlatch2", generic_latch_16_device, read) /* from sound cpu */
+ADDRESS_MAP_END
/***************************************************************************
[ Main CPU - System B ]
@@ -448,8 +452,8 @@ READ8_MEMBER(megasys1_state::oki_status_2_r)
static ADDRESS_MAP_START( megasys1A_sound_map, AS_PROGRAM, 16, megasys1_state )
AM_RANGE(0x000000, 0x01ffff) AM_ROM
- AM_RANGE(0x040000, 0x040001) AM_READ(soundlatch_word_r)
- AM_RANGE(0x060000, 0x060001) AM_WRITE(soundlatch2_word_w) // to main cpu
+ AM_RANGE(0x040000, 0x040001) AM_DEVREAD("soundlatch", generic_latch_16_device, read)
+ AM_RANGE(0x060000, 0x060001) AM_DEVWRITE("soundlatch2", generic_latch_16_device, write) // to main cpu
AM_RANGE(0x080000, 0x080003) AM_DEVREADWRITE8("ymsnd", ym2151_device, read, write, 0x00ff)
AM_RANGE(0x0a0000, 0x0a0001) AM_READ8(oki_status_1_r, 0x00ff)
AM_RANGE(0x0a0000, 0x0a0003) AM_DEVWRITE8("oki1", okim6295_device, write, 0x00ff)
@@ -466,8 +470,8 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( megasys1B_sound_map, AS_PROGRAM, 16, megasys1_state )
AM_RANGE(0x000000, 0x01ffff) AM_ROM
- AM_RANGE(0x040000, 0x040001) AM_READWRITE(soundlatch_word_r,soundlatch2_word_w) /* from/to main cpu */
- AM_RANGE(0x060000, 0x060001) AM_READWRITE(soundlatch_word_r,soundlatch2_word_w) /* from/to main cpu */
+ AM_RANGE(0x040000, 0x040001) AM_DEVREAD("soundlatch", generic_latch_16_device, read) AM_DEVWRITE("soundlatch2", generic_latch_16_device, write) /* from/to main cpu */
+ AM_RANGE(0x060000, 0x060001) AM_DEVREAD("soundlatch", generic_latch_16_device, read) AM_DEVWRITE("soundlatch2", generic_latch_16_device, write) /* from/to main cpu */
AM_RANGE(0x080000, 0x080003) AM_DEVREADWRITE8("ymsnd", ym2151_device, read, write, 0x00ff)
AM_RANGE(0x0a0000, 0x0a0001) AM_READ8(oki_status_1_r, 0x00ff)
AM_RANGE(0x0a0000, 0x0a0003) AM_DEVWRITE8("oki1", okim6295_device, write, 0x00ff)
@@ -486,7 +490,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( z80_sound_map, AS_PROGRAM, 8, megasys1_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0xc000, 0xc7ff) AM_RAM
- AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch_z", generic_latch_8_device, read)
AM_RANGE(0xf000, 0xf000) AM_WRITENOP /* ?? */
ADDRESS_MAP_END
@@ -1526,6 +1530,9 @@ static MACHINE_CONFIG_START( system_A, megasys1_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_16_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_16_ADD("soundlatch2")
+
MCFG_YM2151_ADD("ymsnd", SOUND_CPU_CLOCK/2) /* 3.5MHz (7MHz / 2) verified */
MCFG_YM2151_IRQ_HANDLER(WRITELINE(megasys1_state,sound_irq))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.80)
@@ -1686,16 +1693,11 @@ MACHINE_CONFIG_END
***************************************************************************/
-WRITE_LINE_MEMBER(megasys1_state::irqhandler)
-{
- m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE);
-}
-
static MACHINE_CONFIG_START( system_Z, megasys1_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, SYS_A_CPU_CLOCK) /* 6MHz (12MHz / 2) */
- MCFG_CPU_PROGRAM_MAP(megasys1A_map)
+ MCFG_CPU_PROGRAM_MAP(megasys1Z_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", megasys1_state, megasys1A_scanline, "screen", 0, 1)
MCFG_CPU_ADD("audiocpu", Z80, 3000000) /* OSC 12MHz divided by 4 ??? */
@@ -1720,8 +1722,10 @@ static MACHINE_CONFIG_START( system_Z, megasys1_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch_z")
+
MCFG_SOUND_ADD("ymsnd", YM2203, 1500000)
- MCFG_YM2203_IRQ_HANDLER(WRITELINE(megasys1_state, irqhandler))
+ MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END
@@ -4156,7 +4160,6 @@ READ16_MEMBER(megasys1_state::edfbl_input_r)
DRIVER_INIT_MEMBER(megasys1_state,edfbl)
{
m_maincpu->space(AS_PROGRAM).install_read_handler(0xe0000, 0xe000f, read16_delegate(FUNC(megasys1_state::edfbl_input_r),this));
- //m_maincpu->space(AS_PROGRAM).install_legacy_write_handler(*m_oki1, 0xe000e, 0xe000f, FUNC(soundlatch_byte_w));
}
DRIVER_INIT_MEMBER(megasys1_state,hayaosi1)
diff --git a/src/mame/drivers/megazone.cpp b/src/mame/drivers/megazone.cpp
index f21dcc38daf..a41aa788cf0 100644
--- a/src/mame/drivers/megazone.cpp
+++ b/src/mame/drivers/megazone.cpp
@@ -13,6 +13,7 @@ To enter service mode, keep 1&2 pressed on reset
#include "cpu/m6809/m6809.h"
#include "cpu/mcs48/mcs48.h"
#include "cpu/z80/z80.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
#include "sound/dac.h"
@@ -100,7 +101,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( megazone_sound_map, AS_PROGRAM, 8, megazone_state )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x2000, 0x2000) AM_WRITE(megazone_i8039_irq_w) /* START line. Interrupts 8039 */
- AM_RANGE(0x4000, 0x4000) AM_WRITE(soundlatch_byte_w) /* CODE line. Command Interrupts 8039 */
+ AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* CODE line. Command Interrupts 8039 */
AM_RANGE(0x6000, 0x6000) AM_READ_PORT("IN0") /* IO Coin */
AM_RANGE(0x6001, 0x6001) AM_READ_PORT("IN1") /* P1 IO */
AM_RANGE(0x6002, 0x6002) AM_READ_PORT("IN2") /* P2 IO */
@@ -124,7 +125,7 @@ static ADDRESS_MAP_START( megazone_i8039_map, AS_PROGRAM, 8, megazone_state )
ADDRESS_MAP_END
static ADDRESS_MAP_START( megazone_i8039_io_map, AS_IO, 8, megazone_state )
- AM_RANGE(0x00, 0xff) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x00, 0xff) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_DEVWRITE("dac", dac_device, write_unsigned8)
AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(i8039_irqen_and_status_w)
ADDRESS_MAP_END
@@ -269,6 +270,8 @@ static MACHINE_CONFIG_START( megazone, megazone_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("aysnd", AY8910, 14318000/8)
MCFG_AY8910_PORT_A_READ_CB(READ8(megazone_state, megazone_port_a_r))
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(megazone_state, megazone_port_b_w))
@@ -507,12 +510,8 @@ ROM_START( megazonec )
ROM_END
-DRIVER_INIT_MEMBER(megazone_state,megazone)
-{
-}
-
-GAME( 1983, megazone, 0, megazone, megazone, megazone_state, megazone, ROT90, "Konami", "Mega Zone (Konami set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, megazonea, megazone, megazone, megazona, megazone_state, megazone, ROT90, "Konami", "Mega Zone (Konami set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, megazoneb, megazone, megazone, megazone, megazone_state, megazone, ROT90, "Konami (Kosuka license)", "Mega Zone (Kosuka set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, megazonec, megazone, megazone, megazone, megazone_state, megazone, ROT90, "Konami (Kosuka license)", "Mega Zone (Kosuka set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, megazonei, megazone, megazone, megazone, megazone_state, megazone, ROT90, "Konami (Interlogic license)", "Mega Zone (Interlogic)", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, megazone, 0, megazone, megazone, driver_device, 0, ROT90, "Konami", "Mega Zone (Konami set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, megazonea, megazone, megazone, megazona, driver_device, 0, ROT90, "Konami", "Mega Zone (Konami set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, megazoneb, megazone, megazone, megazone, driver_device, 0, ROT90, "Konami (Kosuka license)", "Mega Zone (Kosuka set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, megazonec, megazone, megazone, megazone, driver_device, 0, ROT90, "Konami (Kosuka license)", "Mega Zone (Kosuka set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, megazonei, megazone, megazone, megazone, driver_device, 0, ROT90, "Konami (Interlogic license)", "Mega Zone (Interlogic)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/mikie.cpp b/src/mame/drivers/mikie.cpp
index 4083f7fb398..2790065e854 100644
--- a/src/mame/drivers/mikie.cpp
+++ b/src/mame/drivers/mikie.cpp
@@ -41,6 +41,7 @@ Stephh's notes (based on the games M6809 code and some tests) :
#include "emu.h"
#include "cpu/z80/z80.h"
#include "cpu/m6809/m6809.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/sn76496.h"
#include "includes/konamipt.h"
@@ -103,7 +104,7 @@ static ADDRESS_MAP_START( mikie_map, AS_PROGRAM, 8, mikie_state )
AM_RANGE(0x2100, 0x2100) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x2200, 0x2200) AM_WRITE(mikie_palettebank_w)
AM_RANGE(0x2300, 0x2300) AM_WRITENOP // ???
- AM_RANGE(0x2400, 0x2400) AM_READ_PORT("SYSTEM") AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x2400, 0x2400) AM_READ_PORT("SYSTEM") AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x2401, 0x2401) AM_READ_PORT("P1")
AM_RANGE(0x2402, 0x2402) AM_READ_PORT("P2")
AM_RANGE(0x2403, 0x2403) AM_READ_PORT("DSW3")
@@ -123,7 +124,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, mikie_state )
AM_RANGE(0x8000, 0x8000) AM_WRITENOP // sound command latch
AM_RANGE(0x8001, 0x8001) AM_WRITENOP // ???
AM_RANGE(0x8002, 0x8002) AM_DEVWRITE("sn1", sn76489a_device, write) // trigger read of latch
- AM_RANGE(0x8003, 0x8003) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x8003, 0x8003) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x8004, 0x8004) AM_DEVWRITE("sn2", sn76489a_device, write) // trigger read of latch
AM_RANGE(0x8005, 0x8005) AM_READ(mikie_sh_timer_r)
AM_RANGE(0x8079, 0x8079) AM_WRITENOP // ???
@@ -278,6 +279,8 @@ static MACHINE_CONFIG_START( mikie, mikie_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("sn1", SN76489A, XTAL/8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
diff --git a/src/mame/drivers/moo.cpp b/src/mame/drivers/moo.cpp
index da3d3960e43..f1e05fff9e0 100644
--- a/src/mame/drivers/moo.cpp
+++ b/src/mame/drivers/moo.cpp
@@ -224,14 +224,14 @@ WRITE16_MEMBER(moo_state::sound_cmd1_w)
if ((data & 0x00ff0000) == 0)
{
data &= 0xff;
- soundlatch_byte_w(space, 0, data);
+ m_soundlatch->write(space, 0, data);
}
}
WRITE16_MEMBER(moo_state::sound_cmd2_w)
{
if ((data & 0x00ff0000) == 0)
- soundlatch2_byte_w(space, 0, data & 0xff);
+ m_soundlatch2->write(space, 0, data & 0xff);
}
WRITE16_MEMBER(moo_state::sound_irq_w)
@@ -241,7 +241,7 @@ WRITE16_MEMBER(moo_state::sound_irq_w)
READ16_MEMBER(moo_state::sound_status_r)
{
- return soundlatch3_byte_r(space, 0);
+ return m_soundlatch3->read(space, 0);
}
WRITE8_MEMBER(moo_state::sound_bankswitch_w)
@@ -425,9 +425,9 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, moo_state )
AM_RANGE(0xc000, 0xdfff) AM_RAM
AM_RANGE(0xe000, 0xe22f) AM_DEVREADWRITE("k054539", k054539_device, read, write)
AM_RANGE(0xec00, 0xec01) AM_DEVREADWRITE("ymsnd", ym2151_device,read,write)
- AM_RANGE(0xf000, 0xf000) AM_WRITE(soundlatch3_byte_w)
- AM_RANGE(0xf002, 0xf002) AM_READ(soundlatch_byte_r)
- AM_RANGE(0xf003, 0xf003) AM_READ(soundlatch2_byte_r)
+ AM_RANGE(0xf000, 0xf000) AM_DEVWRITE("soundlatch3", generic_latch_8_device, write)
+ AM_RANGE(0xf002, 0xf002) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
+ AM_RANGE(0xf003, 0xf003) AM_DEVREAD("soundlatch2", generic_latch_8_device, read)
AM_RANGE(0xf800, 0xf800) AM_WRITE(sound_bankswitch_w)
ADDRESS_MAP_END
@@ -567,6 +567,10 @@ static MACHINE_CONFIG_START( moo, moo_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch3")
+
MCFG_YM2151_ADD("ymsnd", XTAL_32MHz/8) // 4MHz verified
MCFG_SOUND_ROUTE(0, "lspeaker", 0.50)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.50)
diff --git a/src/mame/drivers/mystwarr.cpp b/src/mame/drivers/mystwarr.cpp
index 04c66269da1..869035e065a 100644
--- a/src/mame/drivers/mystwarr.cpp
+++ b/src/mame/drivers/mystwarr.cpp
@@ -206,23 +206,23 @@ INTERRUPT_GEN_MEMBER(mystwarr_state::ddd_interrupt)
WRITE16_MEMBER(mystwarr_state::sound_cmd1_w)
{
- soundlatch_byte_w(space, 0, data&0xff);
+ m_soundlatch->write(space, 0, data&0xff);
}
WRITE16_MEMBER(mystwarr_state::sound_cmd1_msb_w)
{
- soundlatch_byte_w(space, 0, data>>8);
+ m_soundlatch->write(space, 0, data>>8);
}
WRITE16_MEMBER(mystwarr_state::sound_cmd2_w)
{
- soundlatch2_byte_w(space, 0, data&0xff);
+ m_soundlatch2->write(space, 0, data&0xff);
return;
}
WRITE16_MEMBER(mystwarr_state::sound_cmd2_msb_w)
{
- soundlatch2_byte_w(space, 0, data>>8);
+ m_soundlatch2->write(space, 0, data>>8);
return;
}
@@ -233,7 +233,7 @@ WRITE16_MEMBER(mystwarr_state::sound_irq_w)
READ16_MEMBER(mystwarr_state::sound_status_r)
{
- int latch = soundlatch3_byte_r(space,0);
+ int latch = m_soundlatch3->read(space,0);
if ((latch & 0xf) == 0xe) latch |= 1;
@@ -242,7 +242,7 @@ READ16_MEMBER(mystwarr_state::sound_status_r)
READ16_MEMBER(mystwarr_state::sound_status_msb_r)
{
- int latch = soundlatch3_byte_r(space,0);
+ int latch = m_soundlatch3->read(space,0);
if ((latch & 0xf) == 0xe) latch |= 1;
@@ -575,9 +575,9 @@ static ADDRESS_MAP_START( mystwarr_sound_map, AS_PROGRAM, 8, mystwarr_state )
AM_RANGE(0xe230, 0xe3ff) AM_RAM
AM_RANGE(0xe400, 0xe62f) AM_DEVREADWRITE("k054539_2", k054539_device, read, write)
AM_RANGE(0xe630, 0xe7ff) AM_RAM
- AM_RANGE(0xf000, 0xf000) AM_WRITE(soundlatch3_byte_w)
- AM_RANGE(0xf002, 0xf002) AM_READ(soundlatch_byte_r)
- AM_RANGE(0xf003, 0xf003) AM_READ(soundlatch2_byte_r)
+ AM_RANGE(0xf000, 0xf000) AM_DEVWRITE("soundlatch3", generic_latch_8_device, write)
+ AM_RANGE(0xf002, 0xf002) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
+ AM_RANGE(0xf003, 0xf003) AM_DEVREAD("soundlatch2", generic_latch_8_device, read)
AM_RANGE(0xf800, 0xf800) AM_WRITE(sound_ctrl_w)
AM_RANGE(0xfff0, 0xfff3) AM_WRITENOP // unknown write
ADDRESS_MAP_END
@@ -974,6 +974,10 @@ static MACHINE_CONFIG_START( mystwarr, mystwarr_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch3")
+
MCFG_DEVICE_ADD("k054539_1", K054539, XTAL_18_432MHz)
MCFG_K054539_REGION_OVERRRIDE("shared")
MCFG_K054539_TIMER_HANDLER(WRITELINE(mystwarr_state, k054539_nmi_gen))
diff --git a/src/mame/drivers/nemesis.cpp b/src/mame/drivers/nemesis.cpp
index 22de66cda54..f76f2f92c33 100644
--- a/src/mame/drivers/nemesis.cpp
+++ b/src/mame/drivers/nemesis.cpp
@@ -34,7 +34,7 @@ modified by Hau
modified by hap
06/09/2012
- Special thx 2 Neusneus, Audrey Tautou, my water bottle, chair, sleepyness
+ Special thx 2 Neusneus, Audrey Tautou, my water bottle, chair, sleepiness
Notes:
- blkpnthr:
@@ -51,6 +51,7 @@ So this is the correct behavior of real hardware, not an emulation bug.
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
#include "sound/2151intf.h"
@@ -275,7 +276,7 @@ static ADDRESS_MAP_START( nemesis_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x055000, 0x055fff) AM_RAM_WRITE(nemesis_colorram2_word_w) AM_SHARE("colorram2")
AM_RANGE(0x056000, 0x056fff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x05a000, 0x05afff) AM_RAM_WRITE(nemesis_palette_word_w) AM_SHARE("paletteram")
- AM_RANGE(0x05c000, 0x05c001) AM_WRITE8(soundlatch_byte_w, 0x00ff)
+ AM_RANGE(0x05c000, 0x05c001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x05c400, 0x05c401) AM_READ_PORT("DSW0")
AM_RANGE(0x05c402, 0x05c403) AM_READ_PORT("DSW1")
AM_RANGE(0x05c800, 0x05c801) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) /* probably */
@@ -309,7 +310,7 @@ static ADDRESS_MAP_START( gx400_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x056000, 0x056fff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x057000, 0x057fff) AM_RAM /* needed for twinbee */
AM_RANGE(0x05a000, 0x05afff) AM_RAM_WRITE(nemesis_palette_word_w) AM_SHARE("paletteram")
- AM_RANGE(0x05c000, 0x05c001) AM_WRITE8(soundlatch_byte_w, 0x00ff)
+ AM_RANGE(0x05c000, 0x05c001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x05c402, 0x05c403) AM_READ_PORT("DSW0")
AM_RANGE(0x05c404, 0x05c405) AM_READ_PORT("DSW1")
AM_RANGE(0x05c406, 0x05c407) AM_READ_PORT("TEST")
@@ -341,7 +342,7 @@ static ADDRESS_MAP_START( konamigt_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x055000, 0x055fff) AM_RAM_WRITE(nemesis_colorram2_word_w) AM_SHARE("colorram2")
AM_RANGE(0x056000, 0x056fff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x05a000, 0x05afff) AM_RAM_WRITE(nemesis_palette_word_w) AM_SHARE("paletteram")
- AM_RANGE(0x05c000, 0x05c001) AM_WRITE8(soundlatch_byte_w, 0x00ff)
+ AM_RANGE(0x05c000, 0x05c001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x05c400, 0x05c401) AM_READ_PORT("DSW0")
AM_RANGE(0x05c402, 0x05c403) AM_READ_PORT("DSW1")
AM_RANGE(0x05c800, 0x05c801) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) /* probably */
@@ -375,7 +376,7 @@ static ADDRESS_MAP_START( rf2_gx400_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x055000, 0x055fff) AM_RAM_WRITE(nemesis_colorram2_word_w) AM_SHARE("colorram2")
AM_RANGE(0x056000, 0x056fff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x05a000, 0x05afff) AM_RAM_WRITE(nemesis_palette_word_w) AM_SHARE("paletteram")
- AM_RANGE(0x05c000, 0x05c001) AM_WRITE8(soundlatch_byte_w, 0x00ff)
+ AM_RANGE(0x05c000, 0x05c001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x05c402, 0x05c403) AM_READ_PORT("DSW0")
AM_RANGE(0x05c404, 0x05c405) AM_READ_PORT("DSW1")
AM_RANGE(0x05c406, 0x05c407) AM_READ_PORT("TEST")
@@ -400,7 +401,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, nemesis_state )
AM_RANGE(0x4000, 0x47ff) AM_RAM
AM_RANGE(0xa000, 0xafff) AM_DEVWRITE("k005289", k005289_device, ld1_w)
AM_RANGE(0xc000, 0xcfff) AM_DEVWRITE("k005289", k005289_device, ld2_w)
- AM_RANGE(0xe001, 0xe001) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xe001, 0xe001) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xe003, 0xe003) AM_DEVWRITE("k005289", k005289_device, tg1_w)
AM_RANGE(0xe004, 0xe004) AM_DEVWRITE("k005289", k005289_device, tg2_w)
AM_RANGE(0xe005, 0xe005) AM_DEVWRITE("ay2", ay8910_device, address_w)
@@ -419,7 +420,7 @@ static ADDRESS_MAP_START( gx400_sound_map, AS_PROGRAM, 8, nemesis_state )
AM_RANGE(0xa000, 0xafff) AM_DEVWRITE("k005289", k005289_device, ld1_w)
AM_RANGE(0xc000, 0xcfff) AM_DEVWRITE("k005289", k005289_device, ld2_w)
AM_RANGE(0xe000, 0xe000) AM_DEVWRITE("vlm", vlm5030_device, data_w)
- AM_RANGE(0xe001, 0xe001) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xe001, 0xe001) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xe003, 0xe003) AM_DEVWRITE("k005289", k005289_device, tg1_w)
AM_RANGE(0xe004, 0xe004) AM_DEVWRITE("k005289", k005289_device, tg2_w)
AM_RANGE(0xe005, 0xe005) AM_DEVWRITE("ay2", ay8910_device, address_w)
@@ -439,7 +440,7 @@ static ADDRESS_MAP_START( salamand_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x080000, 0x087fff) AM_RAM
AM_RANGE(0x090000, 0x091fff) AM_DEVREADWRITE8("palette", palette_device, read, write, 0x00ff) AM_SHARE("palette")
AM_RANGE(0x0a0000, 0x0a0001) AM_WRITE(salamand_control_port_word_w) /* irq enable, flipscreen, etc. */
- AM_RANGE(0x0c0000, 0x0c0001) AM_WRITE8(soundlatch_byte_w, 0x00ff)
+ AM_RANGE(0x0c0000, 0x0c0001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x0c0002, 0x0c0003) AM_READ_PORT("DSW0")
AM_RANGE(0x0c0004, 0x0c0005) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) /* probably */
AM_RANGE(0x0c2000, 0x0c2001) AM_READ_PORT("IN0") /* Coins, start buttons, test mode */
@@ -464,7 +465,7 @@ static ADDRESS_MAP_START( blkpnthr_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x080000, 0x081fff) AM_DEVREADWRITE8("palette", palette_device, read, write, 0x00ff) AM_SHARE("palette")
AM_RANGE(0x090000, 0x097fff) AM_RAM
AM_RANGE(0x0a0000, 0x0a0001) AM_RAM_WRITE(salamand_control_port_word_w) /* irq enable, flipscreen, etc. */
- AM_RANGE(0x0c0000, 0x0c0001) AM_WRITE8(soundlatch_byte_w, 0x00ff)
+ AM_RANGE(0x0c0000, 0x0c0001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x0c0002, 0x0c0003) AM_READ_PORT("DSW0")
AM_RANGE(0x0c0004, 0x0c0005) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) /* probably */
AM_RANGE(0x0c2000, 0x0c2001) AM_READ_PORT("IN0") /* Coins, start buttons, test mode */
@@ -493,7 +494,7 @@ static ADDRESS_MAP_START( citybomb_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x0f0004, 0x0f0005) AM_READ_PORT("IN1")
AM_RANGE(0x0f0006, 0x0f0007) AM_READ_PORT("IN0") /* Coins, start buttons, test mode */
AM_RANGE(0x0f0008, 0x0f0009) AM_READ_PORT("DSW0")
- AM_RANGE(0x0f0010, 0x0f0011) AM_WRITE8(soundlatch_byte_w, 0x00ff)
+ AM_RANGE(0x0f0010, 0x0f0011) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x0f0018, 0x0f0019) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) /* probably */
AM_RANGE(0x0f0020, 0x0f0021) AM_READ(selected_ip_word_r) AM_WRITENOP /* WEC Le Mans 24 control? */
AM_RANGE(0x0f8000, 0x0f8001) AM_WRITE(salamand_control_port_word_w) /* irq enable, flipscreen, etc. */
@@ -520,7 +521,7 @@ static ADDRESS_MAP_START( nyanpani_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x070004, 0x070005) AM_READ_PORT("IN1")
AM_RANGE(0x070006, 0x070007) AM_READ_PORT("IN0") /* Coins, start buttons, test mode */
AM_RANGE(0x070008, 0x070009) AM_READ_PORT("DSW0")
- AM_RANGE(0x070010, 0x070011) AM_WRITE8(soundlatch_byte_w, 0x00ff)
+ AM_RANGE(0x070010, 0x070011) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x070018, 0x070019) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) /* probably */
AM_RANGE(0x078000, 0x078001) AM_WRITE(salamand_control_port_word_w) /* irq enable, flipscreen, etc. */
AM_RANGE(0x100000, 0x13ffff) AM_ROM
@@ -546,7 +547,7 @@ READ8_MEMBER(nemesis_state::wd_r)
static ADDRESS_MAP_START( sal_sound_map, AS_PROGRAM, 8, nemesis_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM
- AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0xd000, 0xd000) AM_DEVWRITE("vlm", vlm5030_device, data_w)
@@ -557,7 +558,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( blkpnthr_sound_map, AS_PROGRAM, 8, nemesis_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM
- AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0xe000, 0xe000) AM_READ(wd_r) /* watchdog?? */
@@ -574,7 +575,7 @@ static ADDRESS_MAP_START( city_sound_map, AS_PROGRAM, 8, nemesis_state )
AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write)
AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
AM_RANGE(0xc000, 0xc000) AM_WRITE(city_sound_bank_w) /* 7232 bankswitch */
- AM_RANGE(0xd000, 0xd000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xd000, 0xd000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
ADDRESS_MAP_END
/******************************************************************************/
@@ -585,7 +586,7 @@ static ADDRESS_MAP_START( hcrash_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x080000, 0x083fff) AM_RAM
AM_RANGE(0x090000, 0x091fff) AM_DEVREADWRITE8("palette", palette_device, read, write, 0x00ff) AM_SHARE("palette")
AM_RANGE(0x0a0000, 0x0a0001) AM_WRITE(salamand_control_port_word_w) /* irq enable, flipscreen, etc. */
- AM_RANGE(0x0c0000, 0x0c0001) AM_WRITE8(soundlatch_byte_w, 0x00ff)
+ AM_RANGE(0x0c0000, 0x0c0001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x0c0002, 0x0c0003) AM_READ_PORT("DSW0")
AM_RANGE(0x0c0004, 0x0c0005) AM_READ_PORT("DSW1")
AM_RANGE(0x0c0006, 0x0c0007) AM_READ_PORT("TEST")
@@ -1499,6 +1500,8 @@ static MACHINE_CONFIG_START( nemesis, nemesis_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("ay1", AY8910, 14318180/8)
MCFG_AY8910_OUTPUT_TYPE(AY8910_LEGACY_OUTPUT | AY8910_SINGLE_OUTPUT)
MCFG_AY8910_PORT_A_READ_CB(READ8(nemesis_state, nemesis_portA_r))
@@ -1554,6 +1557,8 @@ static MACHINE_CONFIG_START( gx400, nemesis_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("ay1", AY8910, 14318180/8)
MCFG_AY8910_OUTPUT_TYPE(AY8910_LEGACY_OUTPUT | AY8910_SINGLE_OUTPUT)
MCFG_AY8910_PORT_A_READ_CB(READ8(nemesis_state, nemesis_portA_r))
@@ -1611,6 +1616,8 @@ static MACHINE_CONFIG_START( konamigt, nemesis_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("ay1", AY8910, 14318180/8)
MCFG_AY8910_OUTPUT_TYPE(AY8910_LEGACY_OUTPUT | AY8910_SINGLE_OUTPUT)
MCFG_AY8910_PORT_A_READ_CB(READ8(nemesis_state, nemesis_portA_r))
@@ -1666,6 +1673,8 @@ static MACHINE_CONFIG_START( rf2_gx400, nemesis_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("ay1", AY8910, 14318180/8)
MCFG_AY8910_OUTPUT_TYPE(AY8910_LEGACY_OUTPUT | AY8910_SINGLE_OUTPUT)
MCFG_AY8910_PORT_A_READ_CB(READ8(nemesis_state, nemesis_portA_r))
@@ -1725,6 +1734,8 @@ static MACHINE_CONFIG_START( salamand, nemesis_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("vlm", VLM5030, 3579545)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 2.50)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 2.50)
@@ -1773,6 +1784,8 @@ static MACHINE_CONFIG_START( blkpnthr, nemesis_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("k007232", K007232, 3579545)
MCFG_K007232_PORT_WRITE_HANDLER(WRITE8(nemesis_state, volume_callback))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.10)
@@ -1817,6 +1830,8 @@ static MACHINE_CONFIG_START( citybomb, nemesis_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("k007232", K007232, 3579545)
MCFG_K007232_PORT_WRITE_HANDLER(WRITE8(nemesis_state, volume_callback))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.30)
@@ -1865,6 +1880,8 @@ static MACHINE_CONFIG_START( nyanpani, nemesis_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("k007232", K007232, 3579545)
MCFG_K007232_PORT_WRITE_HANDLER(WRITE8(nemesis_state, volume_callback))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.30)
@@ -1912,6 +1929,8 @@ static MACHINE_CONFIG_START( hcrash, nemesis_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("vlm", VLM5030, 3579545)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.60)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.60)
@@ -2666,6 +2685,8 @@ static MACHINE_CONFIG_START( bubsys, nemesis_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("ay1", AY8910, 14318180/8)
MCFG_AY8910_OUTPUT_TYPE(AY8910_LEGACY_OUTPUT | AY8910_SINGLE_OUTPUT)
MCFG_AY8910_PORT_A_READ_CB(READ8(nemesis_state, nemesis_portA_r))
diff --git a/src/mame/drivers/pandoras.cpp b/src/mame/drivers/pandoras.cpp
index aa286568be0..7836ad8662d 100644
--- a/src/mame/drivers/pandoras.cpp
+++ b/src/mame/drivers/pandoras.cpp
@@ -27,6 +27,7 @@ Boards:
#include "cpu/m6809/m6809.h"
#include "cpu/z80/z80.h"
#include "cpu/mcs48/mcs48.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
#include "sound/dac.h"
@@ -131,7 +132,7 @@ static ADDRESS_MAP_START( pandoras_master_map, AS_PROGRAM, 8, pandoras_state )
AM_RANGE(0x1800, 0x1807) AM_WRITE(pandoras_int_control_w) /* INT control */
AM_RANGE(0x1a00, 0x1a00) AM_WRITE(pandoras_scrolly_w) /* bg scroll */
AM_RANGE(0x1c00, 0x1c00) AM_WRITE(pandoras_z80_irqtrigger_w) /* cause INT on the Z80 */
- AM_RANGE(0x1e00, 0x1e00) AM_WRITE(soundlatch_byte_w) /* sound command to the Z80 */
+ AM_RANGE(0x1e00, 0x1e00) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* sound command to the Z80 */
AM_RANGE(0x2000, 0x2000) AM_WRITE(pandoras_cpub_irqtrigger_w) /* cause FIRQ on CPU B */
AM_RANGE(0x2001, 0x2001) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) /* watchdog reset */
AM_RANGE(0x4000, 0x5fff) AM_ROM /* space for diagnostic ROM */
@@ -160,12 +161,12 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( pandoras_sound_map, AS_PROGRAM, 8, pandoras_state )
AM_RANGE(0x0000, 0x1fff) AM_ROM /* ROM */
AM_RANGE(0x2000, 0x23ff) AM_RAM /* RAM */
- AM_RANGE(0x4000, 0x4000) AM_READ(soundlatch_byte_r) /* soundlatch_byte_r */
+ AM_RANGE(0x4000, 0x4000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x6000, 0x6000) AM_DEVWRITE("aysnd", ay8910_device, address_w) /* AY-8910 */
AM_RANGE(0x6001, 0x6001) AM_DEVREAD("aysnd", ay8910_device, data_r) /* AY-8910 */
AM_RANGE(0x6002, 0x6002) AM_DEVWRITE("aysnd", ay8910_device, data_w) /* AY-8910 */
AM_RANGE(0x8000, 0x8000) AM_WRITE(pandoras_i8039_irqtrigger_w) /* cause INT on the 8039 */
- AM_RANGE(0xa000, 0xa000) AM_WRITE(soundlatch2_byte_w) /* sound command to the 8039 */
+ AM_RANGE(0xa000, 0xa000) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) /* sound command to the 8039 */
ADDRESS_MAP_END
static ADDRESS_MAP_START( pandoras_i8039_map, AS_PROGRAM, 8, pandoras_state )
@@ -173,7 +174,7 @@ static ADDRESS_MAP_START( pandoras_i8039_map, AS_PROGRAM, 8, pandoras_state )
ADDRESS_MAP_END
static ADDRESS_MAP_START( pandoras_i8039_io_map, AS_IO, 8, pandoras_state )
- AM_RANGE(0x00, 0xff) AM_READ(soundlatch2_byte_r)
+ AM_RANGE(0x00, 0xff) AM_DEVREAD("soundlatch2", generic_latch_8_device, read)
AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_DEVWRITE("dac", dac_device, write_unsigned8)
AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(i8039_irqen_and_status_w)
ADDRESS_MAP_END
@@ -357,6 +358,9 @@ static MACHINE_CONFIG_START( pandoras, pandoras_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+
MCFG_SOUND_ADD("aysnd", AY8910, SOUND_CLOCK/8)
MCFG_AY8910_PORT_A_READ_CB(READ8(pandoras_state, pandoras_portA_r)) // not used
MCFG_AY8910_PORT_B_READ_CB(READ8(pandoras_state, pandoras_portB_r))
diff --git a/src/mame/drivers/plygonet.cpp b/src/mame/drivers/plygonet.cpp
index 913efc2ccfc..4feea095396 100644
--- a/src/mame/drivers/plygonet.cpp
+++ b/src/mame/drivers/plygonet.cpp
@@ -67,9 +67,7 @@
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
-#include "cpu/dsp56k/dsp56k.h"
#include "sound/k054539.h"
-#include "machine/eepromser.h"
#include "machine/watchdog.h"
#include "includes/plygonet.h"
@@ -144,7 +142,7 @@ READ8_MEMBER(polygonet_state::sound_comms_r)
return 0;
case 2:
- return soundlatch_byte_r(space, 0);
+ return m_soundlatch->read(space, 0);
default:
break;
@@ -174,11 +172,11 @@ WRITE8_MEMBER(polygonet_state::sound_comms_w)
break;
case 6:
- soundlatch2_byte_w(space, 0, data);
+ m_soundlatch2->write(space, 0, data);
break;
case 7:
- soundlatch3_byte_w(space, 0, data);
+ m_soundlatch3->write(space, 0, data);
break;
default:
@@ -532,9 +530,9 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, polygonet_state )
AM_RANGE(0xe230, 0xe3ff) AM_RAM
AM_RANGE(0xe400, 0xe62f) AM_READNOP AM_WRITENOP // Second 054539 (not present)
AM_RANGE(0xe630, 0xe7ff) AM_RAM
- AM_RANGE(0xf000, 0xf000) AM_WRITE(soundlatch_byte_w)
- AM_RANGE(0xf002, 0xf002) AM_READ(soundlatch2_byte_r)
- AM_RANGE(0xf003, 0xf003) AM_READ(soundlatch3_byte_r)
+ AM_RANGE(0xf000, 0xf000) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
+ AM_RANGE(0xf002, 0xf002) AM_DEVREAD("soundlatch2", generic_latch_8_device, read)
+ AM_RANGE(0xf003, 0xf003) AM_DEVREAD("soundlatch3", generic_latch_8_device, read)
AM_RANGE(0xf800, 0xf800) AM_WRITE(sound_ctrl_w)
ADDRESS_MAP_END
@@ -640,6 +638,10 @@ static MACHINE_CONFIG_START( plygonet, polygonet_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch3")
+
MCFG_DEVICE_ADD("k054539_1", K054539, XTAL_18_432MHz)
MCFG_K054539_REGION_OVERRRIDE("shared")
MCFG_K054539_TIMER_HANDLER(WRITELINE(polygonet_state, k054539_nmi_gen))
diff --git a/src/mame/drivers/pooyan.cpp b/src/mame/drivers/pooyan.cpp
index 5b02066e949..12e69043404 100644
--- a/src/mame/drivers/pooyan.cpp
+++ b/src/mame/drivers/pooyan.cpp
@@ -12,6 +12,7 @@
#include "emu.h"
#include "cpu/z80/z80.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "audio/timeplt.h"
#include "includes/pooyan.h"
@@ -61,7 +62,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, pooyan_state )
AM_RANGE(0xa0c0, 0xa0c0) AM_MIRROR(0x5e1f) AM_READ_PORT("IN2")
AM_RANGE(0xa0e0, 0xa0e0) AM_MIRROR(0x5e1f) AM_READ_PORT("DSW0")
AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x5e7f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
- AM_RANGE(0xa100, 0xa100) AM_MIRROR(0x5e7f) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0xa100, 0xa100) AM_MIRROR(0x5e7f) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0xa180, 0xa180) AM_MIRROR(0x5e78) AM_WRITE(irq_enable_w)
AM_RANGE(0xa181, 0xa181) AM_MIRROR(0x5e78) AM_DEVWRITE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w)
AM_RANGE(0xa183, 0xa183) AM_MIRROR(0x5e78) AM_WRITENOP // ???
@@ -208,6 +209,9 @@ static MACHINE_CONFIG_START( pooyan, pooyan_state )
MCFG_PALETTE_INIT_OWNER(pooyan_state, pooyan)
/* sound hardware */
+
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_FRAGMENT_ADD(timeplt_sound)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/rallyx.cpp b/src/mame/drivers/rallyx.cpp
index 04984b62d05..0fafe690ce2 100644
--- a/src/mame/drivers/rallyx.cpp
+++ b/src/mame/drivers/rallyx.cpp
@@ -192,6 +192,7 @@ TODO:
#include "emu.h"
#include "cpu/z80/z80.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/samples.h"
#include "includes/rallyx.h"
@@ -342,7 +343,7 @@ static ADDRESS_MAP_START( jungler_map, AS_PROGRAM, 8, rallyx_state )
AM_RANGE(0xa180, 0xa180) AM_READ_PORT("DSW2")
AM_RANGE(0xa000, 0xa00f) AM_MIRROR(0x00f0) AM_WRITEONLY AM_SHARE("radarattr") // jungler writes to a03x
AM_RANGE(0xa080, 0xa080) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
- AM_RANGE(0xa100, 0xa100) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0xa100, 0xa100) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0xa130, 0xa130) AM_WRITE(rallyx_scrollx_w) /* only jungler and tactcian */
AM_RANGE(0xa140, 0xa140) AM_WRITE(rallyx_scrolly_w) /* only jungler and tactcian */
AM_RANGE(0xa180, 0xa187) AM_WRITE(locomotn_latch_w)
@@ -910,6 +911,8 @@ static MACHINE_CONFIG_START( jungler, rallyx_state )
MCFG_PALETTE_INIT_OWNER(rallyx_state,jungler)
MCFG_VIDEO_START_OVERRIDE(rallyx_state,jungler)
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
/* sound hardware */
MCFG_FRAGMENT_ADD(locomotn_sound)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/rockrage.cpp b/src/mame/drivers/rockrage.cpp
index ef7260d82e9..706efdddde4 100644
--- a/src/mame/drivers/rockrage.cpp
+++ b/src/mame/drivers/rockrage.cpp
@@ -78,7 +78,7 @@ WRITE8_MEMBER(rockrage_state::rockrage_bankswitch_w)
WRITE8_MEMBER(rockrage_state::rockrage_sh_irqtrigger_w)
{
- soundlatch_byte_w(space, offset, data);
+ m_soundlatch->write(space, offset, data);
m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
}
@@ -118,7 +118,7 @@ static ADDRESS_MAP_START( rockrage_sound_map, AS_PROGRAM, 8, rockrage_state )
AM_RANGE(0x2000, 0x2000) AM_DEVWRITE("vlm", vlm5030_device, data_w) /* VLM5030 */
AM_RANGE(0x3000, 0x3000) AM_READ(rockrage_VLM5030_busy_r) /* VLM5030 */
AM_RANGE(0x4000, 0x4000) AM_WRITE(rockrage_speech_w) /* VLM5030 */
- AM_RANGE(0x5000, 0x5000) AM_READ(soundlatch_byte_r) /* soundlatch_byte_r */
+ AM_RANGE(0x5000, 0x5000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x6000, 0x6001) AM_DEVREADWRITE("ymsnd", ym2151_device,read,write) /* YM 2151 */
AM_RANGE(0x7000, 0x77ff) AM_RAM /* RAM */
AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM */
@@ -278,6 +278,8 @@ static MACHINE_CONFIG_START( rockrage, rockrage_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", 3579545)
MCFG_SOUND_ROUTE(0, "lspeaker", 0.60)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.60)
diff --git a/src/mame/drivers/rocnrope.cpp b/src/mame/drivers/rocnrope.cpp
index e950bea570a..5393f2e656b 100644
--- a/src/mame/drivers/rocnrope.cpp
+++ b/src/mame/drivers/rocnrope.cpp
@@ -11,6 +11,7 @@
#include "emu.h"
#include "cpu/m6809/m6809.h"
#include "machine/konami1.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "audio/timeplt.h"
#include "includes/konamipt.h"
@@ -66,7 +67,7 @@ static ADDRESS_MAP_START( rocnrope_map, AS_PROGRAM, 8, rocnrope_state )
AM_RANGE(0x8083, 0x8083) AM_WRITENOP /* Coin counter 1 */
AM_RANGE(0x8084, 0x8084) AM_WRITENOP /* Coin counter 2 */
AM_RANGE(0x8087, 0x8087) AM_WRITE(irq_mask_w)
- AM_RANGE(0x8100, 0x8100) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x8100, 0x8100) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x8182, 0x818d) AM_WRITE(rocnrope_interrupt_vector_w)
AM_RANGE(0x6000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -221,6 +222,9 @@ static MACHINE_CONFIG_START( rocnrope, rocnrope_state )
MCFG_PALETTE_INIT_OWNER(rocnrope_state, rocnrope)
/* sound hardware */
+
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_FRAGMENT_ADD(timeplt_sound)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/rungun.cpp b/src/mame/drivers/rungun.cpp
index 662cf5f8237..7cddd63714e 100644
--- a/src/mame/drivers/rungun.cpp
+++ b/src/mame/drivers/rungun.cpp
@@ -134,13 +134,13 @@ WRITE16_MEMBER(rungun_state::rng_sysregs_w)
WRITE16_MEMBER(rungun_state::sound_cmd1_w)
{
if (ACCESSING_BITS_8_15)
- soundlatch_byte_w(space, 0, data >> 8);
+ m_soundlatch->write(space, 0, data >> 8);
}
WRITE16_MEMBER(rungun_state::sound_cmd2_w)
{
if (ACCESSING_BITS_8_15)
- soundlatch2_byte_w(space, 0, data >> 8);
+ m_soundlatch2->write(space, 0, data >> 8);
}
WRITE16_MEMBER(rungun_state::sound_irq_w)
@@ -269,8 +269,8 @@ static ADDRESS_MAP_START( rungun_sound_map, AS_PROGRAM, 8, rungun_state )
AM_RANGE(0xe400, 0xe62f) AM_DEVREADWRITE("k054539_2", k054539_device, read, write)
AM_RANGE(0xe630, 0xe7ff) AM_RAM
AM_RANGE(0xf000, 0xf000) AM_WRITE(sound_status_w)
- AM_RANGE(0xf002, 0xf002) AM_READ(soundlatch_byte_r)
- AM_RANGE(0xf003, 0xf003) AM_READ(soundlatch2_byte_r)
+ AM_RANGE(0xf002, 0xf002) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
+ AM_RANGE(0xf003, 0xf003) AM_DEVREAD("soundlatch2", generic_latch_8_device, read)
AM_RANGE(0xf800, 0xf800) AM_WRITE(sound_ctrl_w)
AM_RANGE(0xfff0, 0xfff3) AM_WRITENOP
ADDRESS_MAP_END
@@ -463,6 +463,9 @@ static MACHINE_CONFIG_START( rng, rungun_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+
MCFG_DEVICE_ADD("k054539_1", K054539, XTAL_18_432MHz)
MCFG_K054539_REGION_OVERRRIDE("shared")
MCFG_K054539_TIMER_HANDLER(WRITELINE(rungun_state, k054539_nmi_gen))
diff --git a/src/mame/drivers/sandscrp.cpp b/src/mame/drivers/sandscrp.cpp
index 49ad0c212f0..e06ca1c6e67 100644
--- a/src/mame/drivers/sandscrp.cpp
+++ b/src/mame/drivers/sandscrp.cpp
@@ -75,6 +75,7 @@ Is there another alt program rom set labeled 9 & 10?
#include "emu.h"
#include "cpu/z80/z80.h"
#include "cpu/m68000/m68000.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/2203intf.h"
#include "sound/2151intf.h"
@@ -92,13 +93,17 @@ public:
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_pandora(*this, "pandora"),
- m_view2_0(*this, "view2_0")
+ m_view2_0(*this, "view2_0"),
+ m_soundlatch(*this, "soundlatch"),
+ m_soundlatch2(*this, "soundlatch2")
{ }
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<kaneko_pandora_device> m_pandora;
- optional_device<kaneko_view2_tilemap_device> m_view2_0;
+ required_device<kaneko_view2_tilemap_device> m_view2_0;
+ required_device<generic_latch_8_device> m_soundlatch;
+ required_device<generic_latch_8_device> m_soundlatch2;
UINT8 m_sprite_irq;
UINT8 m_unknown_irq;
@@ -251,7 +256,7 @@ WRITE16_MEMBER(sandscrp_state::latchstatus_word_w)
READ16_MEMBER(sandscrp_state::soundlatch_word_r)
{
m_latch2_full = 0;
- return soundlatch2_byte_r(space,0);
+ return m_soundlatch2->read(space,0);
}
WRITE16_MEMBER(sandscrp_state::soundlatch_word_w)
@@ -259,7 +264,7 @@ WRITE16_MEMBER(sandscrp_state::soundlatch_word_w)
if (ACCESSING_BITS_0_7)
{
m_latch1_full = 1;
- soundlatch_byte_w(space, 0, data & 0xff);
+ m_soundlatch->write(space, 0, data & 0xff);
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
space.device().execute().spin_until_time(attotime::from_usec(100)); // Allow the other cpu to reply
}
@@ -306,13 +311,13 @@ READ8_MEMBER(sandscrp_state::latchstatus_r)
READ8_MEMBER(sandscrp_state::soundlatch_r)
{
m_latch1_full = 0;
- return soundlatch_byte_r(space,0);
+ return m_soundlatch->read(space,0);
}
WRITE8_MEMBER(sandscrp_state::soundlatch_w)
{
m_latch2_full = 1;
- soundlatch2_byte_w(space,0,data);
+ m_soundlatch2->write(space,0,data);
}
static ADDRESS_MAP_START( sandscrp_soundmem, AS_PROGRAM, 8, sandscrp_state )
@@ -505,6 +510,9 @@ static MACHINE_CONFIG_START( sandscrp, sandscrp_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+
MCFG_OKIM6295_ADD("oki", 12000000/6, OKIM6295_PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5)
diff --git a/src/mame/drivers/sbasketb.cpp b/src/mame/drivers/sbasketb.cpp
index 5561fe8dabe..8caaaba4c09 100644
--- a/src/mame/drivers/sbasketb.cpp
+++ b/src/mame/drivers/sbasketb.cpp
@@ -44,6 +44,7 @@ CPU/Video Board Parts:
#include "cpu/z80/z80.h"
#include "cpu/m6809/m6809.h"
#include "sound/dac.h"
+#include "machine/gen_latch.h"
#include "machine/konami1.h"
#include "machine/watchdog.h"
#include "includes/konamipt.h"
@@ -79,7 +80,7 @@ static ADDRESS_MAP_START( sbasketb_map, AS_PROGRAM, 8, sbasketb_state )
AM_RANGE(0x3c81, 0x3c81) AM_WRITE(irq_mask_w)
AM_RANGE(0x3c83, 0x3c84) AM_WRITE(sbasketb_coin_counter_w)
AM_RANGE(0x3c85, 0x3c85) AM_WRITEONLY AM_SHARE("spriteramsel")
- AM_RANGE(0x3d00, 0x3d00) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x3d00, 0x3d00) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x3d80, 0x3d80) AM_WRITE(sbasketb_sh_irqtrigger_w)
AM_RANGE(0x3e00, 0x3e00) AM_READ_PORT("SYSTEM")
AM_RANGE(0x3e01, 0x3e01) AM_READ_PORT("P1")
@@ -94,7 +95,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( sbasketb_sound_map, AS_PROGRAM, 8, sbasketb_state )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x4000, 0x43ff) AM_RAM
- AM_RANGE(0x6000, 0x6000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x6000, 0x6000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x8000, 0x8000) AM_DEVREAD("trackfld_audio", trackfld_audio_device, hyperspt_sh_timer_r)
AM_RANGE(0xa000, 0xa000) AM_DEVWRITE("vlm", vlm5030_device, data_w) /* speech data */
AM_RANGE(0xc000, 0xdfff) AM_DEVWRITE("trackfld_audio", trackfld_audio_device, hyperspt_sound_w) /* speech and output controll */
@@ -211,6 +212,8 @@ static MACHINE_CONFIG_START( sbasketb, sbasketb_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("trackfld_audio", TRACKFLD_AUDIO, 0)
MCFG_DAC_ADD("dac")
diff --git a/src/mame/drivers/scobra.cpp b/src/mame/drivers/scobra.cpp
index 5cf4d5d7115..84092439b02 100644
--- a/src/mame/drivers/scobra.cpp
+++ b/src/mame/drivers/scobra.cpp
@@ -781,7 +781,7 @@ static MACHINE_CONFIG_START( type1, scobra_state )
MCFG_I8255_IN_PORTC_CB(IOPORT("IN2"))
MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
- MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w))
+ MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write))
MCFG_I8255_OUT_PORTB_CB(WRITE8(scramble_state, scramble_sh_irqtrigger_w))
MCFG_DEVICE_ADD("7474_9m_1", TTL7474, 0)
@@ -811,11 +811,14 @@ static MACHINE_CONFIG_START( type1, scobra_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("ay1", AY8910, 14318000/8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.16)
MCFG_SOUND_ADD("ay2", AY8910, 14318000/8)
- MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r))
+ MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read))
MCFG_AY8910_PORT_B_READ_CB(READ8(scramble_state, scramble_portB_r))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.16)
MACHINE_CONFIG_END
@@ -893,7 +896,7 @@ static MACHINE_CONFIG_DERIVED( stratgyx, type2 )
MCFG_DEVICE_REMOVE("ppi8255_1")
MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
- MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w))
+ MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write))
MCFG_I8255_OUT_PORTB_CB(WRITE8(scramble_state, scramble_sh_irqtrigger_w))
MCFG_I8255_IN_PORTC_CB(IOPORT("IN3"))
@@ -951,7 +954,7 @@ static MACHINE_CONFIG_START( hustler, scobra_state )
MCFG_I8255_IN_PORTC_CB(IOPORT("IN2"))
MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
- MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w))
+ MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write))
MCFG_I8255_OUT_PORTB_CB(WRITE8(scramble_state, scramble_sh_irqtrigger_w))
/* video hardware */
@@ -971,8 +974,9 @@ static MACHINE_CONFIG_START( hustler, scobra_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_SOUND_ADD("aysnd", AY8910, 14318000/8)
- MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r))
+ MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read))
MCFG_AY8910_PORT_B_READ_CB(READ8(scramble_state, hustler_portB_r))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.33)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/scotrsht.cpp b/src/mame/drivers/scotrsht.cpp
index 37d18fbf8a2..b28e0888e2d 100644
--- a/src/mame/drivers/scotrsht.cpp
+++ b/src/mame/drivers/scotrsht.cpp
@@ -56,7 +56,7 @@ INTERRUPT_GEN_MEMBER(scotrsht_state::interrupt)
WRITE8_MEMBER(scotrsht_state::soundlatch_w)
{
- soundlatch_byte_w(space, 0, data);
+ m_soundlatch->write(space, 0, data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
@@ -87,7 +87,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( scotrsht_sound_map, AS_PROGRAM, 8, scotrsht_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x43ff) AM_RAM
- AM_RANGE(0x8000, 0x8000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x8000, 0x8000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
ADDRESS_MAP_END
static ADDRESS_MAP_START( scotrsht_sound_port, AS_IO, 8, scotrsht_state )
@@ -210,6 +210,8 @@ static MACHINE_CONFIG_START( scotrsht, scotrsht_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("ymsnd", YM2203, 18432000/6)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/scramble.cpp b/src/mame/drivers/scramble.cpp
index c3c1766c022..1f3b1099c4a 100644
--- a/src/mame/drivers/scramble.cpp
+++ b/src/mame/drivers/scramble.cpp
@@ -34,6 +34,7 @@ Notes:
#include "sound/ay8910.h"
#include "sound/dac.h"
#include "machine/i8255.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "includes/scramble.h"
@@ -241,7 +242,7 @@ static ADDRESS_MAP_START( hotshock_map, AS_PROGRAM, 8, scramble_state )
AM_RANGE(0x6006, 0x6006) AM_WRITE(galaxold_gfxbank_w)
AM_RANGE(0x6801, 0x6801) AM_WRITE(galaxold_nmi_enable_w)
AM_RANGE(0x7000, 0x7000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
- AM_RANGE(0x8000, 0x8000) AM_READ_PORT("IN0") AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x8000, 0x8000) AM_READ_PORT("IN0") AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x8001, 0x8001) AM_READ_PORT("IN1")
AM_RANGE(0x8002, 0x8002) AM_READ_PORT("IN2")
AM_RANGE(0x8003, 0x8003) AM_READ_PORT("IN3")
@@ -310,7 +311,7 @@ static ADDRESS_MAP_START( ad2083_map, AS_PROGRAM, 8, scramble_state )
AM_RANGE(0x6805, 0x6805) AM_WRITE(galaxold_coin_counter_1_w)
AM_RANGE(0x6806, 0x6806) AM_WRITE(scrambold_background_red_w)
AM_RANGE(0x6807, 0x6807) AM_WRITE(scrambold_background_green_w)
- AM_RANGE(0x8000, 0x8000) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x9000, 0x9000) AM_WRITE(hotshock_sh_irqtrigger_w)
AM_RANGE(0x7000, 0x7000) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r)
AM_RANGE(0x8000, 0x8000) AM_READ_PORT("IN0")
@@ -1399,7 +1400,7 @@ static MACHINE_CONFIG_START( scramble, scramble_state )
MCFG_I8255_IN_PORTC_CB(IOPORT("IN2"))
MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
- MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w))
+ MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write))
MCFG_I8255_OUT_PORTB_CB(WRITE8(scramble_state, scramble_sh_irqtrigger_w))
/* video hardware */
@@ -1420,11 +1421,13 @@ static MACHINE_CONFIG_START( scramble, scramble_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("8910.1", AY8910, 14318000/8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.16)
MCFG_SOUND_ADD("8910.2", AY8910, 14318000/8)
- MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r))
+ MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read))
MCFG_AY8910_PORT_B_READ_CB(READ8(scramble_state, scramble_portB_r))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.16)
MACHINE_CONFIG_END
@@ -1437,7 +1440,7 @@ static MACHINE_CONFIG_DERIVED( mars, scramble )
MCFG_DEVICE_REMOVE("ppi8255_1")
MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
- MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w))
+ MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write))
MCFG_I8255_OUT_PORTB_CB(WRITE8(scramble_state, scramble_sh_irqtrigger_w))
MCFG_I8255_IN_PORTC_CB(IOPORT("IN3"))
@@ -1483,7 +1486,7 @@ static MACHINE_CONFIG_DERIVED( mrkougar, scramble )
MCFG_DEVICE_REMOVE("ppi8255_1")
MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
- MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w))
+ MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write))
MCFG_I8255_OUT_PORTB_CB(WRITE8(scramble_state, mrkougar_sh_irqtrigger_w))
/* video hardware */
@@ -1501,7 +1504,7 @@ static MACHINE_CONFIG_DERIVED( mrkougb, scramble )
MCFG_DEVICE_REMOVE("ppi8255_1")
MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
- MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w))
+ MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write))
MCFG_I8255_OUT_PORTB_CB(WRITE8(scramble_state, mrkougar_sh_irqtrigger_w))
/* video hardware */
diff --git a/src/mame/drivers/spy.cpp b/src/mame/drivers/spy.cpp
index 9f924626d7d..ea0ab417e67 100644
--- a/src/mame/drivers/spy.cpp
+++ b/src/mame/drivers/spy.cpp
@@ -22,6 +22,7 @@
#include "emu.h"
#include "cpu/z80/z80.h"
#include "cpu/m6809/m6809.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/3812intf.h"
#include "includes/konamipt.h"
@@ -376,7 +377,7 @@ static ADDRESS_MAP_START( spy_map, AS_PROGRAM, 8, spy_state )
AM_RANGE(0x3f80, 0x3f80) AM_WRITE(bankswitch_w)
AM_RANGE(0x3f90, 0x3f90) AM_WRITE(spy_3f90_w)
AM_RANGE(0x3fa0, 0x3fa0) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
- AM_RANGE(0x3fb0, 0x3fb0) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x3fb0, 0x3fb0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x3fc0, 0x3fc0) AM_WRITE(spy_sh_irqtrigger_w)
AM_RANGE(0x3fd0, 0x3fd0) AM_READ_PORT("SYSTEM")
AM_RANGE(0x3fd1, 0x3fd1) AM_READ_PORT("P1")
@@ -395,7 +396,7 @@ static ADDRESS_MAP_START( spy_sound_map, AS_PROGRAM, 8, spy_state )
AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE("k007232_1", k007232_device, read, write)
AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232_2", k007232_device, read, write)
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write)
- AM_RANGE(0xd000, 0xd000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xd000, 0xd000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
ADDRESS_MAP_END
@@ -525,6 +526,8 @@ static MACHINE_CONFIG_START( spy, spy_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("ymsnd", YM3812, 3579545)
MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
diff --git a/src/mame/drivers/thunderx.cpp b/src/mame/drivers/thunderx.cpp
index 7c34f74d280..42e78c0a8a1 100644
--- a/src/mame/drivers/thunderx.cpp
+++ b/src/mame/drivers/thunderx.cpp
@@ -35,6 +35,7 @@
#include "emu.h"
#include "cpu/z80/z80.h"
#include "cpu/m6809/konami.h" /* for the callback and the firq irq definition */
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/2151intf.h"
#include "includes/konamipt.h"
@@ -401,7 +402,7 @@ WRITE8_MEMBER(thunderx_state::k052109_051960_w)
static ADDRESS_MAP_START( scontra_map, AS_PROGRAM, 8, thunderx_state )
AM_RANGE(0x1f80, 0x1f80) AM_WRITE(scontra_bankswitch_w) /* bankswitch control + coin counters */
- AM_RANGE(0x1f84, 0x1f84) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x1f84, 0x1f84) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x1f88, 0x1f88) AM_WRITE(sh_irqtrigger_w) /* cause interrupt on audio CPU */
AM_RANGE(0x1f8c, 0x1f8c) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x1f90, 0x1f90) AM_READ_PORT("SYSTEM")
@@ -446,7 +447,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( thunderx_sound_map, AS_PROGRAM, 8, thunderx_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM
- AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
ADDRESS_MAP_END
@@ -671,6 +672,8 @@ static MACHINE_CONFIG_START( scontra, thunderx_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", XTAL_3_579545MHz) /* verified on pcb */
MCFG_SOUND_ROUTE(0, "mono", 1.0)
MCFG_SOUND_ROUTE(1, "mono", 1.0)
diff --git a/src/mame/drivers/timeplt.cpp b/src/mame/drivers/timeplt.cpp
index 13116e7a807..1d95775f1d2 100644
--- a/src/mame/drivers/timeplt.cpp
+++ b/src/mame/drivers/timeplt.cpp
@@ -49,6 +49,7 @@
#include "emu.h"
#include "cpu/z80/z80.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "includes/konamipt.h"
#include "audio/timeplt.h"
@@ -131,7 +132,7 @@ static ADDRESS_MAP_START( common_main_map, AS_PROGRAM, 8, timeplt_state )
AM_RANGE(0xa800, 0xafff) AM_RAM
AM_RANGE(0xb000, 0xb0ff) AM_MIRROR(0x0b00) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xb400, 0xb4ff) AM_MIRROR(0x0b00) AM_RAM AM_SHARE("spriteram2")
- AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0cff) AM_READ(scanline_r) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0cff) AM_READ(scanline_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0xc200, 0xc200) AM_MIRROR(0x0cff) AM_READ_PORT("DSW1") AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0xc300, 0xc300) AM_MIRROR(0x0c9f) AM_READ_PORT("IN0")
AM_RANGE(0xc302, 0xc302) AM_MIRROR(0x0cf1) AM_WRITE(flipscreen_w)
@@ -445,6 +446,9 @@ static MACHINE_CONFIG_START( timeplt, timeplt_state )
MCFG_PALETTE_INIT_OWNER(timeplt_state, timeplt)
/* sound hardware */
+
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_FRAGMENT_ADD(timeplt_sound)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/tmnt.cpp b/src/mame/drivers/tmnt.cpp
index 935b44e335a..6fa6ad463e3 100644
--- a/src/mame/drivers/tmnt.cpp
+++ b/src/mame/drivers/tmnt.cpp
@@ -62,6 +62,7 @@ Updates:
#include "sound/okim6295.h"
#include "sound/samples.h"
#include "sound/k054539.h"
+#include "machine/gen_latch.h"
#include "machine/nvram.h"
#include "machine/watchdog.h"
#include "includes/tmnt.h"
@@ -494,7 +495,7 @@ static ADDRESS_MAP_START( mia_main_map, AS_PROGRAM, 16, tmnt_state )
AM_RANGE(0x0a0000, 0x0a0001) AM_READ_PORT("COINS") AM_WRITE(tmnt_0a0000_w)
AM_RANGE(0x0a0002, 0x0a0003) AM_READ_PORT("P1")
AM_RANGE(0x0a0004, 0x0a0005) AM_READ_PORT("P2")
- AM_RANGE(0x0a0008, 0x0a0009) AM_WRITE8(soundlatch_byte_w, 0x00ff)
+ AM_RANGE(0x0a0008, 0x0a0009) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x0a0010, 0x0a0011) AM_READ_PORT("DSW1") AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w)
AM_RANGE(0x0a0012, 0x0a0013) AM_READ_PORT("DSW2")
AM_RANGE(0x0a0018, 0x0a0019) AM_READ_PORT("DSW3")
@@ -516,7 +517,7 @@ static ADDRESS_MAP_START( tmnt_main_map, AS_PROGRAM, 16, tmnt_state )
AM_RANGE(0x0a0002, 0x0a0003) AM_READ_PORT("P1")
AM_RANGE(0x0a0004, 0x0a0005) AM_READ_PORT("P2")
AM_RANGE(0x0a0006, 0x0a0007) AM_READ_PORT("P3")
- AM_RANGE(0x0a0008, 0x0a0009) AM_WRITE8(soundlatch_byte_w, 0x00ff)
+ AM_RANGE(0x0a0008, 0x0a0009) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x0a0010, 0x0a0011) AM_READ_PORT("DSW1") AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w)
AM_RANGE(0x0a0012, 0x0a0013) AM_READ_PORT("DSW2")
AM_RANGE(0x0a0014, 0x0a0015) AM_READ_PORT("P4")
@@ -653,9 +654,9 @@ static ADDRESS_MAP_START( prmrsocr_main_map, AS_PROGRAM, 16, tmnt_state )
AM_RANGE(0x11c000, 0x11c01f) AM_WRITE(k053251_glfgreat_w)
AM_RANGE(0x120000, 0x120001) AM_READ_PORT("P1/COINS")
AM_RANGE(0x120002, 0x120003) AM_READ_PORT("P2/EEPROM")
- AM_RANGE(0x12100c, 0x12100d) AM_WRITE8(soundlatch_byte_w, 0x00ff)
- AM_RANGE(0x12100e, 0x12100f) AM_WRITE8(soundlatch2_byte_w, 0x00ff)
- AM_RANGE(0x121014, 0x121015) AM_READ8(soundlatch3_byte_r, 0x00ff)
+ AM_RANGE(0x12100c, 0x12100d) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
+ AM_RANGE(0x12100e, 0x12100f) AM_DEVWRITE8("soundlatch2", generic_latch_8_device, write, 0x00ff)
+ AM_RANGE(0x121014, 0x121015) AM_DEVREAD8("soundlatch3", generic_latch_8_device, read, 0x00ff)
AM_RANGE(0x122000, 0x122001) AM_WRITE(prmrsocr_eeprom_w) /* EEPROM + video control */
AM_RANGE(0x123000, 0x123001) AM_WRITE(prmrsocr_sound_irq_w)
AM_RANGE(0x200000, 0x207fff) AM_READWRITE(k052109_word_noA12_r, k052109_word_noA12_w)
@@ -997,7 +998,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( mia_audio_map, AS_PROGRAM, 8, tmnt_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM
- AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
ADDRESS_MAP_END
@@ -1007,7 +1008,7 @@ static ADDRESS_MAP_START( tmnt_audio_map, AS_PROGRAM, 8, tmnt_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM
AM_RANGE(0x9000, 0x9000) AM_READWRITE(tmnt_sres_r, tmnt_sres_w) /* title music & UPD7759C reset */
- AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0xd000, 0xd000) AM_DEVWRITE("upd", upd7759_device, port_w)
@@ -1075,9 +1076,9 @@ static ADDRESS_MAP_START( prmrsocr_audio_map, AS_PROGRAM, 8, tmnt_state )
AM_RANGE(0xc000, 0xdfff) AM_RAM
AM_RANGE(0xe000, 0xe0ff) AM_DEVREADWRITE("k054539", k054539_device, read, write)
AM_RANGE(0xe100, 0xe12f) AM_READWRITE(k054539_ctrl_r, k054539_ctrl_w)
- AM_RANGE(0xf000, 0xf000) AM_WRITE(soundlatch3_byte_w)
- AM_RANGE(0xf002, 0xf002) AM_READ(soundlatch_byte_r)
- AM_RANGE(0xf003, 0xf003) AM_READ(soundlatch2_byte_r)
+ AM_RANGE(0xf000, 0xf000) AM_DEVWRITE("soundlatch3", generic_latch_8_device, write)
+ AM_RANGE(0xf002, 0xf002) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
+ AM_RANGE(0xf003, 0xf003) AM_DEVREAD("soundlatch2", generic_latch_8_device, read)
AM_RANGE(0xf800, 0xf800) AM_WRITE(prmrsocr_audio_bankswitch_w)
ADDRESS_MAP_END
@@ -2054,6 +2055,8 @@ static MACHINE_CONFIG_START( mia, tmnt_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", XTAL_3_579545MHz)
MCFG_SOUND_ROUTE(0, "mono", 1.0)
MCFG_SOUND_ROUTE(1, "mono", 1.0)
@@ -2119,6 +2122,8 @@ static MACHINE_CONFIG_START( tmnt, tmnt_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", XTAL_3_579545MHz)
MCFG_SOUND_ROUTE(0, "mono", 1.0)
MCFG_SOUND_ROUTE(1, "mono", 1.0)
@@ -2446,6 +2451,10 @@ static MACHINE_CONFIG_START( prmrsocr, tmnt_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch3")
+
MCFG_DEVICE_ADD("k054539", K054539, XTAL_18_432MHz)
MCFG_K054539_TIMER_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI))
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
diff --git a/src/mame/drivers/tp84.cpp b/src/mame/drivers/tp84.cpp
index 06464035fc4..cd1cb1905ff 100644
--- a/src/mame/drivers/tp84.cpp
+++ b/src/mame/drivers/tp84.cpp
@@ -66,6 +66,7 @@ C004 76489 #4 trigger
#include "emu.h"
#include "cpu/z80/z80.h"
#include "cpu/m6809/m6809.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/sn76496.h"
#include "sound/flt_rc.h"
@@ -133,7 +134,7 @@ static ADDRESS_MAP_START( tp84_cpu1_map, AS_PROGRAM, 8, tp84_state )
AM_RANGE(0x3004, 0x3004) AM_WRITEONLY AM_SHARE("flipscreen_x")
AM_RANGE(0x3005, 0x3005) AM_WRITEONLY AM_SHARE("flipscreen_y")
AM_RANGE(0x3800, 0x3800) AM_WRITE(tp84_sh_irqtrigger_w)
- AM_RANGE(0x3a00, 0x3a00) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x3a00, 0x3a00) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x3c00, 0x3c00) AM_WRITEONLY AM_SHARE("scroll_x")
AM_RANGE(0x3e00, 0x3e00) AM_WRITEONLY AM_SHARE("scroll_y")
AM_RANGE(0x4000, 0x43ff) AM_RAM AM_SHARE("bg_videoram")
@@ -159,7 +160,7 @@ static ADDRESS_MAP_START( tp84b_cpu1_map, AS_PROGRAM, 8, tp84_state )
AM_RANGE(0x1c04, 0x1c04) AM_WRITEONLY AM_SHARE("flipscreen_x")
AM_RANGE(0x1c05, 0x1c05) AM_WRITEONLY AM_SHARE("flipscreen_y")
AM_RANGE(0x1e00, 0x1e00) AM_WRITE(tp84_sh_irqtrigger_w)
- AM_RANGE(0x1e80, 0x1e80) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x1e80, 0x1e80) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x1f00, 0x1f00) AM_WRITEONLY AM_SHARE("scroll_x")
AM_RANGE(0x1f80, 0x1f80) AM_WRITEONLY AM_SHARE("scroll_y")
AM_RANGE(0x8000, 0xffff) AM_ROM
@@ -186,7 +187,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( audio_map, AS_PROGRAM, 8, tp84_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x43ff) AM_RAM
- AM_RANGE(0x6000, 0x6000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x6000, 0x6000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x8000, 0x8000) AM_READ(tp84_sh_timer_r)
AM_RANGE(0xa000, 0xa1ff) AM_WRITE(tp84_filter_w)
AM_RANGE(0xc000, 0xc000) AM_WRITENOP
@@ -319,6 +320,8 @@ static MACHINE_CONFIG_START( tp84, tp84_state )
/* audio hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("y2404_1", Y2404, XTAL_14_31818MHz/8) /* verified on pcb */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "filter1", 0.75)
diff --git a/src/mame/drivers/trackfld.cpp b/src/mame/drivers/trackfld.cpp
index 9395956077b..2767f24530e 100644
--- a/src/mame/drivers/trackfld.cpp
+++ b/src/mame/drivers/trackfld.cpp
@@ -231,7 +231,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, trackfld_state )
AM_RANGE(0x1085, 0x1085) AM_MIRROR(0x0078) AM_WRITENOP /* CN3.2 */
AM_RANGE(0x1086, 0x1086) AM_MIRROR(0x0078) AM_WRITENOP /* CN3.4 */
AM_RANGE(0x1087, 0x1087) AM_MIRROR(0x0078) AM_WRITE(irq_mask_w) /* INT */
- AM_RANGE(0x1100, 0x1100) AM_MIRROR(0x007f) AM_WRITE(soundlatch_byte_w) /* 32 */
+ AM_RANGE(0x1100, 0x1100) AM_MIRROR(0x007f) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* 32 */
AM_RANGE(0x1200, 0x1200) AM_MIRROR(0x007f) AM_READ_PORT("DSW2")
AM_RANGE(0x1280, 0x1280) AM_MIRROR(0x007c) AM_READ_PORT("SYSTEM")
AM_RANGE(0x1281, 0x1281) AM_MIRROR(0x007c) AM_READ_PORT("IN0")
@@ -284,7 +284,7 @@ static ADDRESS_MAP_START( yieartf_map, AS_PROGRAM, 8, trackfld_state )
AM_RANGE(0x1085, 0x1085) AM_MIRROR(0x0078) AM_WRITENOP /* CN3.2 */
AM_RANGE(0x1086, 0x1086) AM_MIRROR(0x0078) AM_WRITENOP /* CN3.4 */
AM_RANGE(0x1087, 0x1087) AM_MIRROR(0x0078) AM_WRITE(irq_mask_w) /* INT */
-// AM_RANGE(0x1100, 0x1100) AM_MIRROR(0x007f) AM_WRITE(soundlatch_byte_w) /* 32 */
+// AM_RANGE(0x1100, 0x1100) AM_MIRROR(0x007f) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* 32 */
AM_RANGE(0x1200, 0x1200) AM_MIRROR(0x007f) AM_READ_PORT("DSW2")
AM_RANGE(0x1280, 0x1280) AM_MIRROR(0x007c) AM_READ_PORT("SYSTEM")
AM_RANGE(0x1281, 0x1281) AM_MIRROR(0x007c) AM_READ_PORT("IN0")
@@ -311,7 +311,7 @@ static ADDRESS_MAP_START( reaktor_map, AS_PROGRAM, 8, trackfld_state )
AM_RANGE(0x9081, 0x9081) AM_DEVWRITE("trackfld_audio", trackfld_audio_device, konami_sh_irqtrigger_w) /* cause interrupt on audio CPU */
AM_RANGE(0x9083, 0x9084) AM_WRITE(coin_w)
AM_RANGE(0x9087, 0x9087) AM_WRITE(irq_mask_w)
- AM_RANGE(0x9100, 0x9100) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x9100, 0x9100) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x9200, 0x9200) AM_READ_PORT("DSW2")
AM_RANGE(0x9280, 0x9280) AM_READ_PORT("SYSTEM")
AM_RANGE(0x9281, 0x9281) AM_READ_PORT("IN0")
@@ -344,7 +344,7 @@ static ADDRESS_MAP_START( mastkin_map, AS_PROGRAM, 8, trackfld_state )
AM_RANGE(0x10b1, 0x10b1) AM_READNOP AM_DEVWRITE("trackfld_audio", trackfld_audio_device, konami_sh_irqtrigger_w)
AM_RANGE(0x10b3, 0x10b4) AM_WRITE(coin_w) // actually not used
AM_RANGE(0x10b7, 0x10b7) AM_READNOP AM_WRITE(irq_mask_w)
- AM_RANGE(0x1100, 0x1100) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x1100, 0x1100) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x1200, 0x1200) AM_READ_PORT("DSW2")
AM_RANGE(0x1280, 0x1280) AM_READ_PORT("SYSTEM")
AM_RANGE(0x1281, 0x1281) AM_READ_PORT("IN0")
@@ -371,7 +371,7 @@ static ADDRESS_MAP_START( wizzquiz_map, AS_PROGRAM, 8, trackfld_state )
AM_RANGE(0x1081, 0x1081) AM_DEVWRITE("trackfld_audio", trackfld_audio_device, konami_sh_irqtrigger_w) /* cause interrupt on audio CPU */
AM_RANGE(0x1083, 0x1084) AM_WRITE(coin_w)
AM_RANGE(0x1087, 0x1087) AM_WRITE(irq_mask_w)
- AM_RANGE(0x1100, 0x1100) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x1100, 0x1100) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x1200, 0x1200) AM_READ_PORT("DSW2")
AM_RANGE(0x1280, 0x1280) AM_READ_PORT("SYSTEM")
AM_RANGE(0x1281, 0x1281) AM_READ_PORT("IN0")
@@ -402,7 +402,7 @@ READ8_MEMBER(trackfld_state::trackfld_SN76496_r)
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, trackfld_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0x1c00) AM_RAM
- AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x1fff) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x1fff) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x8000, 0x8000) AM_MIRROR(0x1fff) AM_DEVREAD("trackfld_audio", trackfld_audio_device, trackfld_sh_timer_r)
AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x1fff) AM_WRITE(konami_SN76496_latch_w)
AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x1fff) AM_READ(trackfld_SN76496_r) AM_WRITE(konami_SN76496_w)
@@ -416,7 +416,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( hyprolyb_sound_map, AS_PROGRAM, 8, trackfld_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0x1c00) AM_RAM
- AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x1fff) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x1fff) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x8000, 0x8000) AM_MIRROR(0x1fff) AM_DEVREAD("trackfld_audio", trackfld_audio_device, trackfld_sh_timer_r)
AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x1fff) AM_WRITE(konami_SN76496_latch_w)
AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x1fff) AM_READ(trackfld_SN76496_r) AM_WRITE(konami_SN76496_w)
@@ -924,6 +924,8 @@ static MACHINE_CONFIG_START( trackfld, trackfld_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("trackfld_audio", TRACKFLD_AUDIO, 0)
MCFG_DAC_ADD("dac")
@@ -979,6 +981,8 @@ static MACHINE_CONFIG_START( yieartf, trackfld_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("trackfld_audio", TRACKFLD_AUDIO, 0)
MCFG_DAC_ADD("dac")
@@ -1276,7 +1280,7 @@ ROM_START( hipoly )
ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
ROM_LOAD( "2.1a", 0x6000, 0x2000, CRC(82257fb7) SHA1(4a5038292e582d5c3b5f2d82b01c57ccb24f3095) ) // only one byte of difference with hyprolymba
ROM_LOAD( "2.2a", 0x8000, 0x2000, CRC(15b83099) SHA1(79827590d74f20c9a95723e06b05af2b15c34f5f) ) // ok
- ROM_LOAD( "2.4a", 0xa000, 0x2000, CRC(93a32a97) SHA1(4fbb2fcdf9bc7a3d273dbc27b8157f163ff9bf11) ) // too different... maybe a bad dump?
+ ROM_LOAD( "2.4a", 0xa000, 0x2000, BAD_DUMP CRC(93a32a97) SHA1(4fbb2fcdf9bc7a3d273dbc27b8157f163ff9bf11) ) // too different... maybe a bad dump?
ROM_LOAD( "2.5a", 0xc000, 0x2000, CRC(d099b1e8) SHA1(0472991ad6caef41ec6b8ec8bf3d9d07584a57cc) ) // ok
ROM_LOAD( "2.7a", 0xe000, 0x2000, CRC(974ff815) SHA1(11512df2008a79ba44bbb84bd70885f187113211) ) // ok
diff --git a/src/mame/drivers/tutankhm.cpp b/src/mame/drivers/tutankhm.cpp
index b4df2b49c6c..a00e1e674a7 100644
--- a/src/mame/drivers/tutankhm.cpp
+++ b/src/mame/drivers/tutankhm.cpp
@@ -8,7 +8,7 @@
based on original work by Rob Jarrett
I include here the document based on Rob Jarrett's research because it's
- really exaustive.
+ really exhaustive.
Sound board: uses the same board as Pooyan.
@@ -52,6 +52,7 @@
#include "emu.h"
#include "cpu/m6809/m6809.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "includes/konamipt.h"
#include "audio/timeplt.h"
@@ -135,7 +136,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, tutankhm_state )
AM_RANGE(0x8207, 0x8207) AM_MIRROR(0x00f8) AM_WRITE(tutankhm_flip_screen_y_w)
AM_RANGE(0x8300, 0x8300) AM_MIRROR(0x00ff) AM_WRITE(tutankhm_bankselect_w)
AM_RANGE(0x8600, 0x8600) AM_MIRROR(0x00ff) AM_DEVWRITE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w)
- AM_RANGE(0x8700, 0x8700) AM_MIRROR(0x00ff) AM_WRITE(soundlatch_byte_w)
+ AM_RANGE(0x8700, 0x8700) AM_MIRROR(0x00ff) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x8800, 0x8fff) AM_RAM
AM_RANGE(0x9000, 0x9fff) AM_ROMBANK("bank1")
AM_RANGE(0xa000, 0xffff) AM_ROM
@@ -244,6 +245,9 @@ static MACHINE_CONFIG_START( tutankhm, tutankhm_state )
MCFG_PALETTE_FORMAT(BBGGGRRR)
/* sound hardware */
+
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_FRAGMENT_ADD(timeplt_sound)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/twin16.cpp b/src/mame/drivers/twin16.cpp
index e25c719d8d5..94b7b897dfe 100644
--- a/src/mame/drivers/twin16.cpp
+++ b/src/mame/drivers/twin16.cpp
@@ -49,6 +49,7 @@ Known Issues:
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
#include "sound/2151intf.h"
+#include "machine/gen_latch.h"
#include "machine/nvram.h"
#include "machine/watchdog.h"
#include "includes/twin16.h"
@@ -166,7 +167,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, twin16_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM
AM_RANGE(0x9000, 0x9000) AM_WRITE(upd_reset_w)
- AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0xd000, 0xd000) AM_DEVWRITE("upd", upd7759_device, port_w)
@@ -185,7 +186,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, twin16_state )
AM_RANGE(0x0a0002, 0x0a0003) AM_READ_PORT("P1")
AM_RANGE(0x0a0004, 0x0a0005) AM_READ_PORT("P2")
AM_RANGE(0x0a0006, 0x0a0007) AM_READ_PORT("P3")
- AM_RANGE(0x0a0008, 0x0a0009) AM_WRITE8(soundlatch_byte_w, 0x00ff)
+ AM_RANGE(0x0a0008, 0x0a0009) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x0a0010, 0x0a0011) AM_READ_PORT("DSW2") AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w)
AM_RANGE(0x0a0012, 0x0a0013) AM_READ_PORT("DSW1")
AM_RANGE(0x0a0018, 0x0a0019) AM_READ_PORT("DSW3")
@@ -222,7 +223,7 @@ static ADDRESS_MAP_START( fround_map, AS_PROGRAM, 16, fround_state )
AM_RANGE(0x0a0000, 0x0a0001) AM_READ_PORT("SYSTEM") AM_WRITE(fround_CPU_register_w)
AM_RANGE(0x0a0002, 0x0a0003) AM_READ_PORT("P1")
AM_RANGE(0x0a0004, 0x0a0005) AM_READ_PORT("P2")
- AM_RANGE(0x0a0008, 0x0a0009) AM_WRITE8(soundlatch_byte_w, 0x00ff)
+ AM_RANGE(0x0a0008, 0x0a0009) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x0a0010, 0x0a0011) AM_READ_PORT("DSW2") AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w)
AM_RANGE(0x0a0012, 0x0a0013) AM_READ_PORT("DSW1")
AM_RANGE(0x0a0018, 0x0a0019) AM_READ_PORT("DSW3")
@@ -695,6 +696,8 @@ static MACHINE_CONFIG_START( twin16, twin16_state )
// sound hardware
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", XTAL_3_579545MHz)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
@@ -747,6 +750,8 @@ static MACHINE_CONFIG_START( fround, fround_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", XTAL_3_579545MHz)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
diff --git a/src/mame/drivers/ultraman.cpp b/src/mame/drivers/ultraman.cpp
index 86c7507d5d9..3e0813a87fd 100644
--- a/src/mame/drivers/ultraman.cpp
+++ b/src/mame/drivers/ultraman.cpp
@@ -22,7 +22,7 @@
WRITE16_MEMBER(ultraman_state::sound_cmd_w)
{
if (ACCESSING_BITS_0_7)
- soundlatch_byte_w(space, 0, data & 0xff);
+ m_soundlatch->write(space, 0, data & 0xff);
}
WRITE16_MEMBER(ultraman_state::sound_irq_trigger_w)
@@ -58,7 +58,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, ultraman_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_RAM
- AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r) /* Sound latch read */
+ AM_RANGE(0xc000, 0xc000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
// AM_RANGE(0xd000, 0xd000) AM_WRITENOP /* ??? */
AM_RANGE(0xe000, 0xe000) AM_DEVREADWRITE("oki", okim6295_device, read, write) /* M6295 */
AM_RANGE(0xf000, 0xf001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) /* YM2151 */
@@ -224,6 +224,8 @@ static MACHINE_CONFIG_START( ultraman, ultraman_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", 24000000/6)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
diff --git a/src/mame/drivers/wecleman.cpp b/src/mame/drivers/wecleman.cpp
index 06f61c97bf2..96e4ddb5fd6 100644
--- a/src/mame/drivers/wecleman.cpp
+++ b/src/mame/drivers/wecleman.cpp
@@ -246,7 +246,7 @@ xx-xx-2003 Acho A. Tang
TODO:
- check dust color on title screen(I don't think it should be black)
- check brake light(LED) support
-- check occational off-pitch music and samples(sound interrupt related?)
+- check occasional off-pitch music and samples(sound interrupt related?)
* Sprite, road and sky drawings do not support 32-bit color depth.
Certain sprites with incorrect z-value still pop in front of closer
@@ -594,11 +594,11 @@ WRITE16_MEMBER(wecleman_state::wecleman_soundlatch_w)
{
if (ACCESSING_BITS_0_7)
{
- soundlatch_byte_w(space, 0, data & 0xFF);
+ m_soundlatch->write(space, 0, data & 0xFF);
}
}
-/* Protection - an external multiplyer connected to the sound CPU */
+/* Protection - an external multiplier connected to the sound CPU */
READ8_MEMBER(wecleman_state::multiply_r)
{
return (m_multiply_reg[0] * m_multiply_reg[1]) & 0xFF;
@@ -643,7 +643,7 @@ static ADDRESS_MAP_START( wecleman_sound_map, AS_PROGRAM, 8, wecleman_state )
AM_RANGE(0x9000, 0x9000) AM_READ(multiply_r) // Protection
AM_RANGE(0x9000, 0x9001) AM_WRITE(multiply_w) // Protection
AM_RANGE(0x9006, 0x9006) AM_WRITENOP // ?
- AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r) // From main CPU
+ AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // From main CPU
AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write) // K007232 (Reading offset 5/b triggers the sample)
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0xf000, 0xf000) AM_WRITE(wecleman_K00723216_bank_w) // Samples banking
@@ -659,7 +659,7 @@ WRITE16_MEMBER(wecleman_state::hotchase_soundlatch_w)
{
if (ACCESSING_BITS_0_7)
{
- soundlatch_byte_w(space, 0, data & 0xFF);
+ m_soundlatch->write(space, 0, data & 0xFF);
}
}
@@ -759,7 +759,7 @@ static ADDRESS_MAP_START( hotchase_sound_map, AS_PROGRAM, 8, wecleman_state )
AM_RANGE(0x3000, 0x300d) AM_READWRITE(hotchase_3_k007232_r, hotchase_3_k007232_w)
AM_RANGE(0x4000, 0x4007) AM_WRITE(hotchase_sound_control_w) // Sound volume, banking, etc.
AM_RANGE(0x5000, 0x5000) AM_WRITENOP // 0 at start of IRQ service, 1 at end (irq mask?)
- AM_RANGE(0x6000, 0x6000) AM_READ(soundlatch_byte_r) // From main CPU (Read on IRQ)
+ AM_RANGE(0x6000, 0x6000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // From main CPU (Read on IRQ)
AM_RANGE(0x7000, 0x7000) AM_WRITE(hotchase_sound_hs_w) // ACK signal to main CPU
AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -1101,6 +1101,8 @@ static MACHINE_CONFIG_START( wecleman, wecleman_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_YM2151_ADD("ymsnd", 3579545)
MCFG_SOUND_ROUTE(0, "mono", 0.85)
MCFG_SOUND_ROUTE(1, "mono", 0.85)
@@ -1181,6 +1183,8 @@ static MACHINE_CONFIG_START( hotchase, wecleman_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+
MCFG_SOUND_ADD("k007232_1", K007232, 3579545)
// SLEV not used, volume control is elsewhere
MCFG_SOUND_ROUTE(0, "mono", 0.20)
diff --git a/src/mame/drivers/xexex.cpp b/src/mame/drivers/xexex.cpp
index c9d3ebf32a8..f22a006732a 100644
--- a/src/mame/drivers/xexex.cpp
+++ b/src/mame/drivers/xexex.cpp
@@ -266,17 +266,17 @@ WRITE16_MEMBER(xexex_state::sound_cmd1_w)
{
// anyone knows why 0x1a keeps lurking the sound queue in the world version???
if (m_strip_0x1a)
- if (soundlatch2_byte_r(space, 0) == 1 && data == 0x1a)
+ if (m_soundlatch2->read(space, 0) == 1 && data == 0x1a)
return;
- soundlatch_byte_w(space, 0, data & 0xff);
+ m_soundlatch->write(space, 0, data & 0xff);
}
}
WRITE16_MEMBER(xexex_state::sound_cmd2_w)
{
if (ACCESSING_BITS_0_7)
- soundlatch2_byte_w(space, 0, data & 0xff);
+ m_soundlatch2->write(space, 0, data & 0xff);
}
WRITE16_MEMBER(xexex_state::sound_irq_w)
@@ -286,7 +286,7 @@ WRITE16_MEMBER(xexex_state::sound_irq_w)
READ16_MEMBER(xexex_state::sound_status_r)
{
- return soundlatch3_byte_r(space, 0);
+ return m_soundlatch3->read(space, 0);
}
WRITE8_MEMBER(xexex_state::sound_bankswitch_w)
@@ -409,9 +409,9 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, xexex_state )
AM_RANGE(0xc000, 0xdfff) AM_RAM
AM_RANGE(0xe000, 0xe22f) AM_DEVREADWRITE("k054539", k054539_device, read, write)
AM_RANGE(0xec00, 0xec01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
- AM_RANGE(0xf000, 0xf000) AM_WRITE(soundlatch3_byte_w)
- AM_RANGE(0xf002, 0xf002) AM_READ(soundlatch_byte_r)
- AM_RANGE(0xf003, 0xf003) AM_READ(soundlatch2_byte_r)
+ AM_RANGE(0xf000, 0xf000) AM_DEVWRITE("soundlatch3", generic_latch_8_device, write)
+ AM_RANGE(0xf002, 0xf002) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
+ AM_RANGE(0xf003, 0xf003) AM_DEVREAD("soundlatch2", generic_latch_8_device, read)
AM_RANGE(0xf800, 0xf800) AM_WRITE(sound_bankswitch_w)
ADDRESS_MAP_END
@@ -542,6 +542,10 @@ static MACHINE_CONFIG_START( xexex, xexex_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch3")
+
MCFG_YM2151_ADD("ymsnd", XTAL_32MHz/8) // 4MHz
MCFG_SOUND_ROUTE(0, "filter1l", 0.50)
MCFG_SOUND_ROUTE(0, "filter1r", 0.50)
diff --git a/src/mame/drivers/xmen.cpp b/src/mame/drivers/xmen.cpp
index efc12b2d547..e8debf54435 100644
--- a/src/mame/drivers/xmen.cpp
+++ b/src/mame/drivers/xmen.cpp
@@ -11,8 +11,8 @@ notes:
the way the double screen works in xmen6p is not fully understood
the board only has one of each gfx chip, the only additional chip not found
-on the 2/4p board is 053253. This chip is also on Run n Gun which should
-likewise be a 2 screen game
+on the 2/4p board is 053253. This chip is also on Run n Gun which is
+likewise a 2 screen game
***************************************************************************/
#include "emu.h"
@@ -22,7 +22,6 @@ likewise be a 2 screen game
#include "machine/watchdog.h"
#include "cpu/z80/z80.h"
#include "sound/2151intf.h"
-#include "sound/k054539.h"
#include "rendlay.h"
#include "includes/xmen.h"
#include "includes/konamipt.h"
@@ -58,7 +57,7 @@ WRITE16_MEMBER(xmen_state::eeprom_w)
READ16_MEMBER(xmen_state::sound_status_r)
{
- return soundlatch2_byte_r(space, 0);
+ return m_soundlatch2->read(space, 0);
}
WRITE16_MEMBER(xmen_state::sound_cmd_w)
@@ -66,7 +65,7 @@ WRITE16_MEMBER(xmen_state::sound_cmd_w)
if (ACCESSING_BITS_0_7)
{
data &= 0xff;
- soundlatch_byte_w(space, 0, data);
+ m_soundlatch->write(space, 0, data);
}
}
@@ -117,8 +116,8 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, xmen_state )
AM_RANGE(0xc000, 0xdfff) AM_RAM
AM_RANGE(0xe000, 0xe22f) AM_DEVREADWRITE("k054539", k054539_device, read, write)
AM_RANGE(0xe800, 0xe801) AM_MIRROR(0x0400) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
- AM_RANGE(0xf000, 0xf000) AM_WRITE(soundlatch2_byte_w)
- AM_RANGE(0xf002, 0xf002) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xf000, 0xf000) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write)
+ AM_RANGE(0xf002, 0xf002) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0xf800, 0xf800) AM_WRITE(sound_bankswitch_w)
ADDRESS_MAP_END
@@ -353,6 +352,9 @@ static MACHINE_CONFIG_START( xmen, xmen_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+
MCFG_YM2151_ADD("ymsnd", XTAL_16MHz/4) /* verified on pcb */
MCFG_SOUND_ROUTE(0, "lspeaker", 0.20)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.20)
@@ -416,6 +418,9 @@ static MACHINE_CONFIG_START( xmen6p, xmen_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+
MCFG_YM2151_ADD("ymsnd", XTAL_16MHz/4)
MCFG_SOUND_ROUTE(0, "lspeaker", 0.20)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.20)
diff --git a/src/mame/includes/airbustr.h b/src/mame/includes/airbustr.h
index 0a47efd19d0..557f5e97b4d 100644
--- a/src/mame/includes/airbustr.h
+++ b/src/mame/includes/airbustr.h
@@ -6,6 +6,7 @@
*************************************************************************/
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "video/kan_pand.h"
@@ -26,7 +27,9 @@ public:
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
- m_watchdog(*this, "watchdog")
+ m_watchdog(*this, "watchdog"),
+ m_soundlatch(*this, "soundlatch"),
+ m_soundlatch2(*this, "soundlatch2")
{ }
/* memory pointers */
@@ -59,6 +62,8 @@ public:
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_device<watchdog_timer_device> m_watchdog;
+ required_device<generic_latch_8_device> m_soundlatch;
+ required_device<generic_latch_8_device> m_soundlatch2;
DECLARE_READ8_MEMBER(devram_r);
DECLARE_WRITE8_MEMBER(master_nmi_trigger_w);
diff --git a/src/mame/includes/ajax.h b/src/mame/includes/ajax.h
index 29c40f86c1c..7ff39c253df 100644
--- a/src/mame/includes/ajax.h
+++ b/src/mame/includes/ajax.h
@@ -1,5 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Manuel Abadia
+
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/k007232.h"
#include "video/k052109.h"
@@ -21,7 +23,8 @@ public:
m_k052109(*this, "k052109"),
m_k051960(*this, "k051960"),
m_k051316(*this, "k051316"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_soundlatch(*this, "soundlatch") { }
/* video-related */
UINT8 m_priority;
@@ -40,6 +43,8 @@ public:
required_device<k051960_device> m_k051960;
required_device<k051316_device> m_k051316;
required_device<palette_device> m_palette;
+ required_device<generic_latch_8_device> m_soundlatch;
+
DECLARE_WRITE8_MEMBER(sound_bank_w);
DECLARE_READ8_MEMBER(ajax_ls138_f10_r);
DECLARE_WRITE8_MEMBER(ajax_ls138_f10_w);
diff --git a/src/mame/includes/aliens.h b/src/mame/includes/aliens.h
index 8d78eb14660..bdbd010e6b0 100644
--- a/src/mame/includes/aliens.h
+++ b/src/mame/includes/aliens.h
@@ -7,6 +7,7 @@
*************************************************************************/
#include "machine/bankdev.h"
+#include "machine/gen_latch.h"
#include "sound/k007232.h"
#include "video/k052109.h"
#include "video/k051960.h"
@@ -22,6 +23,7 @@ public:
m_k007232(*this, "k007232"),
m_k052109(*this, "k052109"),
m_k051960(*this, "k051960"),
+ m_soundlatch(*this, "soundlatch"),
m_rombank(*this, "rombank") { }
/* devices */
@@ -31,6 +33,7 @@ public:
required_device<k007232_device> m_k007232;
required_device<k052109_device> m_k052109;
required_device<k051960_device> m_k051960;
+ required_device<generic_latch_8_device> m_soundlatch;
required_memory_bank m_rombank;
DECLARE_WRITE8_MEMBER(aliens_coin_counter_w);
diff --git a/src/mame/includes/bladestl.h b/src/mame/includes/bladestl.h
index e95eac874e8..d2d83602a54 100644
--- a/src/mame/includes/bladestl.h
+++ b/src/mame/includes/bladestl.h
@@ -5,6 +5,8 @@
Blades of Steel
*************************************************************************/
+
+#include "machine/gen_latch.h"
#include "sound/flt_rc.h"
#include "sound/upd7759.h"
#include "video/k007342.h"
@@ -26,6 +28,7 @@ public:
m_filter2(*this, "filter2"),
m_filter3(*this, "filter3"),
m_gfxdecode(*this, "gfxdecode"),
+ m_soundlatch(*this, "soundlatch"),
m_trackball(*this, "TRACKBALL"),
m_rombank(*this, "rombank") { }
@@ -38,6 +41,7 @@ public:
required_device<filter_rc_device> m_filter2;
required_device<filter_rc_device> m_filter3;
required_device<gfxdecode_device> m_gfxdecode;
+ required_device<generic_latch_8_device> m_soundlatch;
required_ioport_array<4> m_trackball;
/* memory pointers */
diff --git a/src/mame/includes/chqflag.h b/src/mame/includes/chqflag.h
index 269d95edc36..b590740eb4f 100644
--- a/src/mame/includes/chqflag.h
+++ b/src/mame/includes/chqflag.h
@@ -6,6 +6,7 @@
*************************************************************************/
#include "machine/bankdev.h"
+#include "machine/gen_latch.h"
#include "sound/k007232.h"
#include "video/k051960.h"
#include "video/k051316.h"
@@ -26,6 +27,7 @@ public:
m_k051316_1(*this, "k051316_1"),
m_k051316_2(*this, "k051316_2"),
m_palette(*this, "palette"),
+ m_soundlatch2(*this, "soundlatch2"),
m_rombank(*this, "rombank") { }
/* misc */
@@ -45,6 +47,7 @@ public:
required_device<k051316_device> m_k051316_1;
required_device<k051316_device> m_k051316_2;
required_device<palette_device> m_palette;
+ required_device<generic_latch_8_device> m_soundlatch2;
/* memory pointers */
required_memory_bank m_rombank;
diff --git a/src/mame/includes/combatsc.h b/src/mame/includes/combatsc.h
index 6d5871da384..4247c19d75e 100644
--- a/src/mame/includes/combatsc.h
+++ b/src/mame/includes/combatsc.h
@@ -5,6 +5,8 @@
Combat School
*************************************************************************/
+
+#include "machine/gen_latch.h"
#include "sound/upd7759.h"
#include "sound/msm5205.h"
#include "video/k007121.h"
@@ -14,14 +16,15 @@ class combatsc_state : public driver_device
public:
combatsc_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_k007121_1(*this, "k007121_1"),
m_k007121_2(*this, "k007121_2"),
- m_maincpu(*this, "maincpu"),
m_upd7759(*this, "upd"),
m_msm5205(*this, "msm5205"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_soundlatch(*this, "soundlatch") { }
/* memory pointers */
UINT8 * m_videoram;
@@ -50,14 +53,15 @@ public:
/* devices */
+ required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
optional_device<k007121_device> m_k007121_1;
optional_device<k007121_device> m_k007121_2;
- required_device<cpu_device> m_maincpu;
optional_device<upd7759_device> m_upd7759;
optional_device<msm5205_device> m_msm5205;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ required_device<generic_latch_8_device> m_soundlatch;
DECLARE_WRITE8_MEMBER(combatsc_vreg_w);
DECLARE_WRITE8_MEMBER(combatscb_sh_irqtrigger_w);
diff --git a/src/mame/includes/contra.h b/src/mame/includes/contra.h
index 454a3ca21f9..771fed9df0a 100644
--- a/src/mame/includes/contra.h
+++ b/src/mame/includes/contra.h
@@ -54,7 +54,6 @@ public:
DECLARE_WRITE8_MEMBER(contra_bankswitch_w);
DECLARE_WRITE8_MEMBER(contra_sh_irqtrigger_w);
DECLARE_WRITE8_MEMBER(contra_coin_counter_w);
- DECLARE_WRITE8_MEMBER(cpu_sound_command_w);
DECLARE_WRITE8_MEMBER(contra_fg_vram_w);
DECLARE_WRITE8_MEMBER(contra_fg_cram_w);
DECLARE_WRITE8_MEMBER(contra_bg_vram_w);
diff --git a/src/mame/includes/crimfght.h b/src/mame/includes/crimfght.h
index b7d2b3afa00..c7d9b31a05b 100644
--- a/src/mame/includes/crimfght.h
+++ b/src/mame/includes/crimfght.h
@@ -5,7 +5,9 @@
Crime Fighters
*************************************************************************/
+
#include "machine/bankdev.h"
+#include "machine/gen_latch.h"
#include "sound/k007232.h"
#include "video/k052109.h"
#include "video/k051960.h"
@@ -22,6 +24,7 @@ public:
m_k052109(*this, "k052109"),
m_k051960(*this, "k051960"),
m_palette(*this, "palette"),
+ m_soundlatch(*this, "soundlatch"),
m_rombank(*this, "rombank") { }
/* devices */
@@ -32,6 +35,7 @@ public:
required_device<k052109_device> m_k052109;
required_device<k051960_device> m_k051960;
required_device<palette_device> m_palette;
+ required_device<generic_latch_8_device> m_soundlatch;
required_memory_bank m_rombank;
DECLARE_WRITE8_MEMBER(crimfght_coin_w);
diff --git a/src/mame/includes/dbz.h b/src/mame/includes/dbz.h
index 734a9a0b2d3..e2feddb4275 100644
--- a/src/mame/includes/dbz.h
+++ b/src/mame/includes/dbz.h
@@ -6,6 +6,7 @@
*************************************************************************/
+#include "machine/gen_latch.h"
#include "machine/k053252.h"
#include "video/k054156_k054157_k056832.h"
#include "video/k053246_k053247_k055673.h"
@@ -28,7 +29,8 @@ public:
m_k056832(*this, "k056832"),
m_k053936_1(*this, "k053936_1"),
m_k053936_2(*this, "k053936_2"),
- m_gfxdecode(*this, "gfxdecode") { }
+ m_gfxdecode(*this, "gfxdecode"),
+ m_soundlatch(*this, "soundlatch") { }
/* memory pointers */
required_shared_ptr<UINT16> m_bg1_videoram;
@@ -54,6 +56,7 @@ public:
required_device<k053936_device> m_k053936_1;
required_device<k053936_device> m_k053936_2;
required_device<gfxdecode_device> m_gfxdecode;
+ required_device<generic_latch_8_device> m_soundlatch;
DECLARE_WRITE16_MEMBER(dbzcontrol_w);
DECLARE_WRITE16_MEMBER(dbz_sound_command_w);
diff --git a/src/mame/includes/djboy.h b/src/mame/includes/djboy.h
index 1a32b0a9733..ef464bdda47 100644
--- a/src/mame/includes/djboy.h
+++ b/src/mame/includes/djboy.h
@@ -6,6 +6,7 @@
*************************************************************************/
+#include "machine/gen_latch.h"
#include "video/kan_pand.h"
#define PROT_OUTPUT_BUFFER_SIZE 8
@@ -23,7 +24,8 @@ public:
m_beast(*this, "beast"),
m_pandora(*this, "pandora"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette")
+ m_palette(*this, "palette"),
+ m_soundlatch(*this, "soundlatch")
{ }
/* memory pointers */
@@ -58,6 +60,7 @@ public:
required_device<kaneko_pandora_device> m_pandora;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ required_device<generic_latch_8_device> m_soundlatch;
DECLARE_WRITE8_MEMBER(beast_data_w);
DECLARE_READ8_MEMBER(beast_data_r);
diff --git a/src/mame/includes/flkatck.h b/src/mame/includes/flkatck.h
index 5f95f7471d0..90f04e1334e 100644
--- a/src/mame/includes/flkatck.h
+++ b/src/mame/includes/flkatck.h
@@ -6,6 +6,7 @@
*************************************************************************/
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/k007232.h"
#include "video/k007121.h"
@@ -16,12 +17,13 @@ public:
flkatck_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_k007121_ram(*this, "k007121_ram"),
+ m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_k007121(*this, "k007121"),
m_k007232(*this, "k007232"),
- m_maincpu(*this, "maincpu"),
m_watchdog(*this, "watchdog"),
- m_gfxdecode(*this, "gfxdecode") { }
+ m_gfxdecode(*this, "gfxdecode"),
+ m_soundlatch(*this, "soundlatch") { }
/* memory pointers */
required_shared_ptr<UINT8> m_k007121_ram;
@@ -35,9 +37,14 @@ public:
int m_multiply_reg[2];
/* devices */
+ required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<k007121_device> m_k007121;
required_device<k007232_device> m_k007232;
+ required_device<watchdog_timer_device> m_watchdog;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<generic_latch_8_device> m_soundlatch;
+
DECLARE_WRITE8_MEMBER(flkatck_bankswitch_w);
DECLARE_READ8_MEMBER(flkatck_ls138_r);
DECLARE_WRITE8_MEMBER(flkatck_ls138_w);
@@ -53,7 +60,4 @@ public:
UINT32 screen_update_flkatck(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(flkatck_interrupt);
DECLARE_WRITE8_MEMBER(volume_callback);
- required_device<cpu_device> m_maincpu;
- required_device<watchdog_timer_device> m_watchdog;
- required_device<gfxdecode_device> m_gfxdecode;
};
diff --git a/src/mame/includes/gijoe.h b/src/mame/includes/gijoe.h
index d4c417bcd01..06d39d06619 100644
--- a/src/mame/includes/gijoe.h
+++ b/src/mame/includes/gijoe.h
@@ -5,6 +5,8 @@
GI Joe
*************************************************************************/
+
+#include "machine/gen_latch.h"
#include "sound/k054539.h"
#include "video/k053251.h"
#include "video/k054156_k054157_k056832.h"
@@ -24,7 +26,9 @@ public:
m_k056832(*this, "k056832"),
m_k053246(*this, "k053246"),
m_k053251(*this, "k053251"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_soundlatch(*this, "soundlatch"),
+ m_soundlatch2(*this, "soundlatch2") { }
/* memory pointers */
required_shared_ptr<UINT16> m_spriteram;
@@ -50,6 +54,9 @@ public:
required_device<k053247_device> m_k053246;
required_device<k053251_device> m_k053251;
required_device<palette_device> m_palette;
+ required_device<generic_latch_8_device> m_soundlatch;
+ required_device<generic_latch_8_device> m_soundlatch2;
+
DECLARE_READ16_MEMBER(control2_r);
DECLARE_WRITE16_MEMBER(control2_w);
DECLARE_WRITE16_MEMBER(sound_cmd_w);
diff --git a/src/mame/includes/ironhors.h b/src/mame/includes/ironhors.h
index b0c78ebf6e3..8a9c0f7c50d 100644
--- a/src/mame/includes/ironhors.h
+++ b/src/mame/includes/ironhors.h
@@ -6,6 +6,8 @@
*************************************************************************/
+#include "machine/gen_latch.h"
+
class ironhors_state : public driver_device
{
public:
@@ -15,6 +17,7 @@ public:
m_soundcpu(*this, "soundcpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
+ m_soundlatch(*this, "soundlatch"),
m_interrupt_enable(*this, "int_enable"),
m_scroll(*this, "scroll"),
m_colorram(*this, "colorram"),
@@ -27,6 +30,7 @@ public:
required_device<cpu_device> m_soundcpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ required_device<generic_latch_8_device> m_soundlatch;
/* memory pointers */
required_shared_ptr<UINT8> m_interrupt_enable;
diff --git a/src/mame/includes/kaneko16.h b/src/mame/includes/kaneko16.h
index fa80cab978a..f5912922a04 100644
--- a/src/mame/includes/kaneko16.h
+++ b/src/mame/includes/kaneko16.h
@@ -9,6 +9,7 @@
#ifndef __KANEKO16_H__
#define __KANEKO16_H__
+#include "machine/gen_latch.h"
#include "machine/nvram.h"
#include "video/kan_pand.h"
#include "video/kaneko_tmap.h"
@@ -38,6 +39,7 @@ public:
m_pandora(*this, "pandora"),
m_palette(*this, "palette"),
m_eeprom(*this, "eeprom"),
+ m_soundlatch(*this, "soundlatch"),
m_spriteram(*this, "spriteram"),
m_mainram(*this, "mainram")
{ }
@@ -55,6 +57,7 @@ public:
optional_device<kaneko_pandora_device> m_pandora;
required_device<palette_device> m_palette;
optional_device<eeprom_serial_93cxx_device> m_eeprom;
+ optional_device<generic_latch_8_device> m_soundlatch;
optional_shared_ptr<UINT16> m_spriteram;
optional_shared_ptr<UINT16> m_mainram;
diff --git a/src/mame/includes/lethal.h b/src/mame/includes/lethal.h
index f53c540f38d..acac08d8610 100644
--- a/src/mame/includes/lethal.h
+++ b/src/mame/includes/lethal.h
@@ -42,7 +42,6 @@ public:
required_device<palette_device> m_palette;
DECLARE_WRITE8_MEMBER(control2_w);
- DECLARE_WRITE8_MEMBER(sound_cmd_w);
DECLARE_WRITE8_MEMBER(sound_irq_w);
DECLARE_READ8_MEMBER(sound_status_r);
DECLARE_WRITE8_MEMBER(le_bankswitch_w);
diff --git a/src/mame/includes/megasys1.h b/src/mame/includes/megasys1.h
index 65694249f8f..3e7f4f92202 100644
--- a/src/mame/includes/megasys1.h
+++ b/src/mame/includes/megasys1.h
@@ -15,6 +15,7 @@
***************************************************************************/
+#include "machine/gen_latch.h"
#include "sound/okim6295.h"
@@ -31,16 +32,19 @@ public:
m_audiocpu(*this, "audiocpu"),
m_oki1(*this, "oki1"),
m_oki2(*this, "oki2"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_palette(*this, "palette"),
+ m_screen(*this, "screen"),
+ m_soundlatch(*this, "soundlatch"),
+ m_soundlatch2(*this, "soundlatch2"),
+ m_soundlatch_z(*this, "soundlatch_z"),
m_rom_maincpu(*this, "maincpu"),
m_io_system(*this, "SYSTEM"),
m_io_p1(*this, "P1"),
m_io_p2(*this, "P2"),
m_io_dsw(*this, "DSW"),
m_io_dsw1(*this, "DSW1"),
- m_io_dsw2(*this, "DSW2"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette"),
- m_screen(*this, "screen")
+ m_io_dsw2(*this, "DSW2")
{ }
required_shared_ptr<UINT16> m_vregs;
@@ -51,6 +55,12 @@ public:
optional_device<cpu_device> m_audiocpu;
optional_device<okim6295_device> m_oki1;
optional_device<okim6295_device> m_oki2;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<palette_device> m_palette;
+ required_device<screen_device> m_screen;
+ optional_device<generic_latch_16_device> m_soundlatch;
+ optional_device<generic_latch_16_device> m_soundlatch2;
+ optional_device<generic_latch_8_device> m_soundlatch_z;
required_region_ptr<UINT16> m_rom_maincpu;
required_ioport m_io_system;
required_ioport m_io_p1;
@@ -58,9 +68,6 @@ public:
optional_ioport m_io_dsw;
optional_ioport m_io_dsw1;
optional_ioport m_io_dsw2;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
- required_device<screen_device> m_screen;
bitmap_ind16 m_sprite_buffer_bitmap;
@@ -141,6 +148,7 @@ public:
DECLARE_DRIVER_INIT(edfbl);
DECLARE_DRIVER_INIT(stdragona);
DECLARE_DRIVER_INIT(stdragonb);
+ DECLARE_DRIVER_INIT(systemz);
TILEMAP_MAPPER_MEMBER(megasys1_scan_8x8);
TILEMAP_MAPPER_MEMBER(megasys1_scan_16x16);
TILE_GET_INFO_MEMBER(megasys1_get_scroll_tile_info_8x8);
@@ -167,5 +175,4 @@ public:
void rodland_gfx_unmangle(const char *region);
void jitsupro_gfx_unmangle(const char *region);
void stdragona_gfx_unmangle(const char *region);
- DECLARE_WRITE_LINE_MEMBER(irqhandler);
};
diff --git a/src/mame/includes/megazone.h b/src/mame/includes/megazone.h
index 8621b5c90af..3234ec35401 100644
--- a/src/mame/includes/megazone.h
+++ b/src/mame/includes/megazone.h
@@ -55,7 +55,6 @@ public:
DECLARE_WRITE8_MEMBER(megazone_flipscreen_w);
DECLARE_READ8_MEMBER(megazone_port_a_r);
DECLARE_WRITE8_MEMBER(megazone_port_b_w);
- DECLARE_DRIVER_INIT(megazone);
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
diff --git a/src/mame/includes/moo.h b/src/mame/includes/moo.h
index 28cb1e9ffef..42bb1a0bc53 100644
--- a/src/mame/includes/moo.h
+++ b/src/mame/includes/moo.h
@@ -7,6 +7,7 @@
*************************************************************************/
#include "sound/okim6295.h"
#include "sound/k054539.h"
+#include "machine/gen_latch.h"
#include "machine/k053252.h"
#include "video/k053251.h"
#include "video/k054156_k054157_k056832.h"
@@ -32,7 +33,10 @@ public:
m_k056832(*this, "k056832"),
m_k054338(*this, "k054338"),
m_palette(*this, "palette"),
- m_screen(*this, "screen") { }
+ m_screen(*this, "screen"),
+ m_soundlatch(*this, "soundlatch"),
+ m_soundlatch2(*this, "soundlatch2"),
+ m_soundlatch3(*this, "soundlatch3") { }
/* memory pointers */
optional_shared_ptr<UINT16> m_workram;
@@ -61,6 +65,9 @@ public:
required_device<k054338_device> m_k054338;
required_device<palette_device> m_palette;
required_device<screen_device> m_screen;
+ optional_device<generic_latch_8_device> m_soundlatch;
+ optional_device<generic_latch_8_device> m_soundlatch2;
+ optional_device<generic_latch_8_device> m_soundlatch3;
emu_timer *m_dmaend_timer;
DECLARE_READ16_MEMBER(control2_r);
diff --git a/src/mame/includes/mystwarr.h b/src/mame/includes/mystwarr.h
index 0ea09731627..c0e35e0b61b 100644
--- a/src/mame/includes/mystwarr.h
+++ b/src/mame/includes/mystwarr.h
@@ -1,5 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:R. Belmont, Phil Stroffolino, Acho A. Tang, Nicola Salmoria
+
+#include "machine/gen_latch.h"
#include "sound/k054539.h"
#include "machine/k053252.h"
#include "video/k055555.h"
@@ -15,6 +17,9 @@ public:
m_k053252(*this, "k053252"),
m_k056832(*this, "k056832"),
m_k055673(*this, "k055673"),
+ m_soundlatch(*this, "soundlatch"),
+ m_soundlatch2(*this, "soundlatch2"),
+ m_soundlatch3(*this, "soundlatch3"),
m_gx_workram(*this,"gx_workram"),
m_spriteram(*this,"spriteram")
{ }
@@ -23,6 +28,9 @@ public:
required_device<k053252_device> m_k053252;
required_device<k056832_device> m_k056832;
required_device<k055673_device> m_k055673;
+ required_device<generic_latch_8_device> m_soundlatch;
+ required_device<generic_latch_8_device> m_soundlatch2;
+ required_device<generic_latch_8_device> m_soundlatch3;
required_shared_ptr<UINT16> m_gx_workram;
optional_shared_ptr<UINT16> m_spriteram;
std::unique_ptr<UINT8[]> m_decoded;
diff --git a/src/mame/includes/plygonet.h b/src/mame/includes/plygonet.h
index 91caec85865..5b71fa27476 100644
--- a/src/mame/includes/plygonet.h
+++ b/src/mame/includes/plygonet.h
@@ -1,6 +1,8 @@
// license:BSD-3-Clause
// copyright-holders:R. Belmont, Andrew Gardner
+
#include "machine/eepromser.h"
+#include "machine/gen_latch.h"
#include "video/k053936.h"
#include "cpu/dsp56k/dsp56k.h"
@@ -21,26 +23,32 @@ public:
m_dsp(*this, "dsp"),
m_eeprom(*this, "eeprom"),
m_k053936(*this, "k053936"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_palette(*this, "palette"),
+ m_soundlatch(*this, "soundlatch"),
+ m_soundlatch2(*this, "soundlatch2"),
+ m_soundlatch3(*this, "soundlatch3"),
m_shared_ram(*this, "shared_ram"),
m_dsp56k_p_mirror(*this, "dsp56k_p_mirror"),
- m_dsp56k_p_8000(*this, "dsp56k_p_8000"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette")
- { }
+ m_dsp56k_p_8000(*this, "dsp56k_p_8000")
+ { }
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<dsp56k_device> m_dsp;
required_device<eeprom_serial_er5911_device> m_eeprom;
required_device<k053936_device> m_k053936;
-
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<palette_device> m_palette;
+ required_device<generic_latch_8_device> m_soundlatch;
+ required_device<generic_latch_8_device> m_soundlatch2;
+ required_device<generic_latch_8_device> m_soundlatch3;
+
/* 68k-side shared ram */
required_shared_ptr<UINT32> m_shared_ram;
required_shared_ptr<UINT16> m_dsp56k_p_mirror;
required_shared_ptr<UINT16> m_dsp56k_p_8000;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
ioport_port *m_inputs[4];
UINT8 m_sys0;
diff --git a/src/mame/includes/rockrage.h b/src/mame/includes/rockrage.h
index 52c34236776..123358fc083 100644
--- a/src/mame/includes/rockrage.h
+++ b/src/mame/includes/rockrage.h
@@ -6,6 +6,7 @@
*************************************************************************/
+#include "machine/gen_latch.h"
#include "sound/vlm5030.h"
#include "video/k007342.h"
#include "video/k007420.h"
@@ -22,6 +23,7 @@ public:
m_vlm(*this, "vlm"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
+ m_soundlatch(*this, "soundlatch"),
m_rombank(*this, "rombank") { }
/* devices */
@@ -32,6 +34,7 @@ public:
required_device<vlm5030_device> m_vlm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ required_device<generic_latch_8_device> m_soundlatch;
/* memory pointers */
required_memory_bank m_rombank;
diff --git a/src/mame/includes/rungun.h b/src/mame/includes/rungun.h
index 2819bbde4a9..ef414292353 100644
--- a/src/mame/includes/rungun.h
+++ b/src/mame/includes/rungun.h
@@ -5,7 +5,9 @@
Run and Gun / Slam Dunk
*************************************************************************/
+
#include "sound/k054539.h"
+#include "machine/gen_latch.h"
#include "machine/k053252.h"
#include "video/k053246_k053247_k055673.h"
#include "video/k053936.h"
@@ -23,11 +25,13 @@ public:
m_k053936(*this, "k053936"),
m_k055673(*this, "k055673"),
m_k053252(*this, "k053252"),
- m_sysreg(*this, "sysreg"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_palette2(*this, "palette2"),
- m_screen(*this, "screen")
+ m_screen(*this, "screen"),
+ m_soundlatch(*this, "soundlatch"),
+ m_soundlatch2(*this, "soundlatch2"),
+ m_sysreg(*this, "sysreg")
{ }
/* devices */
@@ -38,14 +42,15 @@ public:
required_device<k053936_device> m_k053936;
required_device<k055673_device> m_k055673;
required_device<k053252_device> m_k053252;
-
- /* memory pointers */
- required_shared_ptr<UINT16> m_sysreg;
-
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
optional_device<palette_device> m_palette2;
required_device<screen_device> m_screen;
+ required_device<generic_latch_8_device> m_soundlatch;
+ required_device<generic_latch_8_device> m_soundlatch2;
+
+ /* memory pointers */
+ required_shared_ptr<UINT16> m_sysreg;
/* video-related */
tilemap_t *m_ttl_tilemap[2];
diff --git a/src/mame/includes/scotrsht.h b/src/mame/includes/scotrsht.h
index 288d67822ac..3b2470d30d9 100644
--- a/src/mame/includes/scotrsht.h
+++ b/src/mame/includes/scotrsht.h
@@ -1,5 +1,8 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood, ???
+
+#include "machine/gen_latch.h"
+
class scotrsht_state : public driver_device
{
public:
@@ -9,6 +12,7 @@ public:
m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
+ m_soundlatch(*this, "soundlatch"),
m_colorram(*this, "colorram"),
m_videoram(*this, "videoram"),
m_spriteram(*this, "spriteram"),
@@ -18,6 +22,7 @@ public:
required_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ required_device<generic_latch_8_device> m_soundlatch;
required_shared_ptr<UINT8> m_colorram;
required_shared_ptr<UINT8> m_videoram;
diff --git a/src/mame/includes/scramble.h b/src/mame/includes/scramble.h
index 2648ce25237..8cef5bc67a7 100644
--- a/src/mame/includes/scramble.h
+++ b/src/mame/includes/scramble.h
@@ -1,5 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
+
+#include "machine/gen_latch.h"
#include "machine/i8255.h"
#include "includes/galaxold.h"
#include "sound/tms5110.h"
@@ -15,7 +17,8 @@ public:
m_ppi8255_1(*this, "ppi8255_1"),
m_tmsprom(*this, "tmsprom"),
m_soundram(*this, "soundram"),
- m_digitalker(*this, "digitalker")
+ m_digitalker(*this, "digitalker"),
+ m_soundlatch(*this, "soundlatch")
{
}
@@ -25,6 +28,7 @@ public:
optional_device<tmsprom_device> m_tmsprom;
optional_shared_ptr<UINT8> m_soundram;
optional_device<digitalker_device> m_digitalker;
+ required_device<generic_latch_8_device> m_soundlatch;
UINT8 m_cavelon_bank;
diff --git a/src/mame/includes/ultraman.h b/src/mame/includes/ultraman.h
index 9e6e2853275..c0873b8efb3 100644
--- a/src/mame/includes/ultraman.h
+++ b/src/mame/includes/ultraman.h
@@ -6,6 +6,7 @@
*************************************************************************/
+#include "machine/gen_latch.h"
#include "video/k051960.h"
#include "video/k051316.h"
#include "video/konami_helper.h"
@@ -20,7 +21,8 @@ public:
m_k051316_1(*this, "k051316_1"),
m_k051316_2(*this, "k051316_2"),
m_k051316_3(*this, "k051316_3"),
- m_k051960(*this, "k051960") { }
+ m_k051960(*this, "k051960"),
+ m_soundlatch(*this, "soundlatch") { }
int m_bank0;
int m_bank1;
@@ -33,6 +35,8 @@ public:
required_device<k051316_device> m_k051316_2;
required_device<k051316_device> m_k051316_3;
required_device<k051960_device> m_k051960;
+ required_device<generic_latch_8_device> m_soundlatch;
+
DECLARE_WRITE16_MEMBER(sound_cmd_w);
DECLARE_WRITE16_MEMBER(sound_irq_trigger_w);
DECLARE_WRITE16_MEMBER(ultraman_gfxctrl_w);
diff --git a/src/mame/includes/wecleman.h b/src/mame/includes/wecleman.h
index 80acb529dcb..e04d775c096 100644
--- a/src/mame/includes/wecleman.h
+++ b/src/mame/includes/wecleman.h
@@ -1,5 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Luca Elia
+
+#include "machine/gen_latch.h"
#include "sound/k007232.h"
#include "video/k051316.h"
@@ -15,6 +17,7 @@ public:
m_txtram(*this, "txtram"),
m_spriteram(*this, "spriteram"),
m_roadram(*this, "roadram"),
+ m_generic_paletteram_16(*this, "paletteram"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_subcpu(*this, "sub"),
@@ -27,7 +30,7 @@ public:
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_screen(*this, "screen"),
- m_generic_paletteram_16(*this, "paletteram") { }
+ m_soundlatch(*this, "soundlatch") { }
optional_shared_ptr<UINT16> m_videostatus;
optional_shared_ptr<UINT16> m_protection_ram;
@@ -36,6 +39,7 @@ public:
optional_shared_ptr<UINT16> m_txtram;
required_shared_ptr<UINT16> m_spriteram;
required_shared_ptr<UINT16> m_roadram;
+ required_shared_ptr<UINT16> m_generic_paletteram_16;
int m_multiply_reg[2];
int m_spr_color_offs;
@@ -129,5 +133,5 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<screen_device> m_screen;
- required_shared_ptr<UINT16> m_generic_paletteram_16;
+ required_device<generic_latch_8_device> m_soundlatch;
};
diff --git a/src/mame/includes/xexex.h b/src/mame/includes/xexex.h
index 9cf2b53ae37..fd196ab3fa7 100644
--- a/src/mame/includes/xexex.h
+++ b/src/mame/includes/xexex.h
@@ -9,6 +9,7 @@
#include "video/k053250.h"
#include "sound/flt_vol.h"
#include "sound/k054539.h"
+#include "machine/gen_latch.h"
#include "machine/k053252.h"
#include "video/k054156_k054157_k056832.h"
#include "video/k053246_k053247_k055673.h"
@@ -37,7 +38,10 @@ public:
m_k053252(*this, "k053252"),
m_k054338(*this, "k054338"),
m_palette(*this, "palette"),
- m_screen(*this, "screen") { }
+ m_screen(*this, "screen"),
+ m_soundlatch(*this, "soundlatch"),
+ m_soundlatch2(*this, "soundlatch2"),
+ m_soundlatch3(*this, "soundlatch3") { }
/* memory pointers */
required_shared_ptr<UINT16> m_workram;
@@ -73,6 +77,10 @@ public:
required_device<k054338_device> m_k054338;
required_device<palette_device> m_palette;
required_device<screen_device> m_screen;
+ required_device<generic_latch_8_device> m_soundlatch;
+ required_device<generic_latch_8_device> m_soundlatch2;
+ required_device<generic_latch_8_device> m_soundlatch3;
+
DECLARE_READ16_MEMBER(spriteram_mirror_r);
DECLARE_WRITE16_MEMBER(spriteram_mirror_w);
DECLARE_READ16_MEMBER(xexex_waitskip_r);
diff --git a/src/mame/includes/xmen.h b/src/mame/includes/xmen.h
index d7bdceb6a65..927ad17a462 100644
--- a/src/mame/includes/xmen.h
+++ b/src/mame/includes/xmen.h
@@ -1,5 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
+
+#include "machine/gen_latch.h"
#include "sound/k054539.h"
#include "video/k053246_k053247_k055673.h"
#include "video/k053251.h"
@@ -22,6 +24,8 @@ public:
m_k053246(*this, "k053246"),
m_k053251(*this, "k053251"),
m_screen(*this, "screen"),
+ m_soundlatch(*this, "soundlatch"),
+ m_soundlatch2(*this, "soundlatch2"),
m_z80bank(*this, "z80bank") { }
/* video-related */
@@ -49,6 +53,8 @@ public:
required_device<k053247_device> m_k053246;
required_device<k053251_device> m_k053251;
required_device<screen_device> m_screen;
+ required_device<generic_latch_8_device> m_soundlatch;
+ required_device<generic_latch_8_device> m_soundlatch2;
required_memory_bank m_z80bank;
DECLARE_WRITE16_MEMBER(eeprom_w);
diff --git a/src/mame/machine/ajax.cpp b/src/mame/machine/ajax.cpp
index 715769c989c..9deefef82aa 100644
--- a/src/mame/machine/ajax.cpp
+++ b/src/mame/machine/ajax.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Manuel Abadia
/***************************************************************************
- machine.c
+ ajax.cpp
Functions to emulate general aspects of the machine (RAM, ROM, interrupts,
I/O ports)
@@ -150,7 +150,7 @@ WRITE8_MEMBER(ajax_state::ajax_ls138_f10_w)
m_audiocpu->set_input_line(0, HOLD_LINE);
break;
case 0x02: /* Sound command number */
- soundlatch_byte_w(space, offset, data);
+ m_soundlatch->write(space, offset, data);
break;
case 0x03: /* Bankswitch + coin counters + priority*/
ajax_bankswitch_w(space, 0, data);
diff --git a/src/mame/video/megasys1.cpp b/src/mame/video/megasys1.cpp
index 6609f673920..35d9f95cc3e 100644
--- a/src/mame/video/megasys1.cpp
+++ b/src/mame/video/megasys1.cpp
@@ -446,11 +446,16 @@ WRITE16_MEMBER(megasys1_state::megasys1_vregs_A_w)
}
break;
- case 0x308/2 : soundlatch_word_w(space,0,new_data,0xffff);
- if (!m_hardware_type_z)
+ case 0x308/2 : if (!m_hardware_type_z)
+ {
+ m_soundlatch->write(space,0,new_data,0xffff);
m_audiocpu->set_input_line(4, HOLD_LINE);
- else
+ }
+ else
+ {
+ m_soundlatch_z->write(space,0,new_data&0xff);
m_audiocpu->set_input_line(5, HOLD_LINE);
+ }
break;
default : SHOW_WRITE_ERROR("vreg %04X <- %04X",offset*2,data);
@@ -493,7 +498,7 @@ WRITE16_MEMBER(megasys1_state::megasys1_vregs_monkelf_w)
}
break;
- case 0x308/2 : soundlatch_word_w(space,0,new_data,0xffff);
+ case 0x308/2 : m_soundlatch->write(space,0,new_data,0xffff);
m_audiocpu->set_input_line(4, HOLD_LINE);
break;
@@ -508,7 +513,7 @@ READ16_MEMBER(megasys1_state::megasys1_vregs_C_r)
{
switch (offset)
{
- case 0x8000/2: return soundlatch2_word_r(space,0,0xffff);
+ case 0x8000/2: return m_soundlatch2->read(space,0,0xffff);
default: return m_vregs[offset];
}
}
@@ -543,7 +548,7 @@ WRITE16_MEMBER(megasys1_state::megasys1_vregs_C_w)
break;
case 0x8000/2 : /* Cybattler reads sound latch on irq 2 */
- soundlatch_word_w(space, 0, new_data, 0xffff);
+ m_soundlatch->write(space, 0, new_data, 0xffff);
m_audiocpu->set_input_line(2, HOLD_LINE);
break;