From 45df94c95483c8b3051929f3403e13e0f7b541b1 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Thu, 4 Jan 2024 00:22:47 +0100 Subject: [PATCH 1/2] S3 mode fixes (1): 1. Fixed the Elsa Winner 2000 Pro-X/8 (964 and 968) 15/16/32bpp modes at 1280x1024+. --- src/video/vid_s3.c | 78 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 3 deletions(-) diff --git a/src/video/vid_s3.c b/src/video/vid_s3.c index 97a02b341..18c4f587a 100644 --- a/src/video/vid_s3.c +++ b/src/video/vid_s3.c @@ -3233,7 +3233,7 @@ s3_recalctimings(svga_t *svga) #endif if ((svga->gdcreg[5] & 0x40) && (svga->crtc[0x3a] & 0x10)) { - //pclog("BPP=%d, pitch=%d, width=%02x, double?=%x, 16bit?=%d, highres?=%d, attr=%02x.\n", svga->bpp, s3->width, svga->crtc[0x50], svga->crtc[0x31] & 0x02, s3->color_16bit, s3->accel.advfunc_cntl & 4, svga->attrregs[0x10] & 0x40); + pclog("BPP=%d, pitch=%d, width=%02x, double?=%x, 16bit?=%d, highres?=%d, attr=%02x.\n", svga->bpp, s3->width, svga->crtc[0x50], svga->crtc[0x31] & 0x02, s3->color_16bit, s3->accel.advfunc_cntl & 4, svga->attrregs[0x10] & 0x40); switch (svga->bpp) { case 8: svga->render = svga_render_8bpp_highres; @@ -3433,6 +3433,23 @@ s3_recalctimings(svga_t *svga) break; } break; + case S3_VISION964: + switch (s3->card_type) { + case S3_ELSAWIN2KPROX_964: + switch (s3->width) { + case 1280: + case 1600: + svga->hdisp <<= 1; + break; + default: + break; + } + break; + + default: + break; + } + break; case S3_VISION868: switch (s3->card_type) { case S3_PHOENIX_VISION868: @@ -3452,7 +3469,16 @@ s3_recalctimings(svga_t *svga) if (svga->hdisp == 832) svga->hdisp -= 32; break; - + case S3_ELSAWIN2KPROX: + switch (s3->width) { + case 1280: + case 1600: + svga->hdisp <<= 1; + break; + default: + break; + } + break; default: break; } @@ -3585,6 +3611,23 @@ s3_recalctimings(svga_t *svga) break; } break; + case S3_VISION964: + switch (s3->card_type) { + case S3_ELSAWIN2KPROX_964: + switch (s3->width) { + case 1280: + case 1600: + svga->hdisp <<= 1; + break; + default: + break; + } + break; + + default: + break; + } + break; case S3_VISION968: switch (s3->card_type) { case S3_NUMBER9_9FX_771: @@ -3593,7 +3636,16 @@ s3_recalctimings(svga_t *svga) if (svga->hdisp == 832) svga->hdisp -= 32; break; - + case S3_ELSAWIN2KPROX: + switch (s3->width) { + case 1280: + case 1600: + svga->hdisp <<= 1; + break; + default: + break; + } + break; default: break; } @@ -3760,6 +3812,16 @@ s3_recalctimings(svga_t *svga) break; } break; + case S3_ELSAWIN2KPROX_964: + switch (s3->width) { + case 1280: + case 1600: + svga->hdisp <<= 1; + break; + default: + break; + } + break; default: break; } @@ -3772,6 +3834,16 @@ s3_recalctimings(svga_t *svga) if (svga->hdisp == 832) svga->hdisp -= 32; break; + case S3_ELSAWIN2KPROX_964: + switch (s3->width) { + case 1280: + case 1600: + svga->hdisp <<= 1; + break; + default: + break; + } + break; default: break; } From 4317155167dcd225f32793c293fa713c44a6c9d9 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Thu, 4 Jan 2024 00:27:50 +0100 Subject: [PATCH 2/2] S3 mode fixes (1.5): 1. Actually fix the one in 32bpp mode (968 only). --- src/video/vid_s3.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/video/vid_s3.c b/src/video/vid_s3.c index 18c4f587a..ff28ffbfa 100644 --- a/src/video/vid_s3.c +++ b/src/video/vid_s3.c @@ -3834,7 +3834,7 @@ s3_recalctimings(svga_t *svga) if (svga->hdisp == 832) svga->hdisp -= 32; break; - case S3_ELSAWIN2KPROX_964: + case S3_ELSAWIN2KPROX: switch (s3->width) { case 1280: case 1600: