From 8a7e1eb7a8bc1997f69026ccd0bc6742bac5f1a0 Mon Sep 17 00:00:00 2001 From: cracyc Date: Wed, 13 Nov 2024 16:28:14 -0600 Subject: pc9801: bitswap egc mask just like the vram --- src/mame/nec/pc9801.cpp | 9 +++++++-- src/mame/nec/pc9801.h | 1 + src/mame/nec/pc9801_v.cpp | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/mame/nec/pc9801.cpp b/src/mame/nec/pc9801.cpp index 58a24ccbfb9..08fa0316f8a 100644 --- a/src/mame/nec/pc9801.cpp +++ b/src/mame/nec/pc9801.cpp @@ -855,10 +855,14 @@ void pc9801vm_state::pc9801rs_a0_w(offs_t offset, uint8_t data) void pc9801vm_state::egc_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - if(!(m_egc.regs[1] & 0x6000) || (offset != 4)) // why? - COMBINE_DATA(&m_egc.regs[offset]); + if((m_egc.regs[1] & 0x6000) && (offset == 4)) // why? + return; + COMBINE_DATA(&m_egc.regs[offset]); switch(offset) { + case 4: + m_egc.mask = bitswap<16>(m_egc.regs[4],8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7); + break; case 2: case 6: case 7: @@ -2029,6 +2033,7 @@ MACHINE_START_MEMBER(pc9801vm_state,pc9801rs) save_item(NAME(m_egc.leftover)); save_item(NAME(m_egc.first)); save_item(NAME(m_egc.start)); + save_item(NAME(m_egc.mask)); save_item(NAME(m_grcg.mode)); save_item(NAME(m_vram_bank)); diff --git a/src/mame/nec/pc9801.h b/src/mame/nec/pc9801.h index 474a660db25..21161435668 100644 --- a/src/mame/nec/pc9801.h +++ b/src/mame/nec/pc9801.h @@ -494,6 +494,7 @@ private: uint16_t pat[4]{}; uint16_t src[4]{}; int16_t count = 0; + uint16_t mask; uint16_t leftover[4]{}; bool first = false; bool start = false; diff --git a/src/mame/nec/pc9801_v.cpp b/src/mame/nec/pc9801_v.cpp index c2691f498d0..429ec4498bd 100644 --- a/src/mame/nec/pc9801_v.cpp +++ b/src/mame/nec/pc9801_v.cpp @@ -720,7 +720,7 @@ uint16_t pc9801vm_state::egc_do_partial_op(int plane, uint16_t src, uint16_t pat void pc9801vm_state::egc_blit_w(uint32_t offset, uint16_t data, uint16_t mem_mask) { - uint16_t mask = m_egc.regs[4] & mem_mask, out = 0; + uint16_t mask = m_egc.mask & mem_mask, out = 0; bool dir = !(m_egc.regs[6] & 0x1000); int dst_off = (m_egc.regs[6] >> 4) & 0xf, src_off = m_egc.regs[6] & 0xf; offset = (offset & 0x3fff) + m_vram_bank * 0x10000; -- cgit v1.2.3