From baa872748d5f4c26d018e545297009345612ceb3 Mon Sep 17 00:00:00 2001 From: AJR Date: Thu, 20 Aug 2020 22:45:13 -0400 Subject: metalmx: Probably fix regression --- src/mame/drivers/metalmx.cpp | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/mame/drivers/metalmx.cpp b/src/mame/drivers/metalmx.cpp index c431fb2f447..4fc9ec4f3a6 100644 --- a/src/mame/drivers/metalmx.cpp +++ b/src/mame/drivers/metalmx.cpp @@ -286,10 +286,17 @@ uint32_t metalmx_state::screen_update_metalmx(screen_device &screen, bitmap_ind1 /* TODO: TMS34020 should take care of this */ // uint32_t *src_base = &gsp_vram[(vreg_base[0x40/4] & 0x40) ? 0x20000 : 0]; - uint16_t const *const src_base = m_gsp_vram; + uint32_t const *const src_base = &m_gsp_vram[0]; for (int y = (std::max)(0, cliprect.min_y); y <= (std::min)(383, cliprect.max_y); ++y) - std::copy_n(&src_base[512 * y], 512, &bitmap.pix16(y)); + { + uint16_t *pix = &bitmap.pix16(y); + for (int x = 0; x < 256; x++) + { + *pix++ = src_base[256 * y + x] & 0xffff; + *pix++ = src_base[256 * y + x] >> 16; + } + } return 0; } @@ -408,45 +415,40 @@ void metalmx_state::host_gsp_w(offs_t offset, uint32_t data) { address_space &gsp_space = m_gsp->space(AS_PROGRAM); - gsp_space.write_word((0xc0000000 + (offset << 5) + 0x10) / 8, data); - gsp_space.write_word((0xc0000000 + (offset << 5))/ 8 , data >> 16); + gsp_space.write_dword(0xc0000000 + (offset << 5), (data << 16) | (data >> 16)); } uint32_t metalmx_state::host_gsp_r(offs_t offset) { address_space &gsp_space = m_gsp->space(AS_PROGRAM); - uint32_t val; - val = gsp_space.read_word((0xc0000000 + (offset << 5) + 0x10) / 8); - val |= gsp_space.read_word((0xc0000000 + (offset << 5)) / 8) << 16; - return val; + uint32_t val = gsp_space.read_dword(0xc0000000 + (offset << 5)); + return (val << 16) | (val >> 16); } uint32_t metalmx_state::host_dram_r(offs_t offset) { - return (m_gsp_dram[offset * 2] << 16) | m_gsp_dram[offset * 2 + 1]; + return (m_gsp_dram[offset] << 16) | (m_gsp_dram[offset] >> 16); } void metalmx_state::host_dram_w(offs_t offset, uint32_t data, uint32_t mem_mask) { - COMBINE_DATA(m_gsp_dram + offset * 2 + 1); - data >>= 16; - mem_mask >>= 16; - COMBINE_DATA(m_gsp_dram + offset * 2); + data = (data << 16) | (data >> 16); + mem_mask = (mem_mask << 16) | (mem_mask >> 16); + COMBINE_DATA(&m_gsp_dram[offset]); } uint32_t metalmx_state::host_vram_r(offs_t offset) { - return (m_gsp_vram[offset * 2] << 16) | m_gsp_vram[offset * 2 + 1]; + return (m_gsp_vram[offset] << 16) | (m_gsp_vram[offset] >> 16); } void metalmx_state::host_vram_w(offs_t offset, uint32_t data, uint32_t mem_mask) { - COMBINE_DATA(m_gsp_vram + offset * 2 + 1); - data >>= 16; - mem_mask >>= 16; - COMBINE_DATA(m_gsp_vram + offset * 2); + data = (data << 16) | (data >> 16); + mem_mask = (mem_mask << 16) | (mem_mask >> 16); + COMBINE_DATA(&m_gsp_vram[offset]); } -- cgit v1.2.3