Tweaks in ST and Minimig menus.

This commit is contained in:
sorgelig
2021-03-29 02:07:34 +08:00
parent ca84e3fba3
commit 9b18257b8e

578
menu.cpp
View File

@@ -416,6 +416,7 @@ void substrcpy(char *d, char *s, char idx)
}
#define STD_EXIT " exit"
#define STD_BACK " back"
#define STD_SPACE_EXIT " SPACE to exit"
#define STD_COMBO_EXIT " Ctrl+ESC to exit"
@@ -1819,7 +1820,7 @@ void HandleUI(void)
}
else
{
MenuWrite(entry, " back", menusub == selentry, 0, 0);
MenuWrite(entry, STD_BACK, menusub == selentry, 0, 0);
}
menusub_last = selentry;
menumask = (menumask << 1) | 1;
@@ -3745,7 +3746,7 @@ void HandleUI(void)
break;
case MENU_ST_SYSTEM1:
menumask = 0x7fff;
menumask = 0xffff;
OsdSetTitle("Config", 0);
helptext_idx = 0;
m = 0;
@@ -3815,7 +3816,7 @@ void HandleUI(void)
OsdWrite(m++, s, menusub == 14);
for (; m < OsdGetSize() - 1; m++) OsdWrite(m);
OsdWrite(15, STD_EXIT, menusub == 15);
OsdWrite(15, STD_BACK, menusub == 15);
parentstate = menustate;
menustate = MENU_ST_SYSTEM2;
@@ -4039,7 +4040,7 @@ void HandleUI(void)
}
for (; m < OsdGetSize() - 1; m++) OsdWrite(m);
OsdWrite(15, STD_EXIT, menusub == 9, 0);
OsdWrite(15, STD_BACK, menusub == 9, 0);
menustate = MENU_ST_LOAD_CONFIG2;
break;
@@ -4089,7 +4090,7 @@ void HandleUI(void)
}
for (; m < OsdGetSize() - 1; m++) OsdWrite(m);
OsdWrite(15, STD_EXIT, menusub == 9, 0);
OsdWrite(15, STD_BACK, menusub == 9, 0);
menustate = MENU_ST_SAVE_CONFIG2;
break;
@@ -4220,7 +4221,7 @@ void HandleUI(void)
OsdWrite(m++, " Reset Hanging Notes", menusub == 5);
while (m < 15) OsdWrite(m++);
OsdWrite(15, STD_EXIT, menusub == 6, 0);
OsdWrite(15, STD_BACK, menusub == 6, 0);
menustate = MENU_MT32PI_MAIN2;
}
@@ -4228,7 +4229,7 @@ void HandleUI(void)
case MENU_MT32PI_MAIN2:
if (menu || back || left)
if (menu || back || left || (select && menusub == 6))
{
if (is_minimig())
{
@@ -4296,10 +4297,6 @@ void HandleUI(void)
menustate = MENU_MT32PI_MAIN1;
}
break;
case 6:
if (select) menustate = MENU_NONE1;
break;
}
if (is_minimig()) minimig_set_extcfg(mt32_cfg);
@@ -4311,277 +4308,6 @@ void HandleUI(void)
}
break;
/******************************************************************/
/* minimig main menu */
/******************************************************************/
case MENU_MINIMIG_MAIN1:
menumask = 0x3DF0; // b01110000 Floppy turbo, Harddisk options & Exit.
OsdSetTitle("Minimig", OSD_ARROW_RIGHT | OSD_ARROW_LEFT);
helptext_idx = HELPTEXT_MAIN;
// floppy drive info
// We display a line for each drive that's active
// in the config file, but grey out any that the FPGA doesn't think are active.
// We also print a help text in place of the last drive if it's inactive.
for (int i = 0; i < 4; i++)
{
if (i == minimig_config.floppy.drives + 1) OsdWrite(i, " KP +/- to add/remove drives", 0, 1);
else
{
strcpy(s, " dfx: ");
s[3] = i + '0';
if (i <= drives)
{
menumask |= (1 << i); // Make enabled drives selectable
if (df[i].status & DSK_INSERTED) // floppy disk is inserted
{
char *p;
if ((p = strrchr(df[i].name, '/')))
{
p++;
}
else
{
p = df[i].name;
}
int len = strlen(p);
if (len > 22) len = 21;
strncpy(&s[6], p, len);
s[6 + len] = ' ';
s[6 + len + 1] = 0;
s[6 + len + 2] = 0;
if (!(df[i].status & DSK_WRITABLE)) s[6 + len + 1] = '\x17'; // padlock icon for write-protected disks
}
else // no floppy disk
{
strcat(s, "* no disk *");
}
}
else if (i <= minimig_config.floppy.drives)
{
strcat(s, "* active after reset *");
}
else
strcpy(s, "");
OsdWrite(i, s, menusub == (uint32_t)i, (i>drives) || (i>minimig_config.floppy.drives));
}
}
m = 4;
sprintf(s, " Floppy disk turbo : %s", minimig_config.floppy.speed ? "on" : "off");
OsdWrite(m++, s, menusub == 4, 0);
OsdWrite(m++);
OsdWrite(m++, " Hard disks \x16", menusub == 5, 0);
OsdWrite(m++, " CPU & Chipset \x16", menusub == 6, 0);
OsdWrite(m++, " Memory \x16", menusub == 7, 0);
OsdWrite(m++, " Audio & Video \x16", menusub == 8, 0);
//if (spi_uio_cmd16(UIO_GET_OSDMASK, 0) & 1)
{
menumask |= 0x200;
OsdWrite(m++, " MT32-pi \x16", menusub == 9);
}
OsdWrite(m++);
OsdWrite(m++, " Save configuration \x16", menusub == 10, 0);
OsdWrite(m++, " Load configuration \x16", menusub == 11, 0);
while (m < 14) OsdWrite(m++);
OsdWrite(m++, " Reset", menusub == 12, 0);
OsdWrite(15, STD_EXIT, menusub == 13, 0);
menustate = MENU_MINIMIG_MAIN2;
parentstate = MENU_MINIMIG_MAIN1;
break;
case MENU_MINIMIG_MAIN2:
if (menu) menustate = MENU_NONE1;
else if (plus && (minimig_config.floppy.drives<3) && menusub < 4)
{
minimig_config.floppy.drives++;
minimig_ConfigFloppy(minimig_config.floppy.drives, minimig_config.floppy.speed);
menustate = MENU_MINIMIG_MAIN1;
}
else if (minus && (minimig_config.floppy.drives>0) && menusub < 4)
{
minimig_config.floppy.drives--;
minimig_ConfigFloppy(minimig_config.floppy.drives, minimig_config.floppy.speed);
menustate = MENU_MINIMIG_MAIN1;
}
else if (select || recent || minus || plus)
{
if (menusub < 4)
{
ioctl_index = 0;
if (df[menusub].status & DSK_INSERTED) // eject selected floppy
{
df[menusub].status = 0;
FileClose(&df[menusub].file);
menustate = MENU_MINIMIG_MAIN1;
}
else
{
df[menusub].status = 0;
fs_Options = SCANO_DIR;
fs_MenuSelect = MENU_MINIMIG_ADFFILE_SELECTED;
fs_MenuCancel = MENU_MINIMIG_MAIN1;
strcpy(fs_pFileExt, "ADF");
if(select) SelectFile(Selected_F[menusub], "ADF", fs_Options, fs_MenuSelect, fs_MenuCancel);
else if (recent_init(0)) menustate = MENU_RECENT1;
}
}
else if (menusub == 4 && !recent) // Toggle floppy turbo
{
minimig_config.floppy.speed ^= 1;
minimig_ConfigFloppy(minimig_config.floppy.drives, minimig_config.floppy.speed);
menustate = MENU_MINIMIG_MAIN1;
}
else if (select)
{
if (menusub == 5) // Go to harddrives page.
{
menustate = MENU_MINIMIG_HARDFILE1;
menusub = 0;
}
else if (menusub == 6)
{
menustate = MENU_MINIMIG_CHIPSET1;
menusub = 0;
}
else if (menusub == 7)
{
menustate = MENU_MINIMIG_MEMORY1;
menusub = 0;
}
else if (menusub == 8)
{
menustate = MENU_MINIMIG_VIDEO1;
menusub = 0;
}
else if (menusub == 9)
{
menusub = 0;
menustate = MENU_MT32PI_MAIN1;
}
else if (menusub == 10)
{
menusub = 0;
menustate = MENU_MINIMIG_SAVECONFIG1;
}
else if (menusub == 11)
{
menusub = 0;
menustate = MENU_MINIMIG_LOADCONFIG1;
}
else if (menusub == 12)
{
menustate = MENU_NONE1;
minimig_reset();
}
else if (menusub == 13)
{
menustate = MENU_NONE1;
}
}
}
else if (c == KEY_BACKSPACE) // eject all floppies
{
for (int i = 0; i <= drives; i++) df[i].status = 0;
menustate = MENU_MINIMIG_MAIN1;
}
else if (right)
{
menustate = MENU_COMMON1;
menusub = 0;
}
else if (left)
{
menustate = MENU_MISC1;
menusub = 3;
}
break;
case MENU_MINIMIG_ADFFILE_SELECTED:
memcpy(Selected_F[menusub], selPath, sizeof(Selected_F[menusub]));
recent_update(SelectedDir, selPath, SelectedLabel, 0);
InsertFloppy(&df[menusub], selPath);
if (menusub < drives) menusub++;
menustate = MENU_MINIMIG_MAIN1;
break;
case MENU_MINIMIG_LOADCONFIG1:
helptext_idx = 0;
if (parentstate != menustate) menumask = 0x400;
parentstate = menustate;
OsdSetTitle("Load config", 0);
m = 0;
OsdWrite(m++, "", 0, 0);
OsdWrite(m++, " Startup config:");
for (uint i = 0; i < 10; i++)
{
const char *info = minimig_get_cfg_info(i, menusub != i);
static char name[128];
if (info)
{
menumask |= 1 << i;
sprintf(name, " %s", strlen(info) ? info : "NO INFO");
char *p = strchr(name, '\n');
if (p) *p = 0;
OsdWrite(m++, name, menusub == i);
if (menusub == i && p)
{
sprintf(name, " %s", strchr(info, '\n') + 1);
OsdWrite(m++, name, 1, !(menumask & (1 << i)));
}
}
if (!i)
{
OsdWrite(m++, "", 0, 0);
m = 4;
OsdWrite(m++, " Other configs:");
}
}
while(m < OsdGetSize() - 1) OsdWrite(m++);
OsdWrite(OsdGetSize() - 1, STD_EXIT, menusub == 10, 0);
menustate = MENU_MINIMIG_LOADCONFIG2;
break;
case MENU_MINIMIG_LOADCONFIG2:
if (down)
{
if (menusub < 9) menusub++;
menustate = MENU_MINIMIG_LOADCONFIG1;
}
else if (select)
{
if (menusub<10)
{
OsdDisable();
minimig_cfg_load(menusub);
menustate = MENU_NONE1;
}
else
{
menustate = MENU_MINIMIG_MAIN1;
menusub = 11;
}
}
if (menu || left) // exit menu
{
menustate = MENU_MINIMIG_MAIN1;
menusub = 11;
}
break;
/******************************************************************/
/* file selection menu */
/******************************************************************/
@@ -4981,6 +4707,276 @@ void HandleUI(void)
}
break;
/******************************************************************/
/* minimig main menu */
/******************************************************************/
case MENU_MINIMIG_MAIN1:
menumask = 0x3DF0; // b01110000 Floppy turbo, Harddisk options & Exit.
OsdSetTitle("Minimig", OSD_ARROW_RIGHT | OSD_ARROW_LEFT);
helptext_idx = HELPTEXT_MAIN;
// floppy drive info
// We display a line for each drive that's active
// in the config file, but grey out any that the FPGA doesn't think are active.
// We also print a help text in place of the last drive if it's inactive.
for (int i = 0; i < 4; i++)
{
if (i == minimig_config.floppy.drives + 1) OsdWrite(i, " KP +/- to add/remove drives", 0, 1);
else
{
strcpy(s, " dfx: ");
s[3] = i + '0';
if (i <= drives)
{
menumask |= (1 << i); // Make enabled drives selectable
if (df[i].status & DSK_INSERTED) // floppy disk is inserted
{
char *p;
if ((p = strrchr(df[i].name, '/')))
{
p++;
}
else
{
p = df[i].name;
}
int len = strlen(p);
if (len > 22) len = 21;
strncpy(&s[6], p, len);
s[6 + len] = ' ';
s[6 + len + 1] = 0;
s[6 + len + 2] = 0;
if (!(df[i].status & DSK_WRITABLE)) s[6 + len + 1] = '\x17'; // padlock icon for write-protected disks
}
else // no floppy disk
{
strcat(s, "* no disk *");
}
}
else if (i <= minimig_config.floppy.drives)
{
strcat(s, "* active after reset *");
}
else
strcpy(s, "");
OsdWrite(i, s, menusub == (uint32_t)i, (i > drives) || (i > minimig_config.floppy.drives));
}
}
m = 4;
sprintf(s, " Floppy disk turbo : %s", minimig_config.floppy.speed ? "on" : "off");
OsdWrite(m++, s, menusub == 4, 0);
OsdWrite(m++);
OsdWrite(m++, " Hard disks \x16", menusub == 5, 0);
OsdWrite(m++, " CPU & Chipset \x16", menusub == 6, 0);
OsdWrite(m++, " Memory \x16", menusub == 7, 0);
OsdWrite(m++, " Audio & Video \x16", menusub == 8, 0);
//if (spi_uio_cmd16(UIO_GET_OSDMASK, 0) & 1)
{
menumask |= 0x200;
OsdWrite(m++, " MT32-pi \x16", menusub == 9);
}
OsdWrite(m++);
OsdWrite(m++, " Save configuration \x16", menusub == 10, 0);
OsdWrite(m++, " Load configuration \x16", menusub == 11, 0);
while (m < 14) OsdWrite(m++);
OsdWrite(m++, " Reset", menusub == 12, 0);
OsdWrite(15, STD_EXIT, menusub == 13, 0);
menustate = MENU_MINIMIG_MAIN2;
parentstate = MENU_MINIMIG_MAIN1;
break;
case MENU_MINIMIG_MAIN2:
if (menu) menustate = MENU_NONE1;
else if (plus && (minimig_config.floppy.drives < 3) && menusub < 4)
{
minimig_config.floppy.drives++;
minimig_ConfigFloppy(minimig_config.floppy.drives, minimig_config.floppy.speed);
menustate = MENU_MINIMIG_MAIN1;
}
else if (minus && (minimig_config.floppy.drives > 0) && menusub < 4)
{
minimig_config.floppy.drives--;
minimig_ConfigFloppy(minimig_config.floppy.drives, minimig_config.floppy.speed);
menustate = MENU_MINIMIG_MAIN1;
}
else if (select || recent || minus || plus)
{
if (menusub < 4)
{
ioctl_index = 0;
if (df[menusub].status & DSK_INSERTED) // eject selected floppy
{
df[menusub].status = 0;
FileClose(&df[menusub].file);
menustate = MENU_MINIMIG_MAIN1;
}
else
{
df[menusub].status = 0;
fs_Options = SCANO_DIR;
fs_MenuSelect = MENU_MINIMIG_ADFFILE_SELECTED;
fs_MenuCancel = MENU_MINIMIG_MAIN1;
strcpy(fs_pFileExt, "ADF");
if (select) SelectFile(Selected_F[menusub], "ADF", fs_Options, fs_MenuSelect, fs_MenuCancel);
else if (recent_init(0)) menustate = MENU_RECENT1;
}
}
else if (menusub == 4 && !recent) // Toggle floppy turbo
{
minimig_config.floppy.speed ^= 1;
minimig_ConfigFloppy(minimig_config.floppy.drives, minimig_config.floppy.speed);
menustate = MENU_MINIMIG_MAIN1;
}
else if (select)
{
if (menusub == 5) // Go to harddrives page.
{
menustate = MENU_MINIMIG_HARDFILE1;
menusub = 0;
}
else if (menusub == 6)
{
menustate = MENU_MINIMIG_CHIPSET1;
menusub = 0;
}
else if (menusub == 7)
{
menustate = MENU_MINIMIG_MEMORY1;
menusub = 0;
}
else if (menusub == 8)
{
menustate = MENU_MINIMIG_VIDEO1;
menusub = 0;
}
else if (menusub == 9)
{
menusub = 0;
menustate = MENU_MT32PI_MAIN1;
}
else if (menusub == 10)
{
menusub = 0;
menustate = MENU_MINIMIG_SAVECONFIG1;
}
else if (menusub == 11)
{
menusub = 0;
menustate = MENU_MINIMIG_LOADCONFIG1;
}
else if (menusub == 12)
{
menustate = MENU_NONE1;
minimig_reset();
}
else if (menusub == 13)
{
menustate = MENU_NONE1;
}
}
}
else if (c == KEY_BACKSPACE) // eject all floppies
{
for (int i = 0; i <= drives; i++) df[i].status = 0;
menustate = MENU_MINIMIG_MAIN1;
}
else if (right)
{
menustate = MENU_COMMON1;
menusub = 0;
}
else if (left)
{
menustate = MENU_MISC1;
menusub = 3;
}
break;
case MENU_MINIMIG_ADFFILE_SELECTED:
memcpy(Selected_F[menusub], selPath, sizeof(Selected_F[menusub]));
recent_update(SelectedDir, selPath, SelectedLabel, 0);
InsertFloppy(&df[menusub], selPath);
if (menusub < drives) menusub++;
menustate = MENU_MINIMIG_MAIN1;
break;
case MENU_MINIMIG_LOADCONFIG1:
helptext_idx = 0;
if (parentstate != menustate) menumask = 0x400;
parentstate = menustate;
OsdSetTitle("Load config", 0);
m = 0;
OsdWrite(m++, "", 0, 0);
OsdWrite(m++, " Startup config:");
for (uint i = 0; i < 10; i++)
{
const char *info = minimig_get_cfg_info(i, menusub != i);
static char name[128];
if (info)
{
menumask |= 1 << i;
sprintf(name, " %s", strlen(info) ? info : "NO INFO");
char *p = strchr(name, '\n');
if (p) *p = 0;
OsdWrite(m++, name, menusub == i);
if (menusub == i && p)
{
sprintf(name, " %s", strchr(info, '\n') + 1);
OsdWrite(m++, name, 1, !(menumask & (1 << i)));
}
}
if (!i)
{
OsdWrite(m++, "", 0, 0);
m = 4;
OsdWrite(m++, " Other configs:");
}
}
while (m < OsdGetSize() - 1) OsdWrite(m++);
OsdWrite(OsdGetSize() - 1, STD_BACK, menusub == 10, 0);
menustate = MENU_MINIMIG_LOADCONFIG2;
break;
case MENU_MINIMIG_LOADCONFIG2:
if (down)
{
if (menusub < 9) menusub++;
menustate = MENU_MINIMIG_LOADCONFIG1;
}
else if (select)
{
if (menusub < 10)
{
OsdDisable();
minimig_cfg_load(menusub);
menustate = MENU_NONE1;
}
else
{
menustate = MENU_MINIMIG_MAIN1;
menusub = 11;
}
}
if (menu || left) // exit menu
{
menustate = MENU_MINIMIG_MAIN1;
menusub = 11;
}
break;
case MENU_MINIMIG_SAVECONFIG1:
helptext_idx = 0;
menumask = 0x7ff;
@@ -5021,7 +5017,7 @@ void HandleUI(void)
}
while (m < OsdGetSize() - 1) OsdWrite(m++);
OsdWrite(OsdGetSize() - 1, STD_EXIT, menusub == 10, 0);
OsdWrite(OsdGetSize() - 1, STD_BACK, menusub == 10, 0);
menustate = MENU_MINIMIG_SAVECONFIG2;
break;
@@ -5071,7 +5067,7 @@ void HandleUI(void)
case MENU_MINIMIG_CHIPSET1:
helptext_idx = HELPTEXT_CHIPSET;
menumask = 0xf9;
OsdSetTitle("Chipset", OSD_ARROW_LEFT | OSD_ARROW_RIGHT);
OsdSetTitle("Chipset");
parentstate = menustate;
m = 0;
@@ -5100,7 +5096,7 @@ void HandleUI(void)
strcat(s, (minimig_config.autofire & 0x8)? "ON" : "OFF");
OsdWrite(m++, s, menusub == 6, 0);
for (int i = m; i < OsdGetSize() - 1; i++) OsdWrite(i, "", 0, 0);
OsdWrite(OsdGetSize() - 1, STD_EXIT, menusub == 7, 0);
OsdWrite(OsdGetSize() - 1, STD_BACK, menusub == 7, 0);
menustate = MENU_MINIMIG_CHIPSET2;
break;
@@ -5214,7 +5210,7 @@ void HandleUI(void)
menumask = 0x3f;
parentstate = menustate;
OsdSetTitle("Memory", OSD_ARROW_LEFT | OSD_ARROW_RIGHT);
OsdSetTitle("Memory");
OsdWrite(0, "", 0, 0);
strcpy(s, " CHIP : ");
@@ -5238,7 +5234,7 @@ void HandleUI(void)
OsdWrite(6, s, menusub == 4, 0);
for (int i = 7; i < OsdGetSize() - 1; i++) OsdWrite(i, "", 0, 0);
OsdWrite(OsdGetSize() - 1, STD_EXIT, menusub == 5, 0);
OsdWrite(OsdGetSize() - 1, STD_BACK, menusub == 5, 0);
menustate = MENU_MINIMIG_MEMORY2;
break;
@@ -5319,7 +5315,7 @@ void HandleUI(void)
// not on rejection.
case MENU_MINIMIG_HARDFILE1:
helptext_idx = HELPTEXT_HARDFILE;
OsdSetTitle("Harddisks", OSD_ARROW_LEFT | OSD_ARROW_RIGHT);
OsdSetTitle("Harddisks");
parentstate = menustate;
menumask = 0x201; // b001000000001 - On/off & exit enabled by default...
@@ -5355,7 +5351,7 @@ void HandleUI(void)
}
}
OsdWrite(OsdGetSize() - 1, STD_EXIT, menusub == 9, 0);
OsdWrite(OsdGetSize() - 1, STD_BACK, menusub == 9, 0);
menustate = MENU_MINIMIG_HARDFILE2;
break;
@@ -5491,7 +5487,7 @@ void HandleUI(void)
helptext_idx = 0; // helptexts[HELPTEXT_VIDEO];
m = 0;
OsdSetTitle("Audio & Video", OSD_ARROW_LEFT | OSD_ARROW_RIGHT);
OsdSetTitle("Audio & Video");
strcpy(s, " TV Standard : ");
strcat(s, minimig_config.chipset & CONFIG_NTSC ? "NTSC" : "PAL");
@@ -5533,7 +5529,7 @@ void HandleUI(void)
OsdWrite(m++);
OsdWrite(m++, minimig_get_adjust() ? " Finish screen adjustment" : " Adjust screen position", menusub == 11, 0);
for (; m < OsdGetSize() - 1; m++) OsdWrite(m);
OsdWrite(OsdGetSize() - 1, STD_EXIT, menusub == 12, 0);
OsdWrite(OsdGetSize() - 1, STD_BACK, menusub == 12, 0);
menustate = MENU_MINIMIG_VIDEO2;
break;