summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/mastboy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/mastboy.cpp')
-rw-r--r--src/mame/drivers/mastboy.cpp65
1 files changed, 18 insertions, 47 deletions
diff --git a/src/mame/drivers/mastboy.cpp b/src/mame/drivers/mastboy.cpp
index 75b85362f78..dccdd914f9c 100644
--- a/src/mame/drivers/mastboy.cpp
+++ b/src/mame/drivers/mastboy.cpp
@@ -440,6 +440,7 @@
#include "cpu/z180/z180.h"
#include "sound/saa1099.h"
#include "sound/msm5205.h"
+#include "machine/74259.h"
#include "machine/eeprompar.h"
#include "screen.h"
#include "speaker.h"
@@ -452,6 +453,7 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_msm(*this, "msm"),
+ m_outlatch(*this, "outlatch"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_earom(*this, "earom") ,
@@ -461,6 +463,7 @@ public:
required_device<cpu_device> m_maincpu;
required_device<msm5205_device> m_msm;
+ required_device<ls259_device> m_outlatch;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<eeprom_parallel_28xx_device> m_earom;
@@ -475,22 +478,17 @@ public:
int m_earom_enabled;
int m_m5205_next;
int m_m5205_part;
- int m_m5205_sambit0;
- int m_m5205_sambit1;
DECLARE_READ8_MEMBER(banked_ram_r);
DECLARE_WRITE8_MEMBER(banked_ram_w);
DECLARE_WRITE8_MEMBER(bank_w);
DECLARE_READ8_MEMBER(earom_r);
DECLARE_WRITE8_MEMBER(earom_w);
- DECLARE_WRITE8_MEMBER(earom_enable_w);
- DECLARE_WRITE8_MEMBER(msm5205_sambit0_w);
- DECLARE_WRITE8_MEMBER(msm5205_sambit1_w);
+ DECLARE_WRITE_LINE_MEMBER(earom_enable_w);
DECLARE_WRITE8_MEMBER(msm5205_data_w);
- DECLARE_WRITE8_MEMBER(irq0_ack_w);
+ DECLARE_WRITE_LINE_MEMBER(irq0_ack_w);
DECLARE_READ8_MEMBER(port_38_read);
DECLARE_READ8_MEMBER(nmi_read);
- DECLARE_WRITE8_MEMBER(msm5205_reset_w);
DECLARE_WRITE_LINE_MEMBER(adpcm_int);
virtual void machine_start() override;
@@ -647,40 +645,18 @@ WRITE8_MEMBER(mastboy_state::earom_w)
// }
}
-WRITE8_MEMBER(mastboy_state::earom_enable_w)
+WRITE_LINE_MEMBER(mastboy_state::earom_enable_w)
{
/* This is some kind of enable / disable control for backup memory (see Charles's notes) but I'm not
sure how it works in practice, if we use it then it writes a lot of data with it disabled */
- m_earom_enabled = data&1;
+ m_earom_enabled = state;
}
/* MSM5205 Related */
-WRITE8_MEMBER(mastboy_state::msm5205_sambit0_w)
-{
- m_m5205_sambit0 = data & 1;
- m_msm->playmode_w((1 << 2) | (m_m5205_sambit1 << 1) | (m_m5205_sambit0) );
-
- logerror("msm5205 samplerate bit 0, set to %02x\n",data);
-}
-
-WRITE8_MEMBER(mastboy_state::msm5205_sambit1_w)
-{
- m_m5205_sambit1 = data & 1;
-
- m_msm->playmode_w((1 << 2) | (m_m5205_sambit1 << 1) | (m_m5205_sambit0) );
-
- logerror("msm5205 samplerate bit 0, set to %02x\n",data);
-}
-
-WRITE8_MEMBER(mastboy_state::msm5205_reset_w)
-{
- m_m5205_part = 0;
- m_msm->reset_w(data & 1);
-}
-
WRITE8_MEMBER(mastboy_state::msm5205_data_w)
{
+ m_m5205_part = 0;
m_m5205_next = data;
}
@@ -697,16 +673,15 @@ WRITE_LINE_MEMBER(mastboy_state::adpcm_int)
/* Interrupt Handling */
-WRITE8_MEMBER(mastboy_state::irq0_ack_w)
+WRITE_LINE_MEMBER(mastboy_state::irq0_ack_w)
{
- m_irq0_ack = data;
- if ((data & 1) == 1)
+ if (state)
m_maincpu->set_input_line(0, CLEAR_LINE);
}
INTERRUPT_GEN_MEMBER(mastboy_state::interrupt)
{
- if ((m_irq0_ack & 1) == 1)
+ if (m_outlatch->q0_r() == 1)
{
device.execute().set_input_line(0, ASSERT_LINE);
}
@@ -734,11 +709,7 @@ static ADDRESS_MAP_START( mastboy_map, AS_PROGRAM, 8, mastboy_state )
AM_RANGE(0xff820, 0xff827) AM_WRITE(bank_w)
AM_RANGE(0xff828, 0xff829) AM_DEVWRITE("saa", saa1099_device, write)
AM_RANGE(0xff830, 0xff830) AM_WRITE(msm5205_data_w)
- AM_RANGE(0xff838, 0xff838) AM_WRITE(irq0_ack_w)
- AM_RANGE(0xff839, 0xff839) AM_WRITE(msm5205_sambit0_w)
- AM_RANGE(0xff83a, 0xff83a) AM_WRITE(msm5205_sambit1_w)
- AM_RANGE(0xff83b, 0xff83b) AM_WRITE(msm5205_reset_w)
- AM_RANGE(0xff83c, 0xff83c) AM_WRITE(earom_enable_w)
+ AM_RANGE(0xff838, 0xff83f) AM_DEVWRITE("outlatch", ls259_device, write_d0)
AM_RANGE(0xffc00, 0xfffff) AM_RAM // Internal RAM
ADDRESS_MAP_END
@@ -887,8 +858,6 @@ void mastboy_state::machine_start()
save_item(NAME(m_earom_enabled));
save_item(NAME(m_m5205_next));
save_item(NAME(m_m5205_part));
- save_item(NAME(m_m5205_sambit0));
- save_item(NAME(m_m5205_sambit1));
}
void mastboy_state::machine_reset()
@@ -898,10 +867,6 @@ void mastboy_state::machine_reset()
memset( m_tileram, 0x00, 0x01000);
memset( m_colram, 0x00, 0x00200);
memset( m_vram, 0x00, 0x10000);
-
- m_m5205_part = 0;
- m_msm->reset_w(1);
- m_irq0_ack = 0;
}
@@ -914,6 +879,12 @@ static MACHINE_CONFIG_START( mastboy )
MCFG_EEPROM_2816_ADD("earom")
+ MCFG_DEVICE_ADD("outlatch", LS259, 0) // IC17
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mastboy_state, irq0_ack_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("msm", msm5205_device, s2_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("msm", msm5205_device, s1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("msm", msm5205_device, reset_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(mastboy_state, earom_enable_w))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)