summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2020-08-20 22:45:13 -0400
committer AJR <ajrhacker@users.noreply.github.com>2020-08-20 22:45:13 -0400
commitbaa872748d5f4c26d018e545297009345612ceb3 (patch)
tree4db0876576612740e93689bb1f065f0b47bdce1e
parent1bbb327667f3bc535c2056f1d09d6ecae8af765b (diff)
metalmx: Probably fix regression
-rw-r--r--src/mame/drivers/metalmx.cpp38
1 files 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]);
}