From 0a5e80325a7b9ea9e1fbbb89d4debf833a0dc49b Mon Sep 17 00:00:00 2001 From: TomW Date: Thu, 13 Aug 2015 19:49:19 +0100 Subject: [PATCH] VGA RAMDAC does not update palette until all three elements are written. Fixes Windows 3.x EGA driver when run on a VGA card. --- src/vid_svga.c | 8 ++++---- src/vid_svga.h | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/vid_svga.c b/src/vid_svga.c index f718253..6c0b533 100644 --- a/src/vid_svga.c +++ b/src/vid_svga.c @@ -133,16 +133,16 @@ void svga_out(uint16_t addr, uint8_t val, void *p) switch (svga->dac_pos) { case 0: - svga->vgapal[svga->dac_write].r = val & 63; - svga->pallook[svga->dac_write] = makecol32(svga->vgapal[svga->dac_write].r * 4, svga->vgapal[svga->dac_write].g * 4, svga->vgapal[svga->dac_write].b * 4); + svga->dac_r = val & 63; svga->dac_pos++; break; case 1: - svga->vgapal[svga->dac_write].g = val & 63; - svga->pallook[svga->dac_write] = makecol32(svga->vgapal[svga->dac_write].r * 4, svga->vgapal[svga->dac_write].g * 4, svga->vgapal[svga->dac_write].b * 4); + svga->dac_g = val & 63; svga->dac_pos++; break; case 2: + svga->vgapal[svga->dac_write].r = svga->dac_r; + svga->vgapal[svga->dac_write].g = svga->dac_g; svga->vgapal[svga->dac_write].b = val & 63; svga->pallook[svga->dac_write] = makecol32(svga->vgapal[svga->dac_write].r * 4, svga->vgapal[svga->dac_write].g * 4, svga->vgapal[svga->dac_write].b * 4); svga->dac_pos = 0; diff --git a/src/vid_svga.h b/src/vid_svga.h index cd482c5..141a6b3 100644 --- a/src/vid_svga.h +++ b/src/vid_svga.h @@ -20,7 +20,8 @@ typedef struct svga_t uint8_t dac_mask, dac_status; int dac_read, dac_write, dac_pos; - + int dac_r, dac_g; + uint8_t cgastat; uint8_t plane_mask;