summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/exterm.cpp
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2017-09-09 15:36:29 -0400
committer AJR <ajrhacker@users.noreply.github.com>2017-09-09 15:36:29 -0400
commitf4c7a53ac867296d76c5d56e3db8d9670e882287 (patch)
treeeaa65c4821502cecd39479aeb752db894389c1e1 /src/mame/drivers/exterm.cpp
parent0a3880730f3a7f2be7be41a069c6124311528036 (diff)
exterm: Soundlatch modernization and save state support (nw)
Diffstat (limited to 'src/mame/drivers/exterm.cpp')
-rw-r--r--src/mame/drivers/exterm.cpp55
1 files changed, 23 insertions, 32 deletions
diff --git a/src/mame/drivers/exterm.cpp b/src/mame/drivers/exterm.cpp
index 5ad8d5ec2dd..0bce177fbea 100644
--- a/src/mame/drivers/exterm.cpp
+++ b/src/mame/drivers/exterm.cpp
@@ -76,6 +76,15 @@
#include "speaker.h"
+void exterm_state::machine_start()
+{
+ save_item(NAME(m_aimpos));
+ save_item(NAME(m_trackball_old));
+ save_item(NAME(m_sound_control));
+ save_item(NAME(m_last));
+}
+
+
/*************************************
*
* Master/slave communications
@@ -175,19 +184,11 @@ WRITE16_MEMBER(exterm_state::exterm_output_port_0_w)
}
-TIMER_CALLBACK_MEMBER(exterm_state::sound_delayed_w)
-{
- /* data is latched independently for both sound CPUs */
- m_master_sound_latch = m_slave_sound_latch = param;
- m_audiocpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
- m_audioslave->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
-}
-
-
-WRITE16_MEMBER(exterm_state::sound_latch_w)
+WRITE8_MEMBER(exterm_state::sound_latch_w)
{
- if (ACCESSING_BITS_0_7)
- machine().scheduler().synchronize(timer_expired_delegate(FUNC(exterm_state::sound_delayed_w),this), data & 0xff);
+ // data is latched independently for both sound CPUs
+ m_soundlatch[0]->write(space, 0, data);
+ m_soundlatch[1]->write(space, 0, data);
}
@@ -225,22 +226,6 @@ WRITE8_MEMBER(exterm_state::sound_nmi_rate_w)
}
-READ8_MEMBER(exterm_state::sound_master_latch_r)
-{
- /* read latch and clear interrupt */
- m_audiocpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
- return m_master_sound_latch;
-}
-
-
-READ8_MEMBER(exterm_state::sound_slave_latch_r)
-{
- /* read latch and clear interrupt */
- m_audioslave->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
- return m_slave_sound_latch;
-}
-
-
READ8_MEMBER(exterm_state::sound_nmi_to_slave_r)
{
/* a read from here triggers an NMI pulse to the slave */
@@ -278,7 +263,7 @@ static ADDRESS_MAP_START( master_map, AS_PROGRAM, 16, exterm_state )
AM_RANGE(0x01440000, 0x0147ffff) AM_MIRROR(0xfc000000) AM_READ(exterm_input_port_1_r)
AM_RANGE(0x01480000, 0x014bffff) AM_MIRROR(0xfc000000) AM_READ_PORT("DSW")
AM_RANGE(0x01500000, 0x0153ffff) AM_MIRROR(0xfc000000) AM_WRITE(exterm_output_port_0_w)
- AM_RANGE(0x01580000, 0x015bffff) AM_MIRROR(0xfc000000) AM_WRITE(sound_latch_w)
+ AM_RANGE(0x01580000, 0x015bffff) AM_MIRROR(0xfc000000) AM_WRITE8(sound_latch_w, 0x00ff)
AM_RANGE(0x015c0000, 0x015fffff) AM_MIRROR(0xfc000000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w)
AM_RANGE(0x01800000, 0x01807fff) AM_MIRROR(0xfc7f8000) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x02800000, 0x02807fff) AM_MIRROR(0xfc7f8000) AM_RAM AM_SHARE("nvram")
@@ -304,7 +289,7 @@ static ADDRESS_MAP_START( sound_master_map, AS_PROGRAM, 8, exterm_state )
AM_RANGE(0x0000, 0x07ff) AM_MIRROR(0x1800) AM_RAM
AM_RANGE(0x4000, 0x5fff) AM_WRITE(ym2151_data_latch_w)
AM_RANGE(0x6000, 0x67ff) AM_WRITE(sound_nmi_rate_w)
- AM_RANGE(0x6800, 0x6fff) AM_READ(sound_master_latch_r)
+ AM_RANGE(0x6800, 0x6fff) AM_DEVREAD("soundlatch1", generic_latch_8_device, read)
AM_RANGE(0x7000, 0x77ff) AM_READ(sound_nmi_to_slave_r)
/* AM_RANGE(0x7800, 0x7fff) unknown - to S4-13 */
AM_RANGE(0xa000, 0xbfff) AM_WRITE(sound_control_w)
@@ -314,7 +299,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_slave_map, AS_PROGRAM, 8, exterm_state )
AM_RANGE(0x0000, 0x07ff) AM_MIRROR(0x3800) AM_RAM
- AM_RANGE(0x4000, 0x5fff) AM_READ(sound_slave_latch_r)
+ AM_RANGE(0x4000, 0x5fff) AM_DEVREAD("soundlatch2", generic_latch_8_device, read)
AM_RANGE(0x8000, 0x8000) AM_MIRROR(0x3ffe) AM_DEVWRITE("dacvol", dac_byte_interface, write)
AM_RANGE(0x8001, 0x8001) AM_MIRROR(0x3ffe) AM_DEVWRITE("dac", dac_byte_interface, write)
AM_RANGE(0x8000, 0xffff) AM_ROM
@@ -423,6 +408,12 @@ static MACHINE_CONFIG_START( exterm )
MCFG_CPU_ADD("audioslave", M6502, 2000000)
MCFG_CPU_PROGRAM_MAP(sound_slave_map)
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch1")
+ MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", 0))
+
+ MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+ MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audioslave", 0))
+
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
MCFG_NVRAM_ADD_0FILL("nvram")
@@ -501,4 +492,4 @@ ROM_END
*
*************************************/
-GAME( 1989, exterm, 0, exterm, exterm, exterm_state, 0, ROT0, "Gottlieb / Premier Technology", "Exterminator", 0 )
+GAME( 1989, exterm, 0, exterm, exterm, exterm_state, 0, ROT0, "Gottlieb / Premier Technology", "Exterminator", MACHINE_SUPPORTS_SAVE )