--- np2/io/gdc_pset.c 2004/02/02 01:40:59 1.4 +++ np2/io/gdc_pset.c 2004/02/05 11:34:43 1.5 @@ -8,63 +8,36 @@ static void MEMCALL _nop(GDCPSET pset, UINT addr, UINT bit) { +} - pset->pattern = (pset->pattern << 1) + (pset->pattern >> 15); - (void)addr; - (void)bit; +static void MEMCALL _replace0(GDCPSET pset, UINT addr, UINT bit) { + + vramupdate[addr] |= pset->update.b[0]; + pset->base.ptr[addr] &= ~(0x80 >> bit); } -static void MEMCALL _replace(GDCPSET pset, UINT addr, UINT bit) { +static void MEMCALL _replace1(GDCPSET pset, UINT addr, UINT bit) { vramupdate[addr] |= pset->update.b[0]; - if (pset->pattern & 0x8000) { - pset->pattern <<= 1; - pset->pattern++; - pset->base.ptr[addr] |= (0x80 >> bit); - } - else { - pset->pattern <<= 1; - pset->base.ptr[addr] &= ~(0x80 >> bit); - } + pset->base.ptr[addr] |= (0x80 >> bit); } static void MEMCALL _complemnt(GDCPSET pset, UINT addr, UINT bit) { - if (pset->pattern & 0x8000) { - pset->pattern <<= 1; - pset->pattern++; - vramupdate[addr] |= pset->update.b[0]; - pset->base.ptr[addr] ^= (0x80 >> bit); - } - else { - pset->pattern <<= 1; - } + vramupdate[addr] |= pset->update.b[0]; + pset->base.ptr[addr] ^= (0x80 >> bit); } static void MEMCALL _clear(GDCPSET pset, UINT addr, UINT bit) { - if (pset->pattern & 0x8000) { - pset->pattern <<= 1; - pset->pattern++; - vramupdate[addr] |= pset->update.b[0]; - pset->base.ptr[addr] &= ~(0x80 >> bit); - } - else { - pset->pattern <<= 1; - } + vramupdate[addr] |= pset->update.b[0]; + pset->base.ptr[addr] &= ~(0x80 >> bit); } static void MEMCALL _set(GDCPSET pset, UINT addr, UINT bit) { - if (pset->pattern & 0x8000) { - pset->pattern <<= 1; - pset->pattern++; - vramupdate[addr] |= pset->update.b[0]; - pset->base.ptr[addr] |= (0x80 >> bit); - } - else { - pset->pattern <<= 1; - } + vramupdate[addr] |= pset->update.b[0]; + pset->base.ptr[addr] |= (0x80 >> bit); } @@ -74,21 +47,13 @@ static void MEMCALL withtdw(GDCPSET pset BYTE *ptr; - if (pset->pattern & 0x8000) { - pset->pattern <<= 1; - pset->pattern++; - addr &= ~1; - - *(UINT16 *)(vramupdate + addr) |= pset->update.w; - ptr = pset->base.ptr + addr; - *(UINT16 *)(ptr + VRAM_B) = grcg.tile[0].w; - *(UINT16 *)(ptr + VRAM_R) = grcg.tile[1].w; - *(UINT16 *)(ptr + VRAM_G) = grcg.tile[2].w; - *(UINT16 *)(ptr + VRAM_E) = grcg.tile[3].w; - } - else { - pset->pattern <<= 1; - } + addr &= ~1; + *(UINT16 *)(vramupdate + addr) |= pset->update.w; + ptr = pset->base.ptr + addr; + *(UINT16 *)(ptr + VRAM_B) = grcg.tile[0].w; + *(UINT16 *)(ptr + VRAM_R) = grcg.tile[1].w; + *(UINT16 *)(ptr + VRAM_G) = grcg.tile[2].w; + *(UINT16 *)(ptr + VRAM_E) = grcg.tile[3].w; (void)bit; } @@ -98,25 +63,18 @@ static void MEMCALL withrmw(GDCPSET pset BYTE data; BYTE mask; - if (pset->pattern & 0x8000) { - pset->pattern <<= 1; - pset->pattern++; - vramupdate[addr] |= pset->update.b[0]; - ptr = pset->base.ptr + addr; - data = (0x80 >> bit); - mask = ~data; - ptr[VRAM_B] &= mask; - ptr[VRAM_B] |= data & grcg.tile[0].b[0]; - ptr[VRAM_R] &= mask; - ptr[VRAM_R] |= data & grcg.tile[1].b[0]; - ptr[VRAM_G] &= mask; - ptr[VRAM_G] |= data & grcg.tile[2].b[0]; - ptr[VRAM_E] &= mask; - ptr[VRAM_E] |= data & grcg.tile[3].b[0]; - } - else { - pset->pattern <<= 1; - } + vramupdate[addr] |= pset->update.b[0]; + ptr = pset->base.ptr + addr; + data = (0x80 >> bit); + mask = ~data; + ptr[VRAM_B] &= mask; + ptr[VRAM_B] |= data & grcg.tile[0].b[0]; + ptr[VRAM_R] &= mask; + ptr[VRAM_R] |= data & grcg.tile[1].b[0]; + ptr[VRAM_G] &= mask; + ptr[VRAM_G] |= data & grcg.tile[2].b[0]; + ptr[VRAM_E] &= mask; + ptr[VRAM_E] |= data & grcg.tile[3].b[0]; } @@ -126,23 +84,20 @@ static void MEMCALL withegc(GDCPSET pset REG16 data; - if (pset->pattern & 0x8000) { - pset->pattern <<= 1; - pset->pattern++; - data = (0x80 >> bit); - if (addr & 1) { - addr &= ~1; - data <<= 8; - } - egc_write_w(pset->base.addr + addr, data); - } - else { - pset->pattern <<= 1; + data = (0x80 >> bit); + if (addr & 1) { + addr &= ~1; + data <<= 8; } + egc_write_w(pset->base.addr + addr, data); } -static const GDCPSFN psettbl[] = {_replace, _complemnt, _clear, _set}; +static const GDCPSFN psettbl[4][2] = { + {_replace0, _replace1}, + {_nop, _complemnt}, + {_nop, _clear}, + {_nop, _set}}; // ---- @@ -153,7 +108,8 @@ void MEMCALL gdcpset_prepare(GDCPSET pse BYTE update; if (vramop.operate & VOP_EGCBIT) { - pset->func = withegc; + pset->func[0] = _nop; + pset->func[1] = withegc; pset->base.addr = vramplaneseg[(csrw >> 14) & 3]; } else { @@ -167,11 +123,13 @@ void MEMCALL gdcpset_prepare(GDCPSET pse } op &= 3; if (!(grcg.gdcwithgrcg & 0x8)) { - pset->func = psettbl[op]; + pset->func[0] = psettbl[op][0]; + pset->func[1] = psettbl[op][1]; pset->base.ptr = base + vramplaneseg[(csrw >> 14) & 3]; } else { - pset->func = (grcg.gdcwithgrcg & 0x4)?withrmw:withtdw; + pset->func[0] = _nop; + pset->func[1] = (grcg.gdcwithgrcg & 0x4)?withrmw:withtdw; pset->base.ptr = base; } gdcs.grphdisp |= update; @@ -186,24 +144,24 @@ void MEMCALL gdcpset_prepare(GDCPSET pse void MEMCALL gdcpset(GDCPSET pset, UINT16 x, UINT16 y) { + UINT dot; + + dot = pset->pattern & 1; + pset->pattern = (pset->pattern >> 1) + (dot << 15); pset->dots++; if (y > 409) { - goto nopset; + return; } else if (y == 409) { if (x >= 384) { - goto nopset; + return; } } else { if (x >= 640) { - goto nopset; + return; } } - (*pset->func)(pset, (y * 80) + (x >> 3), x & 7); - return; - -nopset: - pset->pattern = (pset->pattern << 1) + (pset->pattern >> 15); + (*pset->func[dot])(pset, (y * 80) + (x >> 3), x & 7); }