} else if (currprefs.chipset_mask & CSMASK_AGA) {
if (bplplanecnt >= 7) { /* AGA mode HAM8 */
while (unpainted_amiga-- > 0) {
- int pv = pixdata.apixels[ham_decode_pixel++] ^ bplxor;
+ int pw = pixdata.apixels[ham_decode_pixel++];
+ int pv = pw ^ bplxor;
+ int pc = pv >> 2;
switch (pv & 0x3)
{
- case 0x0: ham_lastcolor = colors_for_drawing.color_regs_aga[pv >> 2] & 0xffffff; break;
- case 0x1: ham_lastcolor &= 0xFFFF03; ham_lastcolor |= (pv & 0xFC); break;
- case 0x2: ham_lastcolor &= 0x03FFFF; ham_lastcolor |= (pv & 0xFC) << 16; break;
- case 0x3: ham_lastcolor &= 0xFF03FF; ham_lastcolor |= (pv & 0xFC) << 8; break;
+ case 0x0: ham_lastcolor = colors_for_drawing.color_regs_aga[pc] & 0xffffff; break;
+ case 0x1: ham_lastcolor &= 0xFFFF03; ham_lastcolor |= (pw & 0xFC); break;
+ case 0x2: ham_lastcolor &= 0x03FFFF; ham_lastcolor |= (pw & 0xFC) << 16; break;
+ case 0x3: ham_lastcolor &= 0xFF03FF; ham_lastcolor |= (pw & 0xFC) << 8; break;
}
}
} else { /* AGA mode HAM6 */
while (unpainted_amiga-- > 0) {
- int pv = pixdata.apixels[ham_decode_pixel++] ^ bplxor;
- uae_u32 pc = ((pv & 0xf) << 0) | ((pv & 0xf) << 4);
+ int pw = pixdata.apixels[ham_decode_pixel++];
+ int pv = pw ^ bplxor;
+ uae_u32 pc = ((pw & 0xf) << 0) | ((pw & 0xf) << 4);
switch (pv & 0x30)
{
- case 0x00: ham_lastcolor = colors_for_drawing.color_regs_aga[pv] & 0xffffff; break;
+ case 0x00: ham_lastcolor = colors_for_drawing.color_regs_aga[pv & 0x0f] & 0xffffff; break;
case 0x10: ham_lastcolor &= 0xFFFF00; ham_lastcolor |= pc << 0; break;
case 0x20: ham_lastcolor &= 0x00FFFF; ham_lastcolor |= pc << 16; break;
case 0x30: ham_lastcolor &= 0xFF00FF; ham_lastcolor |= pc << 8; break;
} else if (currprefs.chipset_mask & CSMASK_AGA) {
if (bplplanecnt >= 7) { /* AGA mode HAM8 */
while (todraw_amiga-- > 0) {
- int pv = pixdata.apixels[ham_decode_pixel] ^ bplxor;
+ int pw = pixdata.apixels[ham_decode_pixel];
+ int pv = pw ^ bplxor;
+ int pc = pv >> 2;
switch (pv & 0x3)
{
- case 0x0: ham_lastcolor = colors_for_drawing.color_regs_aga[pv >> 2] & 0xffffff; break;
- case 0x1: ham_lastcolor &= 0xFFFF03; ham_lastcolor |= (pv & 0xFC); break;
- case 0x2: ham_lastcolor &= 0x03FFFF; ham_lastcolor |= (pv & 0xFC) << 16; break;
- case 0x3: ham_lastcolor &= 0xFF03FF; ham_lastcolor |= (pv & 0xFC) << 8; break;
+ case 0x0: ham_lastcolor = colors_for_drawing.color_regs_aga[pc] & 0xffffff; break;
+ case 0x1: ham_lastcolor &= 0xFFFF03; ham_lastcolor |= (pw & 0xFC); break;
+ case 0x2: ham_lastcolor &= 0x03FFFF; ham_lastcolor |= (pw & 0xFC) << 16; break;
+ case 0x3: ham_lastcolor &= 0xFF03FF; ham_lastcolor |= (pw & 0xFC) << 8; break;
}
ham_linebuf[ham_decode_pixel++] = ham_lastcolor;
}
} else { /* AGA mode HAM6 */
while (todraw_amiga-- > 0) {
- int pv = pixdata.apixels[ham_decode_pixel] ^ bplxor;
- uae_u32 pc = ((pv & 0xf) << 0) | ((pv & 0xf) << 4);
+ int pw = pixdata.apixels[ham_decode_pixel];
+ int pv = pw ^ bplxor;
+ uae_u32 pc = ((pw & 0xf) << 0) | ((pw & 0xf) << 4);
switch (pv & 0x30)
{
- case 0x00: ham_lastcolor = colors_for_drawing.color_regs_aga[pv] & 0xffffff; break;
+ case 0x00: ham_lastcolor = colors_for_drawing.color_regs_aga[pv & 0x0f] & 0xffffff; break;
case 0x10: ham_lastcolor &= 0xFFFF00; ham_lastcolor |= pc << 0; break;
case 0x20: ham_lastcolor &= 0x00FFFF; ham_lastcolor |= pc << 16; break;
case 0x30: ham_lastcolor &= 0xFF00FF; ham_lastcolor |= pc << 8; break;
if (aga && cmode != CMODE_DUALPF) {
if (spr)
outln ( " sprpix_val = pixdata.apixels[spix];");
- outln ( " spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val;");
+ if (cmode != CMODE_HAM)
+ outln ( " spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val;");
} else if (cmode != CMODE_HAM) {
outln ( " spix_val = pixdata.apixels[spix];");
if (spr)
} else if (cmode == CMODE_DUALPF) {
outln ( " dpix_val = p_acolors[lookup[spix_val]];");
} else if (aga && cmode == CMODE_EXTRAHB) {
- outln ( " if (spix_val >= 32 && spix_val < 64) {");
- outln ( " unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;");
+ outln ( " if (pixdata.apixels[spix] & 0x20) {");
+ outln ( " unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F;");
outln ( " dpix_val = CONVERT_RGB (c);");
outln ( " } else");
outln ( " dpix_val = p_acolors[spix_val];");