diff --git a/src/video/vid_s3.c b/src/video/vid_s3.c index c5e94194b..d3fb9c468 100644 --- a/src/video/vid_s3.c +++ b/src/video/vid_s3.c @@ -2711,10 +2711,12 @@ static void s3_recalctimings(svga_t *svga) svga->lowres = !((svga->gdcreg[5] & 0x40) && (svga->crtc[0x3a] & 0x10)); if (((svga->gdcreg[5] & 0x40) && (svga->crtc[0x3a] & 0x10)) || (svga->crtc[0x3a] & 0x10)) { - if (svga->crtc[0x31] & 0x08) { /*If the dword mode bit is not enabled when the S3 dword mode is enabled, enable it*/ - if (!(svga->crtc[0x14] & 0x40)) - svga->crtc[0x14] |= 0x40; - } + if (svga->crtc[0x31] & 0x08) { + if (!(svga->crtc[0x17] & 0x40) && (svga->crtc[0x14] & 0x40)) /*Disable dword mode addressing when CRTC14 bit 6 is not enabled, regardless of the S3 dword mode bit.*/ + svga->force_dword_mode = 1; + } else + svga->force_dword_mode = 0; + switch (svga->bpp) { case 8: svga->render = svga_render_8bpp_highres; @@ -2852,9 +2854,11 @@ static void s3_trio64v_recalctimings(svga_t *svga) svga->lowres = !((svga->gdcreg[5] & 0x40) && (svga->crtc[0x3a] & 0x10)); if ((svga->gdcreg[5] & 0x40) && (svga->crtc[0x3a] & 0x10)) { if (svga->crtc[0x31] & 0x08) { - if (!(svga->crtc[0x14] & 0x40)) - svga->crtc[0x14] |= 0x40; - } + if (!(svga->crtc[0x17] & 0x40) && (svga->crtc[0x14] & 0x40)) /*Disable dword mode addressing when CRTC14 bit 6 is not enabled, regardless of the S3 dword mode bit.*/ + svga->force_dword_mode = 1; + } else + svga->force_dword_mode = 0; + switch (svga->bpp) { case 8: svga->render = svga_render_8bpp_highres;