From c598f88f67ae127df0d3a39bc86116a89ba30668 Mon Sep 17 00:00:00 2001 From: SarahW Date: Mon, 9 Nov 2020 19:56:51 +0000 Subject: [PATCH] Implement Banshee/V3 vidProcCfg half mode. Fixes low res 16 bpp modes. --- src/vid_voodoo_banshee.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/vid_voodoo_banshee.c b/src/vid_voodoo_banshee.c index d705c57..fa14821 100644 --- a/src/vid_voodoo_banshee.c +++ b/src/vid_voodoo_banshee.c @@ -139,6 +139,7 @@ enum #define VGAINIT0_EXTENDED_SHIFT_OUT (1 << 12) +#define VIDPROCCFG_HALF_MODE (1 << 4) #define VIDPROCCFG_OVERLAY_ENABLE (1 << 8) #define VIDPROCCFG_H_SCALE_ENABLE (1 << 14) #define VIDPROCCFG_V_SCALE_ENABLE (1 << 15) @@ -311,9 +312,14 @@ static void banshee_render_16bpp_tiled(svga_t *svga) int x; int offset = 32; uint32_t *p = &((uint32_t *)buffer32->line[svga->displine])[offset]; - uint32_t addr = banshee->desktop_addr + (banshee->desktop_y & 31) * 128 + ((banshee->desktop_y >> 5) * banshee->desktop_stride_tiled); + uint32_t addr; int drawn = 0; + if (banshee->vidProcCfg & VIDPROCCFG_HALF_MODE) + addr = banshee->desktop_addr + ((banshee->desktop_y >> 1) & 31) * 128 + ((banshee->desktop_y >> 6) * banshee->desktop_stride_tiled); + else + addr = banshee->desktop_addr + (banshee->desktop_y & 31) * 128 + ((banshee->desktop_y >> 5) * banshee->desktop_stride_tiled); + for (x = 0; x <= svga->hdisp; x += 64) { if (svga->hwcursor_on || svga->overlay_on)