From 7941a20ddd76bcd2518ba8f06f377ae15e5bd7f0 Mon Sep 17 00:00:00 2001 From: Dirk Best Date: Thu, 13 Jun 2013 23:44:32 +0000 Subject: [PATCH] cs4031: fix 16-bit dma --- src/mess/machine/cs4031.c | 6 +++--- src/mess/machine/cs4031.h | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/mess/machine/cs4031.c b/src/mess/machine/cs4031.c index 00b41808d82..e137d989f4a 100644 --- a/src/mess/machine/cs4031.c +++ b/src/mess/machine/cs4031.c @@ -386,9 +386,9 @@ READ8_MEMBER( cs4031_device::dma_read_word ) return 0xff; UINT16 result = m_space->read_word(page_offset() + (offset << 1)); - m_dma_high_byte = result & 0xff00; + m_dma_high_byte = result >> 8; - return result & 0xff; + return result; } WRITE8_MEMBER( cs4031_device::dma_write_word ) @@ -396,7 +396,7 @@ WRITE8_MEMBER( cs4031_device::dma_write_word ) if (m_dma_channel == -1) return; - m_space->write_word(page_offset() + (offset << 1), m_dma_high_byte | data); + m_space->write_word(page_offset() + (offset << 1), (m_dma_high_byte << 8) | data); } WRITE_LINE_MEMBER( cs4031_device::dma2_dack0_w ) diff --git a/src/mess/machine/cs4031.h b/src/mess/machine/cs4031.h index f5eeb73ed97..f42039224ab 100644 --- a/src/mess/machine/cs4031.h +++ b/src/mess/machine/cs4031.h @@ -106,16 +106,16 @@ public: DECLARE_READ8_MEMBER( dma1_ior1_r ) { return m_read_ior(1); } DECLARE_READ8_MEMBER( dma1_ior2_r ) { return m_read_ior(2); } DECLARE_READ8_MEMBER( dma1_ior3_r ) { return m_read_ior(3); } - DECLARE_READ8_MEMBER( dma2_ior1_r ) { UINT16 result = m_read_ior(5); m_dma_high_byte = result & 0xff00; return result & 0xff; } - DECLARE_READ8_MEMBER( dma2_ior2_r ) { UINT16 result = m_read_ior(6); m_dma_high_byte = result & 0xff00; return result & 0xff; } - DECLARE_READ8_MEMBER( dma2_ior3_r ) { UINT16 result = m_read_ior(7); m_dma_high_byte = result & 0xff00; return result & 0xff; } + DECLARE_READ8_MEMBER( dma2_ior1_r ) { UINT16 result = m_read_ior(5); m_dma_high_byte = result >> 8; return result; } + DECLARE_READ8_MEMBER( dma2_ior2_r ) { UINT16 result = m_read_ior(6); m_dma_high_byte = result >> 8; return result; } + DECLARE_READ8_MEMBER( dma2_ior3_r ) { UINT16 result = m_read_ior(7); m_dma_high_byte = result >> 8; return result; } DECLARE_WRITE8_MEMBER( dma1_iow0_w ) { m_write_iow(0, data, 0xffff); } DECLARE_WRITE8_MEMBER( dma1_iow1_w ) { m_write_iow(1, data, 0xffff); } DECLARE_WRITE8_MEMBER( dma1_iow2_w ) { m_write_iow(2, data, 0xffff); } DECLARE_WRITE8_MEMBER( dma1_iow3_w ) { m_write_iow(3, data, 0xffff); } - DECLARE_WRITE8_MEMBER( dma2_iow1_w ) { m_write_iow(5, m_dma_high_byte | data, 0xffff); } - DECLARE_WRITE8_MEMBER( dma2_iow2_w ) { m_write_iow(6, m_dma_high_byte | data, 0xffff); } - DECLARE_WRITE8_MEMBER( dma2_iow3_w ) { m_write_iow(7, m_dma_high_byte | data, 0xffff); } + DECLARE_WRITE8_MEMBER( dma2_iow1_w ) { m_write_iow(5, (m_dma_high_byte << 8) | data, 0xffff); } + DECLARE_WRITE8_MEMBER( dma2_iow2_w ) { m_write_iow(6, (m_dma_high_byte << 8) | data, 0xffff); } + DECLARE_WRITE8_MEMBER( dma2_iow3_w ) { m_write_iow(7, (m_dma_high_byte << 8) | data, 0xffff); } DECLARE_WRITE_LINE_MEMBER( dma1_dack0_w ) { set_dma_channel(0, state); } DECLARE_WRITE_LINE_MEMBER( dma1_dack1_w ) { set_dma_channel(1, state); } DECLARE_WRITE_LINE_MEMBER( dma1_dack2_w ) { set_dma_channel(2, state); }