From 4adb484184b813868b52c27c242444aad68e381b Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 18 Feb 2024 12:23:21 +0600 Subject: [PATCH 1/3] C&T 69000: Fix ROP 0xFF `WHITENESS` on 16+ bpp modes Fixes blue background on Write in Windows 3.11 drivers --- src/video/vid_chips_69000.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/video/vid_chips_69000.c b/src/video/vid_chips_69000.c index 0490523c9..9e5e74370 100644 --- a/src/video/vid_chips_69000.c +++ b/src/video/vid_chips_69000.c @@ -351,7 +351,7 @@ chips_69000_do_rop_16bpp(uint16_t *dst, uint16_t src, uint8_t rop) *dst |= src; break; case 0xFF: - *dst = 0xFF; + *dst = 0xFFFF; break; } } @@ -405,7 +405,7 @@ chips_69000_do_rop_24bpp(uint32_t *dst, uint32_t src, uint8_t rop) *dst |= src; break; case 0xFF: - *dst = 0xFF; + *dst = 0xFFFFFF; break; } } From 2928e2cf7928e364debbccbaf15b07fb8f110f12 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 18 Feb 2024 16:35:32 +0600 Subject: [PATCH 2/3] C&T 69000: Make sure horizontal blank period does not exceed horizontal total Fixes machine freezes in certain circumstances --- src/video/vid_chips_69000.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/video/vid_chips_69000.c b/src/video/vid_chips_69000.c index 9e5e74370..d35e66361 100644 --- a/src/video/vid_chips_69000.c +++ b/src/video/vid_chips_69000.c @@ -775,6 +775,9 @@ chips_69000_recalctimings(svga_t *svga) svga->hblank_end_val = ((svga->crtc[3] & 0x1f) | ((svga->crtc[5] & 0x80) ? 0x20 : 0x00)) | (svga->crtc[0x3c] & 0b11000000); svga->hblank_end_mask = 0xff; + if (svga->hblank_end_val >= svga->htotal) + svga->hblank_end_val = svga->htotal - 1; + svga->ma_latch |= (svga->crtc[0x40] & 0xF) << 16; svga->rowoffset |= (svga->crtc[0x41] & 0xF) << 8; From a0b984f79cc8a6054ca7e15be0254abfda352562 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 18 Feb 2024 16:57:30 +0600 Subject: [PATCH 3/3] Revert no-longer-needed horizontal blanking changes --- src/video/vid_chips_69000.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/video/vid_chips_69000.c b/src/video/vid_chips_69000.c index d35e66361..9e5e74370 100644 --- a/src/video/vid_chips_69000.c +++ b/src/video/vid_chips_69000.c @@ -775,9 +775,6 @@ chips_69000_recalctimings(svga_t *svga) svga->hblank_end_val = ((svga->crtc[3] & 0x1f) | ((svga->crtc[5] & 0x80) ? 0x20 : 0x00)) | (svga->crtc[0x3c] & 0b11000000); svga->hblank_end_mask = 0xff; - if (svga->hblank_end_val >= svga->htotal) - svga->hblank_end_val = svga->htotal - 1; - svga->ma_latch |= (svga->crtc[0x40] & 0xF) << 16; svga->rowoffset |= (svga->crtc[0x41] & 0xF) << 8;