From a68842a91fbcfd99f0d636412f4529197e88c543 Mon Sep 17 00:00:00 2001 From: cracyc Date: Wed, 3 Feb 2016 16:58:43 -0600 Subject: [PATCH] pc9801: more egc fixes (nw) --- src/mame/drivers/pc9801.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/mame/drivers/pc9801.cpp b/src/mame/drivers/pc9801.cpp index 48b89439694..66670fe7c9a 100644 --- a/src/mame/drivers/pc9801.cpp +++ b/src/mame/drivers/pc9801.cpp @@ -1426,7 +1426,20 @@ void pc9801_state::egc_blit_w(UINT32 offset, UINT16 data, UINT16 mem_mask) } // mask off the bits past the end of the blit - if(m_egc.count < 16) + if((m_egc.count < 8) && (mem_mask != 0xffff)) + { + UINT16 end_mask = dir ? ((1 << m_egc.count) - 1) : ~((1 << (8 - m_egc.count)) - 1); + // if the blit is less than 8 bits, adjust the masks + if(m_egc.first) + { + if(dir) + end_mask <<= dst_off & 7; + else + end_mask >>= dst_off & 7; + } + mask &= end_mask; + } + else if((m_egc.count < 16) && (mem_mask == 0xffff)) { UINT16 end_mask = dir ? ((1 << m_egc.count) - 1) : ~((1 << (16 - m_egc.count)) - 1); // if the blit is less than 16 bits, adjust the masks @@ -1457,11 +1470,6 @@ void pc9801_state::egc_blit_w(UINT32 offset, UINT16 data, UINT16 mem_mask) out = data; break; case 1: - if(mem_mask == 0x00ff) - src = src | src << 8; - else if(mem_mask == 0xff00) - src = src | src >> 8; - out = egc_do_partial_op(i, src, pat, m_video_ram_2[offset + (((i + 1) & 3) * 0x4000)]); break; case 2: @@ -2263,7 +2271,7 @@ static ADDRESS_MAP_START( pc9801rs_io, AS_IO, 16, pc9801_state ) AM_RANGE(0x0430, 0x0433) AM_READWRITE8(ide_ctrl_r, ide_ctrl_w, 0x00ff) AM_RANGE(0x0640, 0x064f) AM_READWRITE(ide_cs0_r, ide_cs0_w) AM_RANGE(0x0740, 0x074f) AM_READWRITE(ide_cs1_r, ide_cs1_w) - AM_RANGE(0x1e80, 0x1e8f) AM_NOP // temp + AM_RANGE(0x1e8c, 0x1e8f) AM_NOP // temp AM_RANGE(0xbfd8, 0xbfdf) AM_WRITE8(pc9801rs_mouse_freq_w, 0xffff) AM_RANGE(0xe0d0, 0xe0d3) AM_READ8(pc9801rs_midi_r, 0xffff) AM_IMPORT_FROM(pc9801ux_io) @@ -2512,6 +2520,7 @@ static ADDRESS_MAP_START( pc9821_io, AS_IO, 32, pc9801_state ) // AM_RANGE(0x0c2d, 0x0c2d) cs4231 PCM board hi byte control // AM_RANGE(0x0cc0, 0x0cc7) SCSI interface / // AM_RANGE(0x0cfc, 0x0cff) PCI bus + AM_RANGE(0x1e8c, 0x1e8f) AM_NOP // IDE RAM switch AM_RANGE(0x3fd8, 0x3fdf) AM_DEVREADWRITE8("pit8253", pit8253_device, read, write, 0xff00ff00) // / pit mirror ports AM_RANGE(0x7fd8, 0x7fdf) AM_DEVREADWRITE8("ppi8255_mouse", i8255_device, read, write, 0xff00ff00) AM_RANGE(0x841c, 0x841f) AM_READWRITE8(sdip_0_r,sdip_0_w,0xffffffff)