SVGA DAC mask is actually applied now.

This commit is contained in:
OBattler
2017-01-03 01:34:17 +01:00
parent 8fcc49cd31
commit c00be1085d

View File

@@ -67,16 +67,16 @@ void svga_render_text_40(svga_t *svga)
if (drawcursor) if (drawcursor)
{ {
bg = svga->pallook[svga->egapal[attr & 15]]; bg = svga->pallook[svga->egapal[attr & 15] & svga->dac_mask];
fg = svga->pallook[svga->egapal[attr >> 4]]; fg = svga->pallook[svga->egapal[attr >> 4] & svga->dac_mask];
} }
else else
{ {
fg = svga->pallook[svga->egapal[attr & 15]]; fg = svga->pallook[svga->egapal[attr & 15] & svga->dac_mask];
bg = svga->pallook[svga->egapal[attr >> 4]]; bg = svga->pallook[svga->egapal[attr >> 4] & svga->dac_mask];
if (attr & 0x80 && svga->attrregs[0x10] & 8) if (attr & 0x80 && svga->attrregs[0x10] & 8)
{ {
bg = svga->pallook[svga->egapal[(attr >> 4) & 7]]; bg = svga->pallook[svga->egapal[(attr >> 4) & 7] & svga->dac_mask];
if (svga->blink & 16) if (svga->blink & 16)
fg = bg; fg = bg;
} }
@@ -134,16 +134,16 @@ void svga_render_text_40_12(svga_t *svga)
if (drawcursor) if (drawcursor)
{ {
bg = svga->pallook[svga->egapal[attr & 15]]; bg = svga->pallook[svga->egapal[attr & 15] & svga->dac_mask];
fg = svga->pallook[svga->egapal[attr >> 4]]; fg = svga->pallook[svga->egapal[attr >> 4] & svga->dac_mask];
} }
else else
{ {
fg = svga->pallook[svga->egapal[attr & 15]]; fg = svga->pallook[svga->egapal[attr & 15] & svga->dac_mask];
bg = svga->pallook[svga->egapal[attr >> 4]]; bg = svga->pallook[svga->egapal[attr >> 4] & svga->dac_mask];
if (attr & 0x80 && svga->attrregs[0x10] & 8) if (attr & 0x80 && svga->attrregs[0x10] & 8)
{ {
bg = svga->pallook[svga->egapal[(attr >> 4) & 7]]; bg = svga->pallook[svga->egapal[(attr >> 4) & 7] & svga->dac_mask];
if (svga->blink & 16) if (svga->blink & 16)
fg = bg; fg = bg;
} }
@@ -188,16 +188,16 @@ void svga_render_text_80(svga_t *svga)
if (drawcursor) if (drawcursor)
{ {
bg = svga->pallook[svga->egapal[attr & 15]]; bg = svga->pallook[svga->egapal[attr & 15] & svga->dac_mask];
fg = svga->pallook[svga->egapal[attr >> 4]]; fg = svga->pallook[svga->egapal[attr >> 4] & svga->dac_mask];
} }
else else
{ {
fg = svga->pallook[svga->egapal[attr & 15]]; fg = svga->pallook[svga->egapal[attr & 15] & svga->dac_mask];
bg = svga->pallook[svga->egapal[attr >> 4]]; bg = svga->pallook[svga->egapal[attr >> 4] & svga->dac_mask];
if (attr & 0x80 && svga->attrregs[0x10] & 8) if (attr & 0x80 && svga->attrregs[0x10] & 8)
{ {
bg = svga->pallook[svga->egapal[(attr >> 4) & 7]]; bg = svga->pallook[svga->egapal[(attr >> 4) & 7] & svga->dac_mask];
if (svga->blink & 16) if (svga->blink & 16)
fg = bg; fg = bg;
} }
@@ -255,16 +255,16 @@ void svga_render_text_80_12(svga_t *svga)
if (drawcursor) if (drawcursor)
{ {
bg = svga->pallook[svga->egapal[attr & 15]]; bg = svga->pallook[svga->egapal[attr & 15] & svga->dac_mask];
fg = svga->pallook[svga->egapal[attr >> 4]]; fg = svga->pallook[svga->egapal[attr >> 4] & svga->dac_mask];
} }
else else
{ {
fg = svga->pallook[svga->egapal[attr & 15]]; fg = svga->pallook[svga->egapal[attr & 15] & svga->dac_mask];
bg = svga->pallook[svga->egapal[attr >> 4]]; bg = svga->pallook[svga->egapal[attr >> 4] & svga->dac_mask];
if (attr & 0x80 && svga->attrregs[0x10] & 8) if (attr & 0x80 && svga->attrregs[0x10] & 8)
{ {
bg = svga->pallook[svga->egapal[(attr >> 4) & 7]]; bg = svga->pallook[svga->egapal[(attr >> 4) & 7] & svga->dac_mask];
if (svga->blink & 16) if (svga->blink & 16)
fg = bg; fg = bg;
} }
@@ -319,14 +319,14 @@ void svga_render_2bpp_lowres(svga_t *svga)
svga->ma += 4; svga->ma += 4;
svga->ma = svga_mask_addr(svga->ma, svga); svga->ma = svga_mask_addr(svga->ma, svga);
p[0] = p[1] = svga->pallook[svga->egapal[(dat[0] >> 6) & 3]]; p[0] = p[1] = svga->pallook[svga->egapal[(dat[0] >> 6) & 3] & svga->dac_mask];
p[2] = p[3] = svga->pallook[svga->egapal[(dat[0] >> 4) & 3]]; p[2] = p[3] = svga->pallook[svga->egapal[(dat[0] >> 4) & 3] & svga->dac_mask];
p[4] = p[5] = svga->pallook[svga->egapal[(dat[0] >> 2) & 3]]; p[4] = p[5] = svga->pallook[svga->egapal[(dat[0] >> 2) & 3] & svga->dac_mask];
p[6] = p[7] = svga->pallook[svga->egapal[dat[0] & 3]]; p[6] = p[7] = svga->pallook[svga->egapal[dat[0] & 3] & svga->dac_mask];
p[8] = p[9] = svga->pallook[svga->egapal[(dat[1] >> 6) & 3]]; p[8] = p[9] = svga->pallook[svga->egapal[(dat[1] >> 6) & 3] & svga->dac_mask];
p[10] = p[11] = svga->pallook[svga->egapal[(dat[1] >> 4) & 3]]; p[10] = p[11] = svga->pallook[svga->egapal[(dat[1] >> 4) & 3] & svga->dac_mask];
p[12] = p[13] = svga->pallook[svga->egapal[(dat[1] >> 2) & 3]]; p[12] = p[13] = svga->pallook[svga->egapal[(dat[1] >> 2) & 3] & svga->dac_mask];
p[14] = p[15] = svga->pallook[svga->egapal[dat[1] & 3]]; p[14] = p[15] = svga->pallook[svga->egapal[dat[1] & 3] & svga->dac_mask];
p += 16; p += 16;
} }
@@ -371,14 +371,14 @@ void svga_render_2bpp_highres(svga_t *svga)
svga->ma += 4; svga->ma += 4;
svga->ma = svga_mask_addr(svga->ma, svga); svga->ma = svga_mask_addr(svga->ma, svga);
p[0] = svga->pallook[svga->egapal[(dat[0] >> 6) & 3]]; p[0] = svga->pallook[svga->egapal[(dat[0] >> 6) & 3] & svga->dac_mask];
p[1] = svga->pallook[svga->egapal[(dat[0] >> 4) & 3]]; p[1] = svga->pallook[svga->egapal[(dat[0] >> 4) & 3] & svga->dac_mask];
p[2] = svga->pallook[svga->egapal[(dat[0] >> 2) & 3]]; p[2] = svga->pallook[svga->egapal[(dat[0] >> 2) & 3] & svga->dac_mask];
p[3] = svga->pallook[svga->egapal[dat[0] & 3]]; p[3] = svga->pallook[svga->egapal[dat[0] & 3] & svga->dac_mask];
p[4] = svga->pallook[svga->egapal[(dat[1] >> 6) & 3]]; p[4] = svga->pallook[svga->egapal[(dat[1] >> 6) & 3] & svga->dac_mask];
p[5] = svga->pallook[svga->egapal[(dat[1] >> 4) & 3]]; p[5] = svga->pallook[svga->egapal[(dat[1] >> 4) & 3] & svga->dac_mask];
p[6] = svga->pallook[svga->egapal[(dat[1] >> 2) & 3]]; p[6] = svga->pallook[svga->egapal[(dat[1] >> 2) & 3] & svga->dac_mask];
p[7] = svga->pallook[svga->egapal[dat[1] & 3]]; p[7] = svga->pallook[svga->egapal[dat[1] & 3] & svga->dac_mask];
p += 8; p += 8;
} }
@@ -410,17 +410,17 @@ void svga_render_4bpp_lowres(svga_t *svga)
svga->ma = svga_mask_addr(svga->ma, svga); svga->ma = svga_mask_addr(svga->ma, svga);
dat = edatlookup[edat[0] >> 6][edat[1] >> 6] | (edatlookup[edat[2] >> 6][edat[3] >> 6] << 2); dat = edatlookup[edat[0] >> 6][edat[1] >> 6] | (edatlookup[edat[2] >> 6][edat[3] >> 6] << 2);
p[0] = p[1] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask]]; p[0] = p[1] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask];
p[2] = p[3] = svga->pallook[svga->egapal[dat & svga->plane_mask]]; p[2] = p[3] = svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask];
dat = edatlookup[(edat[0] >> 4) & 3][(edat[1] >> 4) & 3] | (edatlookup[(edat[2] >> 4) & 3][(edat[3] >> 4) & 3] << 2); dat = edatlookup[(edat[0] >> 4) & 3][(edat[1] >> 4) & 3] | (edatlookup[(edat[2] >> 4) & 3][(edat[3] >> 4) & 3] << 2);
p[4] = p[5] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask]]; p[4] = p[5] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask];
p[6] = p[7] = svga->pallook[svga->egapal[dat & svga->plane_mask]]; p[6] = p[7] = svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask];
dat = edatlookup[(edat[0] >> 2) & 3][(edat[1] >> 2) & 3] | (edatlookup[(edat[2] >> 2) & 3][(edat[3] >> 2) & 3] << 2); dat = edatlookup[(edat[0] >> 2) & 3][(edat[1] >> 2) & 3] | (edatlookup[(edat[2] >> 2) & 3][(edat[3] >> 2) & 3] << 2);
p[8] = p[9] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask]]; p[8] = p[9] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask];
p[10] = p[11] = svga->pallook[svga->egapal[dat & svga->plane_mask]]; p[10] = p[11] = svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask];
dat = edatlookup[edat[0] & 3][edat[1] & 3] | (edatlookup[edat[2] & 3][edat[3] & 3] << 2); dat = edatlookup[edat[0] & 3][edat[1] & 3] | (edatlookup[edat[2] & 3][edat[3] & 3] << 2);
p[12] = p[13] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask]]; p[12] = p[13] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask];
p[14] = p[15] = svga->pallook[svga->egapal[dat & svga->plane_mask]]; p[14] = p[15] = svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask];
p += 16; p += 16;
} }
@@ -467,17 +467,17 @@ void svga_render_4bpp_highres(svga_t *svga)
svga->ma = svga_mask_addr(svga->ma, svga); svga->ma = svga_mask_addr(svga->ma, svga);
dat = edatlookup[edat[0] >> 6][edat[1] >> 6] | (edatlookup[edat[2] >> 6][edat[3] >> 6] << 2); dat = edatlookup[edat[0] >> 6][edat[1] >> 6] | (edatlookup[edat[2] >> 6][edat[3] >> 6] << 2);
p[0] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask]]; p[0] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask];
p[1] = svga->pallook[svga->egapal[dat & svga->plane_mask]]; p[1] = svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask];
dat = edatlookup[(edat[0] >> 4) & 3][(edat[1] >> 4) & 3] | (edatlookup[(edat[2] >> 4) & 3][(edat[3] >> 4) & 3] << 2); dat = edatlookup[(edat[0] >> 4) & 3][(edat[1] >> 4) & 3] | (edatlookup[(edat[2] >> 4) & 3][(edat[3] >> 4) & 3] << 2);
p[2] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask]]; p[2] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask];
p[3] = svga->pallook[svga->egapal[dat & svga->plane_mask]]; p[3] = svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask];
dat = edatlookup[(edat[0] >> 2) & 3][(edat[1] >> 2) & 3] | (edatlookup[(edat[2] >> 2) & 3][(edat[3] >> 2) & 3] << 2); dat = edatlookup[(edat[0] >> 2) & 3][(edat[1] >> 2) & 3] | (edatlookup[(edat[2] >> 2) & 3][(edat[3] >> 2) & 3] << 2);
p[4] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask]]; p[4] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask];
p[5] = svga->pallook[svga->egapal[dat & svga->plane_mask]]; p[5] = svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask];
dat = edatlookup[edat[0] & 3][edat[1] & 3] | (edatlookup[edat[2] & 3][edat[3] & 3] << 2); dat = edatlookup[edat[0] & 3][edat[1] & 3] | (edatlookup[edat[2] & 3][edat[3] & 3] << 2);
p[6] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask]]; p[6] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask];
p[7] = svga->pallook[svga->egapal[dat & svga->plane_mask]]; p[7] = svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask];
p += 8; p += 8;
} }
@@ -503,10 +503,10 @@ void svga_render_8bpp_lowres(svga_t *svga)
{ {
uint32_t dat = *(uint32_t *)(&svga->vram[svga->ma]); uint32_t dat = *(uint32_t *)(&svga->vram[svga->ma]);
p[0] = p[1] = svga->pallook[dat & 0xff]; p[0] = p[1] = svga->pallook[dat & svga->dac_mask];
p[2] = p[3] = svga->pallook[(dat >> 8) & 0xff]; p[2] = p[3] = svga->pallook[(dat >> 8) & svga->dac_mask];
p[4] = p[5] = svga->pallook[(dat >> 16) & 0xff]; p[4] = p[5] = svga->pallook[(dat >> 16) & svga->dac_mask];
p[6] = p[7] = svga->pallook[(dat >> 24) & 0xff]; p[6] = p[7] = svga->pallook[(dat >> 24) & svga->dac_mask];
svga->ma += 4; svga->ma += 4;
svga->ma = svga_mask_addr(svga->ma, svga); svga->ma = svga_mask_addr(svga->ma, svga);
@@ -536,16 +536,16 @@ void svga_render_8bpp_highres(svga_t *svga)
{ {
uint32_t dat; uint32_t dat;
dat = *(uint32_t *)(&svga->vram[svga->ma]); dat = *(uint32_t *)(&svga->vram[svga->ma]);
p[0] = svga->pallook[dat & 0xff]; p[0] = svga->pallook[dat & svga->dac_mask];
p[1] = svga->pallook[(dat >> 8) & 0xff]; p[1] = svga->pallook[(dat >> 8) & svga->dac_mask];
p[2] = svga->pallook[(dat >> 16) & 0xff]; p[2] = svga->pallook[(dat >> 16) & svga->dac_mask];
p[3] = svga->pallook[(dat >> 24) & 0xff]; p[3] = svga->pallook[(dat >> 24) & svga->dac_mask];
dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + 4, svga)]); dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + 4, svga)]);
p[4] = svga->pallook[dat & 0xff]; p[4] = svga->pallook[dat & svga->dac_mask];
p[5] = svga->pallook[(dat >> 8) & 0xff]; p[5] = svga->pallook[(dat >> 8) & svga->dac_mask];
p[6] = svga->pallook[(dat >> 16) & 0xff]; p[6] = svga->pallook[(dat >> 16) & svga->dac_mask];
p[7] = svga->pallook[(dat >> 24) & 0xff]; p[7] = svga->pallook[(dat >> 24) & svga->dac_mask];
svga->ma += 8; svga->ma += 8;
svga->ma = svga_mask_addr(svga->ma, svga); svga->ma = svga_mask_addr(svga->ma, svga);