SVGA now handles vblank start < vertical total. Fixes The Incredible Machine.
This commit is contained in:
parent
778c8f5fee
commit
4c4b3df51f
2 changed files with 9 additions and 1 deletions
|
|
@ -246,6 +246,7 @@ void svga_recalctimings(svga_t *svga)
|
||||||
svga->dispend = svga->crtc[0x12];
|
svga->dispend = svga->crtc[0x12];
|
||||||
svga->vsyncstart = svga->crtc[0x10];
|
svga->vsyncstart = svga->crtc[0x10];
|
||||||
svga->split = svga->crtc[0x18];
|
svga->split = svga->crtc[0x18];
|
||||||
|
svga->vblankstart = svga->crtc[0x15];
|
||||||
|
|
||||||
if (svga->crtc[7] & 1) svga->vtotal |= 0x100;
|
if (svga->crtc[7] & 1) svga->vtotal |= 0x100;
|
||||||
if (svga->crtc[7] & 32) svga->vtotal |= 0x200;
|
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[7] & 0x10) svga->split|=0x100;
|
||||||
if (svga->crtc[9] & 0x40) svga->split|=0x200;
|
if (svga->crtc[9] & 0x40) svga->split|=0x200;
|
||||||
svga->split++;
|
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 = svga->crtc[1];
|
||||||
svga->hdisp++;
|
svga->hdisp++;
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ typedef struct svga_t
|
||||||
uint32_t pallook[256];
|
uint32_t pallook[256];
|
||||||
PALETTE vgapal;
|
PALETTE vgapal;
|
||||||
|
|
||||||
int vtotal, dispend, vsyncstart, split;
|
int vtotal, dispend, vsyncstart, split, vblankstart;
|
||||||
int hdisp, hdisp_old, htotal, hdisp_time, rowoffset;
|
int hdisp, hdisp_old, htotal, hdisp_time, rowoffset;
|
||||||
int lowres, interlace;
|
int lowres, interlace;
|
||||||
int linedbl, rowcount;
|
int linedbl, rowcount;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue