From 5b783695630a3c3bd74e81444111c9221af9c2e7 Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 25 Jan 2018 12:45:20 +0100 Subject: [PATCH] More EGA/(S)VGA bugfixes, error 2401 on PS/1 model 2121 is now gone for good (it was caused by enablevram). --- src/video/vid_ega.c | 3 +-- src/video/vid_ega.h | 4 ++-- src/video/vid_svga.c | 38 +++----------------------------------- src/video/vid_svga.h | 4 ++-- 4 files changed, 8 insertions(+), 41 deletions(-) diff --git a/src/video/vid_ega.c b/src/video/vid_ega.c index 905800032..a8dfcd446 100644 --- a/src/video/vid_ega.c +++ b/src/video/vid_ega.c @@ -9,7 +9,7 @@ * Emulation of the EGA, Chips & Technologies SuperEGA, and * AX JEGA graphics cards. * - * Version: @(#)vid_ega.c 1.0.13 2018/01/24 + * Version: @(#)vid_ega.c 1.0.14 2018/01/25 * * Authors: Sarah Walker, * Miran Grca, @@ -972,7 +972,6 @@ void ega_init(ega_t *ega, int monitor_type, int is_mono) old_overscan_color = 0; ega->miscout |= 0x22; - ega->enablevram = 1; ega->oddeven_page = 0; ega->seqregs[4] |= 2; diff --git a/src/video/vid_ega.h b/src/video/vid_ega.h index 65512b460..2d21418be 100644 --- a/src/video/vid_ega.h +++ b/src/video/vid_ega.h @@ -9,7 +9,7 @@ * Emulation of the EGA, Chips & Technologies SuperEGA, and * AX JEGA graphics cards. * - * Version: @(#)vid_ega.h 1.0.5 2018/01/24 + * Version: @(#)vid_ega.h 1.0.6 2018/01/25 * * Authors: Sarah Walker, * Miran Grca, @@ -61,7 +61,7 @@ typedef struct ega_t { int readmode, writemode, readplane; int chain4, chain2_read, chain2_write; int oddeven_page, oddeven_chain; - int enablevram, extvram; + int extvram; uint8_t writemask; uint32_t charseta, charsetb; diff --git a/src/video/vid_svga.c b/src/video/vid_svga.c index dc374f925..683ac1da3 100644 --- a/src/video/vid_svga.c +++ b/src/video/vid_svga.c @@ -11,7 +11,7 @@ * This is intended to be used by another SVGA driver, * and not as a card in it's own right. * - * Version: @(#)vid_svga.c 1.0.16 2018/01/24 + * Version: @(#)vid_svga.c 1.0.17 2018/01/25 * * Authors: Sarah Walker, * Miran Grca, @@ -173,7 +173,6 @@ void svga_out(uint16_t addr, uint8_t val, void *p) break; case 0x3C2: svga->miscout = val; - svga->enablevram = (val & 2) ? 1 : 0; svga->oddeven_page = (val & 0x20) ? 0 : 1; svga->vidclock = val & 4; if (val & 1) @@ -195,9 +194,6 @@ void svga_out(uint16_t addr, uint8_t val, void *p) case 0x3C5: if (svga->seqaddr > 0xf) return; o = svga->seqregs[svga->seqaddr & 0xf]; - /* Sanitize value for the first 5 sequencer registers. */ - /* if ((svga->seqaddr & 0xf) <= 4) - val &= mask_seq[svga->seqaddr & 0xf]; */ svga->seqregs[svga->seqaddr & 0xf] = val; if (o != val && (svga->seqaddr & 0xf) == 1) svga_recalctimings(svga); @@ -272,9 +268,6 @@ void svga_out(uint16_t addr, uint8_t val, void *p) svga->gdcaddr = val; break; case 0x3CF: - /* Sanitize the first 9 GDC registers. */ - /* if ((svga->gdcaddr & 15) <= 8) - val &= mask_gdc[svga->gdcaddr & 15]; */ o = svga->gdcreg[svga->gdcaddr & 15]; switch (svga->gdcaddr & 15) { @@ -364,7 +357,7 @@ uint8_t svga_in(uint16_t addr, void *p) case 0x3C1: return svga->attrregs[svga->attraddr]; case 0x3c2: - if ((svga->vgapal[0].r + svga->vgapal[0].g + svga->vgapal[0].b) >= 0x50) + if ((svga->vgapal[0].r + svga->vgapal[0].g + svga->vgapal[0].b) >= 0x4e) temp = 0; else temp = 0x10; @@ -622,11 +615,6 @@ void svga_recalctimings(svga_t *svga) svga->dispontime = (int64_t)(_dispontime * (1 << TIMER_SHIFT)); svga->dispofftime = (int64_t)(_dispofftime * (1 << TIMER_SHIFT)); -/* pclog("SVGA horiz total %i display end %i vidclock %f\n",svga->crtc[0],svga->crtc[1],svga->clock); - pclog("SVGA vert total %i display end %i max row %i vsync %i\n",svga->vtotal,svga->dispend,(svga->crtc[9]&31)+1,svga->vsyncstart); - pclog("total %f on %i cycles off %i cycles frame %i sec %i %02X\n",disptime*crtcconst,svga->dispontime,svga->dispofftime,(svga->dispontime+svga->dispofftime)*svga->vtotal,(svga->dispontime+svga->dispofftime)*svga->vtotal*70,svga->seqregs[1]); - - pclog("svga->render %08X\n", svga->render);*/ } extern int cyc_total; @@ -926,7 +914,7 @@ int svga_init(svga_t *svga, void *p, int memsize, svga->vram_display_mask = memsize - 1; svga->vram_mask = memsize - 1; svga->decode_mask = 0x7fffff; - svga->changedvram = malloc(/*(memsize >> 12) << 1*/memsize >> 12); + svga->changedvram = malloc(memsize >> 12); svga->recalctimings_ex = recalctimings_ex; svga->video_in = video_in; svga->video_out = video_out; @@ -944,10 +932,6 @@ int svga_init(svga_t *svga, void *p, int memsize, svga->ramdac_type = RAMDAC_6BIT; svga_pointer = svga; - - /* io_sethandler(0x22ca, 0x0002, svga_in, NULL, NULL, svga_out, NULL, NULL, svga); - io_sethandler(0x22ce, 0x0002, svga_in, NULL, NULL, svga_out, NULL, NULL, svga); - io_sethandler(0x32ca, 0x0002, svga_in, NULL, NULL, svga_out, NULL, NULL, svga); */ return 0; } @@ -1621,8 +1605,6 @@ void svga_writew(uint32_t addr, uint16_t val, void *p) { svga_t *svga = (svga_t *)p; - if (!svga->enablevram) return; - if (!svga->fast) { svga_write(addr, val, p); @@ -1650,8 +1632,6 @@ void svga_writew(uint32_t addr, uint16_t val, void *p) void svga_writel(uint32_t addr, uint32_t val, void *p) { svga_t *svga = (svga_t *)p; - - if (!svga->enablevram) return; if (!svga->fast) { @@ -1683,8 +1663,6 @@ void svga_writel(uint32_t addr, uint32_t val, void *p) uint16_t svga_readw(uint32_t addr, void *p) { svga_t *svga = (svga_t *)p; - - if (!svga->enablevram) return 0xffff; if (!svga->fast) return svga_read(addr, p) | (svga_read(addr + 1, p) << 8); @@ -1706,8 +1684,6 @@ uint16_t svga_readw(uint32_t addr, void *p) uint32_t svga_readl(uint32_t addr, void *p) { svga_t *svga = (svga_t *)p; - - if (!svga->enablevram) return 0xffffffff; if (!svga->fast) { @@ -1732,8 +1708,6 @@ uint32_t svga_readl(uint32_t addr, void *p) void svga_writew_linear(uint32_t addr, uint16_t val, void *p) { svga_t *svga = (svga_t *)p; - - if (!svga->enablevram) return; if (!svga->fast) { @@ -1760,8 +1734,6 @@ void svga_writew_linear(uint32_t addr, uint16_t val, void *p) void svga_writel_linear(uint32_t addr, uint32_t val, void *p) { svga_t *svga = (svga_t *)p; - - if (!svga->enablevram) return; if (!svga->fast) { @@ -1790,8 +1762,6 @@ void svga_writel_linear(uint32_t addr, uint32_t val, void *p) uint16_t svga_readw_linear(uint32_t addr, void *p) { svga_t *svga = (svga_t *)p; - - if (!svga->enablevram) return 0xffff; if (!svga->fast) return svga_read_linear(addr, p) | (svga_read_linear(addr + 1, p) << 8); @@ -1812,8 +1782,6 @@ uint16_t svga_readw_linear(uint32_t addr, void *p) uint32_t svga_readl_linear(uint32_t addr, void *p) { svga_t *svga = (svga_t *)p; - - if (!svga->enablevram) return 0xffffffff; if (!svga->fast) return svga_read_linear(addr, p) | (svga_read_linear(addr + 1, p) << 8) | (svga_read_linear(addr + 2, p) << 16) | (svga_read_linear(addr + 3, p) << 24); diff --git a/src/video/vid_svga.h b/src/video/vid_svga.h index eaf239a0c..5358abee1 100644 --- a/src/video/vid_svga.h +++ b/src/video/vid_svga.h @@ -8,7 +8,7 @@ * * Generic SVGA handling. * - * Version: @(#)vid_svga.h 1.0.3 2018/01/24 + * Version: @(#)vid_svga.h 1.0.4 2018/01/25 * * Authors: Sarah Walker, * Miran Grca, @@ -67,7 +67,7 @@ typedef struct svga_t int readmode, writemode, readplane; int chain4, chain2_write, chain2_read; int oddeven_page, oddeven_chain; - int enablevram, extvram; + int extvram; uint8_t writemask; uint32_t charseta, charsetb;