Implemented VGA attribute enable bit in attribute index - VGA grabber in Windows 3.x now works properly.

This commit is contained in:
TomW 2015-09-18 20:42:37 +01:00
commit 8d3c6fb195
2 changed files with 12 additions and 3 deletions

View file

@ -42,7 +42,15 @@ void svga_out(uint16_t addr, uint8_t val, void *p)
{ {
case 0x3C0: case 0x3C0:
if (!svga->attrff) if (!svga->attrff)
svga->attraddr = val & 31; {
svga->attraddr = val & 31;
if ((val & 0x20) != svga->attr_palette_enable)
{
svga->fullchange = 3;
svga->attr_palette_enable = val & 0x20;
svga_recalctimings(svga);
}
}
else else
{ {
svga->attrregs[svga->attraddr & 31] = val; svga->attrregs[svga->attraddr & 31] = val;
@ -209,7 +217,7 @@ uint8_t svga_in(uint16_t addr, void *p)
switch (addr) switch (addr)
{ {
case 0x3C0: case 0x3C0:
return svga->attraddr; return svga->attraddr | svga->attr_palette_enable;
case 0x3C1: case 0x3C1:
return svga->attrregs[svga->attraddr]; return svga->attrregs[svga->attraddr];
case 0x3c2: case 0x3c2:
@ -309,7 +317,7 @@ void svga_recalctimings(svga_t *svga)
svga->hdisp_time = svga->hdisp; svga->hdisp_time = svga->hdisp;
svga->render = svga_render_blank; svga->render = svga_render_blank;
if (!svga->scrblank) if (!svga->scrblank && svga->attr_palette_enable)
{ {
if (!(svga->gdcreg[6] & 1)) /*Text mode*/ if (!(svga->gdcreg[6] & 1)) /*Text mode*/
{ {

View file

@ -8,6 +8,7 @@ typedef struct svga_t
int gdcaddr; int gdcaddr;
uint8_t attrregs[32]; uint8_t attrregs[32];
int attraddr, attrff; int attraddr, attrff;
int attr_palette_enable;
uint8_t seqregs[64]; uint8_t seqregs[64];
int seqaddr; int seqaddr;