atarist: update cartridge support.

This commit is contained in:
Sorgelig
2022-10-07 23:54:43 +08:00
parent d0961588e1
commit 62375504aa
3 changed files with 82 additions and 71 deletions

104
menu.cpp
View File

@@ -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)

View File

@@ -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 ");

View File

@@ -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();
}