Cleanup to PR#60 (Cirrus Logic GD-5422)
Cleanup of SVGA rendering code.
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
* Emulation of select Cirrus Logic cards (CL-GD 5428,
|
||||
* CL-GD 5429, 5430, 5434 and 5436 are supported).
|
||||
*
|
||||
* Version: @(#)vid_cl54xx.c 1.0.22 2018/10/21
|
||||
* Version: @(#)vid_cl54xx.c 1.0.23 2018/10/22
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -58,7 +58,7 @@
|
||||
#include "vid_svga_render.h"
|
||||
|
||||
|
||||
#define BIOS_GD5422_PATH L"video/cirruslogic/1-cl5422.bin"
|
||||
#define BIOS_GD5422_PATH L"video/cirruslogic/cl5422.bin"
|
||||
#define BIOS_GD5426_PATH L"video/cirruslogic/diamond speedstar pro vlb v3.04.bin"
|
||||
#define BIOS_GD5428_ISA_PATH L"video/cirruslogic/gd5428.bin"
|
||||
#define BIOS_GD5428_VLB_PATH L"video/cirruslogic/vlbusjapan.bin"
|
||||
@@ -197,8 +197,10 @@ typedef struct gd54xx_t
|
||||
uint8_t int_line;
|
||||
|
||||
uint8_t fc; /* Feature Connector */
|
||||
//FIXME: move to SVGA? --FvK
|
||||
|
||||
uint8_t clgd_latch[8];
|
||||
|
||||
int card;
|
||||
|
||||
uint32_t lfb_base;
|
||||
@@ -216,12 +218,10 @@ static void gd543x_mmio_writel(uint32_t addr, uint32_t val, void *p);
|
||||
static uint8_t gd543x_mmio_read(uint32_t addr, void *p);
|
||||
static uint16_t gd543x_mmio_readw(uint32_t addr, void *p);
|
||||
static uint32_t gd543x_mmio_readl(uint32_t addr, void *p);
|
||||
|
||||
static void gd54xx_recalc_banking(gd54xx_t *gd54xx);
|
||||
|
||||
static void gd543x_recalc_mapping(gd54xx_t *gd54xx);
|
||||
|
||||
static void gd54xx_start_blit(uint32_t cpu_dat, int count, gd54xx_t *gd54xx, svga_t *svga);
|
||||
static void gd54xx_start_blit(uint32_t cpu_dat, int count,
|
||||
gd54xx_t *gd54xx, svga_t *svga);
|
||||
|
||||
|
||||
/* Returns 1 if the card is a 5434, 5436/46, or 5480. */
|
||||
@@ -245,10 +245,14 @@ gd54xx_out(uint16_t addr, uint8_t val, void *p)
|
||||
uint8_t o, indx;
|
||||
uint32_t o32;
|
||||
|
||||
if (((addr & 0xfff0) == 0x3d0 || (addr & 0xfff0) == 0x3b0) && !(svga->miscout & 1))
|
||||
addr ^= 0x60;
|
||||
if (((addr & 0xfff0) == 0x3d0 || (addr & 0xfff0) == 0x3b0) &&
|
||||
!(svga->miscout & 1)) addr ^= 0x60;
|
||||
|
||||
switch (addr) {
|
||||
case 0x3ba:
|
||||
case 0x3da:
|
||||
gd54xx->fc = val; //FIXME: move to SVGA? --FvK
|
||||
break;
|
||||
case 0x3c0:
|
||||
case 0x3c1:
|
||||
if (!svga->attrff) {
|
||||
@@ -313,8 +317,7 @@ gd54xx_out(uint16_t addr, uint8_t val, void *p)
|
||||
}
|
||||
else { /* Hack to force memory size on some GD-542x BIOSes*/
|
||||
val &= 0xe7;
|
||||
switch (gd54xx->vram_size)
|
||||
{
|
||||
switch (gd54xx->vram_size) {
|
||||
case 0x80000:
|
||||
svga->seqregs[0x0a] = val | 0x08;
|
||||
break;
|
||||
@@ -365,12 +368,10 @@ gd54xx_out(uint16_t addr, uint8_t val, void *p)
|
||||
svga->hwcursor.addr = (((svga->vram_display_mask + 1)-0x4000) + ((val & 0x3f) * 256));
|
||||
break;
|
||||
case 0x15:
|
||||
if (gd54xx_is_5434(svga))
|
||||
{
|
||||
if (gd54xx_is_5434(svga)) {
|
||||
/* Hack to force memory size on some GD-543x BIOSes*/
|
||||
val &= 0xf8;
|
||||
switch (gd54xx->vram_size)
|
||||
{
|
||||
switch (gd54xx->vram_size) {
|
||||
case 0x100000:
|
||||
svga->seqregs[0x15] = val | 0x2;
|
||||
break;
|
||||
@@ -383,8 +384,7 @@ gd54xx_out(uint16_t addr, uint8_t val, void *p)
|
||||
svga->seqregs[0x15] = val | 0x4;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
} else
|
||||
return;
|
||||
break;
|
||||
case 0x07:
|
||||
@@ -442,9 +442,6 @@ gd54xx_out(uint16_t addr, uint8_t val, void *p)
|
||||
break;
|
||||
}
|
||||
return;
|
||||
case 0x3ba: case 0x3da:
|
||||
gd54xx->fc = val ;
|
||||
break;
|
||||
case 0x3cf:
|
||||
if (svga->gdcaddr == 0)
|
||||
gd543x_mmio_write(0xb8000, val, gd54xx);
|
||||
@@ -580,7 +577,6 @@ gd54xx_out(uint16_t addr, uint8_t val, void *p)
|
||||
case 0x39:
|
||||
gd543x_mmio_write(0xb8021, val, gd54xx);
|
||||
break;
|
||||
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -617,16 +613,14 @@ gd54xx_in(uint16_t addr, void *p)
|
||||
svga_t *svga = &gd54xx->svga;
|
||||
uint8_t indx, temp;
|
||||
|
||||
if (((addr & 0xfff0) == 0x3d0 || (addr & 0xfff0) == 0x3d0) && !(svga->miscout & 1))
|
||||
addr ^= 0x60;
|
||||
if (((addr & 0xfff0) == 0x3d0 || (addr & 0xfff0) == 0x3d0) &&
|
||||
!(svga->miscout & 1)) addr ^= 0x60;
|
||||
|
||||
switch (addr) {
|
||||
case 0x3c4:
|
||||
if ((svga->seqregs[6] & 0x17) == 0x12)
|
||||
{
|
||||
if ((svga->seqregs[6] & 0x17) == 0x12) {
|
||||
temp = svga->seqaddr;
|
||||
if ((temp & 0x1e) == 0x10)
|
||||
{
|
||||
if ((temp & 0x1e) == 0x10) {
|
||||
if (temp & 1)
|
||||
temp = ((svga->hwcursor.y & 7) << 5) | 0x11;
|
||||
else
|
||||
@@ -665,6 +659,18 @@ gd54xx_in(uint16_t addr, void *p)
|
||||
return svga->seqregs[svga->seqaddr & 0x3f];
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x3c6:
|
||||
if (gd54xx->ramdac.state == 4) {
|
||||
gd54xx->ramdac.state = 0;
|
||||
return gd54xx->ramdac.ctrl;
|
||||
}
|
||||
gd54xx->ramdac.state++;
|
||||
break;
|
||||
|
||||
case 0x3ca:
|
||||
return gd54xx->fc; //FIXME: move to SVGA? --FvK
|
||||
|
||||
case 0x3c9:
|
||||
svga->dac_status = 3;
|
||||
indx = (svga->dac_addr - 1) & 0xff;
|
||||
@@ -692,25 +698,17 @@ gd54xx_in(uint16_t addr, void *p)
|
||||
return svga->vgapal[indx].b & 0x3f;
|
||||
}
|
||||
return 0xFF;
|
||||
case 0x3C6:
|
||||
if (gd54xx->ramdac.state == 4) {
|
||||
gd54xx->ramdac.state = 0;
|
||||
return gd54xx->ramdac.ctrl;
|
||||
}
|
||||
gd54xx->ramdac.state++;
|
||||
break;
|
||||
|
||||
case 0x3ca:
|
||||
return gd54xx->fc;
|
||||
|
||||
case 0x3cf:
|
||||
if (svga->gdcaddr > 8) {
|
||||
return svga->gdcreg[svga->gdcaddr & 0x3f];
|
||||
}
|
||||
break;
|
||||
case 0x3D4:
|
||||
|
||||
case 0x3d4:
|
||||
return svga->crtcreg;
|
||||
case 0x3D5:
|
||||
|
||||
case 0x3d5:
|
||||
switch (svga->crtcreg) {
|
||||
case 0x24: /*Attribute controller toggle readback (R)*/
|
||||
return svga->attrff << 7;
|
||||
@@ -856,9 +854,7 @@ gd54xx_recalctimings(svga_t *svga)
|
||||
case 0:
|
||||
if (gd54xx->ramdac.ctrl & 0x10) { /* Mixed Mode */
|
||||
svga->render = svga_render_mixed_highres;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
svga->bpp = 15;
|
||||
svga->render = svga_render_15bpp_highres;
|
||||
}
|
||||
@@ -881,11 +877,14 @@ gd54xx_recalctimings(svga_t *svga)
|
||||
}
|
||||
break;
|
||||
|
||||
//case 8: Todo : Grayscale VGA rendering*/
|
||||
//break;
|
||||
#if 0
|
||||
case 8: /* Todo : Grayscale VGA rendering*/
|
||||
break;
|
||||
|
||||
case 9: /* Todo : 3-3-2 8bit RGB*/
|
||||
break;
|
||||
#endif
|
||||
|
||||
//case 9: Todo : 3-3-2 8bit RGB*/
|
||||
//break;
|
||||
case 0xf:
|
||||
switch (svga->seqregs[7] & CIRRUS_SR7_BPP_MASK) {
|
||||
case CIRRUS_SR7_BPP_32:
|
||||
@@ -1134,7 +1133,7 @@ gd54xx_writew(uint32_t addr, uint16_t val, void *p)
|
||||
}
|
||||
|
||||
if (gd54xx->blt.sys_tx) {
|
||||
gd54xx_write(addr, val, gd54xx);
|
||||
gd54xx_write(addr, val & 0xff, gd54xx);
|
||||
gd54xx_write(addr+1, val >> 8, gd54xx);
|
||||
return;
|
||||
}
|
||||
@@ -1635,6 +1634,7 @@ gd54xx_read(uint32_t addr, void *p)
|
||||
addr = (addr & 0x7fff) + gd54xx->bank[(addr >> 15) & 1];
|
||||
|
||||
addr &= svga->vram_mask;
|
||||
|
||||
return svga_read_linear(addr, svga);
|
||||
}
|
||||
|
||||
@@ -2327,6 +2327,7 @@ gd54xx_init(const device_t *info)
|
||||
case CIRRUS_ID_CLGD5424:
|
||||
romfn = BIOS_GD5422_PATH;
|
||||
break;
|
||||
|
||||
case CIRRUS_ID_CLGD5426:
|
||||
romfn = BIOS_GD5426_PATH;
|
||||
break;
|
||||
@@ -2385,8 +2386,8 @@ gd54xx_init(const device_t *info)
|
||||
gd54xx->vram_size = vram << 20;
|
||||
else
|
||||
gd54xx->vram_size = 512 << 10;
|
||||
|
||||
gd54xx->vram_mask = gd54xx->vram_size - 1;
|
||||
|
||||
if (romfn)
|
||||
rom_init(&gd54xx->bios_rom, romfn, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL);
|
||||
|
||||
@@ -2430,6 +2431,36 @@ gd54xx_init(const device_t *info)
|
||||
return gd54xx;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
gd54xx_close(void *p)
|
||||
{
|
||||
gd54xx_t *gd54xx = (gd54xx_t *)p;
|
||||
|
||||
svga_close(&gd54xx->svga);
|
||||
|
||||
free(gd54xx);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
gd54xx_speed_changed(void *p)
|
||||
{
|
||||
gd54xx_t *gd54xx = (gd54xx_t *)p;
|
||||
|
||||
svga_recalctimings(&gd54xx->svga);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
gd54xx_force_redraw(void *p)
|
||||
{
|
||||
gd54xx_t *gd54xx = (gd54xx_t *)p;
|
||||
|
||||
gd54xx->svga.fullchange = changeframecount;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
gd5422_available(void)
|
||||
{
|
||||
@@ -2508,33 +2539,6 @@ gd5480_available(void)
|
||||
return rom_present(BIOS_GD5480_PATH);
|
||||
}
|
||||
|
||||
void
|
||||
gd54xx_close(void *p)
|
||||
{
|
||||
gd54xx_t *gd54xx = (gd54xx_t *)p;
|
||||
|
||||
svga_close(&gd54xx->svga);
|
||||
|
||||
free(gd54xx);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
gd54xx_speed_changed(void *p)
|
||||
{
|
||||
gd54xx_t *gd54xx = (gd54xx_t *)p;
|
||||
|
||||
svga_recalctimings(&gd54xx->svga);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
gd54xx_force_redraw(void *p)
|
||||
{
|
||||
gd54xx_t *gd54xx = (gd54xx_t *)p;
|
||||
|
||||
gd54xx->svga.fullchange = changeframecount;
|
||||
}
|
||||
|
||||
static const device_config_t gd5422_config[] =
|
||||
{
|
||||
@@ -2624,28 +2628,23 @@ static const video_timings_t cl_gd_isa_timing = {VID_ISA,3,3,6,8,8,12};
|
||||
static const video_timings_t cl_gd_vlb_timing = {VID_BUS,4,4,8,10,10,20};
|
||||
static const video_timings_t cl_gd_pci_timing = {VID_BUS,4,4,8,10,10,20};
|
||||
|
||||
const device_t gd5422_isa_device =
|
||||
{
|
||||
const device_t gd5422_isa_device = {
|
||||
"Cirrus Logic GD-5422",
|
||||
DEVICE_AT | DEVICE_ISA,
|
||||
CIRRUS_ID_CLGD5422,
|
||||
gd54xx_init,
|
||||
gd54xx_close,
|
||||
NULL,
|
||||
gd54xx_init, gd54xx_close, NULL,
|
||||
gd5422_available,
|
||||
gd54xx_speed_changed,
|
||||
gd54xx_force_redraw,
|
||||
&cl_gd_isa_timing,
|
||||
gd5422_config,
|
||||
};
|
||||
const device_t gd5424_vlb_device =
|
||||
{
|
||||
|
||||
const device_t gd5424_vlb_device = {
|
||||
"Cirrus Logic GD-5424",
|
||||
DEVICE_VLB,
|
||||
CIRRUS_ID_CLGD5424,
|
||||
gd54xx_init,
|
||||
gd54xx_close,
|
||||
NULL,
|
||||
gd54xx_init, gd54xx_close, NULL,
|
||||
gd5422_available,
|
||||
gd54xx_speed_changed,
|
||||
gd54xx_force_redraw,
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* SVGA renderers.
|
||||
*
|
||||
* Version: @(#)vid_svga_render.c 1.0.12 2018/10/19
|
||||
* Version: @(#)vid_svga_render.c 1.0.13 2018/10/22
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -47,29 +47,31 @@
|
||||
#include "vid_svga_render.h"
|
||||
|
||||
|
||||
void svga_render_blank(svga_t *svga)
|
||||
void
|
||||
svga_render_blank(svga_t *svga)
|
||||
{
|
||||
int x, xx;
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
int x, xx;
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
for (x = 0; x < svga->hdisp; x++)
|
||||
{
|
||||
switch (svga->seqregs[1] & 9)
|
||||
{
|
||||
for (x = 0; x < svga->hdisp; x++) {
|
||||
switch (svga->seqregs[1] & 9) {
|
||||
case 0:
|
||||
for (xx = 0; xx < 9; xx++) ((uint32_t *)buffer32->line[svga->displine + y_add])[(x * 9) + xx + 32 + x_add] = 0;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
for (xx = 0; xx < 8; xx++) ((uint32_t *)buffer32->line[svga->displine + y_add])[(x * 8) + xx + 32 + x_add] = 0;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
for (xx = 0; xx < 18; xx++) ((uint32_t *)buffer32->line[svga->displine + y_add])[(x * 18) + xx + 32 + x_add] = 0;
|
||||
break;
|
||||
|
||||
case 9:
|
||||
for (xx = 0; xx < 16; xx++) ((uint32_t *)buffer32->line[svga->displine + y_add])[(x * 16) + xx + 32 + x_add] = 0;
|
||||
break;
|
||||
@@ -77,44 +79,42 @@ void svga_render_blank(svga_t *svga)
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_text_40(svga_t *svga)
|
||||
|
||||
void
|
||||
svga_render_text_40(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
int xinc = (svga->seqregs[1] & 1) ? 16 : 18;
|
||||
uint8_t chr, attr, dat;
|
||||
uint32_t charaddr;
|
||||
int bg, fg, x, xx;
|
||||
int drawcursor;
|
||||
uint32_t *p;
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
if (svga->fullchange)
|
||||
{
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[32 + x_add];
|
||||
int x, xx;
|
||||
int drawcursor;
|
||||
uint8_t chr, attr, dat;
|
||||
uint32_t charaddr;
|
||||
int fg, bg;
|
||||
int xinc = (svga->seqregs[1] & 1) ? 16 : 18;
|
||||
if (svga->fullchange) {
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[32 + x_add];
|
||||
|
||||
for (x = 0; x < svga->hdisp; x += xinc)
|
||||
{
|
||||
for (x = 0; x < svga->hdisp; x += xinc) {
|
||||
drawcursor = ((svga->ma == svga->ca) && svga->con && svga->cursoron);
|
||||
chr = svga->vram[(svga->ma << 1) & svga->vram_display_mask];
|
||||
attr = svga->vram[((svga->ma << 1) + 1) & svga->vram_display_mask];
|
||||
if (attr & 8) charaddr = svga->charsetb + (chr * 128);
|
||||
else charaddr = svga->charseta + (chr * 128);
|
||||
if (attr & 8)
|
||||
charaddr = svga->charsetb + (chr * 128);
|
||||
else
|
||||
charaddr = svga->charseta + (chr * 128);
|
||||
|
||||
if (drawcursor)
|
||||
{
|
||||
if (drawcursor) {
|
||||
bg = svga->pallook[svga->egapal[attr & 15]];
|
||||
fg = svga->pallook[svga->egapal[attr >> 4]];
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
fg = svga->pallook[svga->egapal[attr & 15]];
|
||||
bg = svga->pallook[svga->egapal[attr >> 4]];
|
||||
if (attr & 0x80 && svga->attrregs[0x10] & 8)
|
||||
{
|
||||
if (attr & 0x80 && svga->attrregs[0x10] & 8) {
|
||||
bg = svga->pallook[svga->egapal[(attr >> 4) & 7]];
|
||||
if (svga->blink & 16)
|
||||
fg = bg;
|
||||
@@ -122,13 +122,10 @@ void svga_render_text_40(svga_t *svga)
|
||||
}
|
||||
|
||||
dat = svga->vram[charaddr + (svga->sc << 2)];
|
||||
if (svga->seqregs[1] & 1)
|
||||
{
|
||||
if (svga->seqregs[1] & 1) {
|
||||
for (xx = 0; xx < 16; xx += 2)
|
||||
p[xx] = p[xx + 1] = (dat & (0x80 >> (xx >> 1))) ? fg : bg;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
for (xx = 0; xx < 16; xx += 2)
|
||||
p[xx] = p[xx + 1] = (dat & (0x80 >> (xx >> 1))) ? fg : bg;
|
||||
if ((chr & ~0x1F) != 0xC0 || !(svga->attrregs[0x10] & 4))
|
||||
@@ -143,46 +140,44 @@ void svga_render_text_40(svga_t *svga)
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_text_80(svga_t *svga)
|
||||
|
||||
void
|
||||
svga_render_text_80(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
int xinc = (svga->seqregs[1] & 1) ? 8 : 9;
|
||||
uint8_t chr, attr, dat;
|
||||
uint32_t charaddr;
|
||||
int bg, fg, x, xx;
|
||||
int drawcursor;
|
||||
uint32_t *p;
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
if (svga->fullchange)
|
||||
{
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[32 + x_add];
|
||||
int x, xx;
|
||||
int drawcursor;
|
||||
uint8_t chr, attr, dat;
|
||||
uint32_t charaddr;
|
||||
int fg, bg;
|
||||
int xinc = (svga->seqregs[1] & 1) ? 8 : 9;
|
||||
if (svga->fullchange) {
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[32 + x_add];
|
||||
|
||||
for (x = 0; x < svga->hdisp; x += xinc)
|
||||
{
|
||||
for (x = 0; x < svga->hdisp; x += xinc) {
|
||||
drawcursor = ((svga->ma == svga->ca) && svga->con && svga->cursoron);
|
||||
chr = svga->vram[(svga->ma << 1) & svga->vram_display_mask];
|
||||
attr = svga->vram[((svga->ma << 1) + 1) & svga->vram_display_mask];
|
||||
|
||||
if (attr & 8)
|
||||
charaddr = svga->charsetb + (chr * 128);
|
||||
else
|
||||
charaddr = svga->charseta + (chr * 128);
|
||||
|
||||
if (attr & 8) charaddr = svga->charsetb + (chr * 128);
|
||||
else charaddr = svga->charseta + (chr * 128);
|
||||
|
||||
if (drawcursor)
|
||||
{
|
||||
if (drawcursor) {
|
||||
bg = svga->pallook[svga->egapal[attr & 15]];
|
||||
fg = svga->pallook[svga->egapal[attr >> 4]];
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
fg = svga->pallook[svga->egapal[attr & 15]];
|
||||
bg = svga->pallook[svga->egapal[attr >> 4]];
|
||||
if (attr & 0x80 && svga->attrregs[0x10] & 8)
|
||||
{
|
||||
|
||||
if (attr & 0x80 && svga->attrregs[0x10] & 8) {
|
||||
bg = svga->pallook[svga->egapal[(attr >> 4) & 7]];
|
||||
if (svga->blink & 16)
|
||||
fg = bg;
|
||||
@@ -190,13 +185,10 @@ void svga_render_text_80(svga_t *svga)
|
||||
}
|
||||
|
||||
dat = svga->vram[charaddr + (svga->sc << 2)];
|
||||
if (svga->seqregs[1] & 1)
|
||||
{
|
||||
if (svga->seqregs[1] & 1) {
|
||||
for (xx = 0; xx < 8; xx++)
|
||||
p[xx] = (dat & (0x80 >> xx)) ? fg : bg;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
for (xx = 0; xx < 8; xx++)
|
||||
p[xx] = (dat & (0x80 >> xx)) ? fg : bg;
|
||||
if ((chr & ~0x1F) != 0xC0 || !(svga->attrregs[0x10] & 4))
|
||||
@@ -207,77 +199,71 @@ void svga_render_text_80(svga_t *svga)
|
||||
svga->ma += 4;
|
||||
p += xinc;
|
||||
}
|
||||
|
||||
svga->ma &= svga->vram_display_mask;
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_text_80_ksc5601(svga_t *svga)
|
||||
|
||||
void
|
||||
svga_render_text_80_ksc5601(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
int xinc = (svga->seqregs[1] & 1) ? 8 : 9;
|
||||
uint8_t chr, attr, dat, nextchr;
|
||||
uint32_t charaddr;
|
||||
int bg, fg, x, xx;
|
||||
int drawcursor;
|
||||
uint32_t *p;
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
if (svga->fullchange)
|
||||
{
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[32 + x_add];
|
||||
int x, xx;
|
||||
int drawcursor;
|
||||
uint8_t chr, attr, dat, nextchr;
|
||||
uint32_t charaddr;
|
||||
int fg, bg;
|
||||
int xinc = (svga->seqregs[1] & 1) ? 8 : 9;
|
||||
if (svga->fullchange) {
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[32 + x_add];
|
||||
|
||||
for (x = 0; x < svga->hdisp; x += xinc)
|
||||
{
|
||||
for (x = 0; x < svga->hdisp; x += xinc) {
|
||||
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];
|
||||
attr = svga->vram[((svga->ma << 1) + 1) & svga->vram_display_mask];
|
||||
|
||||
|
||||
if (drawcursor)
|
||||
{
|
||||
if (drawcursor) {
|
||||
bg = svga->pallook[svga->egapal[attr & 15]];
|
||||
fg = svga->pallook[svga->egapal[attr >> 4]];
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
fg = svga->pallook[svga->egapal[attr & 15]];
|
||||
bg = svga->pallook[svga->egapal[attr >> 4]];
|
||||
if (attr & 0x80 && svga->attrregs[0x10] & 8)
|
||||
{
|
||||
|
||||
if (attr & 0x80 && svga->attrregs[0x10] & 8) {
|
||||
bg = svga->pallook[svga->egapal[(attr >> 4) & 7]];
|
||||
if (svga->blink & 16)
|
||||
fg = bg;
|
||||
}
|
||||
}
|
||||
|
||||
if(x + xinc < svga->hdisp && (chr & (nextchr | svga->ksc5601_sbyte_mask) & 0x80))
|
||||
{
|
||||
if(x + xinc < svga->hdisp && (chr & (nextchr | svga->ksc5601_sbyte_mask) & 0x80)) {
|
||||
if ((chr == 0xc9 || chr == 0xfe) && (nextchr > 0xa0 && nextchr < 0xff))
|
||||
dat = fontdatksc5601_user[(chr == 0xfe ? 96 : 0) + (nextchr & 0x7F) - 0x20].chr[svga->sc];
|
||||
else if (nextchr & 0x80)
|
||||
dat = fontdatksc5601[((chr & 0x7F) << 7) | (nextchr & 0x7F)].chr[svga->sc];
|
||||
else
|
||||
dat = 0xff;
|
||||
}
|
||||
} else {
|
||||
if (attr & 8)
|
||||
charaddr = svga->charsetb + (chr * 128);
|
||||
else
|
||||
{
|
||||
if (attr & 8) charaddr = svga->charsetb + (chr * 128);
|
||||
else charaddr = svga->charseta + (chr * 128);
|
||||
charaddr = svga->charseta + (chr * 128);
|
||||
|
||||
dat = svga->vram[charaddr + (svga->sc << 2)];
|
||||
}
|
||||
if (svga->seqregs[1] & 1)
|
||||
{
|
||||
|
||||
if (svga->seqregs[1] & 1) {
|
||||
for (xx = 0; xx < 8; xx++)
|
||||
p[xx] = (dat & (0x80 >> xx)) ? fg : bg;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
for (xx = 0; xx < 8; xx++)
|
||||
p[xx] = (dat & (0x80 >> xx)) ? fg : bg;
|
||||
if ((chr & ~0x1F) != 0xC0 || !(svga->attrregs[0x10] & 4))
|
||||
@@ -288,21 +274,17 @@ void svga_render_text_80_ksc5601(svga_t *svga)
|
||||
svga->ma += 4;
|
||||
p += xinc;
|
||||
|
||||
if(x + xinc < svga->hdisp && (chr & (nextchr | svga->ksc5601_sbyte_mask) & 0x80))
|
||||
{
|
||||
if(x + xinc < svga->hdisp && (chr & (nextchr | svga->ksc5601_sbyte_mask) & 0x80)) {
|
||||
attr = svga->vram[((svga->ma << 1) + 1) & svga->vram_display_mask];
|
||||
|
||||
if (drawcursor)
|
||||
{
|
||||
if (drawcursor) {
|
||||
bg = svga->pallook[svga->egapal[attr & 15]];
|
||||
fg = svga->pallook[svga->egapal[attr >> 4]];
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
fg = svga->pallook[svga->egapal[attr & 15]];
|
||||
bg = svga->pallook[svga->egapal[attr >> 4]];
|
||||
if (attr & 0x80 && svga->attrregs[0x10] & 8)
|
||||
{
|
||||
|
||||
if (attr & 0x80 && svga->attrregs[0x10] & 8) {
|
||||
bg = svga->pallook[svga->egapal[(attr >> 4) & 7]];
|
||||
if (svga->blink & 16)
|
||||
fg = bg;
|
||||
@@ -315,13 +297,11 @@ void svga_render_text_80_ksc5601(svga_t *svga)
|
||||
dat = fontdatksc5601[((chr & 0x7F) << 7) | (nextchr & 0x7F)].chr[svga->sc + 16];
|
||||
else
|
||||
dat = 0xff;
|
||||
if (svga->seqregs[1] & 1)
|
||||
{
|
||||
|
||||
if (svga->seqregs[1] & 1) {
|
||||
for (xx = 0; xx < 8; xx++)
|
||||
p[xx] = (dat & (0x80 >> xx)) ? fg : bg;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
for (xx = 0; xx < 8; xx++)
|
||||
p[xx] = (dat & (0x80 >> xx)) ? fg : bg;
|
||||
if ((chr & ~0x1F) != 0xC0 || !(svga->attrregs[0x10] & 4))
|
||||
@@ -335,33 +315,33 @@ void svga_render_text_80_ksc5601(svga_t *svga)
|
||||
x += xinc;
|
||||
}
|
||||
}
|
||||
|
||||
svga->ma &= svga->vram_display_mask;
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_2bpp_lowres(svga_t *svga)
|
||||
{
|
||||
int changed_offset;
|
||||
|
||||
void
|
||||
svga_render_2bpp_lowres(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
int changed_offset, x;
|
||||
int offset;
|
||||
uint8_t dat[2];
|
||||
uint32_t *p;
|
||||
|
||||
changed_offset = ((svga->ma << 1) + (svga->sc & ~svga->crtc[0x17] & 3) * 0x8000) >> 12;
|
||||
|
||||
if (svga->changedvram[changed_offset] || svga->changedvram[changed_offset + 1] || svga->fullchange)
|
||||
{
|
||||
int x;
|
||||
int offset = ((8 - svga->scrollcache) << 1) + 16;
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
if (svga->changedvram[changed_offset] || svga->changedvram[changed_offset + 1] || svga->fullchange) {
|
||||
offset = ((8 - svga->scrollcache) << 1) + 16;
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x += 16)
|
||||
{
|
||||
uint8_t dat[2];
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x += 16) {
|
||||
dat[0] = svga->vram[(svga->ma << 1) + ((svga->sc & ~svga->crtc[0x17] & 3)) * 0x8000];
|
||||
dat[1] = svga->vram[(svga->ma << 1) + ((svga->sc & ~svga->crtc[0x17] & 3)) * 0x8000 + 1];
|
||||
svga->ma += 4;
|
||||
@@ -381,29 +361,28 @@ void svga_render_2bpp_lowres(svga_t *svga)
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_2bpp_highres(svga_t *svga)
|
||||
{
|
||||
int changed_offset;
|
||||
|
||||
void
|
||||
svga_render_2bpp_highres(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
int changed_offset;
|
||||
int offset, x;
|
||||
uint8_t dat[2];
|
||||
uint32_t *p;
|
||||
|
||||
changed_offset = ((svga->ma << 1) + (svga->sc & ~svga->crtc[0x17] & 3) * 0x8000) >> 12;
|
||||
|
||||
if (svga->changedvram[changed_offset] || svga->changedvram[changed_offset + 1] || svga->fullchange)
|
||||
{
|
||||
int x;
|
||||
int offset = (8 - svga->scrollcache) + 24;
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
if (svga->changedvram[changed_offset] || svga->changedvram[changed_offset + 1] || svga->fullchange) {
|
||||
offset = (8 - svga->scrollcache) + 24;
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x += 8)
|
||||
{
|
||||
uint8_t dat[2];
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x += 8) {
|
||||
dat[0] = svga->vram[(svga->ma << 1) + ((svga->sc & ~svga->crtc[0x17] & 3)) * 0x8000];
|
||||
dat[1] = svga->vram[(svga->ma << 1) + ((svga->sc & ~svga->crtc[0x17] & 3)) * 0x8000 + 1];
|
||||
svga->ma += 4;
|
||||
@@ -423,27 +402,26 @@ void svga_render_2bpp_highres(svga_t *svga)
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_4bpp_lowres(svga_t *svga)
|
||||
|
||||
void
|
||||
svga_render_4bpp_lowres(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
int offset, x;
|
||||
uint32_t *p;
|
||||
uint8_t edat[4], dat;
|
||||
uint32_t *eptr = (uint32_t *)edat;
|
||||
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
|
||||
{
|
||||
int x;
|
||||
int offset = ((8 - svga->scrollcache) << 1) + 16;
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||
offset = ((8 - svga->scrollcache) << 1) + 16;
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x += 16)
|
||||
{
|
||||
uint8_t edat[4];
|
||||
uint32_t *eptr = (uint32_t *)edat;
|
||||
uint8_t dat;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x += 16) {
|
||||
*eptr = *(uint32_t *)(&svga->vram[svga->ma]);
|
||||
|
||||
svga->ma += 4;
|
||||
@@ -467,31 +445,29 @@ void svga_render_4bpp_lowres(svga_t *svga)
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_4bpp_highres(svga_t *svga)
|
||||
{
|
||||
int changed_offset;
|
||||
|
||||
void
|
||||
svga_render_4bpp_highres(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
int changed_offset;
|
||||
int offset, x;
|
||||
uint32_t *p;
|
||||
uint8_t edat[4], dat;
|
||||
uint32_t *eptr = (uint32_t *)edat;
|
||||
|
||||
changed_offset = (svga->ma + (svga->sc & ~svga->crtc[0x17] & 3) * 0x8000) >> 12;
|
||||
|
||||
if (svga->changedvram[changed_offset] || svga->changedvram[changed_offset + 1] || svga->fullchange)
|
||||
{
|
||||
int x;
|
||||
int offset = (8 - svga->scrollcache) + 24;
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
if (svga->changedvram[changed_offset] || svga->changedvram[changed_offset + 1] || svga->fullchange) {
|
||||
offset = (8 - svga->scrollcache) + 24;
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x += 8)
|
||||
{
|
||||
uint8_t edat[4];
|
||||
uint32_t *eptr = (uint32_t *)edat;
|
||||
uint8_t dat;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x += 8) {
|
||||
*eptr = *(uint32_t *)(&svga->vram[svga->ma | ((svga->sc & ~svga->crtc[0x17] & 3)) * 0x8000]);
|
||||
svga->ma += 4;
|
||||
svga->ma &= svga->vram_display_mask;
|
||||
@@ -514,24 +490,25 @@ void svga_render_4bpp_highres(svga_t *svga)
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_8bpp_lowres(svga_t *svga)
|
||||
|
||||
void
|
||||
svga_render_8bpp_lowres(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
uint32_t *p, dat;
|
||||
int offset, x;
|
||||
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
|
||||
{
|
||||
int x;
|
||||
int offset = (8 - (svga->scrollcache & 6)) + 24;
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||
offset = (8 - (svga->scrollcache & 6)) + 24;
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x += 8)
|
||||
{
|
||||
uint32_t dat = *(uint32_t *)(&svga->vram[svga->ma & svga->vram_display_mask]);
|
||||
for (x = 0; x <= svga->hdisp; x += 8) {
|
||||
dat = *(uint32_t *)(&svga->vram[svga->ma & svga->vram_display_mask]);
|
||||
|
||||
p[0] = p[1] = svga->pallook[dat & 0xff];
|
||||
p[2] = p[3] = svga->pallook[(dat >> 8) & 0xff];
|
||||
@@ -545,24 +522,24 @@ void svga_render_8bpp_lowres(svga_t *svga)
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_8bpp_highres(svga_t *svga)
|
||||
|
||||
void
|
||||
svga_render_8bpp_highres(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
uint32_t *p, dat;
|
||||
int offset, x;
|
||||
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
|
||||
{
|
||||
int x;
|
||||
int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||
offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x += 8)
|
||||
{
|
||||
uint32_t dat;
|
||||
for (x = 0; x <= svga->hdisp; x += 8) {
|
||||
dat = *(uint32_t *)(&svga->vram[svga->ma & svga->vram_display_mask]);
|
||||
p[0] = svga->pallook[dat & 0xff];
|
||||
p[1] = svga->pallook[(dat >> 8) & 0xff];
|
||||
@@ -582,24 +559,25 @@ void svga_render_8bpp_highres(svga_t *svga)
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_15bpp_lowres(svga_t *svga)
|
||||
|
||||
void
|
||||
svga_render_15bpp_lowres(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
uint32_t *p, dat;
|
||||
int offset, x;
|
||||
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
|
||||
{
|
||||
int x;
|
||||
int offset = (8 - (svga->scrollcache & 6)) + 24;
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||
offset = (8 - (svga->scrollcache & 6)) + 24;
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x += 4)
|
||||
{
|
||||
uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vram_display_mask]);
|
||||
for (x = 0; x <= svga->hdisp; x += 4) {
|
||||
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];
|
||||
@@ -614,24 +592,25 @@ void svga_render_15bpp_lowres(svga_t *svga)
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_15bpp_highres(svga_t *svga)
|
||||
|
||||
void
|
||||
svga_render_15bpp_highres(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
uint32_t *p, dat;
|
||||
int offset, x;
|
||||
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
|
||||
{
|
||||
int x;
|
||||
int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||
offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x += 8)
|
||||
{
|
||||
uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vram_display_mask]);
|
||||
for (x = 0; x <= svga->hdisp; x += 8) {
|
||||
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];
|
||||
|
||||
@@ -652,28 +631,30 @@ void svga_render_15bpp_highres(svga_t *svga)
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_mixed_highres(svga_t *svga)
|
||||
|
||||
void
|
||||
svga_render_mixed_highres(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
uint32_t *p, dat;
|
||||
int offset, x;
|
||||
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
|
||||
{
|
||||
int x;
|
||||
int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||
offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x += 8)
|
||||
{
|
||||
uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vram_display_mask]);
|
||||
for (x = 0; x <= svga->hdisp; x += 8) {
|
||||
dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vram_display_mask]);
|
||||
if (dat & 0x8000)
|
||||
p[x] = svga->pallook[dat & 0xff];
|
||||
else
|
||||
p[x] = video_15to32[dat & 0x7fff];
|
||||
|
||||
if ((dat >> 16) & 0x8000)
|
||||
p[x + 1] = svga->pallook[(dat >> 16) & 0xff];
|
||||
else
|
||||
@@ -685,6 +666,7 @@ void svga_render_mixed_highres(svga_t *svga)
|
||||
p[x + 2] = svga->pallook[dat & 0xff];
|
||||
else
|
||||
p[x + 2] = video_15to32[dat & 0x7fff];
|
||||
|
||||
if ((dat >> 16) & 0x8000)
|
||||
p[x + 3] = svga->pallook[(dat >> 16) & 0xff];
|
||||
else
|
||||
@@ -695,6 +677,7 @@ void svga_render_mixed_highres(svga_t *svga)
|
||||
p[x + 4] = svga->pallook[dat & 0xff];
|
||||
else
|
||||
p[x + 4] = video_15to32[dat & 0x7fff];
|
||||
|
||||
if ((dat >> 16) & 0x8000)
|
||||
p[x + 5] = svga->pallook[(dat >> 16) & 0xff];
|
||||
else
|
||||
@@ -705,6 +688,7 @@ void svga_render_mixed_highres(svga_t *svga)
|
||||
p[x + 6] = svga->pallook[dat & 0xff];
|
||||
else
|
||||
p[x + 6] = video_15to32[dat & 0x7fff];
|
||||
|
||||
if ((dat >> 16) & 0x8000)
|
||||
p[x + 7] = svga->pallook[(dat >> 16) & 0xff];
|
||||
else
|
||||
@@ -715,24 +699,25 @@ void svga_render_mixed_highres(svga_t *svga)
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_16bpp_lowres(svga_t *svga)
|
||||
|
||||
void
|
||||
svga_render_16bpp_lowres(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
uint32_t *p, dat;
|
||||
int offset, x;
|
||||
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
|
||||
{
|
||||
int x;
|
||||
int offset = (8 - (svga->scrollcache & 6)) + 24;
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||
offset = (8 - (svga->scrollcache & 6)) + 24;
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x += 4)
|
||||
{
|
||||
uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vram_display_mask]);
|
||||
for (x = 0; x <= svga->hdisp; x += 4) {
|
||||
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];
|
||||
@@ -747,24 +732,25 @@ void svga_render_16bpp_lowres(svga_t *svga)
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_16bpp_highres(svga_t *svga)
|
||||
|
||||
void
|
||||
svga_render_16bpp_highres(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
uint32_t *p, dat;
|
||||
int offset, x;
|
||||
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
|
||||
{
|
||||
int x;
|
||||
int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||
offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x += 8)
|
||||
{
|
||||
uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vram_display_mask]);
|
||||
for (x = 0; x <= svga->hdisp; x += 8) {
|
||||
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];
|
||||
|
||||
@@ -780,55 +766,56 @@ void svga_render_16bpp_highres(svga_t *svga)
|
||||
p[x + 6] = video_16to32[dat & 0xffff];
|
||||
p[x + 7] = video_16to32[dat >> 16];
|
||||
}
|
||||
|
||||
svga->ma += x << 1;
|
||||
svga->ma &= svga->vram_display_mask;
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_24bpp_lowres(svga_t *svga)
|
||||
{
|
||||
int x, offset;
|
||||
uint32_t fg;
|
||||
|
||||
void
|
||||
svga_render_24bpp_lowres(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
uint32_t dat;
|
||||
int offset, x;
|
||||
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
|
||||
{
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
offset = (8 - (svga->scrollcache & 6)) + 24;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x++)
|
||||
{
|
||||
fg = svga->vram[svga->ma] | (svga->vram[svga->ma + 1] << 8) | (svga->vram[svga->ma + 2] << 16);
|
||||
for (x = 0; x <= svga->hdisp; x++) {
|
||||
dat = svga->vram[svga->ma] | (svga->vram[svga->ma + 1] << 8) | (svga->vram[svga->ma + 2] << 16);
|
||||
svga->ma += 3;
|
||||
svga->ma &= svga->vram_display_mask;
|
||||
((uint32_t *)buffer32->line[svga->displine + y_add])[(x << 1) + offset + x_add] = ((uint32_t *)buffer32->line[svga->displine + y_add])[(x << 1) + 1 + offset + x_add] = fg;
|
||||
((uint32_t *)buffer32->line[svga->displine + y_add])[(x << 1) + offset + x_add] = ((uint32_t *)buffer32->line[svga->displine + y_add])[(x << 1) + 1 + offset + x_add] = dat;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_24bpp_highres(svga_t *svga)
|
||||
|
||||
void
|
||||
svga_render_24bpp_highres(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
uint32_t *p, dat;
|
||||
int offset, x;
|
||||
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
|
||||
{
|
||||
int x;
|
||||
int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||
offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x += 4)
|
||||
{
|
||||
uint32_t dat = *(uint32_t *)(&svga->vram[svga->ma & svga->vram_display_mask]);
|
||||
for (x = 0; x <= svga->hdisp; x += 4) {
|
||||
dat = *(uint32_t *)(&svga->vram[svga->ma & svga->vram_display_mask]);
|
||||
p[x] = dat & 0xffffff;
|
||||
|
||||
dat = *(uint32_t *)(&svga->vram[(svga->ma + 3) & svga->vram_display_mask]);
|
||||
@@ -846,24 +833,23 @@ void svga_render_24bpp_highres(svga_t *svga)
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_32bpp_lowres(svga_t *svga)
|
||||
|
||||
void
|
||||
svga_render_32bpp_lowres(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
int x, offset;
|
||||
uint32_t fg;
|
||||
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
|
||||
{
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
offset = (8 - (svga->scrollcache & 6)) + 24;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x++)
|
||||
{
|
||||
for (x = 0; x <= svga->hdisp; x++) {
|
||||
fg = svga->vram[svga->ma] | (svga->vram[svga->ma + 1] << 8) | (svga->vram[svga->ma + 2] << 16);
|
||||
svga->ma += 4;
|
||||
svga->ma &= svga->vram_display_mask;
|
||||
@@ -872,78 +858,84 @@ void svga_render_32bpp_lowres(svga_t *svga)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*72%
|
||||
91%*/
|
||||
void svga_render_32bpp_highres(svga_t *svga)
|
||||
void
|
||||
svga_render_32bpp_highres(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
uint32_t *p, dat;
|
||||
int offset, x;
|
||||
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->changedvram[(svga->ma >> 12) + 2] || svga->fullchange)
|
||||
{
|
||||
int x;
|
||||
int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->changedvram[(svga->ma >> 12) + 2] || svga->fullchange) {
|
||||
offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x++)
|
||||
{
|
||||
uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 2)) & svga->vram_display_mask]);
|
||||
for (x = 0; x <= svga->hdisp; x++) {
|
||||
dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 2)) & svga->vram_display_mask]);
|
||||
p[x] = dat & 0xffffff;
|
||||
}
|
||||
|
||||
svga->ma += 4;
|
||||
svga->ma &= svga->vram_display_mask;
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_ABGR8888_highres(svga_t *svga)
|
||||
|
||||
void
|
||||
svga_render_ABGR8888_highres(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
uint32_t *p, dat;
|
||||
int offset, x;
|
||||
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->changedvram[(svga->ma >> 12) + 2] || svga->fullchange)
|
||||
{
|
||||
int x;
|
||||
int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->changedvram[(svga->ma >> 12) + 2] || svga->fullchange) {
|
||||
offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x++)
|
||||
{
|
||||
uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 2)) & svga->vram_display_mask]);
|
||||
for (x = 0; x <= svga->hdisp; x++) {
|
||||
dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 2)) & svga->vram_display_mask]);
|
||||
p[x] = ((dat & 0xff0000) >> 16) | (dat & 0x00ff00) | ((dat & 0x0000ff) << 16);
|
||||
}
|
||||
|
||||
svga->ma += 4;
|
||||
svga->ma &= svga->vram_display_mask;
|
||||
}
|
||||
}
|
||||
|
||||
void svga_render_RGBA8888_highres(svga_t *svga)
|
||||
|
||||
void
|
||||
svga_render_RGBA8888_highres(svga_t *svga)
|
||||
{
|
||||
int y_add = enable_overscan ? (overscan_y >> 1) : 0;
|
||||
int x_add = enable_overscan ? 8 : 0;
|
||||
uint32_t *p, dat;
|
||||
int offset, x;
|
||||
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->changedvram[(svga->ma >> 12) + 2] || svga->fullchange)
|
||||
{
|
||||
int x;
|
||||
int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
|
||||
uint32_t *p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->changedvram[(svga->ma >> 12) + 2] || svga->fullchange) {
|
||||
offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
|
||||
p = &((uint32_t *)buffer32->line[svga->displine + y_add])[offset + x_add];
|
||||
|
||||
if (svga->firstline_draw == 2000)
|
||||
svga->firstline_draw = svga->displine;
|
||||
svga->lastline_draw = svga->displine;
|
||||
|
||||
for (x = 0; x <= svga->hdisp; x++)
|
||||
{
|
||||
uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 2)) & svga->vram_display_mask]);
|
||||
for (x = 0; x <= svga->hdisp; x++) {
|
||||
dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 2)) & svga->vram_display_mask]);
|
||||
p[x] = dat >> 8;
|
||||
}
|
||||
|
||||
svga->ma += 4;
|
||||
svga->ma &= svga->vram_display_mask;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the SVGA renderers.
|
||||
*
|
||||
* Version: @(#)vid_svga_render.h 1.0.2 2018/03/12
|
||||
* Version: @(#)vid_svga_render.h 1.0.3 2018/10/22
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -43,38 +43,36 @@
|
||||
extern int firstline_draw, lastline_draw;
|
||||
extern int displine;
|
||||
extern int sc;
|
||||
|
||||
extern uint32_t ma, ca;
|
||||
extern int con, cursoron, cgablink;
|
||||
|
||||
extern int scrollcache;
|
||||
|
||||
extern uint8_t edatlookup[4][4];
|
||||
|
||||
void svga_render_blank(svga_t *svga);
|
||||
void svga_render_text_40(svga_t *svga);
|
||||
void svga_render_text_80(svga_t *svga);
|
||||
void svga_render_text_80_ksc5601(svga_t *svga);
|
||||
|
||||
void svga_render_2bpp_lowres(svga_t *svga);
|
||||
void svga_render_2bpp_highres(svga_t *svga);
|
||||
void svga_render_4bpp_lowres(svga_t *svga);
|
||||
void svga_render_4bpp_highres(svga_t *svga);
|
||||
void svga_render_8bpp_lowres(svga_t *svga);
|
||||
void svga_render_8bpp_highres(svga_t *svga);
|
||||
void svga_render_15bpp_lowres(svga_t *svga);
|
||||
void svga_render_15bpp_highres(svga_t *svga);
|
||||
void svga_render_mixed_highres(svga_t *svga);
|
||||
void svga_render_16bpp_lowres(svga_t *svga);
|
||||
void svga_render_16bpp_highres(svga_t *svga);
|
||||
void svga_render_24bpp_lowres(svga_t *svga);
|
||||
void svga_render_24bpp_highres(svga_t *svga);
|
||||
void svga_render_32bpp_lowres(svga_t *svga);
|
||||
void svga_render_32bpp_highres(svga_t *svga);
|
||||
void svga_render_ABGR8888_lowres(svga_t *svga);
|
||||
void svga_render_ABGR8888_highres(svga_t *svga);
|
||||
void svga_render_RGBA8888_lowres(svga_t *svga);
|
||||
void svga_render_RGBA8888_highres(svga_t *svga);
|
||||
extern void svga_render_blank(svga_t *svga);
|
||||
extern void svga_render_text_40(svga_t *svga);
|
||||
extern void svga_render_text_80(svga_t *svga);
|
||||
extern void svga_render_text_80_ksc5601(svga_t *svga);
|
||||
|
||||
extern void svga_render_2bpp_lowres(svga_t *svga);
|
||||
extern void svga_render_2bpp_highres(svga_t *svga);
|
||||
extern void svga_render_4bpp_lowres(svga_t *svga);
|
||||
extern void svga_render_4bpp_highres(svga_t *svga);
|
||||
extern void svga_render_8bpp_lowres(svga_t *svga);
|
||||
extern void svga_render_8bpp_highres(svga_t *svga);
|
||||
extern void svga_render_15bpp_lowres(svga_t *svga);
|
||||
extern void svga_render_15bpp_highres(svga_t *svga);
|
||||
extern void svga_render_16bpp_lowres(svga_t *svga);
|
||||
extern void svga_render_16bpp_highres(svga_t *svga);
|
||||
extern void svga_render_24bpp_lowres(svga_t *svga);
|
||||
extern void svga_render_24bpp_highres(svga_t *svga);
|
||||
extern void svga_render_32bpp_lowres(svga_t *svga);
|
||||
extern void svga_render_32bpp_highres(svga_t *svga);
|
||||
extern void svga_render_ABGR8888_lowres(svga_t *svga);
|
||||
extern void svga_render_ABGR8888_highres(svga_t *svga);
|
||||
extern void svga_render_RGBA8888_lowres(svga_t *svga);
|
||||
extern void svga_render_RGBA8888_highres(svga_t *svga);
|
||||
extern void svga_render_mixed_highres(svga_t *svga);
|
||||
|
||||
extern void (*svga_render)(svga_t *svga);
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the video controller module.
|
||||
*
|
||||
* Version: @(#)video.h 1.0.19 2018/10/16
|
||||
* Version: @(#)video.h 1.0.20 2018/10/22
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
* "extern" reference to its device into the video.h file,
|
||||
* and add an entry for it into the table here.
|
||||
*
|
||||
* Version: @(#)video_dev.c 1.0.25 2018/10/20
|
||||
* Version: @(#)video_dev.c 1.0.26 2018/10/22
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
|
||||
Reference in New Issue
Block a user