Implement missing ROPs
This commit is contained in:
@@ -475,6 +475,9 @@ chips_69000_do_rop_8bpp_patterned(uint8_t *dst, uint8_t pattern, uint8_t src, ui
|
|||||||
break;
|
break;
|
||||||
case 0xAA:
|
case 0xAA:
|
||||||
break; /* No-op. */
|
break; /* No-op. */
|
||||||
|
case 0xAC:
|
||||||
|
*dst = src ^ (pattern & (*dst ^ src));
|
||||||
|
break;
|
||||||
case 0xAF:
|
case 0xAF:
|
||||||
*dst |= ~pattern;
|
*dst |= ~pattern;
|
||||||
break;
|
break;
|
||||||
@@ -484,6 +487,9 @@ chips_69000_do_rop_8bpp_patterned(uint8_t *dst, uint8_t pattern, uint8_t src, ui
|
|||||||
case 0xCA:
|
case 0xCA:
|
||||||
*dst ^= (pattern & (src ^ *dst));
|
*dst ^= (pattern & (src ^ *dst));
|
||||||
break;
|
break;
|
||||||
|
case 0xE2:
|
||||||
|
*dst ^= (src & (pattern ^ *dst));
|
||||||
|
break;
|
||||||
case 0xDA:
|
case 0xDA:
|
||||||
*dst ^= pattern & (~(src & *dst));
|
*dst ^= pattern & (~(src & *dst));
|
||||||
break;
|
break;
|
||||||
@@ -502,6 +508,9 @@ chips_69000_do_rop_8bpp_patterned(uint8_t *dst, uint8_t pattern, uint8_t src, ui
|
|||||||
case 0xFF:
|
case 0xFF:
|
||||||
*dst = 0xFF;
|
*dst = 0xFF;
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
pclog("Unknown ROP 0x%X\n", rop);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -513,6 +522,9 @@ chips_69000_do_rop_16bpp_patterned(uint16_t *dst, uint16_t pattern, uint16_t src
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (rop) {
|
switch (rop) {
|
||||||
|
default:
|
||||||
|
pclog("Unknown ROP 0x%X\n", rop);
|
||||||
|
break;
|
||||||
case 0x00:
|
case 0x00:
|
||||||
*dst = 0;
|
*dst = 0;
|
||||||
break;
|
break;
|
||||||
@@ -572,6 +584,9 @@ chips_69000_do_rop_16bpp_patterned(uint16_t *dst, uint16_t pattern, uint16_t src
|
|||||||
break;
|
break;
|
||||||
case 0xAA:
|
case 0xAA:
|
||||||
break; /* No-op. */
|
break; /* No-op. */
|
||||||
|
case 0xAC:
|
||||||
|
*dst = src ^ (pattern & (*dst ^ src));
|
||||||
|
break;
|
||||||
case 0xAF:
|
case 0xAF:
|
||||||
*dst |= ~pattern;
|
*dst |= ~pattern;
|
||||||
break;
|
break;
|
||||||
@@ -581,6 +596,9 @@ chips_69000_do_rop_16bpp_patterned(uint16_t *dst, uint16_t pattern, uint16_t src
|
|||||||
case 0xCA:
|
case 0xCA:
|
||||||
*dst ^= (pattern & (src ^ *dst));
|
*dst ^= (pattern & (src ^ *dst));
|
||||||
break;
|
break;
|
||||||
|
case 0xE2:
|
||||||
|
*dst ^= (src & (pattern ^ *dst));
|
||||||
|
break;
|
||||||
case 0xDA:
|
case 0xDA:
|
||||||
*dst ^= pattern & (~(src & *dst));
|
*dst ^= pattern & (~(src & *dst));
|
||||||
break;
|
break;
|
||||||
@@ -612,6 +630,9 @@ chips_69000_do_rop_24bpp_patterned(uint32_t *dst, uint32_t pattern, uint32_t src
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (rop) {
|
switch (rop) {
|
||||||
|
default:
|
||||||
|
pclog("Unknown ROP 0x%X\n", rop);
|
||||||
|
break;
|
||||||
case 0x00:
|
case 0x00:
|
||||||
*dst = 0;
|
*dst = 0;
|
||||||
break;
|
break;
|
||||||
@@ -671,6 +692,9 @@ chips_69000_do_rop_24bpp_patterned(uint32_t *dst, uint32_t pattern, uint32_t src
|
|||||||
break;
|
break;
|
||||||
case 0xAA:
|
case 0xAA:
|
||||||
break; /* No-op. */
|
break; /* No-op. */
|
||||||
|
case 0xAC:
|
||||||
|
*dst = src ^ (pattern & (*dst ^ src));
|
||||||
|
break;
|
||||||
case 0xAF:
|
case 0xAF:
|
||||||
*dst |= ~pattern;
|
*dst |= ~pattern;
|
||||||
break;
|
break;
|
||||||
@@ -683,6 +707,9 @@ chips_69000_do_rop_24bpp_patterned(uint32_t *dst, uint32_t pattern, uint32_t src
|
|||||||
case 0xDA:
|
case 0xDA:
|
||||||
*dst ^= pattern & (~(src & *dst));
|
*dst ^= pattern & (~(src & *dst));
|
||||||
break;
|
break;
|
||||||
|
case 0xE2:
|
||||||
|
*dst ^= (src & (pattern ^ *dst));
|
||||||
|
break;
|
||||||
case 0xEA:
|
case 0xEA:
|
||||||
*dst |= pattern & src;
|
*dst |= pattern & src;
|
||||||
break;
|
break;
|
||||||
@@ -853,7 +880,7 @@ chips_69000_process_pixel(chips_69000_t* chips, uint32_t pixel)
|
|||||||
if (chips->bitblt_running.bitblt.bitblt_control & (1 << 19))
|
if (chips->bitblt_running.bitblt.bitblt_control & (1 << 19))
|
||||||
pattern_data = 0;
|
pattern_data = 0;
|
||||||
else
|
else
|
||||||
pattern_data = chips_69000_readb_linear(chips->bitblt_running.bitblt.pat_addr + ((vert_pat_alignment + chips->bitblt_running.y) & 7), chips);
|
pattern_data = chips_69000_readb_linear(chips->bitblt_running.bitblt.pat_addr + ((vert_pat_alignment + (chips->bitblt_running.y & 7)) & 7), chips);
|
||||||
|
|
||||||
is_true = !!(pattern_data & (1 << (((chips->bitblt_running.bitblt.destination_addr & 7) + chips->bitblt_running.x) & 7)));
|
is_true = !!(pattern_data & (1 << (((chips->bitblt_running.bitblt.destination_addr & 7) + chips->bitblt_running.x) & 7)));
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user