|
|
|
@@ -120,8 +120,12 @@ svga_render_text_40(svga_t *svga)
|
|
|
|
|
|
|
|
|
|
for (x = 0; x < (svga->hdisp + svga->scrollcache); x += xinc) {
|
|
|
|
|
drawcursor = ((svga->ma == svga->ca) && svga->con && svga->cursoron);
|
|
|
|
|
|
|
|
|
|
if (svga->crtc[0x17] & 0x80) {
|
|
|
|
|
chr = svga->vram[(svga->ma << 1) & svga->vram_display_mask];
|
|
|
|
|
attr = svga->vram[((svga->ma << 1) + 1) & svga->vram_display_mask];
|
|
|
|
|
} else
|
|
|
|
|
chr = attr = 0;
|
|
|
|
|
|
|
|
|
|
if (attr & 8) charaddr = svga->charsetb + (chr * 128);
|
|
|
|
|
else charaddr = svga->charseta + (chr * 128);
|
|
|
|
@@ -183,8 +187,12 @@ svga_render_text_80(svga_t *svga)
|
|
|
|
|
|
|
|
|
|
for (x = 0; x < (svga->hdisp + svga->scrollcache); x += xinc) {
|
|
|
|
|
drawcursor = ((svga->ma == svga->ca) && svga->con && svga->cursoron);
|
|
|
|
|
|
|
|
|
|
if (svga->crtc[0x17] & 0x80) {
|
|
|
|
|
chr = svga->vram[(svga->ma << 1) & svga->vram_display_mask];
|
|
|
|
|
attr = svga->vram[((svga->ma << 1) + 1) & svga->vram_display_mask];
|
|
|
|
|
} else
|
|
|
|
|
chr = attr = 0;
|
|
|
|
|
|
|
|
|
|
if (attr & 8) charaddr = svga->charsetb + (chr * 128);
|
|
|
|
|
else charaddr = svga->charseta + (chr * 128);
|
|
|
|
@@ -248,7 +256,10 @@ svga_render_text_80_ksc5601(svga_t *svga)
|
|
|
|
|
drawcursor = ((svga->ma == svga->ca) && svga->con && svga->cursoron);
|
|
|
|
|
chr = svga->vram[(svga->ma << 1) & svga->vram_display_mask];
|
|
|
|
|
nextchr = svga->vram[((svga->ma + 4) << 1) & svga->vram_display_mask];
|
|
|
|
|
if (svga->crtc[0x17] & 0x80)
|
|
|
|
|
attr = svga->vram[((svga->ma << 1) + 1) & svga->vram_display_mask];
|
|
|
|
|
else
|
|
|
|
|
attr = 0;
|
|
|
|
|
|
|
|
|
|
if (drawcursor) {
|
|
|
|
|
bg = svga->pallook[svga->egapal[attr & 15]];
|
|
|
|
@@ -391,6 +402,7 @@ svga_render_2bpp_lowres(svga_t *svga)
|
|
|
|
|
|
|
|
|
|
svga->ma &= svga->vram_mask;
|
|
|
|
|
|
|
|
|
|
if (svga->crtc[0x17] & 0x80) {
|
|
|
|
|
p[0] = p[1] = svga->pallook[svga->egapal[(dat[0] >> 6) & 3]];
|
|
|
|
|
p[2] = p[3] = svga->pallook[svga->egapal[(dat[0] >> 4) & 3]];
|
|
|
|
|
p[4] = p[5] = svga->pallook[svga->egapal[(dat[0] >> 2) & 3]];
|
|
|
|
@@ -399,6 +411,8 @@ svga_render_2bpp_lowres(svga_t *svga)
|
|
|
|
|
p[10] = p[11] = svga->pallook[svga->egapal[(dat[1] >> 4) & 3]];
|
|
|
|
|
p[12] = p[13] = svga->pallook[svga->egapal[(dat[1] >> 2) & 3]];
|
|
|
|
|
p[14] = p[15] = svga->pallook[svga->egapal[dat[1] & 3]];
|
|
|
|
|
} else
|
|
|
|
|
memset(p, 0x00, 16 * sizeof(uint32_t));
|
|
|
|
|
|
|
|
|
|
p += 16;
|
|
|
|
|
}
|
|
|
|
@@ -454,6 +468,7 @@ svga_render_2bpp_highres(svga_t *svga)
|
|
|
|
|
|
|
|
|
|
svga->ma &= svga->vram_mask;
|
|
|
|
|
|
|
|
|
|
if (svga->crtc[0x17] & 0x80) {
|
|
|
|
|
p[0] = svga->pallook[svga->egapal[(dat[0] >> 6) & 3]];
|
|
|
|
|
p[1] = svga->pallook[svga->egapal[(dat[0] >> 4) & 3]];
|
|
|
|
|
p[2] = svga->pallook[svga->egapal[(dat[0] >> 2) & 3]];
|
|
|
|
@@ -462,6 +477,8 @@ svga_render_2bpp_highres(svga_t *svga)
|
|
|
|
|
p[5] = svga->pallook[svga->egapal[(dat[1] >> 4) & 3]];
|
|
|
|
|
p[6] = svga->pallook[svga->egapal[(dat[1] >> 2) & 3]];
|
|
|
|
|
p[7] = svga->pallook[svga->egapal[dat[1] & 3]];
|
|
|
|
|
} else
|
|
|
|
|
memset(p, 0x00, 8 * sizeof(uint32_t));
|
|
|
|
|
|
|
|
|
|
p += 8;
|
|
|
|
|
}
|
|
|
|
@@ -521,6 +538,7 @@ svga_render_4bpp_lowres(svga_t *svga)
|
|
|
|
|
}
|
|
|
|
|
svga->ma &= svga->vram_mask;
|
|
|
|
|
|
|
|
|
|
if (svga->crtc[0x17] & 0x80) {
|
|
|
|
|
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[2] = p[3] = svga->pallook[svga->egapal[dat & svga->plane_mask]];
|
|
|
|
@@ -533,6 +551,8 @@ svga_render_4bpp_lowres(svga_t *svga)
|
|
|
|
|
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[14] = p[15] = svga->pallook[svga->egapal[dat & svga->plane_mask]];
|
|
|
|
|
} else
|
|
|
|
|
memset(p, 0x00, 16 * sizeof(uint32_t));
|
|
|
|
|
|
|
|
|
|
p += 16;
|
|
|
|
|
}
|
|
|
|
@@ -595,6 +615,7 @@ svga_render_4bpp_highres(svga_t *svga)
|
|
|
|
|
}
|
|
|
|
|
svga->ma &= svga->vram_mask;
|
|
|
|
|
|
|
|
|
|
if (svga->crtc[0x17] & 0x80) {
|
|
|
|
|
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[1] = svga->pallook[svga->egapal[dat & svga->plane_mask]];
|
|
|
|
@@ -607,6 +628,8 @@ svga_render_4bpp_highres(svga_t *svga)
|
|
|
|
|
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[7] = svga->pallook[svga->egapal[dat & svga->plane_mask]];
|
|
|
|
|
} else
|
|
|
|
|
memset(p, 0x00, 8 * sizeof(uint32_t));
|
|
|
|
|
|
|
|
|
|
p += 8;
|
|
|
|
|
}
|
|
|
|
@@ -632,12 +655,14 @@ svga_render_8bpp_lowres(svga_t *svga)
|
|
|
|
|
svga->lastline_draw = svga->displine;
|
|
|
|
|
|
|
|
|
|
for (x = 0; x <= (svga->hdisp + svga->scrollcache); x += 8) {
|
|
|
|
|
if (svga->crtc[0x17] & 0x80) {
|
|
|
|
|
dat = *(uint32_t *)(&svga->vram[svga->ma & svga->vram_display_mask]);
|
|
|
|
|
|
|
|
|
|
p[0] = p[1] = svga->map8[dat & 0xff];
|
|
|
|
|
p[2] = p[3] = svga->map8[(dat >> 8) & 0xff];
|
|
|
|
|
p[4] = p[5] = svga->map8[(dat >> 16) & 0xff];
|
|
|
|
|
p[6] = p[7] = svga->map8[(dat >> 24) & 0xff];
|
|
|
|
|
} else
|
|
|
|
|
memset(p, 0x00, 8 * sizeof(uint32_t));
|
|
|
|
|
|
|
|
|
|
svga->ma += 4;
|
|
|
|
|
p += 8;
|
|
|
|
@@ -665,6 +690,7 @@ svga_render_8bpp_highres(svga_t *svga)
|
|
|
|
|
svga->lastline_draw = svga->displine;
|
|
|
|
|
|
|
|
|
|
for (x = 0; x <= (svga->hdisp/* + svga->scrollcache*/); x += 8) {
|
|
|
|
|
if (svga->crtc[0x17] & 0x80) {
|
|
|
|
|
dat = *(uint32_t *)(&svga->vram[svga->ma & svga->vram_display_mask]);
|
|
|
|
|
p[0] = svga->map8[dat & 0xff];
|
|
|
|
|
p[1] = svga->map8[(dat >> 8) & 0xff];
|
|
|
|
@@ -676,6 +702,8 @@ svga_render_8bpp_highres(svga_t *svga)
|
|
|
|
|
p[5] = svga->map8[(dat >> 8) & 0xff];
|
|
|
|
|
p[6] = svga->map8[(dat >> 16) & 0xff];
|
|
|
|
|
p[7] = svga->map8[(dat >> 24) & 0xff];
|
|
|
|
|
} else
|
|
|
|
|
memset(p, 0x00, 8 * sizeof(uint32_t));
|
|
|
|
|
|
|
|
|
|
svga->ma += 8;
|
|
|
|
|
p += 8;
|
|
|
|
@@ -703,17 +731,18 @@ svga_render_15bpp_lowres(svga_t *svga)
|
|
|
|
|
svga->lastline_draw = svga->displine;
|
|
|
|
|
|
|
|
|
|
for (x = 0; x <= (svga->hdisp + svga->scrollcache); x += 4) {
|
|
|
|
|
if (svga->crtc[0x17] & 0x80) {
|
|
|
|
|
dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vram_display_mask]);
|
|
|
|
|
|
|
|
|
|
p[(x << 1)] = p[(x << 1) + 1] = video_15to32[dat & 0xffff];
|
|
|
|
|
|
|
|
|
|
p[(x << 1) + 2] = p[(x << 1) + 3] = video_15to32[dat >> 16];
|
|
|
|
|
|
|
|
|
|
dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 4) & svga->vram_display_mask]);
|
|
|
|
|
|
|
|
|
|
p[(x << 1) + 4] = p[(x << 1) + 5] = video_15to32[dat & 0xffff];
|
|
|
|
|
|
|
|
|
|
p[(x << 1) + 6] = p[(x << 1) + 7] = video_15to32[dat >> 16];
|
|
|
|
|
} else
|
|
|
|
|
memset(&(p[(x << 1)]), 0x00, 8 * sizeof(uint32_t));
|
|
|
|
|
}
|
|
|
|
|
svga->ma += x << 1;
|
|
|
|
|
svga->ma &= svga->vram_display_mask;
|
|
|
|
@@ -739,6 +768,7 @@ svga_render_15bpp_highres(svga_t *svga)
|
|
|
|
|
svga->lastline_draw = svga->displine;
|
|
|
|
|
|
|
|
|
|
for (x = 0; x <= (svga->hdisp + svga->scrollcache); x += 8) {
|
|
|
|
|
if (svga->crtc[0x17] & 0x80) {
|
|
|
|
|
dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vram_display_mask]);
|
|
|
|
|
p[x] = video_15to32[dat & 0xffff];
|
|
|
|
|
p[x + 1] = video_15to32[dat >> 16];
|
|
|
|
@@ -754,6 +784,8 @@ svga_render_15bpp_highres(svga_t *svga)
|
|
|
|
|
dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 12) & svga->vram_display_mask]);
|
|
|
|
|
p[x + 6] = video_15to32[dat & 0xffff];
|
|
|
|
|
p[x + 7] = video_15to32[dat >> 16];
|
|
|
|
|
} else
|
|
|
|
|
memset(&(p[x]), 0x00, 8 * sizeof(uint32_t));
|
|
|
|
|
}
|
|
|
|
|
svga->ma += x << 1;
|
|
|
|
|
svga->ma &= svga->vram_display_mask;
|
|
|
|
@@ -779,6 +811,7 @@ svga_render_15bpp_mix_lowres(svga_t *svga)
|
|
|
|
|
svga->lastline_draw = svga->displine;
|
|
|
|
|
|
|
|
|
|
for (x = 0; x <= (svga->hdisp + svga->scrollcache); x += 4) {
|
|
|
|
|
if (svga->crtc[0x17] & 0x80) {
|
|
|
|
|
dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vram_display_mask]);
|
|
|
|
|
p[(x << 1)] = p[(x << 1) + 1] = (dat & 0x00008000) ? svga->pallook[dat & 0xff] : video_15to32[dat & 0xffff];
|
|
|
|
|
|
|
|
|
@@ -790,6 +823,8 @@ svga_render_15bpp_mix_lowres(svga_t *svga)
|
|
|
|
|
|
|
|
|
|
dat >>= 16;
|
|
|
|
|
p[(x << 1) + 6] = p[(x << 1) + 7] = (dat & 0x00008000) ? svga->pallook[dat & 0xff] : video_15to32[dat & 0xffff];
|
|
|
|
|
} else
|
|
|
|
|
memset(&(p[(x << 1)]), 0x00, 8 * sizeof(uint32_t));
|
|
|
|
|
}
|
|
|
|
|
svga->ma += x << 1;
|
|
|
|
|
svga->ma &= svga->vram_display_mask;
|
|
|
|
@@ -815,6 +850,7 @@ svga_render_15bpp_mix_highres(svga_t *svga)
|
|
|
|
|
svga->lastline_draw = svga->displine;
|
|
|
|
|
|
|
|
|
|
for (x = 0; x <= (svga->hdisp + svga->scrollcache); x += 8) {
|
|
|
|
|
if (svga->crtc[0x17] & 0x80) {
|
|
|
|
|
dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vram_display_mask]);
|
|
|
|
|
p[x] = (dat & 0x00008000) ? svga->pallook[dat & 0xff] : video_15to32[dat & 0xffff];
|
|
|
|
|
dat >>= 16;
|
|
|
|
@@ -834,6 +870,8 @@ svga_render_15bpp_mix_highres(svga_t *svga)
|
|
|
|
|
p[x + 6] = (dat & 0x00008000) ? svga->pallook[dat & 0xff] : video_15to32[dat & 0xffff];
|
|
|
|
|
dat >>= 16;
|
|
|
|
|
p[x + 7] = (dat & 0x00008000) ? svga->pallook[dat & 0xff] : video_15to32[dat & 0xffff];
|
|
|
|
|
} else
|
|
|
|
|
memset(&(p[x]), 0x00, 8 * sizeof(uint32_t));
|
|
|
|
|
}
|
|
|
|
|
svga->ma += x << 1;
|
|
|
|
|
svga->ma &= svga->vram_display_mask;
|
|
|
|
@@ -859,6 +897,7 @@ svga_render_16bpp_lowres(svga_t *svga)
|
|
|
|
|
svga->lastline_draw = svga->displine;
|
|
|
|
|
|
|
|
|
|
for (x = 0; x <= (svga->hdisp + svga->scrollcache); x += 4) {
|
|
|
|
|
if (svga->crtc[0x17] & 0x80) {
|
|
|
|
|
dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vram_display_mask]);
|
|
|
|
|
p[(x << 1)] = p[(x << 1) + 1] = video_16to32[dat & 0xffff];
|
|
|
|
|
p[(x << 1) + 2] = p[(x << 1) + 3] = video_16to32[dat >> 16];
|
|
|
|
@@ -866,6 +905,8 @@ svga_render_16bpp_lowres(svga_t *svga)
|
|
|
|
|
dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 4) & svga->vram_display_mask]);
|
|
|
|
|
p[(x << 1) + 4] = p[(x << 1) + 5] = video_16to32[dat & 0xffff];
|
|
|
|
|
p[(x << 1) + 6] = p[(x << 1) + 7] = video_16to32[dat >> 16];
|
|
|
|
|
} else
|
|
|
|
|
memset(&(p[(x << 1)]), 0x00, 8 * sizeof(uint32_t));
|
|
|
|
|
}
|
|
|
|
|
svga->ma += x << 1;
|
|
|
|
|
svga->ma &= svga->vram_display_mask;
|
|
|
|
@@ -890,6 +931,7 @@ svga_render_16bpp_highres(svga_t *svga)
|
|
|
|
|
svga->lastline_draw = svga->displine;
|
|
|
|
|
|
|
|
|
|
for (x = 0; x <= (svga->hdisp + svga->scrollcache); x += 8) {
|
|
|
|
|
if (svga->crtc[0x17] & 0x80) {
|
|
|
|
|
uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vram_display_mask]);
|
|
|
|
|
p[x] = video_16to32[dat & 0xffff];
|
|
|
|
|
p[x + 1] = video_16to32[dat >> 16];
|
|
|
|
@@ -905,6 +947,8 @@ svga_render_16bpp_highres(svga_t *svga)
|
|
|
|
|
dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 12) & svga->vram_display_mask]);
|
|
|
|
|
p[x + 6] = video_16to32[dat & 0xffff];
|
|
|
|
|
p[x + 7] = video_16to32[dat >> 16];
|
|
|
|
|
} else
|
|
|
|
|
memset(&(p[x]), 0x00, 8 * sizeof(uint32_t));
|
|
|
|
|
}
|
|
|
|
|
svga->ma += x << 1;
|
|
|
|
|
svga->ma &= svga->vram_display_mask;
|
|
|
|
@@ -927,7 +971,10 @@ svga_render_24bpp_lowres(svga_t *svga)
|
|
|
|
|
svga->lastline_draw = svga->displine;
|
|
|
|
|
|
|
|
|
|
for (x = 0; x <= (svga->hdisp + svga->scrollcache); x++) {
|
|
|
|
|
if (svga->crtc[0x17] & 0x80)
|
|
|
|
|
fg = svga->vram[svga->ma] | (svga->vram[svga->ma + 1] << 8) | (svga->vram[svga->ma + 2] << 16);
|
|
|
|
|
else
|
|
|
|
|
fg = 0x00000000;
|
|
|
|
|
svga->ma += 3;
|
|
|
|
|
svga->ma &= svga->vram_display_mask;
|
|
|
|
|
buffer32->line[svga->displine + svga->y_add][(x << 1) + svga->x_add] =
|
|
|
|
@@ -955,6 +1002,7 @@ svga_render_24bpp_highres(svga_t *svga)
|
|
|
|
|
svga->lastline_draw = svga->displine;
|
|
|
|
|
|
|
|
|
|
for (x = 0; x <= (svga->hdisp + svga->scrollcache); x += 4) {
|
|
|
|
|
if (svga->crtc[0x17] & 0x80) {
|
|
|
|
|
dat = *(uint32_t *)(&svga->vram[svga->ma & svga->vram_display_mask]);
|
|
|
|
|
p[x] = dat & 0xffffff;
|
|
|
|
|
|
|
|
|
@@ -966,6 +1014,8 @@ svga_render_24bpp_highres(svga_t *svga)
|
|
|
|
|
|
|
|
|
|
dat = *(uint32_t *)(&svga->vram[(svga->ma + 9) & svga->vram_display_mask]);
|
|
|
|
|
p[x + 3] = dat & 0xffffff;
|
|
|
|
|
} else
|
|
|
|
|
memset(&(p[x]), 0x0, 4 * sizeof(uint32_t));
|
|
|
|
|
|
|
|
|
|
svga->ma += 12;
|
|
|
|
|
}
|
|
|
|
@@ -989,7 +1039,10 @@ svga_render_32bpp_lowres(svga_t *svga)
|
|
|
|
|
svga->lastline_draw = svga->displine;
|
|
|
|
|
|
|
|
|
|
for (x = 0; x <= (svga->hdisp + svga->scrollcache); x++) {
|
|
|
|
|
if (svga->crtc[0x17] & 0x80)
|
|
|
|
|
fg = svga->vram[svga->ma] | (svga->vram[svga->ma + 1] << 8) | (svga->vram[svga->ma + 2] << 16);
|
|
|
|
|
else
|
|
|
|
|
fg = 0x00000000;
|
|
|
|
|
svga->ma += 4;
|
|
|
|
|
svga->ma &= svga->vram_display_mask;
|
|
|
|
|
buffer32->line[svga->displine + svga->y_add][(x << 1) + svga->x_add] =
|
|
|
|
@@ -1017,7 +1070,10 @@ svga_render_32bpp_highres(svga_t *svga)
|
|
|
|
|
svga->lastline_draw = svga->displine;
|
|
|
|
|
|
|
|
|
|
for (x = 0; x <= (svga->hdisp + svga->scrollcache); x++) {
|
|
|
|
|
if (svga->crtc[0x17] & 0x80)
|
|
|
|
|
dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 2)) & svga->vram_display_mask]);
|
|
|
|
|
else
|
|
|
|
|
dat = 0x00000000;
|
|
|
|
|
p[x] = dat & 0xffffff;
|
|
|
|
|
}
|
|
|
|
|
svga->ma += 4;
|
|
|
|
@@ -1044,7 +1100,10 @@ svga_render_ABGR8888_highres(svga_t *svga)
|
|
|
|
|
svga->lastline_draw = svga->displine;
|
|
|
|
|
|
|
|
|
|
for (x = 0; x <= (svga->hdisp + svga->scrollcache); x++) {
|
|
|
|
|
if (svga->crtc[0x17] & 0x80)
|
|
|
|
|
dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 2)) & svga->vram_display_mask]);
|
|
|
|
|
else
|
|
|
|
|
dat = 0x00000000;
|
|
|
|
|
p[x] = ((dat & 0xff0000) >> 16) | (dat & 0x00ff00) | ((dat & 0x0000ff) << 16);
|
|
|
|
|
}
|
|
|
|
|
svga->ma += 4;
|
|
|
|
@@ -1071,7 +1130,10 @@ svga_render_RGBA8888_highres(svga_t *svga)
|
|
|
|
|
svga->lastline_draw = svga->displine;
|
|
|
|
|
|
|
|
|
|
for (x = 0; x <= (svga->hdisp + svga->scrollcache); x++) {
|
|
|
|
|
if (svga->crtc[0x17] & 0x80)
|
|
|
|
|
dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 2)) & svga->vram_display_mask]);
|
|
|
|
|
else
|
|
|
|
|
dat = 0x00000000;
|
|
|
|
|
p[x] = dat >> 8;
|
|
|
|
|
}
|
|
|
|
|
svga->ma += 4;
|
|
|
|
|