AtariST: fix memory fill, add aspect ratio option.

This commit is contained in:
sorgelig
2020-04-20 19:48:20 +08:00
parent 8600659c39
commit e9eebbe260
3 changed files with 99 additions and 145 deletions

View File

@@ -2886,7 +2886,7 @@ void HandleUI(void)
break;
case MENU_ST_SYSTEM1:
menumask = 0x1fff;
menumask = 0x3fff;
OsdSetTitle("Config", 0);
m = 0;
@@ -2907,16 +2907,16 @@ void HandleUI(void)
snprintf(s, 29, " TOS: %s", tos_get_image_name());
OsdWrite(m++, s, menusub == 4);
strcpy(s, " Chipset: ");
// extract TOS_CONTROL_STE and TOS_CONTROL_MSTE bits
strcat(s, atari_chipset[(tos_system_ctrl() >> 23) & 3]);
OsdWrite(m++, s, menusub == 5);
// Blitter is always present in >= STE
enable = (tos_system_ctrl() & (TOS_CONTROL_STE | TOS_CONTROL_MSTE)) ? 1 : 0;
strcpy(s, " Blitter: ");
strcat(s, ((tos_system_ctrl() & TOS_CONTROL_BLITTER) || enable) ? "On" : "Off");
OsdWrite(m++, s, menusub == 5, enable);
strcpy(s, " Chipset: ");
// extract TOS_CONTROL_STE and TOS_CONTROL_MSTE bits
strcat(s, atari_chipset[(tos_system_ctrl() >> 23) & 3]);
OsdWrite(m++, s, menusub == 6, 0);
OsdWrite(m++, s, menusub == 6, enable);
// Viking card can only be enabled with max 8MB RAM
enable = (tos_system_ctrl() & 0xe) <= TOS_MEMCONFIG_8M;
@@ -2924,33 +2924,30 @@ void HandleUI(void)
strcat(s, ((tos_system_ctrl() & TOS_CONTROL_VIKING) && enable) ? "On" : "Off");
OsdWrite(m++, s, menusub == 7, enable ? 0 : 1);
/*
strcpy(s, " CDC I/O: ");
strcat(s, config_tos_usb[tos_get_cdc_control_redirect()]);
OsdWrite(m++, s, menusub == 3, 0);
*/
strcpy(s, " Aspect: ");
strcat(s, (tos_system_ctrl() & TOS_CONTROL_VIDEO_AR) ? "16:9" : "4:3");
OsdWrite(m++, s, menusub == 8);
OsdWrite(m++);
strcpy(s, " Screen: ");
if (tos_system_ctrl() & TOS_CONTROL_VIDEO_COLOR) strcat(s, "Color");
else strcat(s, "Mono");
OsdWrite(m++, s, menusub == 8, 0);
OsdWrite(m++, s, menusub == 9);
strcpy(s, " Border: ");
if (tos_system_ctrl() & TOS_CONTROL_BORDER) strcat(s, "Visible");
else strcat(s, "Full");
OsdWrite(m++, s, menusub == 9, 0);
OsdWrite(m++, s, menusub == 10);
strcpy(s, " Scanlines: ");
strcat(s, scanlines[(tos_system_ctrl() >> 20) & 3]);
OsdWrite(m++, s, menusub == 10, 0);
OsdWrite(m++, s, menusub == 11);
strcpy(s, " YM-Audio: ");
strcat(s, stereo[(tos_system_ctrl() & TOS_CONTROL_STEREO) ? 1 : 0]);
OsdWrite(m++, s, menusub == 11, 0);
OsdWrite(m++, s, menusub == 12);
for (; m < OsdGetSize() - 1; m++) OsdWrite(m);
OsdWrite(15, STD_EXIT, menusub == 12, 0);
OsdWrite(15, STD_EXIT, menusub == 13);
parentstate = menustate;
menustate = MENU_ST_SYSTEM2;
@@ -2963,8 +2960,7 @@ void HandleUI(void)
menusub = 3;
if(need_reset) tos_reset(1);
}
if (select)
else if (select)
{
switch (menusub)
{
@@ -2991,7 +2987,7 @@ void HandleUI(void)
// RAM
int mem = (tos_system_ctrl() >> 1) & 7; // current memory config
mem++;
if (mem > 5) mem = 0; // cycle 4MB/8MB/14MB
if (mem > 5) mem = 0;
tos_update_sysctrl((tos_system_ctrl() & ~0x0e) | (mem << 1));
need_reset = 1;
menustate = MENU_ST_SYSTEM1;
@@ -3002,33 +2998,19 @@ void HandleUI(void)
SelectFile("IMG", SCANO_DIR, MENU_ST_SYSTEM_FILE_SELECTED, MENU_ST_SYSTEM1);
break;
/*
case 3:
if (tos_get_cdc_control_redirect() == CDC_REDIRECT_MIDI)
{
tos_set_cdc_control_redirect(CDC_REDIRECT_NONE);
}
else
{
tos_set_cdc_control_redirect(tos_get_cdc_control_redirect() + 1);
}
menustate = MENU_ST_SYSTEM1;
break;
*/
case 5:
if (!(tos_system_ctrl() & TOS_CONTROL_STE))
{
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_BLITTER);
unsigned long chipset = (tos_system_ctrl() >> 23) + 1;
if (chipset == 4) chipset = 0;
tos_update_sysctrl((tos_system_ctrl() & ~(TOS_CONTROL_STE | TOS_CONTROL_MSTE)) | (chipset << 23));
menustate = MENU_ST_SYSTEM1;
}
break;
case 6:
if (!(tos_system_ctrl() & TOS_CONTROL_STE))
{
unsigned long chipset = (tos_system_ctrl() >> 23) + 1;
if (chipset == 4) chipset = 0;
tos_update_sysctrl((tos_system_ctrl() & ~(TOS_CONTROL_STE | TOS_CONTROL_MSTE)) | (chipset << 23));
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_BLITTER);
menustate = MENU_ST_SYSTEM1;
}
break;
@@ -3040,16 +3022,21 @@ void HandleUI(void)
break;
case 8:
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_VIDEO_COLOR);
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_VIDEO_AR);
menustate = MENU_ST_SYSTEM1;
break;
case 9:
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_BORDER);
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_VIDEO_COLOR);
menustate = MENU_ST_SYSTEM1;
break;
case 10:
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_BORDER);
menustate = MENU_ST_SYSTEM1;
break;
case 11:
{
// next scanline state
int scan = ((tos_system_ctrl() >> 20) + 1) & 3;
@@ -3058,13 +3045,13 @@ void HandleUI(void)
}
break;
case 11:
case 12:
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_STEREO);
menustate = MENU_ST_SYSTEM1;
break;
case 12:
case 13:
menustate = MENU_ST_MAIN1;
menusub = 3;
if (need_reset) tos_reset(1);