SVGA now handles vblank start < vertical total. Fixes The Incredible Machine.

This commit is contained in:
TomW 2014-03-09 11:24:58 +00:00
commit 4c4b3df51f
2 changed files with 9 additions and 1 deletions

View file

@ -246,6 +246,7 @@ void svga_recalctimings(svga_t *svga)
svga->dispend = svga->crtc[0x12];
svga->vsyncstart = svga->crtc[0x10];
svga->split = svga->crtc[0x18];
svga->vblankstart = svga->crtc[0x15];
if (svga->crtc[7] & 1) svga->vtotal |= 0x100;
if (svga->crtc[7] & 32) svga->vtotal |= 0x200;
@ -262,6 +263,13 @@ void svga_recalctimings(svga_t *svga)
if (svga->crtc[7] & 0x10) svga->split|=0x100;
if (svga->crtc[9] & 0x40) svga->split|=0x200;
svga->split++;
if (svga->crtc[7] & 0x08) svga->vblankstart |= 0x100;
if (svga->crtc[9] & 0x20) svga->vblankstart |= 0x200;
svga->vblankstart++;
if (svga->vblankstart < svga->dispend)
svga->dispend = svga->vblankstart;
svga->hdisp = svga->crtc[1];
svga->hdisp++;

View file

@ -38,7 +38,7 @@ typedef struct svga_t
uint32_t pallook[256];
PALETTE vgapal;
int vtotal, dispend, vsyncstart, split;
int vtotal, dispend, vsyncstart, split, vblankstart;
int hdisp, hdisp_old, htotal, hdisp_time, rowoffset;
int lowres, interlace;
int linedbl, rowcount;