diff --git a/menu.cpp b/menu.cpp index da4f987..711b47a 100644 --- a/menu.cpp +++ b/menu.cpp @@ -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;