AtariST: show config in load/save dialog.
This commit is contained in:
86
menu.cpp
86
menu.cpp
@@ -179,9 +179,7 @@ static uint32_t menu_timer = 0;
|
||||
|
||||
extern const char *version;
|
||||
|
||||
const char *config_tos_mem[] = { "512 kB", "1 MB", "2 MB", "4 MB", "8 MB", "14 MB", "--", "--" };
|
||||
const char *config_tos_wrprot[] = { "None", "A:", "B:", "A: and B:" };
|
||||
const char *config_tos_usb[] = { "none", "control", "debug", "serial", "parallel", "midi" };
|
||||
|
||||
const char *config_scanlines_msg[] = { "Off", "HQ2x", "CRT 25%" , "CRT 50%" , "CRT 75%" };
|
||||
const char *config_ar_msg[] = { "4:3", "16:9" };
|
||||
@@ -228,10 +226,6 @@ static const char *info_bottom = "\x85\x81\x81\x81\x81\x81\x81\x81\x81\x81\x81\x
|
||||
static const char* HELPTEXT_SPACER = " ";
|
||||
static char helptext_custom[1024];
|
||||
|
||||
const char* scanlines[] = { "Off","25%","50%","75%" };
|
||||
const char* stereo[] = { "Mono","Stereo" };
|
||||
const char* atari_chipset[] = { "ST","STE","MegaSTE","STEroids" };
|
||||
|
||||
// file selection menu variables
|
||||
static char fs_pFileExt[13] = "xxx";
|
||||
static uint32_t fs_ExtLen = 0;
|
||||
@@ -2906,7 +2900,7 @@ void HandleUI(void)
|
||||
|
||||
OsdWrite(m++);
|
||||
strcpy(s, " Memory: ");
|
||||
strcat(s, config_tos_mem[(tos_system_ctrl() >> 1) & 7]);
|
||||
strcat(s, tos_mem[(tos_system_ctrl() >> 1) & 7]);
|
||||
OsdWrite(m++, s, menusub == 3);
|
||||
|
||||
snprintf(s, 29, " TOS: %s", tos_get_image_name());
|
||||
@@ -2914,7 +2908,7 @@ void HandleUI(void)
|
||||
|
||||
strcpy(s, " Chipset: ");
|
||||
// extract TOS_CONTROL_STE and TOS_CONTROL_MSTE bits
|
||||
strcat(s, atari_chipset[(tos_system_ctrl() >> 23) & 3]);
|
||||
strcat(s, tos_chipset[(tos_system_ctrl() >> 23) & 3]);
|
||||
OsdWrite(m++, s, menusub == 5);
|
||||
|
||||
// Blitter is always present in >= STE
|
||||
@@ -2944,11 +2938,11 @@ void HandleUI(void)
|
||||
OsdWrite(m++, s, menusub == 10);
|
||||
|
||||
strcpy(s, " Scanlines: ");
|
||||
strcat(s, scanlines[(tos_system_ctrl() >> 20) & 3]);
|
||||
strcat(s, tos_scanlines[(tos_system_ctrl() >> 20) & 3]);
|
||||
OsdWrite(m++, s, menusub == 11);
|
||||
|
||||
strcpy(s, " YM-Audio: ");
|
||||
strcat(s, stereo[(tos_system_ctrl() & TOS_CONTROL_STEREO) ? 1 : 0]);
|
||||
strcat(s, tos_stereo[(tos_system_ctrl() & TOS_CONTROL_STEREO) ? 1 : 0]);
|
||||
OsdWrite(m++, s, menusub == 12);
|
||||
|
||||
for (; m < OsdGetSize() - 1; m++) OsdWrite(m);
|
||||
@@ -2962,7 +2956,7 @@ void HandleUI(void)
|
||||
if (menu)
|
||||
{
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 3;
|
||||
menusub = 4;
|
||||
if(need_reset) tos_reset(1);
|
||||
}
|
||||
else if (select)
|
||||
@@ -3058,7 +3052,7 @@ void HandleUI(void)
|
||||
|
||||
case 13:
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 3;
|
||||
menusub = 4;
|
||||
if (need_reset) tos_reset(1);
|
||||
break;
|
||||
}
|
||||
@@ -3087,32 +3081,28 @@ void HandleUI(void)
|
||||
|
||||
case MENU_ST_LOAD_CONFIG1:
|
||||
helptext = helptexts[HELPTEXT_NONE];
|
||||
m = 0;
|
||||
if (parentstate != menustate) // First run?
|
||||
{
|
||||
menumask = 0x21;
|
||||
if (tos_config_exists(1)) menumask |= 0x02;
|
||||
if (tos_config_exists(2)) menumask |= 0x04;
|
||||
if (tos_config_exists(3)) menumask |= 0x08;
|
||||
if (tos_config_exists(4)) menumask |= 0x10;
|
||||
}
|
||||
parentstate = menustate;
|
||||
parentstate = menustate;
|
||||
OsdSetTitle("Load Config", 0);
|
||||
|
||||
if (parentstate != menustate) // First run?
|
||||
{
|
||||
parentstate = menustate;
|
||||
menumask = 0x201;
|
||||
for (uint32_t i = 1; i < 9; i++) if (tos_config_exists(i)) menumask |= 1<<i;
|
||||
}
|
||||
|
||||
m = 0;
|
||||
OsdWrite(m++);
|
||||
OsdWrite(m++);
|
||||
OsdWrite(m++);
|
||||
OsdWrite(m++);
|
||||
OsdWrite(m++, " Default", menusub == 0);
|
||||
OsdWrite(m++);
|
||||
OsdWrite(m++, " 1", menusub == 1, !(menumask & 0x02));
|
||||
OsdWrite(m++, " 2", menusub == 2, !(menumask & 0x04));
|
||||
OsdWrite(m++, " 3", menusub == 3, !(menumask & 0x08));
|
||||
OsdWrite(m++, " 4", menusub == 4, !(menumask & 0x10));
|
||||
for (uint32_t i = 0; i < 9; i++)
|
||||
{
|
||||
snprintf(s, 29, " %s", tos_get_cfg_string(i));
|
||||
OsdWrite(m++, s, menusub == i, !(menumask & (1<<i)));
|
||||
if(!i) OsdWrite(m++);
|
||||
}
|
||||
|
||||
for (; m < OsdGetSize() - 1; m++) OsdWrite(m);
|
||||
OsdWrite(15, STD_EXIT, menusub == 5, 0);
|
||||
OsdWrite(15, STD_EXIT, menusub == 9, 0);
|
||||
|
||||
menustate = MENU_ST_LOAD_CONFIG2;
|
||||
break;
|
||||
@@ -3121,12 +3111,12 @@ void HandleUI(void)
|
||||
if (menu)
|
||||
{
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 4;
|
||||
menusub = 5;
|
||||
}
|
||||
|
||||
if (select)
|
||||
{
|
||||
if (menusub < 5)
|
||||
if (menusub < 9)
|
||||
{
|
||||
tos_config_load(menusub);
|
||||
tos_upload(NULL);
|
||||
@@ -3135,31 +3125,31 @@ void HandleUI(void)
|
||||
else
|
||||
{
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 4;
|
||||
menusub = 5;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MENU_ST_SAVE_CONFIG1:
|
||||
helptext = helptexts[HELPTEXT_NONE];
|
||||
menumask = 0x3f;
|
||||
m = 0;
|
||||
parentstate = menustate;
|
||||
OsdSetTitle("Save Config", 0);
|
||||
|
||||
parentstate = menustate;
|
||||
menumask = 0x3FF;
|
||||
|
||||
m = 0;
|
||||
OsdWrite(m++);
|
||||
OsdWrite(m++);
|
||||
OsdWrite(m++);
|
||||
OsdWrite(m++);
|
||||
OsdWrite(m++, " Default", menusub == 0, 0);
|
||||
OsdWrite(m++);
|
||||
OsdWrite(m++, " 1", menusub == 1, 0);
|
||||
OsdWrite(m++, " 2", menusub == 2, 0);
|
||||
OsdWrite(m++, " 3", menusub == 3, 0);
|
||||
OsdWrite(m++, " 4", menusub == 4, 0);
|
||||
for (uint32_t i = 0; i < 9; i++)
|
||||
{
|
||||
snprintf(s, 29, " %s", tos_get_cfg_string(i));
|
||||
OsdWrite(m++, s, menusub == i, !(menumask & (1 << i)));
|
||||
if (!i) OsdWrite(m++);
|
||||
}
|
||||
|
||||
for (; m < OsdGetSize() - 1; m++) OsdWrite(m);
|
||||
OsdWrite(15, STD_EXIT, menusub == 5, 0);
|
||||
OsdWrite(15, STD_EXIT, menusub == 9, 0);
|
||||
|
||||
menustate = MENU_ST_SAVE_CONFIG2;
|
||||
break;
|
||||
@@ -3168,12 +3158,12 @@ void HandleUI(void)
|
||||
if (menu)
|
||||
{
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 5;
|
||||
menusub = 6;
|
||||
}
|
||||
|
||||
if (select)
|
||||
{
|
||||
if (menusub < 5)
|
||||
if (menusub < 9)
|
||||
{
|
||||
tos_config_save(menusub);
|
||||
menustate = MENU_NONE1;
|
||||
@@ -3181,7 +3171,7 @@ void HandleUI(void)
|
||||
else
|
||||
{
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 5;
|
||||
menusub = 6;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -12,6 +12,12 @@
|
||||
|
||||
#define CONFIG_FILENAME "ATARIST0.CFG"
|
||||
|
||||
const char* tos_mem[] = { "512kb", "1mb", "2mb", "4mb", "8mb", "14mb", "--", "--" };
|
||||
const char* tos_scanlines[] = { "Off","25%","50%","75%" };
|
||||
const char* tos_stereo[] = { "Mono","Stereo" };
|
||||
const char* tos_chipset[] = { "ST","STE","MegaSTE","STEroids" };
|
||||
const char* tos_chipset_short[] = { "ST","STe","MST","ST+" };
|
||||
|
||||
typedef struct {
|
||||
unsigned long system_ctrl; // system control word
|
||||
char tos_img[1024];
|
||||
@@ -62,6 +68,11 @@ void tos_update_sysctrl(uint32_t ctrl)
|
||||
set_control(config.system_ctrl);
|
||||
}
|
||||
|
||||
unsigned long tos_system_ctrl()
|
||||
{
|
||||
return config.system_ctrl;
|
||||
}
|
||||
|
||||
static void memory_read(uint8_t *data, uint32_t words)
|
||||
{
|
||||
EnableIO();
|
||||
@@ -93,7 +104,7 @@ static void dma_ack(uint8_t status)
|
||||
DisableIO();
|
||||
}
|
||||
|
||||
static void dma_nak(void)
|
||||
static void dma_nak()
|
||||
{
|
||||
EnableIO();
|
||||
spi8(ST_NAK_DMA);
|
||||
@@ -491,11 +502,6 @@ void tos_eject_all()
|
||||
for (int i = 0; i < 4; i++) tos_insert_disk(i, "");
|
||||
}
|
||||
|
||||
unsigned long tos_system_ctrl(void)
|
||||
{
|
||||
return config.system_ctrl;
|
||||
}
|
||||
|
||||
void tos_reset(char cold)
|
||||
{
|
||||
tos_update_sysctrl(config.system_ctrl | TOS_CONTROL_CPU_RESET); // set reset
|
||||
@@ -587,3 +593,49 @@ int tos_config_exists(int slot)
|
||||
name[7] = '0' + slot;
|
||||
return FileLoadConfig(name, 0, 0);
|
||||
}
|
||||
|
||||
const char* tos_get_cfg_string(int num)
|
||||
{
|
||||
static char str[256];
|
||||
|
||||
char name[64] = { CONFIG_FILENAME };
|
||||
name[7] = '0' + num;
|
||||
|
||||
static tos_config_t tmp;
|
||||
memset(&tmp, 0, sizeof(tmp));
|
||||
|
||||
int len = FileLoadConfig(name, 0, 0);
|
||||
if (len == sizeof(tos_config_t))
|
||||
{
|
||||
FileLoadConfig(name, &tmp, sizeof(tos_config_t));
|
||||
|
||||
memset(str, 0, sizeof(str));
|
||||
strcat(str, tos_mem[(tmp.system_ctrl >> 1) & 7]);
|
||||
strcat(str, " ");
|
||||
if (tmp.acsi_img[0][0]) strcat(str, "H0 ");
|
||||
if (tmp.acsi_img[1][0]) strcat(str, "H1 ");
|
||||
if (tmp.cart_img[0]) strcat(str, "CR ");
|
||||
strcat(str, tos_chipset_short[(tmp.system_ctrl >> 23) & 3]);
|
||||
strcat(str, " ");
|
||||
if (!((tmp.system_ctrl >> 23) & 3) && (tmp.system_ctrl & TOS_CONTROL_BLITTER)) strcat(str, "B ");
|
||||
if (tmp.system_ctrl & TOS_CONTROL_VIKING) strcat(str, "V ");
|
||||
if (tmp.system_ctrl & TOS_CONTROL_VIDEO_AR) strcat(str, "W ");
|
||||
strcat(str, (tmp.system_ctrl & TOS_CONTROL_VIDEO_COLOR) ? "C " : "M ");
|
||||
if (!(tmp.system_ctrl & TOS_CONTROL_BORDER)) strcat(str, "F ");
|
||||
int sl = (tmp.system_ctrl >> 20) & 3;
|
||||
if (sl) sprintf(str + strlen(str), "S%d ", sl);
|
||||
strcat(str, (tmp.system_ctrl & TOS_CONTROL_STEREO) ? "AS " : "AM ");
|
||||
|
||||
if (tmp.tos_img[0])
|
||||
{
|
||||
char *p = strrchr(tmp.tos_img, '/');
|
||||
if (!p) p = tmp.tos_img; else p++;
|
||||
int len = strlen(p);
|
||||
if (len >= 4) len -= 4;
|
||||
memcpy(str + strlen(str), p, len);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
return "< empty slot >";
|
||||
}
|
||||
|
||||
@@ -67,8 +67,14 @@
|
||||
|
||||
#define TOS_CONTROL_BORDER 0x20000000
|
||||
|
||||
unsigned long tos_system_ctrl(void);
|
||||
extern const char* tos_mem[];
|
||||
extern const char* tos_scanlines[];
|
||||
extern const char* tos_stereo[];
|
||||
extern const char* tos_chipset[];
|
||||
|
||||
const char* tos_get_cfg_string(int num);
|
||||
|
||||
unsigned long tos_system_ctrl();
|
||||
void tos_upload(const char *);
|
||||
void tos_poll();
|
||||
void tos_update_sysctrl(uint32_t ctrl);
|
||||
|
||||
Reference in New Issue
Block a user