summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/bigevglf.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/bigevglf.cpp')
-rw-r--r--src/mame/drivers/bigevglf.cpp105
1 files changed, 20 insertions, 85 deletions
diff --git a/src/mame/drivers/bigevglf.cpp b/src/mame/drivers/bigevglf.cpp
index be5a949bb21..f0198bd7f03 100644
--- a/src/mame/drivers/bigevglf.cpp
+++ b/src/mame/drivers/bigevglf.cpp
@@ -62,6 +62,7 @@ J1100072A
#include "cpu/m6805/m6805.h"
#include "cpu/z80/z80.h"
+#include "machine/input_merger.h"
#include "sound/ay8910.h"
#include "sound/dac.h"
#include "sound/volt_reg.h"
@@ -78,73 +79,11 @@ WRITE8_MEMBER(bigevglf_state::beg_banking_w)
membank("bank1")->set_entry(m_beg_bank & 0xff); /* empty sockets for IC37-IC44 ROMS */
}
-TIMER_CALLBACK_MEMBER(bigevglf_state::from_sound_latch_callback)
-{
- m_from_sound = param & 0xff;
- m_sound_state |= 2;
-}
-WRITE8_MEMBER(bigevglf_state::beg_fromsound_w)/* write to D800 sets bit 1 in status */
-{
- machine().scheduler().synchronize(timer_expired_delegate(FUNC(bigevglf_state::from_sound_latch_callback),this), (m_audiocpu->pc() << 16) | data);
-}
-
-READ8_MEMBER(bigevglf_state::beg_fromsound_r)
-{
- /* set a timer to force synchronization after the read */
- machine().scheduler().synchronize();
- return m_from_sound;
-}
-
-READ8_MEMBER(bigevglf_state::beg_soundstate_r)
-{
- uint8_t ret = m_sound_state;
- /* set a timer to force synchronization after the read */
- machine().scheduler().synchronize();
- m_sound_state &= ~2; /* read from port 21 clears bit 1 in status */
- return ret;
-}
-
READ8_MEMBER(bigevglf_state::soundstate_r)
{
- /* set a timer to force synchronization after the read */
- machine().scheduler().synchronize();
- return m_sound_state;
-}
-
-TIMER_CALLBACK_MEMBER(bigevglf_state::nmi_callback)
-{
- if (m_sound_nmi_enable)
- m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
- else
- m_pending_nmi = 1;
- m_sound_state &= ~1;
-}
-
-WRITE8_MEMBER(bigevglf_state::sound_command_w)/* write to port 20 clears bit 0 in status */
-{
- m_for_sound = data;
- machine().scheduler().synchronize(timer_expired_delegate(FUNC(bigevglf_state::nmi_callback),this), data);
-}
-
-READ8_MEMBER(bigevglf_state::sound_command_r)/* read from D800 sets bit 0 in status */
-{
- m_sound_state |= 1;
- return m_for_sound;
-}
-
-WRITE8_MEMBER(bigevglf_state::nmi_disable_w)
-{
- m_sound_nmi_enable = 0;
-}
-
-WRITE8_MEMBER(bigevglf_state::nmi_enable_w)
-{
- m_sound_nmi_enable = 1;
- if (m_pending_nmi)
- {
- m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
- m_pending_nmi = 0;
- }
+ uint8_t sound_state = m_soundlatch[0]->pending_r() ? 0 : 1;
+ sound_state |= m_soundlatch[1]->pending_r() ? 2 : 0;
+ return sound_state;
}
TIMER_CALLBACK_MEMBER(bigevglf_state::deferred_ls74_w)
@@ -359,8 +298,9 @@ ADDRESS_MAP_START(bigevglf_state::bigevglf_sub_portmap)
AM_RANGE(0x0e, 0x0e) AM_WRITENOP /* 0-enable MCU, 1-keep reset line ASSERTED; D0 goes to the input of ls74 and the /Q of this ls74 goes to reset line on 68705 */
AM_RANGE(0x10, 0x17) AM_WRITE(beg13_a_clr_w)
AM_RANGE(0x18, 0x1f) AM_WRITE(beg13_b_set_w)
- AM_RANGE(0x20, 0x20) AM_READWRITE(beg_fromsound_r, sound_command_w)
- AM_RANGE(0x21, 0x21) AM_READ(beg_soundstate_r)
+ AM_RANGE(0x20, 0x20) AM_DEVREAD("soundlatch2", generic_latch_8_device, read)
+ AM_RANGE(0x20, 0x20) AM_DEVWRITE("soundlatch1", generic_latch_8_device, write)
+ AM_RANGE(0x21, 0x21) AM_READ(soundstate_r)
ADDRESS_MAP_END
@@ -376,9 +316,11 @@ ADDRESS_MAP_START(bigevglf_state::sound_map)
AM_RANGE(0xca00, 0xca0d) AM_DEVWRITE("msm", msm5232_device, write)
AM_RANGE(0xcc00, 0xcc00) AM_WRITENOP
AM_RANGE(0xce00, 0xce00) AM_WRITENOP
- AM_RANGE(0xd800, 0xd800) AM_READWRITE(sound_command_r, beg_fromsound_w) /* write to D800 sets bit 1 in status */
- AM_RANGE(0xda00, 0xda00) AM_READWRITE(soundstate_r, nmi_enable_w)
- AM_RANGE(0xdc00, 0xdc00) AM_WRITE(nmi_disable_w)
+ AM_RANGE(0xd800, 0xd800) AM_DEVREAD("soundlatch1", generic_latch_8_device, read)
+ AM_RANGE(0xd800, 0xd800) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) /* write to D800 sets bit 1 in status */
+ AM_RANGE(0xda00, 0xda00) AM_READ(soundstate_r)
+ AM_RANGE(0xda00, 0xda00) AM_DEVWRITE("soundnmi", input_merger_device, in_set<1>) // enable NMI
+ AM_RANGE(0xdc00, 0xdc00) AM_DEVWRITE("soundnmi", input_merger_device, in_clear<1>) // disable NMI
AM_RANGE(0xde00, 0xde00) AM_READNOP AM_DEVWRITE("dac", dac_byte_interface, write) /* signed 8-bit DAC & unknown read */
AM_RANGE(0xe000, 0xefff) AM_READNOP /* space for diagnostics ROM */
ADDRESS_MAP_END
@@ -412,16 +354,7 @@ void bigevglf_state::machine_start()
save_item(NAME(m_beg_bank));
save_item(NAME(m_port_select));
- save_item(NAME(m_sound_nmi_enable));
- save_item(NAME(m_pending_nmi));
- save_item(NAME(m_for_sound));
- save_item(NAME(m_from_sound));
- save_item(NAME(m_sound_state));
-
-
save_item(NAME(m_mcu_coin_bit5));
-
-
}
void bigevglf_state::machine_reset()
@@ -435,12 +368,6 @@ void bigevglf_state::machine_reset()
m_beg_bank = 0;
m_port_select = 0;
- m_sound_nmi_enable = 0;
- m_pending_nmi = 0;
- m_for_sound = 0;
- m_from_sound = 0;
- m_sound_state = 0;
-
m_mcu_coin_bit5 = 0;
}
@@ -464,6 +391,14 @@ MACHINE_CONFIG_START(bigevglf_state::bigevglf)
2 irqs/frame give good music tempo but also SOUND ERROR in test mode,
4 irqs/frame give SOUND OK in test mode but music seems to be running too fast */
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch1")
+ MCFG_GENERIC_LATCH_DATA_PENDING_CB(DEVWRITELINE("soundnmi", input_merger_device, in_w<0>))
+
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+
+ MCFG_INPUT_MERGER_ALL_HIGH("soundnmi")
+ MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI))
+
MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, 2000000) /* ??? */
MCFG_QUANTUM_TIME(attotime::from_hz(600)) /* 10 CPU slices per frame - interleaving is forced on the fly */