Initial support for Atari ST.
This commit is contained in:
833
menu.cpp
833
menu.cpp
@@ -131,20 +131,18 @@ enum MENU
|
||||
MENU_RECENT1,
|
||||
MENU_RECENT2,
|
||||
|
||||
// Mist/atari specific pages
|
||||
MENU_MIST_MAIN1,
|
||||
MENU_MIST_MAIN2,
|
||||
MENU_MIST_MAIN_FILE_SELECTED,
|
||||
MENU_MIST_STORAGE1,
|
||||
MENU_MIST_STORAGE2,
|
||||
MENU_MIST_STORAGE_FILE_SELECTED,
|
||||
MENU_MIST_SYSTEM1,
|
||||
MENU_MIST_SYSTEM2,
|
||||
MENU_MIST_SYSTEM_FILE_SELECTED,
|
||||
MENU_MIST_VIDEO1,
|
||||
MENU_MIST_VIDEO2,
|
||||
MENU_MIST_VIDEO_ADJUST1,
|
||||
MENU_MIST_VIDEO_ADJUST2,
|
||||
// Atari ST specific pages
|
||||
MENU_ST_MAIN1,
|
||||
MENU_ST_MAIN2,
|
||||
MENU_ST_SYSTEM1,
|
||||
MENU_ST_SYSTEM2,
|
||||
MENU_ST_FDD_FILE_SELECTED,
|
||||
MENU_ST_HDD_FILE_SELECTED,
|
||||
MENU_ST_SYSTEM_FILE_SELECTED,
|
||||
MENU_ST_LOAD_CONFIG1,
|
||||
MENU_ST_LOAD_CONFIG2,
|
||||
MENU_ST_SAVE_CONFIG1,
|
||||
MENU_ST_SAVE_CONFIG2,
|
||||
|
||||
// archimedes menu entries
|
||||
MENU_ARCHIE_MAIN1,
|
||||
@@ -182,7 +180,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_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%" };
|
||||
@@ -841,7 +839,6 @@ void HandleUI(void)
|
||||
{
|
||||
switch (user_io_core_type())
|
||||
{
|
||||
case CORE_TYPE_MIST:
|
||||
case CORE_TYPE_8BIT:
|
||||
case CORE_TYPE_SHARPMZ:
|
||||
case CORE_TYPE_ARCHIE:
|
||||
@@ -874,6 +871,7 @@ void HandleUI(void)
|
||||
static unsigned long flash_timer = 0;
|
||||
static int flash_state = 0;
|
||||
static uint32_t dip_submenu;
|
||||
static int need_reset = 0;
|
||||
|
||||
static char cp_MenuCancel;
|
||||
|
||||
@@ -1143,7 +1141,7 @@ void HandleUI(void)
|
||||
{
|
||||
SelectFile(0, SCANO_CORES, MENU_CORE_FILE_SELECTED1, MENU_NONE1);
|
||||
}
|
||||
else if (user_io_core_type() == CORE_TYPE_MIST) menustate = MENU_MIST_MAIN1;
|
||||
else if (is_st()) menustate = MENU_ST_MAIN1;
|
||||
else if (is_archie()) menustate = MENU_ARCHIE_MAIN1;
|
||||
else {
|
||||
if (is_menu())
|
||||
@@ -1845,7 +1843,7 @@ void HandleUI(void)
|
||||
MenuWrite(n++, s, menusub == 8, !video_get_gamma_en() || !S_ISDIR(getFileType(GAMMA_DIR)));
|
||||
}
|
||||
|
||||
if (is_minimig())
|
||||
if (is_minimig() || is_st())
|
||||
{
|
||||
menumask &= ~0x600;
|
||||
}
|
||||
@@ -2033,15 +2031,13 @@ void HandleUI(void)
|
||||
else if (left)
|
||||
{
|
||||
// go back to core requesting this menu
|
||||
switch (user_io_core_type()) {
|
||||
case CORE_TYPE_MIST:
|
||||
menusub = 5;
|
||||
menustate = MENU_MIST_MAIN1;
|
||||
break;
|
||||
switch (user_io_core_type())
|
||||
{
|
||||
case CORE_TYPE_ARCHIE:
|
||||
menusub = 0;
|
||||
menustate = MENU_ARCHIE_MAIN1;
|
||||
break;
|
||||
|
||||
case CORE_TYPE_8BIT:
|
||||
if (is_minimig())
|
||||
{
|
||||
@@ -2053,6 +2049,11 @@ void HandleUI(void)
|
||||
menusub = 0;
|
||||
menustate = MENU_ARCHIE_MAIN1;
|
||||
}
|
||||
else if (is_st())
|
||||
{
|
||||
menusub = 0;
|
||||
menustate = MENU_ST_MAIN1;
|
||||
}
|
||||
else
|
||||
{
|
||||
menusub = 0;
|
||||
@@ -2348,10 +2349,6 @@ void HandleUI(void)
|
||||
// go back to core requesting this menu
|
||||
switch (user_io_core_type())
|
||||
{
|
||||
case CORE_TYPE_MIST:
|
||||
menusub = 5;
|
||||
menustate = MENU_MIST_MAIN1;
|
||||
break;
|
||||
case CORE_TYPE_ARCHIE:
|
||||
menusub = 0;
|
||||
menustate = MENU_ARCHIE_MAIN1;
|
||||
@@ -2367,6 +2364,11 @@ void HandleUI(void)
|
||||
menusub = 0;
|
||||
menustate = MENU_ARCHIE_MAIN1;
|
||||
}
|
||||
else if (is_st())
|
||||
{
|
||||
menusub = 0;
|
||||
menustate = MENU_ST_MAIN1;
|
||||
}
|
||||
else
|
||||
{
|
||||
menusub = 0;
|
||||
@@ -2748,456 +2750,433 @@ void HandleUI(void)
|
||||
|
||||
|
||||
/******************************************************************/
|
||||
/* mist main menu */
|
||||
/* st main menu */
|
||||
/******************************************************************/
|
||||
|
||||
case MENU_MIST_MAIN1:
|
||||
OsdSetSize(8);
|
||||
menumask = 0xff;
|
||||
OsdSetTitle("Mist", 0);
|
||||
case MENU_ST_MAIN1:
|
||||
OsdSetSize(16);
|
||||
menumask = 0x3ff;
|
||||
OsdSetTitle("AtariST", 0);
|
||||
m = 0;
|
||||
|
||||
// most important: main page has setup for floppy A: and screen
|
||||
strcpy(s, " A: ");
|
||||
strcat(s, tos_get_disk_name(0));
|
||||
if (tos_system_ctrl() & TOS_CONTROL_FDC_WR_PROT_A) strcat(s, " \x17");
|
||||
OsdWrite(0, s, menusub == 0, 0);
|
||||
OsdWrite(m++);
|
||||
for (uint32_t i = 0; i < 2; i++)
|
||||
{
|
||||
snprintf(s, 29, " %c: %s%s", 'A' + i, (tos_system_ctrl() & (TOS_CONTROL_FDC_WR_PROT_A << i)) ? "\x17" : "", tos_get_disk_name(i));
|
||||
OsdWrite(m++, s, menusub == i, 0);
|
||||
}
|
||||
strcpy(s, " Write protect: ");
|
||||
strcat(s, config_tos_wrprot[(tos_system_ctrl() >> 6) & 3]);
|
||||
OsdWrite(m++, s, menusub == 2, 0);
|
||||
OsdWrite(m++);
|
||||
|
||||
strcpy(s, " Screen: ");
|
||||
if (tos_system_ctrl() & TOS_CONTROL_VIDEO_COLOR) strcat(s, "Color");
|
||||
else strcat(s, "Mono");
|
||||
OsdWrite(1, s, menusub == 1, 0);
|
||||
snprintf(s, 29, " Joysticks swap: %s", user_io_get_joyswap() ? "Yes" : "No");
|
||||
OsdWrite(m++, s, menusub == 3);
|
||||
OsdWrite(m++);
|
||||
|
||||
/* everything else is in submenus */
|
||||
OsdWrite(2, " Storage \x16", menusub == 2, 0);
|
||||
OsdWrite(3, " System \x16", menusub == 3, 0);
|
||||
OsdWrite(4, " Audio / Video \x16", menusub == 4, 0);
|
||||
OsdWrite(5, " Firmware & Core \x16", menusub == 5, 0);
|
||||
OsdWrite(m++, " Modify config \x16", menusub == 4);
|
||||
OsdWrite(m++, " Load config \x16", menusub == 5);
|
||||
OsdWrite(m++, " Save config \x16", menusub == 6);
|
||||
OsdWrite(m++);
|
||||
|
||||
OsdWrite(6, " Save config ", menusub == 6, 0);
|
||||
OsdWrite(m++, " Reset", menusub == 7);
|
||||
OsdWrite(m++, " Cold Boot", menusub == 8);
|
||||
|
||||
OsdWrite(7, STD_EXIT, menusub == 7, 0);
|
||||
for (; m < OsdGetSize()-1; m++) OsdWrite(m);
|
||||
MenuWrite(15, STD_EXIT, menusub == 9, 0, OSD_ARROW_RIGHT | OSD_ARROW_LEFT);
|
||||
|
||||
menustate = MENU_MIST_MAIN2;
|
||||
parentstate = MENU_MIST_MAIN1;
|
||||
menustate = MENU_ST_MAIN2;
|
||||
parentstate = MENU_ST_MAIN1;
|
||||
break;
|
||||
|
||||
case MENU_MIST_MAIN2:
|
||||
case MENU_ST_MAIN2:
|
||||
// menu key closes menu
|
||||
if (menu)
|
||||
{
|
||||
menustate = MENU_NONE1;
|
||||
if (select) {
|
||||
switch (menusub) {
|
||||
}
|
||||
else if (right)
|
||||
{
|
||||
menustate = MENU_8BIT_SYSTEM1;
|
||||
menusub = 0;
|
||||
}
|
||||
else if (left)
|
||||
{
|
||||
menustate = MENU_8BIT_INFO;
|
||||
menusub = 1;
|
||||
}
|
||||
else if (select)
|
||||
{
|
||||
switch (menusub)
|
||||
{
|
||||
case 0:
|
||||
if (tos_disk_is_inserted(0)) {
|
||||
tos_insert_disk(0, NULL);
|
||||
menustate = MENU_MIST_MAIN1;
|
||||
case 1:
|
||||
if (tos_disk_is_inserted(menusub))
|
||||
{
|
||||
tos_insert_disk(menusub, "");
|
||||
menustate = MENU_ST_MAIN1;
|
||||
}
|
||||
else
|
||||
SelectFile("ST ", SCANO_DIR, MENU_MIST_MAIN_FILE_SELECTED, MENU_MIST_MAIN1);
|
||||
{
|
||||
SelectFile("ST ", SCANO_DIR, MENU_ST_FDD_FILE_SELECTED, MENU_ST_MAIN1);
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_VIDEO_COLOR);
|
||||
menustate = MENU_MIST_MAIN1;
|
||||
case 2:
|
||||
// remove current write protect bits and increase by one
|
||||
tos_update_sysctrl((tos_system_ctrl() & ~(TOS_CONTROL_FDC_WR_PROT_A | TOS_CONTROL_FDC_WR_PROT_B))
|
||||
| (((((tos_system_ctrl() >> 6) & 3) + 1) & 3) << 6));
|
||||
menustate = MENU_ST_MAIN1;
|
||||
break;
|
||||
|
||||
case 2: // Storage submenu
|
||||
menustate = MENU_MIST_STORAGE1;
|
||||
case 3:
|
||||
user_io_set_joyswap(!user_io_get_joyswap());
|
||||
menustate = MENU_ST_MAIN1;
|
||||
break;
|
||||
|
||||
case 4: // System submenu
|
||||
menustate = MENU_ST_SYSTEM1;
|
||||
need_reset = 0;
|
||||
menusub = 0;
|
||||
break;
|
||||
|
||||
case 3: // System submenu
|
||||
menustate = MENU_MIST_SYSTEM1;
|
||||
menusub = 0;
|
||||
break;
|
||||
|
||||
case 4: // Video submenu
|
||||
menustate = MENU_MIST_VIDEO1;
|
||||
menusub = 0;
|
||||
break;
|
||||
|
||||
case 5: // Firmware submenu
|
||||
//menustate = MENU_FIRMWARE1;
|
||||
case 5: // Load config
|
||||
menustate = MENU_ST_LOAD_CONFIG1;
|
||||
menusub = 0;
|
||||
break;
|
||||
|
||||
case 6: // Save config
|
||||
menustate = MENU_NONE1;
|
||||
tos_config_save();
|
||||
break;
|
||||
|
||||
case 7: // Exit
|
||||
menustate = MENU_NONE1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MENU_MIST_MAIN_FILE_SELECTED: // file successfully selected
|
||||
tos_insert_disk(0, SelectedPath);
|
||||
menustate = MENU_MIST_MAIN1;
|
||||
break;
|
||||
|
||||
case MENU_MIST_STORAGE1:
|
||||
menumask = tos_get_direct_hdd() ? 0x3f : 0x7f;
|
||||
OsdSetTitle("Storage", 0);
|
||||
// entries for both floppies
|
||||
for (uint32_t i = 0; i<2; i++) {
|
||||
strcpy(s, " A: ");
|
||||
strcat(s, tos_get_disk_name(i));
|
||||
s[1] = 'A' + i;
|
||||
if (tos_system_ctrl() & (TOS_CONTROL_FDC_WR_PROT_A << i))
|
||||
strcat(s, " \x17");
|
||||
OsdWrite(i, s, menusub == i, 0);
|
||||
}
|
||||
strcpy(s, " Write protect: ");
|
||||
strcat(s, config_tos_wrprot[(tos_system_ctrl() >> 6) & 3]);
|
||||
OsdWrite(2, s, menusub == 2, 0);
|
||||
OsdWrite(3, "", 0, 0);
|
||||
strcpy(s, " ACSI0 direct SD: ");
|
||||
strcat(s, tos_get_direct_hdd() ? "on" : "off");
|
||||
OsdWrite(4, s, menusub == 3, 0);
|
||||
for (uint32_t i = 0; i<2; i++) {
|
||||
strcpy(s, " ACSI0: ");
|
||||
s[5] = '0' + i;
|
||||
|
||||
strcat(s, tos_get_disk_name(2 + i));
|
||||
OsdWrite(5 + i, s, ((i == 1) || !tos_get_direct_hdd()) ? (menusub == (!tos_get_direct_hdd() ? 4 : 3) + i) : 0,
|
||||
(i == 0) && tos_get_direct_hdd());
|
||||
}
|
||||
OsdWrite(7, STD_EXIT, !tos_get_direct_hdd() ? (menusub == 6) : (menusub == 5), 0);
|
||||
parentstate = menustate;
|
||||
menustate = MENU_MIST_STORAGE2;
|
||||
break;
|
||||
|
||||
|
||||
case MENU_MIST_STORAGE2:
|
||||
if (menu) {
|
||||
menustate = MENU_MIST_MAIN1;
|
||||
menusub = 2;
|
||||
}
|
||||
if (select) {
|
||||
if (menusub <= 1) {
|
||||
if (tos_disk_is_inserted(menusub)) {
|
||||
tos_insert_disk(menusub, NULL);
|
||||
menustate = MENU_MIST_STORAGE1;
|
||||
}
|
||||
else
|
||||
SelectFile("ST ", SCANO_DIR, MENU_MIST_STORAGE_FILE_SELECTED, MENU_MIST_STORAGE1);
|
||||
}
|
||||
else if (menusub == 2) {
|
||||
// remove current write protect bits and increase by one
|
||||
tos_update_sysctrl((tos_system_ctrl() & ~(TOS_CONTROL_FDC_WR_PROT_A | TOS_CONTROL_FDC_WR_PROT_B))
|
||||
| (((((tos_system_ctrl() >> 6) & 3) + 1) & 3) << 6));
|
||||
menustate = MENU_MIST_STORAGE1;
|
||||
|
||||
}
|
||||
else if (menusub == 3) {
|
||||
tos_set_direct_hdd(!tos_get_direct_hdd());
|
||||
menustate = MENU_MIST_STORAGE1;
|
||||
|
||||
// no direct hhd emulation: Both ACSI entries are enabled
|
||||
// or direct hhd emulation for ACSI0: Only second ACSI entry is enabled
|
||||
}
|
||||
else if ((menusub == 4) || (!tos_get_direct_hdd() && (menusub == 5))) {
|
||||
char disk_idx = menusub - (tos_get_direct_hdd() ? 1 : 2);
|
||||
printf("Select image for disk %d\n", disk_idx);
|
||||
|
||||
if (tos_disk_is_inserted(disk_idx)) {
|
||||
tos_insert_disk(disk_idx, NULL);
|
||||
menustate = MENU_MIST_STORAGE1;
|
||||
}
|
||||
else
|
||||
SelectFile("HD ", 0, MENU_MIST_STORAGE_FILE_SELECTED, MENU_MIST_STORAGE1);
|
||||
|
||||
}
|
||||
else if (tos_get_direct_hdd() ? (menusub == 5) : (menusub == 6)) {
|
||||
menustate = MENU_MIST_MAIN1;
|
||||
menusub = 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MENU_MIST_STORAGE_FILE_SELECTED: // file successfully selected
|
||||
// floppy/hdd
|
||||
if (menusub < 2)
|
||||
tos_insert_disk(menusub, SelectedPath);
|
||||
else {
|
||||
char disk_idx = menusub - (tos_get_direct_hdd() ? 1 : 2);
|
||||
printf("Insert image for disk %d\n", disk_idx);
|
||||
tos_insert_disk(disk_idx, SelectedPath);
|
||||
}
|
||||
menustate = MENU_MIST_STORAGE1;
|
||||
break;
|
||||
|
||||
case MENU_MIST_SYSTEM1:
|
||||
menumask = 0xff;
|
||||
OsdSetTitle("System", 0);
|
||||
|
||||
strcpy(s, " Memory: ");
|
||||
strcat(s, config_tos_mem[(tos_system_ctrl() >> 1) & 7]);
|
||||
OsdWrite(0, s, menusub == 0, 0);
|
||||
|
||||
strcpy(s, " CPU: ");
|
||||
strcat(s, config_cpu_msg[(tos_system_ctrl() >> 4) & 3]);
|
||||
OsdWrite(1, s, menusub == 1, 0);
|
||||
|
||||
strcpy(s, " TOS: ");
|
||||
strcat(s, tos_get_image_name());
|
||||
OsdWrite(2, s, menusub == 2, 0);
|
||||
|
||||
strcpy(s, " Cartridge: ");
|
||||
strcat(s, tos_get_cartridge_name());
|
||||
OsdWrite(3, s, menusub == 3, 0);
|
||||
|
||||
strcpy(s, " USB I/O: ");
|
||||
strcat(s, "NONE"); //config_tos_usb[tos_get_cdc_control_redirect()]);
|
||||
OsdWrite(4, s, menusub == 4, 0);
|
||||
|
||||
OsdWrite(5, " Reset", menusub == 5, 0);
|
||||
OsdWrite(6, " Cold boot", menusub == 6, 0);
|
||||
|
||||
OsdWrite(7, STD_EXIT, menusub == 7, 0);
|
||||
|
||||
parentstate = menustate;
|
||||
menustate = MENU_MIST_SYSTEM2;
|
||||
break;
|
||||
|
||||
case MENU_MIST_SYSTEM2:
|
||||
if (menu) {
|
||||
menustate = MENU_MIST_MAIN1;
|
||||
menusub = 3;
|
||||
}
|
||||
if (select) {
|
||||
switch (menusub) {
|
||||
case 0: { // RAM
|
||||
int mem = (tos_system_ctrl() >> 1) & 7; // current memory config
|
||||
mem++;
|
||||
if (mem > 5) mem = 3; // cycle 4MB/8MB/14MB
|
||||
tos_update_sysctrl((tos_system_ctrl() & ~0x0e) | (mem << 1));
|
||||
tos_reset(1);
|
||||
menustate = MENU_MIST_SYSTEM1;
|
||||
} break;
|
||||
|
||||
case 1: { // CPU
|
||||
int cpu = (tos_system_ctrl() >> 4) & 3; // current cpu config
|
||||
cpu = (cpu + 1) & 3;
|
||||
if (cpu == 2) cpu = 3; // skip unused config
|
||||
tos_update_sysctrl((tos_system_ctrl() & ~0x30) | (cpu << 4));
|
||||
tos_reset(0);
|
||||
menustate = MENU_MIST_SYSTEM1;
|
||||
} break;
|
||||
|
||||
case 2: // TOS
|
||||
SelectFile("IMG", 0, MENU_MIST_SYSTEM_FILE_SELECTED, MENU_MIST_SYSTEM1);
|
||||
break;
|
||||
|
||||
case 3: // Cart
|
||||
// if a cart name is set, then remove it
|
||||
if (tos_cartridge_is_inserted()) {
|
||||
tos_load_cartridge("");
|
||||
menustate = MENU_MIST_SYSTEM1;
|
||||
}
|
||||
else
|
||||
{
|
||||
SelectFile("IMG", 0, MENU_MIST_SYSTEM_FILE_SELECTED, MENU_MIST_SYSTEM1);
|
||||
}
|
||||
break;
|
||||
|
||||
case 4:
|
||||
menustate = MENU_MIST_SYSTEM1;
|
||||
break;
|
||||
|
||||
case 5: // Reset
|
||||
tos_reset(0);
|
||||
menustate = MENU_NONE1;
|
||||
break;
|
||||
|
||||
case 6: // Cold Boot
|
||||
tos_reset(1);
|
||||
menustate = MENU_NONE1;
|
||||
break;
|
||||
|
||||
case 7:
|
||||
menustate = MENU_MIST_MAIN1;
|
||||
menusub = 3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MENU_MIST_SYSTEM_FILE_SELECTED: // file successfully selected
|
||||
if (menusub == 2) {
|
||||
tos_upload(SelectedPath);
|
||||
menustate = MENU_MIST_SYSTEM1;
|
||||
}
|
||||
if (menusub == 3) {
|
||||
tos_load_cartridge(SelectedPath);
|
||||
menustate = MENU_MIST_SYSTEM1;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case MENU_MIST_VIDEO1:
|
||||
menumask = 0x7f;
|
||||
OsdSetTitle("A/V", 0);
|
||||
|
||||
strcpy(s, " Screen: ");
|
||||
if (tos_system_ctrl() & TOS_CONTROL_VIDEO_COLOR) strcat(s, "Color");
|
||||
else strcat(s, "Mono");
|
||||
OsdWrite(0, s, menusub == 0, 0);
|
||||
|
||||
// Viking card can only be enabled with max 8MB RAM
|
||||
enable = (tos_system_ctrl() & 0xe) <= TOS_MEMCONFIG_8M;
|
||||
strcpy(s, " Viking/SM194: ");
|
||||
strcat(s, ((tos_system_ctrl() & TOS_CONTROL_VIKING) && enable) ? "on" : "off");
|
||||
OsdWrite(1, s, menusub == 1, enable ? 0 : 1);
|
||||
|
||||
// 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(2, s, menusub == 2, enable);
|
||||
|
||||
strcpy(s, " Chipset: ");
|
||||
// extract TOS_CONTROL_STE and TOS_CONTROL_MSTE bits
|
||||
strcat(s, atari_chipset[(tos_system_ctrl() >> 23) & 3]);
|
||||
OsdWrite(3, s, menusub == 3, 0);
|
||||
|
||||
OsdWrite(4, " Video adjust \x16", menusub == 4, 0);
|
||||
|
||||
strcpy(s, " YM-Audio: ");
|
||||
strcat(s, stereo[(tos_system_ctrl() & TOS_CONTROL_STEREO) ? 1 : 0]);
|
||||
OsdWrite(5, s, menusub == 5, 0);
|
||||
OsdWrite(6, "", 0, 0);
|
||||
|
||||
OsdWrite(7, STD_EXIT, menusub == 6, 0);
|
||||
|
||||
parentstate = menustate;
|
||||
menustate = MENU_MIST_VIDEO2;
|
||||
break;
|
||||
|
||||
case MENU_MIST_VIDEO2:
|
||||
if (menu) {
|
||||
menustate = MENU_MIST_MAIN1;
|
||||
menusub = 4;
|
||||
}
|
||||
|
||||
if (select) {
|
||||
switch (menusub) {
|
||||
case 0:
|
||||
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_VIDEO_COLOR);
|
||||
menustate = MENU_MIST_VIDEO1;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
// viking/sm194
|
||||
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_VIKING);
|
||||
menustate = MENU_MIST_VIDEO1;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (!(tos_system_ctrl() & TOS_CONTROL_STE)) {
|
||||
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_BLITTER);
|
||||
menustate = MENU_MIST_VIDEO1;
|
||||
}
|
||||
break;
|
||||
|
||||
case 3: {
|
||||
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_MIST_VIDEO1;
|
||||
} break;
|
||||
|
||||
case 4:
|
||||
menustate = MENU_MIST_VIDEO_ADJUST1;
|
||||
menustate = MENU_ST_SAVE_CONFIG1;
|
||||
menusub = 0;
|
||||
break;
|
||||
|
||||
case 7: // Reset
|
||||
tos_reset(0);
|
||||
menustate = MENU_NONE1;
|
||||
break;
|
||||
|
||||
case 8: // Cold Boot
|
||||
tos_reset(1);
|
||||
menustate = MENU_NONE1;
|
||||
break;
|
||||
|
||||
case 9: // Exit
|
||||
menustate = MENU_NONE1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MENU_ST_FDD_FILE_SELECTED:
|
||||
tos_insert_disk(menusub, SelectedPath);
|
||||
menustate = MENU_ST_MAIN1;
|
||||
break;
|
||||
|
||||
case MENU_ST_SYSTEM1:
|
||||
menumask = 0x1fff;
|
||||
OsdSetTitle("Config", 0);
|
||||
m = 0;
|
||||
|
||||
for (uint32_t i = 0; i < 2; i++)
|
||||
{
|
||||
snprintf(s, 29, " HDD%d: %s", i, tos_get_disk_name(2 + i));
|
||||
OsdWrite(m++, s, menusub == i);
|
||||
}
|
||||
|
||||
snprintf(s, 29, " Cart: %s", tos_get_cartridge_name());
|
||||
OsdWrite(m++, s, menusub == 2);
|
||||
|
||||
OsdWrite(m++);
|
||||
strcpy(s, " Memory: ");
|
||||
strcat(s, config_tos_mem[(tos_system_ctrl() >> 1) & 7]);
|
||||
OsdWrite(m++, s, menusub == 3);
|
||||
|
||||
snprintf(s, 29, " TOS: %s", tos_get_image_name());
|
||||
OsdWrite(m++, s, menusub == 4);
|
||||
|
||||
// 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);
|
||||
|
||||
// Viking card can only be enabled with max 8MB RAM
|
||||
enable = (tos_system_ctrl() & 0xe) <= TOS_MEMCONFIG_8M;
|
||||
strcpy(s, " Viking: ");
|
||||
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);
|
||||
*/
|
||||
|
||||
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);
|
||||
|
||||
strcpy(s, " Border: ");
|
||||
if (tos_system_ctrl() & TOS_CONTROL_BORDER) strcat(s, "Visible");
|
||||
else strcat(s, "Full");
|
||||
OsdWrite(m++, s, menusub == 9, 0);
|
||||
|
||||
strcpy(s, " Scanlines: ");
|
||||
strcat(s, scanlines[(tos_system_ctrl() >> 20) & 3]);
|
||||
OsdWrite(m++, s, menusub == 10, 0);
|
||||
|
||||
strcpy(s, " YM-Audio: ");
|
||||
strcat(s, stereo[(tos_system_ctrl() & TOS_CONTROL_STEREO) ? 1 : 0]);
|
||||
OsdWrite(m++, s, menusub == 11, 0);
|
||||
|
||||
for (; m < OsdGetSize() - 1; m++) OsdWrite(m);
|
||||
OsdWrite(15, STD_EXIT, menusub == 12, 0);
|
||||
|
||||
parentstate = menustate;
|
||||
menustate = MENU_ST_SYSTEM2;
|
||||
break;
|
||||
|
||||
case MENU_ST_SYSTEM2:
|
||||
if (menu)
|
||||
{
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 3;
|
||||
if(need_reset) tos_reset(1);
|
||||
}
|
||||
|
||||
if (select)
|
||||
{
|
||||
switch (menusub)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
SelectFile("VHD", SCANO_DIR | SCANO_UMOUNT, MENU_ST_HDD_FILE_SELECTED, MENU_ST_SYSTEM1);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
// Cart
|
||||
if (tos_cartridge_is_inserted())
|
||||
{
|
||||
tos_load_cartridge("");
|
||||
menustate = MENU_ST_SYSTEM1;
|
||||
}
|
||||
else
|
||||
{
|
||||
SelectFile("IMG", SCANO_DIR, MENU_ST_SYSTEM_FILE_SELECTED, MENU_ST_SYSTEM1);
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
{
|
||||
// RAM
|
||||
int mem = (tos_system_ctrl() >> 1) & 7; // current memory config
|
||||
mem++;
|
||||
if (mem > 5) mem = 0; // cycle 4MB/8MB/14MB
|
||||
tos_update_sysctrl((tos_system_ctrl() & ~0x0e) | (mem << 1));
|
||||
need_reset = 1;
|
||||
menustate = MENU_ST_SYSTEM1;
|
||||
}
|
||||
break;
|
||||
|
||||
case 4: // TOS
|
||||
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:
|
||||
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_STEREO);
|
||||
menustate = MENU_MIST_VIDEO1;
|
||||
if (!(tos_system_ctrl() & TOS_CONTROL_STE))
|
||||
{
|
||||
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_BLITTER);
|
||||
menustate = MENU_ST_SYSTEM1;
|
||||
}
|
||||
break;
|
||||
|
||||
case 6:
|
||||
menustate = MENU_MIST_MAIN1;
|
||||
menusub = 4;
|
||||
{
|
||||
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 7:
|
||||
// viking/sm194
|
||||
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_VIKING);
|
||||
menustate = MENU_ST_SYSTEM1;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_VIDEO_COLOR);
|
||||
menustate = MENU_ST_SYSTEM1;
|
||||
break;
|
||||
|
||||
case 9:
|
||||
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_BORDER);
|
||||
menustate = MENU_ST_SYSTEM1;
|
||||
break;
|
||||
|
||||
case 10:
|
||||
{
|
||||
// next scanline state
|
||||
int scan = ((tos_system_ctrl() >> 20) + 1) & 3;
|
||||
tos_update_sysctrl((tos_system_ctrl() & ~TOS_CONTROL_SCANLINES) | (scan << 20));
|
||||
menustate = MENU_ST_SYSTEM1;
|
||||
}
|
||||
break;
|
||||
|
||||
case 11:
|
||||
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_STEREO);
|
||||
menustate = MENU_ST_SYSTEM1;
|
||||
break;
|
||||
|
||||
|
||||
case 12:
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 3;
|
||||
if (need_reset) tos_reset(1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MENU_MIST_VIDEO_ADJUST1:
|
||||
menumask = 0x1f;
|
||||
OsdSetTitle("V-adjust", 0);
|
||||
|
||||
OsdWrite(0, "", 0, 0);
|
||||
|
||||
strcpy(s, " PAL mode: ");
|
||||
if (tos_system_ctrl() & TOS_CONTROL_PAL50HZ) strcat(s, "50Hz");
|
||||
else strcat(s, "56Hz");
|
||||
OsdWrite(1, s, menusub == 0, 0);
|
||||
|
||||
strcpy(s, " Scanlines: ");
|
||||
strcat(s, scanlines[(tos_system_ctrl() >> 20) & 3]);
|
||||
OsdWrite(2, s, menusub == 1, 0);
|
||||
|
||||
OsdWrite(3, "", 0, 0);
|
||||
|
||||
sprintf(s, " Horizontal: %d", tos_get_video_adjust(0));
|
||||
OsdWrite(4, s, menusub == 2, 0);
|
||||
|
||||
sprintf(s, " Vertical: %d", tos_get_video_adjust(1));
|
||||
OsdWrite(5, s, menusub == 3, 0);
|
||||
|
||||
OsdWrite(6, "", 0, 0);
|
||||
|
||||
OsdWrite(7, STD_EXIT, menusub == 4, 0);
|
||||
|
||||
parentstate = menustate;
|
||||
menustate = MENU_MIST_VIDEO_ADJUST2;
|
||||
case MENU_ST_HDD_FILE_SELECTED:
|
||||
printf("Insert image for disk %d\n", menusub);
|
||||
tos_insert_disk(menusub+2, SelectedPath);
|
||||
menustate = MENU_ST_SYSTEM1;
|
||||
break;
|
||||
|
||||
case MENU_MIST_VIDEO_ADJUST2:
|
||||
if (menu) {
|
||||
menustate = MENU_MIST_VIDEO1;
|
||||
case MENU_ST_SYSTEM_FILE_SELECTED: // file successfully selected
|
||||
if (menusub == 4)
|
||||
{
|
||||
tos_upload(SelectedPath);
|
||||
menustate = MENU_ST_SYSTEM1;
|
||||
}
|
||||
|
||||
if (menusub == 2)
|
||||
{
|
||||
tos_load_cartridge(SelectedPath);
|
||||
menustate = MENU_ST_SYSTEM1;
|
||||
}
|
||||
break;
|
||||
|
||||
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);
|
||||
|
||||
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 (; m < OsdGetSize() - 1; m++) OsdWrite(m);
|
||||
OsdWrite(15, STD_EXIT, menusub == 5, 0);
|
||||
|
||||
menustate = MENU_ST_LOAD_CONFIG2;
|
||||
break;
|
||||
|
||||
case MENU_ST_LOAD_CONFIG2:
|
||||
if (menu)
|
||||
{
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 4;
|
||||
}
|
||||
|
||||
// use left/right to adjust video position
|
||||
if (left || right) {
|
||||
if ((menusub == 2) || (menusub == 3)) {
|
||||
if (left && ((signed char)(tos_get_video_adjust(menusub - 2)) > -100))
|
||||
tos_set_video_adjust(menusub - 2, -1);
|
||||
|
||||
if (right && ((signed char)(tos_get_video_adjust(menusub - 2)) < 100))
|
||||
tos_set_video_adjust(menusub - 2, +1);
|
||||
|
||||
menustate = MENU_MIST_VIDEO_ADJUST1;
|
||||
if (select)
|
||||
{
|
||||
if (menusub < 5)
|
||||
{
|
||||
tos_config_load(menusub);
|
||||
tos_upload(NULL);
|
||||
menustate = MENU_NONE1;
|
||||
}
|
||||
else
|
||||
{
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 4;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
if (select) {
|
||||
switch (menusub) {
|
||||
case 0:
|
||||
tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_PAL50HZ);
|
||||
menustate = MENU_MIST_VIDEO_ADJUST1;
|
||||
break;
|
||||
case MENU_ST_SAVE_CONFIG1:
|
||||
helptext = helptexts[HELPTEXT_NONE];
|
||||
menumask = 0x3f;
|
||||
m = 0;
|
||||
parentstate = menustate;
|
||||
OsdSetTitle("Save Config", 0);
|
||||
|
||||
case 1: {
|
||||
// next scanline state
|
||||
int scan = ((tos_system_ctrl() >> 20) + 1) & 3;
|
||||
tos_update_sysctrl((tos_system_ctrl() & ~TOS_CONTROL_SCANLINES) | (scan << 20));
|
||||
menustate = MENU_MIST_VIDEO_ADJUST1;
|
||||
} break;
|
||||
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);
|
||||
|
||||
// entries 2 and 3 use left/right
|
||||
for (; m < OsdGetSize() - 1; m++) OsdWrite(m);
|
||||
OsdWrite(15, STD_EXIT, menusub == 5, 0);
|
||||
|
||||
case 4:
|
||||
menustate = MENU_MIST_VIDEO1;
|
||||
menusub = 4;
|
||||
break;
|
||||
menustate = MENU_ST_SAVE_CONFIG2;
|
||||
break;
|
||||
|
||||
case MENU_ST_SAVE_CONFIG2:
|
||||
if (menu)
|
||||
{
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 5;
|
||||
}
|
||||
|
||||
if (select)
|
||||
{
|
||||
if (menusub < 5)
|
||||
{
|
||||
tos_config_save(menusub);
|
||||
menustate = MENU_NONE1;
|
||||
}
|
||||
else
|
||||
{
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 5;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user