From da1de8aaf57edece4b0ebb1477b46ef78bbc17ed Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 20 Dec 2020 21:14:24 +0100 Subject: [PATCH] 40x25 text mode and Cardex ET4000/w32p 80x25 text mode now actually fixes. --- src/video/vid_et4000w32.c | 11 +++++++++++ src/video/vid_svga.c | 7 ++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/video/vid_et4000w32.c b/src/video/vid_et4000w32.c index b3eb235bd..e856c9675 100644 --- a/src/video/vid_et4000w32.c +++ b/src/video/vid_et4000w32.c @@ -355,6 +355,17 @@ void et4000w32p_recalctimings(svga_t *svga) svga->clock = (cpuclock * (double)(1ull << 32)) / svga->getclock((svga->miscout >> 2) & 3, svga->clock_gen); + if (svga->adv_flags & FLAG_NOSKEW) { + /* On the Cardex ET4000/W32p, adjust text mode clocks by 1. */ + if (!(svga->gdcreg[6] & 1) && !(svga->attrregs[0x10] & 1)) { /*Text mode*/ + svga->ma_latch--; + if ((svga->seqregs[1] & 8)) /*40 column*/ + svga->hdisp += (svga->seqregs[1] & 1) ? 16 : 18; + else + svga->hdisp += (svga->seqregs[1] & 1) ? 8 : 9; + } + } + switch (svga->bpp) { case 15: case 16: diff --git a/src/video/vid_svga.c b/src/video/vid_svga.c index 0298c3f36..61dcc6d1f 100644 --- a/src/video/vid_svga.c +++ b/src/video/vid_svga.c @@ -445,7 +445,7 @@ svga_recalctimings(svga_t *svga) svga->interlace = 0; - svga->ma_latch = ((svga->crtc[0xc] << 8) | svga->crtc[0xd]); + svga->ma_latch = ((svga->crtc[0xc] << 8) | svga->crtc[0xd]) + ((svga->crtc[8] & 0x60) >> 5); svga->ca_adj = 0; svga->rowcount = svga->crtc[9] & 31; @@ -457,10 +457,11 @@ svga_recalctimings(svga_t *svga) if (svga->seqregs[1] & 8) /*40 column*/ { svga->render = svga_render_text_40; svga->hdisp *= (svga->seqregs[1] & 1) ? 16 : 18; + /* Character clock is off by 1 now in 40-line modes, on all cards. */ + svga->ma_latch--; + svga->hdisp += (svga->seqregs[1] & 1) ? 16 : 18; } else { svga->render = svga_render_text_80; - if (!(svga->adv_flags & FLAG_NOSKEW)) - svga->ma_latch += ((svga->crtc[8] & 0x60) >> 5); svga->hdisp *= (svga->seqregs[1] & 1) ? 8 : 9; } svga->hdisp_old = svga->hdisp;