From a669b36f196dd790b438aee47b38cd7605d435b4 Mon Sep 17 00:00:00 2001 From: Patrick Mackinlay Date: Sun, 4 Nov 2018 13:03:27 +0700 Subject: [PATCH] mpc3000: use 16 bit dma (nw) Stop driver from crashing now that the V53 dma device supports 16 bit mode. No idea what the dsp is supposed to be doing with dma data, so just cargo-culted the 8 bit handlers. --- src/devices/sound/l7a1045_l6028_dsp_a.h | 2 ++ src/mame/drivers/mpc3000.cpp | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/devices/sound/l7a1045_l6028_dsp_a.h b/src/devices/sound/l7a1045_l6028_dsp_a.h index fecca395b89..e8d5fa415e5 100644 --- a/src/devices/sound/l7a1045_l6028_dsp_a.h +++ b/src/devices/sound/l7a1045_l6028_dsp_a.h @@ -24,6 +24,8 @@ public: DECLARE_READ8_MEMBER(dma_r_cb); DECLARE_WRITE8_MEMBER(dma_w_cb); + DECLARE_READ16_MEMBER(dma_r16_cb) { m_voice[0].pos++; return 0; } + DECLARE_WRITE16_MEMBER(dma_w16_cb) { m_voice[0].pos++; } DECLARE_WRITE_LINE_MEMBER(dma_hreq_cb); protected: diff --git a/src/mame/drivers/mpc3000.cpp b/src/mame/drivers/mpc3000.cpp index 32522bfce2d..0b8d94edd15 100644 --- a/src/mame/drivers/mpc3000.cpp +++ b/src/mame/drivers/mpc3000.cpp @@ -103,7 +103,8 @@ private: DECLARE_READ16_MEMBER(dsp_0008_hack_r); DECLARE_WRITE16_MEMBER(dsp_0008_hack_w); - DECLARE_READ8_MEMBER(dma_memr_cb); + DECLARE_READ16_MEMBER(dma_memr_cb); + DECLARE_WRITE16_MEMBER(dma_memw_cb); DECLARE_PALETTE_INIT(mpc3000); }; @@ -156,10 +157,15 @@ void mpc3000_state::mpc3000_io_map(address_map &map) map(0x00f8, 0x00ff).rw("adcexp", FUNC(i8255_device::read), FUNC(i8255_device::write)).umask16(0x00ff); } -READ8_MEMBER(mpc3000_state::dma_memr_cb) +READ16_MEMBER(mpc3000_state::dma_memr_cb) { //logerror("dma_memr_cb: offset %x\n", offset); - return m_maincpu->space(AS_PROGRAM).read_byte(offset); + return m_maincpu->space(AS_PROGRAM).read_word(offset); +} + +WRITE16_MEMBER(mpc3000_state::dma_memw_cb) +{ + m_maincpu->space(AS_PROGRAM).write_word(offset, data); } PALETTE_INIT_MEMBER(mpc3000_state, mpc3000) @@ -174,9 +180,10 @@ void mpc3000_state::mpc3000(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &mpc3000_state::mpc3000_map); m_maincpu->set_addrmap(AS_IO, &mpc3000_state::mpc3000_io_map); m_maincpu->out_hreq_cb().set(m_maincpu, FUNC(v53a_device::hack_w)); - m_maincpu->in_memr_cb().set(FUNC(mpc3000_state::dma_memr_cb)); - m_maincpu->in_ior_cb<3>().set(m_dsp, FUNC(l7a1045_sound_device::dma_r_cb)); - m_maincpu->out_iow_cb<3>().set(m_dsp, FUNC(l7a1045_sound_device::dma_w_cb)); + m_maincpu->in_mem16r_cb().set(FUNC(mpc3000_state::dma_memr_cb)); + m_maincpu->out_mem16w_cb().set(FUNC(mpc3000_state::dma_memw_cb)); + m_maincpu->in_io16r_cb<3>().set(m_dsp, FUNC(l7a1045_sound_device::dma_r16_cb)); + m_maincpu->out_io16w_cb<3>().set(m_dsp, FUNC(l7a1045_sound_device::dma_w16_cb)); hc259_device &loledlatch(HC259(config, "loledlatch")); loledlatch.q_out_cb<0>().set_output("led0").invert(); // Edit Loop