From 5ce5685c1ab27ab7408a3ef5954bf913df0fdca1 Mon Sep 17 00:00:00 2001 From: OBattler Date: Wed, 18 Nov 2020 16:18:45 +0100 Subject: [PATCH 1/3] Fixed Banshee hardware cursor offset. --- src/video/vid_voodoo_banshee.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/video/vid_voodoo_banshee.c b/src/video/vid_voodoo_banshee.c index bea894523..5676a64d2 100644 --- a/src/video/vid_voodoo_banshee.c +++ b/src/video/vid_voodoo_banshee.c @@ -656,7 +656,7 @@ static void banshee_ext_outl(uint16_t addr, uint32_t val, void *p) break; case Video_hwCurLoc: banshee->hwCurLoc = val; - svga->hwcursor.x = (val & 0x7ff) - 32; + svga->hwcursor.x = (val & 0x7ff) - 64; svga->hwcursor.y = ((val >> 16) & 0x7ff) - 64; if (svga->hwcursor.y < 0) { From e8266cd716aa9ef5fa690c93b6012e39f774b317 Mon Sep 17 00:00:00 2001 From: OBattler Date: Wed, 18 Nov 2020 16:21:09 +0100 Subject: [PATCH 2/3] Another Banshee cursor fix. --- src/video/vid_voodoo_banshee.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/video/vid_voodoo_banshee.c b/src/video/vid_voodoo_banshee.c index 5676a64d2..1a94aaf2d 100644 --- a/src/video/vid_voodoo_banshee.c +++ b/src/video/vid_voodoo_banshee.c @@ -1604,7 +1604,7 @@ void banshee_hwcursor_draw(svga_t *svga, int displine) /*X11 mode*/ for (x = 0; x < 64; x += 8) { - if (x_off > (32-8)) + if (x_off > -8) { for (xx = 0; xx < 8; xx++) { @@ -1624,7 +1624,7 @@ void banshee_hwcursor_draw(svga_t *svga, int displine) /*Windows mode*/ for (x = 0; x < 64; x += 8) { - if (x_off > (32-8)) + if (x_off > -8) { for (xx = 0; xx < 8; xx++) { From 31c78fddf301b8c383c0ea17c5c3a6e8630ba0ec Mon Sep 17 00:00:00 2001 From: OBattler Date: Wed, 18 Nov 2020 16:56:35 +0100 Subject: [PATCH 3/3] Fixed Voodoo 3D rendering. --- src/video/vid_voodoo_display.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/video/vid_voodoo_display.c b/src/video/vid_voodoo_display.c index a3548920a..3a7df1ab3 100644 --- a/src/video/vid_voodoo_display.c +++ b/src/video/vid_voodoo_display.c @@ -525,7 +525,7 @@ void voodoo_callback(void *p) if (draw_voodoo->dirty_line[draw_line]) { - uint32_t *p = &((uint32_t *)buffer32->line[voodoo->line])[32]; + uint32_t *p = &buffer32->line[voodoo->line + 8][8]; uint16_t *src = (uint16_t *)&draw_voodoo->fb_mem[draw_voodoo->front_offset + draw_line*draw_voodoo->row_width]; int x; @@ -539,6 +539,10 @@ void voodoo_callback(void *p) if (voodoo->line > voodoo->dirty_line_high) voodoo->dirty_line_high = voodoo->line; + /* Draw left overscan. */ + for (x = 0; x < 8; x++) + buffer32->line[voodoo->line + 8][x] = 0x00000000; + if (voodoo->scrfilter && voodoo->scrfilterEnabled) { uint8_t fil[(voodoo->h_disp) * 3]; /* interleaved 24-bit RGB */ @@ -560,6 +564,10 @@ void voodoo_callback(void *p) p[x] = draw_voodoo->video_16to32[src[x]]; } } + + /* Draw right overscan. */ + for (x = 0; x < 8; x++) + buffer32->line[voodoo->line + 8][voodoo->h_disp + x + 8] = 0x00000000; } } }