diff options
Diffstat (limited to 'src/mame/drivers/mastboy.cpp')
-rw-r--r-- | src/mame/drivers/mastboy.cpp | 65 |
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) |