diff --git a/src/include/86box/vid_svga.h b/src/include/86box/vid_svga.h index 73c176742..776799e4b 100644 --- a/src/include/86box/vid_svga.h +++ b/src/include/86box/vid_svga.h @@ -154,6 +154,9 @@ typedef struct svga_t /*Force CRTC to dword mode, regardless of CR14/CR17. Required for S3 enhanced mode*/ int force_dword_mode; + /*Force CRTC to legacy mode. Required for Voodoo Banshee/3 until there's a proper fix*/ + int force_legacy_mode; + int remap_required; uint32_t (*remap_func)(struct svga_t *svga, uint32_t in_addr); diff --git a/src/include/86box/vid_svga_render_remap.h b/src/include/86box/vid_svga_render_remap.h index c2e48f1b2..6fdcd2928 100644 --- a/src/include/86box/vid_svga_render_remap.h +++ b/src/include/86box/vid_svga_render_remap.h @@ -101,7 +101,7 @@ void svga_recalc_remap_func(svga_t *svga) { int func_nr; - if (svga->fb_only) + if (svga->fb_only || svga->force_legacy_mode) func_nr = 0; else { if (svga->force_dword_mode) diff --git a/src/video/vid_voodoo_banshee.c b/src/video/vid_voodoo_banshee.c index 04ccff237..a3ff5c164 100644 --- a/src/video/vid_voodoo_banshee.c +++ b/src/video/vid_voodoo_banshee.c @@ -485,9 +485,11 @@ static void banshee_recalctimings(svga_t *svga) // banshee_log("svga->hdisp=%i\n", svga->hdisp); svga->interlace = 0; + svga->force_legacy_mode = 0; if (banshee->vgaInit0 & VGAINIT0_EXTENDED_SHIFT_OUT) { + svga->force_legacy_mode = 1; switch (VIDPROCCFG_DESKTOP_PIX_FORMAT) { case PIX_FORMAT_8: @@ -664,7 +666,7 @@ static void banshee_ext_outl(uint16_t addr, uint32_t val, void *p) banshee->vgaInit1 = val; svga->write_bank = (val & 0x3ff) << 15; svga->read_bank = ((val >> 10) & 0x3ff) << 15; - svga->packed_chain4 = !!(val && 0x00100000); + svga->packed_chain4 = !!(val & 0x00100000); break; case PLL_pllCtrl0: