From ecee86668b57c02d90e8eb931adf671a88115403 Mon Sep 17 00:00:00 2001
From: Miro Kropacek <[EMAIL REDACTED]>
Date: Sun, 10 Sep 2023 19:21:12 +0200
Subject: [PATCH] atari:video:xbios: fix / cleanup SuperVidel resolutions
---
src/video/xbios/SDL_xbios_f30.c | 127 ++++++++++++++------------------
1 file changed, 57 insertions(+), 70 deletions(-)
diff --git a/src/video/xbios/SDL_xbios_f30.c b/src/video/xbios/SDL_xbios_f30.c
index 0c1e1f9b6..d713b7315 100644
--- a/src/video/xbios/SDL_xbios_f30.c
+++ b/src/video/xbios/SDL_xbios_f30.c
@@ -43,13 +43,6 @@
/* Use shadow buffer on Supervidel */
/*#define ENABLE_SV_SHADOWBUF 1*/
-/* Supervidel 1 byte/pixel mode */
-#define BPS8c 0x07
-
-#ifndef C_SupV
-#define C_SupV 0x53757056L
-#endif
-
static const xbiosmode_t rgb_modes[]={
{BPS16|COL80|OVERSCAN|VERTFLAG,768,480,16,0},
{BPS16|COL80|OVERSCAN,768,240,16,0},
@@ -79,42 +72,50 @@ static const xbiosmode_t vga_modes[]={
};
static const xbiosmode_t sv_modes[]={
- {0x487D,2560,1440,32,0}, /* 32-bits */
- {0x467D,1920,1200,32,0},
- {0x447D,1920,1080,32,0},
- {0x463D,1280,1024,32,0},
- {0x443D,1024,768,32,0},
- {0x423D,800,600,32,0},
-
- {0x403D,640,480,32,0},
- {0x413D,640,240,32,0},
- {0x4035,320,480,32,0},
- {0x4135,320,240,32,0},
-
- {0x487C,2560,1440,16,0}, /* 16-bits */
- {0x467C,1920,1200,16,0},
- {0x447C,1920,1080,16,0},
- {0x427C,1680,1050,16,0},
- {0x463C,1280,1024,16,0},
- {0x443C,1024,768,16,0},
- {0x423C,800,600,16,0},
-
- {0x403C,640,480,16,0},
- {0x413C,640,240,16,0},
- {0x4034,320,480,16,0},
- {0x4134,320,240,16,0},
-
- {0x487F,2560,1440,8,0}, /* 8-bits c2p */
- {0x467F,1920,1200,8,0},
- {0x447F,1920,1080,8,0},
- {0x463f,1280,1024,8,0},
- {0x443F,1024,768,8,0},
- {0x423F,800,600,8,0},
-
- {0x403F,640,480,8,0},
- {0x411F,640,240,8,0},
- {0x4017,320,480,8,0},
- {0x4137,320,240,8,0}
+ {SVEXT|SVEXT_BASERES(4)|BPS32|COL80|OVERSCAN,2560,1440,32,0}, /* 32-bits */
+ {SVEXT|SVEXT_BASERES(3)|BPS32|COL80|OVERSCAN,1920,1200,32,0},
+ {SVEXT|SVEXT_BASERES(2)|BPS32|COL80|OVERSCAN,1920,1080,32,0},
+ {SVEXT|SVEXT_BASERES(1)|BPS32|COL80|OVERSCAN,1680,1050,32,0},
+ {SVEXT|SVEXT_BASERES(4)|BPS32|COL80,1600,1200,32,0},
+ {SVEXT|SVEXT_BASERES(3)|BPS32|COL80,1280,1024,32,0},
+ {SVEXT|SVEXT_BASERES(0)|BPS32|COL80|OVERSCAN,1280,720,32,0},
+ {SVEXT|SVEXT_BASERES(2)|BPS32|COL80,1024,768,32,0},
+ {SVEXT|SVEXT_BASERES(1)|BPS32|COL80,800,600,32,0},
+
+ {SVEXT|SVEXT_BASERES(0)|BPS32|COL80,640,480,32,0},
+ {SVEXT|SVEXT_BASERES(0)|BPS32|COL80|VERTFLAG,640,240,32,0},
+ {SVEXT|SVEXT_BASERES(0)|BPS32,320,480,32,0},
+ {SVEXT|SVEXT_BASERES(0)|BPS32|VERTFLAG,320,240,32,0},
+
+ {SVEXT|SVEXT_BASERES(4)|BPS16|COL80|OVERSCAN,2560,1440,16,0}, /* 16-bits */
+ {SVEXT|SVEXT_BASERES(3)|BPS16|COL80|OVERSCAN,1920,1200,16,0},
+ {SVEXT|SVEXT_BASERES(2)|BPS16|COL80|OVERSCAN,1920,1080,16,0},
+ {SVEXT|SVEXT_BASERES(1)|BPS16|COL80|OVERSCAN,1680,1050,16,0},
+ {SVEXT|SVEXT_BASERES(4)|BPS16|COL80,1600,1200,16,0},
+ {SVEXT|SVEXT_BASERES(3)|BPS16|COL80,1280,1024,16,0},
+ {SVEXT|SVEXT_BASERES(0)|BPS16|COL80|OVERSCAN,1280,720,16,0},
+ {SVEXT|SVEXT_BASERES(2)|BPS16|COL80,1024,768,16,0},
+ {SVEXT|SVEXT_BASERES(1)|BPS16|COL80,800,600,16,0},
+
+ {BPS16|COL80,640,480,16,0},
+ {BPS16|COL80|VERTFLAG,640,240,16,0},
+ {BPS16,320,480,16,0},
+ {BPS16|VERTFLAG,320,240,16,0},
+
+ {SVEXT|SVEXT_BASERES(4)|BPS8C|COL80|OVERSCAN,2560,1440,8,0}, /* 8-bits chunky */
+ {SVEXT|SVEXT_BASERES(3)|BPS8C|COL80|OVERSCAN,1920,1200,8,0},
+ {SVEXT|SVEXT_BASERES(2)|BPS8C|COL80|OVERSCAN,1920,1080,8,0},
+ {SVEXT|SVEXT_BASERES(1)|BPS8C|COL80|OVERSCAN,1680,1050,8,0},
+ {SVEXT|SVEXT_BASERES(4)|BPS8C|COL80,1600,1200,8,0},
+ {SVEXT|SVEXT_BASERES(3)|BPS8C|COL80,1280,1024,8,0},
+ {SVEXT|SVEXT_BASERES(0)|BPS8C|COL80|OVERSCAN,1280,720,8,0},
+ {SVEXT|SVEXT_BASERES(2)|BPS8C|COL80,1024,768,8,0},
+ {SVEXT|SVEXT_BASERES(1)|BPS8C|COL80,800,600,8,0},
+
+ {BPS8C|COL80,640,480,8,0},
+ {BPS8C|COL80|VERTFLAG,640,240,8,0},
+ {BPS8C,320,480,8,0},
+ {BPS8C|VERTFLAG,320,240,8,0}
};
static int has_supervidel;
@@ -180,43 +181,29 @@ static void listModes(_THIS, int actually_add)
/* SuperVidel specific modes */
max_modes = sizeof(sv_modes)/sizeof(xbiosmode_t);
f30_modes = sv_modes;
-
- for (i=0; i<max_modes; i++) {
- SDL_memcpy(&modeinfo, &sv_modes[i], sizeof(xbiosmode_t));
- SDL_XBIOS_AddMode(this, actually_add, &modeinfo);
+ } else {
+ /* Standard Videl */
+ switch (VgetMonitor()) {
+ case MONITOR_RGB:
+ case MONITOR_TV:
+ max_modes = sizeof(rgb_modes)/sizeof(xbiosmode_t);
+ f30_modes = rgb_modes;
+ break;
+ case MONITOR_VGA:
+ max_modes = sizeof(vga_modes)/sizeof(xbiosmode_t);
+ f30_modes = vga_modes;
+ break;
}
-
- return;
- }
-
- /* Standard Videl */
- switch (VgetMonitor()) {
- case MONITOR_RGB:
- case MONITOR_TV:
- max_modes = sizeof(rgb_modes)/sizeof(xbiosmode_t);
- f30_modes = rgb_modes;
- break;
- case MONITOR_VGA:
- max_modes = sizeof(vga_modes)/sizeof(xbiosmode_t);
- f30_modes = vga_modes;
- break;
}
for (i=0; i<max_modes; i++) {
SDL_memcpy(&modeinfo, &f30_modes[i], sizeof(xbiosmode_t));
modeinfo.number &= ~(VGA|PAL);
modeinfo.number |= XBIOS_oldvmode & (VGA|PAL);
-
- if (has_supervidel && (modeinfo.depth==8)) {
- modeinfo.number &= ~NUMCOLS;
- modeinfo.number |= BPS8c;
- modeinfo.flags &= ~XBIOSMODE_C2P;
- }
-
SDL_XBIOS_AddMode(this, actually_add, &modeinfo);
}
- if (Getcookie(C_BLOW, &cookie_blow) == C_FOUND) {
+ if (!has_supervidel && Getcookie(C_BLOW, &cookie_blow) == C_FOUND) {
SDL_XBIOS_ListBlowupModes(this, actually_add, (blow_cookie_t *)cookie_blow);
}
}