pc9801: bitswap egc mask just like the vram

This commit is contained in:
cracyc 2024-11-13 16:28:14 -06:00
parent 514f10a0e7
commit 8a7e1eb7a8
3 changed files with 9 additions and 3 deletions

View File

@ -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));

View File

@ -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;

View File

@ -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;