summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/firefox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/firefox.cpp')
-rw-r--r--src/mame/drivers/firefox.cpp120
1 files changed, 75 insertions, 45 deletions
diff --git a/src/mame/drivers/firefox.cpp b/src/mame/drivers/firefox.cpp
index c53c0be9c8f..35ac97cee5a 100644
--- a/src/mame/drivers/firefox.cpp
+++ b/src/mame/drivers/firefox.cpp
@@ -33,6 +33,7 @@ but requires a special level III player for proper control. Video: CAV. Audio: A
#include "cpu/m6502/m6502.h"
#include "sound/pokey.h"
#include "sound/tms5220.h"
+#include "machine/74259.h"
#include "machine/ldvp931.h"
#include "machine/6532riot.h"
#include "machine/gen_latch.h"
@@ -77,10 +78,11 @@ public:
DECLARE_READ8_MEMBER(firefox_disc_status_r);
DECLARE_READ8_MEMBER(firefox_disc_data_r);
DECLARE_WRITE8_MEMBER(firefox_disc_read_w);
- DECLARE_WRITE8_MEMBER(firefox_disc_lock_w);
- DECLARE_WRITE8_MEMBER(audio_enable_w);
- DECLARE_WRITE8_MEMBER(firefox_disc_reset_w);
- DECLARE_WRITE8_MEMBER(firefox_disc_write_w);
+ DECLARE_WRITE_LINE_MEMBER(firefox_disc_lock_w);
+ DECLARE_WRITE_LINE_MEMBER(audio_enable_left_w);
+ DECLARE_WRITE_LINE_MEMBER(audio_enable_right_w);
+ DECLARE_WRITE_LINE_MEMBER(firefox_disc_reset_w);
+ DECLARE_WRITE_LINE_MEMBER(firefox_disc_write_w);
DECLARE_WRITE8_MEMBER(firefox_disc_data_w);
DECLARE_WRITE8_MEMBER(tileram_w);
DECLARE_WRITE8_MEMBER(tile_palette_w);
@@ -88,21 +90,23 @@ public:
DECLARE_WRITE8_MEMBER(firefox_objram_bank_w);
DECLARE_READ8_MEMBER(sound_to_main_r);
DECLARE_WRITE8_MEMBER(main_to_sound_w);
- DECLARE_WRITE8_MEMBER(sound_reset_w);
+ DECLARE_WRITE_LINE_MEMBER(sound_reset_w);
DECLARE_READ8_MEMBER(main_to_sound_r);
DECLARE_WRITE8_MEMBER(sound_to_main_w);
DECLARE_READ8_MEMBER(adc_r);
DECLARE_WRITE8_MEMBER(adc_select_w);
DECLARE_WRITE8_MEMBER(nvram_w);
DECLARE_READ8_MEMBER(nvram_r);
- DECLARE_WRITE8_MEMBER(novram_recall_w);
- DECLARE_WRITE8_MEMBER(novram_store_w);
DECLARE_WRITE8_MEMBER(rom_bank_w);
DECLARE_WRITE8_MEMBER(main_irq_clear_w);
DECLARE_WRITE8_MEMBER(main_firq_clear_w);
DECLARE_WRITE8_MEMBER(self_reset_w);
- DECLARE_WRITE8_MEMBER(led_w);
- DECLARE_WRITE8_MEMBER(firefox_coin_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(led0_w);
+ DECLARE_WRITE_LINE_MEMBER(led1_w);
+ DECLARE_WRITE_LINE_MEMBER(led2_w);
+ DECLARE_WRITE_LINE_MEMBER(led3_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w);
DECLARE_CUSTOM_INPUT_MEMBER(mainflag_r);
DECLARE_CUSTOM_INPUT_MEMBER(soundflag_r);
DECLARE_READ8_MEMBER(riot_porta_r);
@@ -180,25 +184,30 @@ WRITE8_MEMBER(firefox_state::firefox_disc_read_w)
m_n_disc_read_data = m_laserdisc->data_r();
}
-WRITE8_MEMBER(firefox_state::firefox_disc_lock_w)
+WRITE_LINE_MEMBER(firefox_state::firefox_disc_lock_w)
{
- m_n_disc_lock = data & 0x80;
+ m_n_disc_lock = state;
}
-WRITE8_MEMBER(firefox_state::audio_enable_w)
+WRITE_LINE_MEMBER(firefox_state::audio_enable_left_w)
{
- m_laserdisc->set_output_gain(~offset & 1, (data & 0x80) ? 1.0 : 0.0);
+ m_laserdisc->set_output_gain(0, state ? 1.0 : 0.0);
}
-WRITE8_MEMBER(firefox_state::firefox_disc_reset_w)
+WRITE_LINE_MEMBER(firefox_state::audio_enable_right_w)
{
- m_laserdisc->reset_w((data & 0x80) ? CLEAR_LINE : ASSERT_LINE);
+ m_laserdisc->set_output_gain(1, state ? 1.0 : 0.0);
+}
+
+WRITE_LINE_MEMBER(firefox_state::firefox_disc_reset_w)
+{
+ m_laserdisc->reset_w(state ? CLEAR_LINE : ASSERT_LINE);
}
/* active low on dbb7 */
-WRITE8_MEMBER(firefox_state::firefox_disc_write_w)
+WRITE_LINE_MEMBER(firefox_state::firefox_disc_write_w)
{
- if ( ( data & 0x80 ) == 0 )
+ if (state == 0)
m_laserdisc->data_w(m_n_disc_data);
}
@@ -339,10 +348,10 @@ WRITE8_MEMBER(firefox_state::main_to_sound_w)
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
-WRITE8_MEMBER(firefox_state::sound_reset_w)
+WRITE_LINE_MEMBER(firefox_state::sound_reset_w)
{
- m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 0x80) ? ASSERT_LINE : CLEAR_LINE);
- if ((data & 0x80) != 0)
+ m_audiocpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
+ if (state != 0)
m_sound_to_main_flag = m_main_to_sound_flag = 0;
}
@@ -440,18 +449,6 @@ READ8_MEMBER(firefox_state::nvram_r)
return (m_nvram_1c->read(space, offset) << 4) | (m_nvram_1d->read(space, offset) & 0x0f);
}
-WRITE8_MEMBER(firefox_state::novram_recall_w)
-{
- m_nvram_1c->recall(data & 0x80);
- m_nvram_1d->recall(data & 0x80);
-}
-
-WRITE8_MEMBER(firefox_state::novram_store_w)
-{
- m_nvram_1c->store(data & 0x80);
- m_nvram_1d->store(data & 0x80);
-}
-
/*************************************
@@ -488,14 +485,34 @@ WRITE8_MEMBER(firefox_state::self_reset_w)
*
*************************************/
-WRITE8_MEMBER(firefox_state::led_w)
+WRITE_LINE_MEMBER(firefox_state::led0_w)
+{
+ output().set_led_value(0, !state);
+}
+
+WRITE_LINE_MEMBER(firefox_state::led1_w)
{
- output().set_led_value(offset, ( data & 0x80 ) == 0 );
+ output().set_led_value(1, !state);
}
-WRITE8_MEMBER(firefox_state::firefox_coin_counter_w)
+WRITE_LINE_MEMBER(firefox_state::led2_w)
{
- machine().bookkeeping().coin_counter_w(offset, data & 0x80 );
+ output().set_led_value(2, !state);
+}
+
+WRITE_LINE_MEMBER(firefox_state::led3_w)
+{
+ output().set_led_value(3, !state);
+}
+
+WRITE_LINE_MEMBER(firefox_state::coin_counter_right_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(firefox_state::coin_counter_left_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
@@ -549,15 +566,8 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, firefox_state )
AM_RANGE(0x4218, 0x4218) AM_MIRROR(0x0047) AM_WRITE(firefox_disc_read_w) /* DSKREAD */
AM_RANGE(0x4220, 0x4223) AM_MIRROR(0x0044) AM_WRITE(adc_select_w) /* ADCSTART */
AM_RANGE(0x4230, 0x4230) AM_MIRROR(0x0047) AM_WRITE(self_reset_w) /* AMUCK */
- AM_RANGE(0x4280, 0x4280) AM_MIRROR(0x0040) AM_WRITE(novram_recall_w) /* LATCH0 -> NVRECALL */
- AM_RANGE(0x4281, 0x4281) AM_MIRROR(0x0040) AM_WRITE(sound_reset_w) /* LATCH0 -> RSTSOUND */
- AM_RANGE(0x4282, 0x4282) AM_MIRROR(0x0040) AM_WRITE(novram_store_w) /* LATCH0 -> NVRSTORE */
- AM_RANGE(0x4283, 0x4283) AM_MIRROR(0x0040) AM_WRITE(firefox_disc_lock_w) /* LATCH0 -> LOCK */
- AM_RANGE(0x4284, 0x4285) AM_MIRROR(0x0040) AM_WRITE(audio_enable_w) /* LATCH0 -> SWDSKR, SWDSKL */
- AM_RANGE(0x4286, 0x4286) AM_MIRROR(0x0040) AM_WRITE(firefox_disc_reset_w) /* LATCH0 -> RSTDSK */
- AM_RANGE(0x4287, 0x4287) AM_MIRROR(0x0040) AM_WRITE(firefox_disc_write_w) /* LATCH0 -> WRDSK */
- AM_RANGE(0x4288, 0x4289) AM_MIRROR(0x0040) AM_WRITE(firefox_coin_counter_w) /* LATCH1 -> COIN COUNTERR, COUNTERL */
- AM_RANGE(0x428c, 0x428f) AM_MIRROR(0x0040) AM_WRITE(led_w) /* LATCH1 -> LEDs */
+ AM_RANGE(0x4280, 0x4287) AM_MIRROR(0x0040) AM_DEVWRITE("latch0", ls259_device, write_d7)
+ AM_RANGE(0x4288, 0x428f) AM_MIRROR(0x0040) AM_DEVWRITE("latch1", ls259_device, write_d7)
AM_RANGE(0x4290, 0x4290) AM_MIRROR(0x0047) AM_WRITE(rom_bank_w) /* WRTREG */
AM_RANGE(0x4298, 0x4298) AM_MIRROR(0x0047) AM_WRITE(main_to_sound_w) /* WRSOUND */
AM_RANGE(0x42a0, 0x42a0) AM_MIRROR(0x0047) AM_WRITE(firefox_disc_data_w) /* DSKLATCH */
@@ -723,6 +733,26 @@ static MACHINE_CONFIG_START( firefox )
MCFG_QUANTUM_TIME(attotime::from_hz(60000))
+ MCFG_DEVICE_ADD("latch0", LS259, 0) // 7F
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("nvram_1c", x2212_device, recall)) // NVRECALL
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("nvram_1d", x2212_device, recall))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(firefox_state, sound_reset_w)) // RSTSOUND
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("nvram_1c", x2212_device, store)) // NVRSTORE
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("nvram_1d", x2212_device, store))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(firefox_state, firefox_disc_lock_w)) // LOCK
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(firefox_state, audio_enable_right_w)) // SWDSKR
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(firefox_state, audio_enable_left_w)) // SWDSKL
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(firefox_state, firefox_disc_reset_w)) // RSTDSK
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(firefox_state, firefox_disc_write_w)) // WRDSK
+
+ MCFG_DEVICE_ADD("latch1", LS259, 0) // 1F
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(firefox_state, coin_counter_right_w)) // COIN COUNTERR
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(firefox_state, coin_counter_left_w)) // COIN COUNTERL
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(firefox_state, led0_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(firefox_state, led1_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(firefox_state, led2_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(firefox_state, led3_w))
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_WATCHDOG_TIME_INIT(attotime::from_hz((double)MASTER_XTAL/8/16/16/16/16))