From 0848f4a38e049e512db2eaee16ff184850cda3c2 Mon Sep 17 00:00:00 2001 From: GreaseMonkey Date: Sun, 17 Dec 2023 08:46:12 +1300 Subject: [PATCH] Disable blink in 8bpp modes on MGA; Re-instate main 8bpp hires renderer I don't actually know if 8bpp blink is a thing on a Matrox Millennium, but the video BIOS seems to act like it's not. --- src/include/86box/vid_svga.h | 5 +++++ src/video/vid_mga.c | 4 +++- src/video/vid_svga_render.c | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/include/86box/vid_svga.h b/src/include/86box/vid_svga.h index f725996d8..cb914aca9 100644 --- a/src/include/86box/vid_svga.h +++ b/src/include/86box/vid_svga.h @@ -246,6 +246,11 @@ typedef struct svga_t { addresses are shifted to match*/ int packed_chain4; + /*Disable 8bpp blink mode - some cards support it, some don't, it's a weird mode + If mode 13h appears in a reddish-brown background (0x88) with dark green text (0x8F), + you should set this flag when entering that mode*/ + int disable_blink; + /*Force CRTC to dword mode, regardless of CR14/CR17. Required for S3 enhanced mode*/ int force_dword_mode; diff --git a/src/video/vid_mga.c b/src/video/vid_mga.c index 30d6b453a..320cd899a 100644 --- a/src/video/vid_mga.c +++ b/src/video/vid_mga.c @@ -935,7 +935,7 @@ mystique_recalctimings(svga_t *svga) } else { switch (svga->bpp) { case 8: - svga->render = svga_render_8bpp_incompatible_highres; + svga->render = svga_render_8bpp_highres; break; case 15: svga->render = svga_render_15bpp_highres; @@ -958,6 +958,8 @@ mystique_recalctimings(svga_t *svga) if (mystique->type >= MGA_1064SG) svga->bpp = 8; } + + svga->disable_blink = (svga->bpp > 4); } static void diff --git a/src/video/vid_svga_render.c b/src/video/vid_svga_render.c index f7bc36130..7a15dc1cf 100644 --- a/src/video/vid_svga_render.c +++ b/src/video/vid_svga_render.c @@ -457,7 +457,7 @@ svga_render_indexed_gfx(svga_t *svga, bool highres, bool combine8bits) uint32_t changed_offset; const bool blinked = svga->blink & 0x10; - const bool attrblink = ((svga->attrregs[0x10] & 0x08) != 0); + const bool attrblink = (!svga->disable_blink) && ((svga->attrregs[0x10] & 0x08) != 0); /* The following is likely how it works on an IBM VGA - that is, it works with its BIOS.