Apply blanking extensions to more SVGA cards.

* Fix duplicated logic in vid_svga.c
* Voodoo 3/Banshee emulation now has blanking extensions applied
* S3 ViRGE and Matrox video cards as well
* Tseng ET4000-series cards as well
* Fix off-by-one error in vid_cl54xx.c

Trident cards are yet to be investigated. XGA and 8514/A are yet to be made blanking extensions compliant. Mach64, Paradise/WDC and OAK OTI cards remain as-is for now.
This commit is contained in:
Cacodemon345
2024-01-11 01:48:49 +06:00
parent d125caf776
commit 8e9a2e0b79
8 changed files with 44 additions and 9 deletions

View File

@@ -1950,7 +1950,7 @@ gd54xx_recalctimings(svga_t *svga)
and the actual blanking comes from the display enable signal. */
/* Start blanking at the first character clock after the last active one. */
svga->hblankstart = svga->crtc[1] + 1;
svga->hblank_end_val = (svga->htotal + 6) & 0x3f;
svga->hblank_end_val = (svga->htotal + 5) & 0xff;
/* In this mode, the dots per clock are always 8 or 16, never 9 or 18. */
if (!svga->scrblank && svga->attr_palette_enable)
svga->dots_per_clock = (svga->seqregs[1] & 8) ? 16 : 8;
@@ -1958,6 +1958,10 @@ gd54xx_recalctimings(svga_t *svga)
svga->hblank_overscan = 0;
/* Also make sure vertical blanking starts on display end. */
svga->vblankstart = svga->dispend;
/* Account for horizontal overflow bits. */
svga->hblank_end_val += (svga->crtc[0x1a] & 0x30) << 2;
svga->hblank_end_len = 0x100;
}
if (!(svga->gdcreg[6] & 1) && !(svga->attrregs[0x10] & 1)) { /*Text mode*/