atarist: update cartridge support.
This commit is contained in:
104
menu.cpp
104
menu.cpp
@@ -3943,12 +3943,11 @@ void HandleUI(void)
|
||||
|
||||
case MENU_ST_MAIN1:
|
||||
OsdSetSize(16);
|
||||
menumask = 0x77f;
|
||||
menumask = 0xeff;
|
||||
OsdSetTitle("AtariST", 0);
|
||||
firstmenu = 0;
|
||||
m = 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));
|
||||
@@ -3959,27 +3958,30 @@ void HandleUI(void)
|
||||
OsdWrite(m++, s, menusub == 2, 0);
|
||||
OsdWrite(m++);
|
||||
|
||||
snprintf(s, 29, " Cart: %s", tos_get_cartridge_name());
|
||||
MenuWrite(m++, s, menusub == 3, !!(tos_system_ctrl() & TOS_CONTROL_DONGLE));
|
||||
MenuWrite(m++);
|
||||
|
||||
snprintf(s, 29, " Joysticks swap: %s", user_io_get_joyswap() ? "Yes" : "No");
|
||||
OsdWrite(m++, s, menusub == 3);
|
||||
OsdWrite(m++, s, menusub == 4);
|
||||
OsdWrite(m++);
|
||||
|
||||
OsdWrite(m++, " Modify config \x16", menusub == 4);
|
||||
OsdWrite(m++, " Load config \x16", menusub == 5);
|
||||
OsdWrite(m++, " Save config \x16", menusub == 6);
|
||||
OsdWrite(m++);
|
||||
OsdWrite(m++, " Modify config \x16", menusub == 5);
|
||||
OsdWrite(m++, " Load config \x16", menusub == 6);
|
||||
OsdWrite(m++, " Save config \x16", menusub == 7);
|
||||
|
||||
if (spi_uio_cmd16(UIO_GET_OSDMASK, 0) & 1)
|
||||
{
|
||||
menumask |= 0x80;
|
||||
OsdWrite(m++, " MT32-pi \x16", menusub == 7);
|
||||
OsdWrite(m++);
|
||||
menumask |= 0x100;
|
||||
OsdWrite(m++, " MT32-pi \x16", menusub == 8);
|
||||
}
|
||||
|
||||
OsdWrite(m++, " Reset", menusub == 8);
|
||||
OsdWrite(m++, " Cold Boot", menusub == 9);
|
||||
OsdWrite(m++);
|
||||
OsdWrite(m++, " Reset", menusub == 9);
|
||||
OsdWrite(m++, " Cold Boot", menusub == 10);
|
||||
|
||||
for (; m < OsdGetSize()-1; m++) OsdWrite(m);
|
||||
OsdWrite(15, STD_EXIT, menusub == 10, 0, OSD_ARROW_RIGHT | OSD_ARROW_LEFT);
|
||||
OsdWrite(15, STD_EXIT, menusub == 11, 0, OSD_ARROW_RIGHT | OSD_ARROW_LEFT);
|
||||
|
||||
menustate = MENU_ST_MAIN2;
|
||||
parentstate = MENU_ST_MAIN1;
|
||||
@@ -4030,6 +4032,26 @@ void HandleUI(void)
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if (!(tos_system_ctrl() & TOS_CONTROL_DONGLE))
|
||||
{
|
||||
if (tos_cartridge_is_inserted())
|
||||
{
|
||||
tos_load_cartridge("");
|
||||
menustate = MENU_ST_MAIN1;
|
||||
}
|
||||
else
|
||||
{
|
||||
fs_Options = SCANO_DIR;
|
||||
fs_MenuSelect = MENU_ST_SYSTEM_FILE_SELECTED;
|
||||
fs_MenuCancel = MENU_ST_MAIN1;
|
||||
strcpy(fs_pFileExt, "STC");
|
||||
if (select) SelectFile(Selected_F[menusub], fs_pFileExt, fs_Options, fs_MenuSelect, fs_MenuCancel);
|
||||
else if (recent_init(menusub)) menustate = MENU_RECENT1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if (select)
|
||||
{
|
||||
user_io_set_joyswap(!user_io_get_joyswap());
|
||||
@@ -4037,7 +4059,7 @@ void HandleUI(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 4: // System submenu
|
||||
case 5: // System submenu
|
||||
if (select)
|
||||
{
|
||||
menustate = MENU_ST_SYSTEM1;
|
||||
@@ -4046,7 +4068,7 @@ void HandleUI(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 5: // Load config
|
||||
case 6: // Load config
|
||||
if (select)
|
||||
{
|
||||
menustate = MENU_ST_LOAD_CONFIG1;
|
||||
@@ -4054,7 +4076,7 @@ void HandleUI(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 6: // Save config
|
||||
case 7: // Save config
|
||||
if (select)
|
||||
{
|
||||
menustate = MENU_ST_SAVE_CONFIG1;
|
||||
@@ -4062,7 +4084,7 @@ void HandleUI(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 7:
|
||||
case 8:
|
||||
if (select)
|
||||
{
|
||||
menustate = MENU_MT32PI_MAIN1;
|
||||
@@ -4070,7 +4092,7 @@ void HandleUI(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 8: // Reset
|
||||
case 9: // Reset
|
||||
if (select)
|
||||
{
|
||||
tos_reset(0);
|
||||
@@ -4078,7 +4100,7 @@ void HandleUI(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 9: // Cold Boot
|
||||
case 10: // Cold Boot
|
||||
if (select)
|
||||
{
|
||||
tos_insert_disk(0, "");
|
||||
@@ -4088,7 +4110,7 @@ void HandleUI(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 10: // Exit
|
||||
case 11: // Exit
|
||||
if (select)
|
||||
{
|
||||
menustate = MENU_NONE1;
|
||||
@@ -4106,7 +4128,7 @@ void HandleUI(void)
|
||||
break;
|
||||
|
||||
case MENU_ST_SYSTEM1:
|
||||
menumask = 0x1ffff;
|
||||
menumask = 0x1fffb;
|
||||
OsdSetTitle("Config", 0);
|
||||
helptext_idx = 0;
|
||||
|
||||
@@ -4123,10 +4145,6 @@ void HandleUI(void)
|
||||
}
|
||||
MenuWrite(m++);
|
||||
|
||||
snprintf(s, 29, " Cart: %s", tos_get_cartridge_name());
|
||||
MenuWrite(m++, s, menusub == 2);
|
||||
MenuWrite(m++);
|
||||
|
||||
strcpy(s, " Memory: ");
|
||||
strcat(s, tos_mem[(tos_system_ctrl() >> 1) & 7]);
|
||||
MenuWrite(m++, s, menusub == 3);
|
||||
@@ -4211,7 +4229,7 @@ void HandleUI(void)
|
||||
else if (back || left)
|
||||
{
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 4;
|
||||
menusub = 5;
|
||||
if (need_reset)
|
||||
{
|
||||
tos_reset(1);
|
||||
@@ -4229,24 +4247,6 @@ void HandleUI(void)
|
||||
if (select) SelectFile(Selected_S[menusub], "VHD", fs_Options, fs_MenuSelect, fs_MenuCancel);
|
||||
else if (recent_init(menusub + 500)) menustate = MENU_RECENT1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (tos_cartridge_is_inserted())
|
||||
{
|
||||
tos_load_cartridge("");
|
||||
menustate = MENU_ST_SYSTEM1;
|
||||
}
|
||||
else
|
||||
{
|
||||
fs_Options = SCANO_DIR;
|
||||
fs_MenuSelect = MENU_ST_SYSTEM_FILE_SELECTED;
|
||||
fs_MenuCancel = MENU_ST_SYSTEM1;
|
||||
strcpy(fs_pFileExt, "IMG");
|
||||
if (select) SelectFile(Selected_F[menusub], "IMG", fs_Options, fs_MenuSelect, fs_MenuCancel);
|
||||
else if (recent_init(menusub)) menustate = MENU_RECENT1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else if (select || plus || minus)
|
||||
{
|
||||
@@ -4362,7 +4362,7 @@ void HandleUI(void)
|
||||
|
||||
case 16:
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 4;
|
||||
menusub = 5;
|
||||
if (need_reset)
|
||||
{
|
||||
tos_reset(1);
|
||||
@@ -4389,12 +4389,12 @@ void HandleUI(void)
|
||||
menustate = MENU_ST_SYSTEM1;
|
||||
}
|
||||
|
||||
if (menusub == 2)
|
||||
if (menusub == 3)
|
||||
{
|
||||
memcpy(Selected_F[menusub], selPath, sizeof(Selected_F[menusub]));
|
||||
recent_update(SelectedDir, selPath, SelectedLabel, menusub);
|
||||
tos_load_cartridge(selPath);
|
||||
menustate = MENU_ST_SYSTEM1;
|
||||
menustate = MENU_ST_MAIN1;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -4433,7 +4433,7 @@ void HandleUI(void)
|
||||
if (menu || left)
|
||||
{
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 5;
|
||||
menusub = 6;
|
||||
}
|
||||
|
||||
if (select)
|
||||
@@ -4447,7 +4447,7 @@ void HandleUI(void)
|
||||
else
|
||||
{
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 5;
|
||||
menusub = 6;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -4483,7 +4483,7 @@ void HandleUI(void)
|
||||
if (menu || left)
|
||||
{
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 6;
|
||||
menusub = 7;
|
||||
}
|
||||
|
||||
if (select)
|
||||
@@ -4496,7 +4496,7 @@ void HandleUI(void)
|
||||
else
|
||||
{
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 6;
|
||||
menusub = 7;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -4623,7 +4623,7 @@ void HandleUI(void)
|
||||
else
|
||||
{
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 7;
|
||||
menusub = 8;
|
||||
}
|
||||
}
|
||||
else if (select || plus || minus)
|
||||
|
||||
@@ -404,27 +404,38 @@ static void fill_tx(uint16_t fill, uint32_t len, int index)
|
||||
user_io_set_download(0);
|
||||
}
|
||||
|
||||
static char tos_cart_img[1024] = {};
|
||||
void tos_load_cartridge(const char *name)
|
||||
{
|
||||
if (name) strncpy(config.cart_img, name, 11);
|
||||
|
||||
// erase that ram area to remove any previously uploaded
|
||||
// image
|
||||
tos_debugf("Erasing cart memory");
|
||||
fill_tx(0xff, 128 * 1024, 2);
|
||||
|
||||
// upload cartridge
|
||||
if (config.cart_img[0] && FileExists(config.cart_img))
|
||||
if (name)
|
||||
{
|
||||
user_io_file_tx(config.cart_img, 2);
|
||||
tos_debugf("%s uploaded", config.cart_img);
|
||||
return;
|
||||
strncpy(tos_cart_img, name, 1023);
|
||||
}
|
||||
else
|
||||
{
|
||||
tos_debugf("Set cartridge: %s\n", tos_cart_img);
|
||||
|
||||
const int sz = (128 * 1024) + 4;
|
||||
uint8_t *buf = new uint8_t[sz];
|
||||
if (buf)
|
||||
{
|
||||
memset(buf, -1, sz);
|
||||
if (!(config.system_ctrl & TOS_CONTROL_DONGLE)) FileLoad(tos_cart_img, buf, sz);
|
||||
|
||||
user_io_set_index(2);
|
||||
user_io_set_download(1);
|
||||
user_io_file_tx_data(buf + 4, sz - 4);
|
||||
DisableFpga();
|
||||
|
||||
user_io_set_download(0);
|
||||
delete buf;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
char tos_cartridge_is_inserted()
|
||||
{
|
||||
return config.cart_img[0];
|
||||
return tos_cart_img[0];
|
||||
}
|
||||
|
||||
void tos_poll()
|
||||
@@ -479,9 +490,9 @@ const char *tos_get_image_name()
|
||||
|
||||
const char *tos_get_cartridge_name()
|
||||
{
|
||||
if (!config.cart_img[0]) return "* no cartridge *";
|
||||
char *p = strrchr(config.cart_img, '/');
|
||||
return p ? p + 1 : config.cart_img;
|
||||
if (!tos_cart_img[0]) return "* no cartridge *";
|
||||
char *p = strrchr(tos_cart_img, '/');
|
||||
return p ? p + 1 : tos_cart_img;
|
||||
}
|
||||
|
||||
char tos_disk_is_inserted(int index)
|
||||
@@ -567,8 +578,6 @@ void tos_reset(char cold)
|
||||
return;
|
||||
}
|
||||
|
||||
tos_load_cartridge(NULL);
|
||||
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
if (FileExists(config.acsi_img[i]))
|
||||
@@ -577,6 +586,7 @@ void tos_reset(char cold)
|
||||
}
|
||||
}
|
||||
}
|
||||
tos_load_cartridge(NULL);
|
||||
tos_update_sysctrl(config.system_ctrl & ~TOS_CONTROL_CPU_RESET); // release reset
|
||||
}
|
||||
|
||||
@@ -647,7 +657,7 @@ const char* tos_get_cfg_string(int num)
|
||||
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 ");
|
||||
//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 ");
|
||||
|
||||
@@ -2735,6 +2735,7 @@ void user_io_send_buttons(char force)
|
||||
if (is_saturn()) saturn_reset();
|
||||
if (is_x86()) x86_init();
|
||||
if (is_pcxt()) pcxt_init();
|
||||
if (is_st()) tos_reset(0);
|
||||
ResetUART();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user