VGA RAMDAC does not update palette until all three elements are written. Fixes Windows 3.x EGA driver when run on a VGA card.

This commit is contained in:
TomW 2015-08-13 19:49:19 +01:00
commit 0a5e80325a
2 changed files with 6 additions and 5 deletions

View file

@ -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;

View file

@ -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;