diff --git a/tos.c b/tos.c index 5cc68d3..15dbe67 100644 --- a/tos.c +++ b/tos.c @@ -1074,13 +1074,12 @@ void tos_upload(const char *name) { // let cpu run (release reset) config.system_ctrl &= ~TOS_CONTROL_CPU_RESET; - // send ethernet config, too - if (eth_present) - config.system_ctrl |= TOS_CONTROL_ETHERNET; - else - config.system_ctrl &= ~TOS_CONTROL_ETHERNET; + unsigned long system_ctrl = config.system_ctrl;; - mist_set_control(config.system_ctrl); + // adjust for detected ethernet adapter + if (!eth_present) system_ctrl &= ~TOS_CONTROL_ETHERNET; + + mist_set_control(system_ctrl); } @@ -1395,6 +1394,7 @@ static const char* atari_chipset[]={"ST","STE","MegaSTE","STEroids"}; static const char *config_tos_mem[] = {"512 kB", "1 MB", "2 MB", "4 MB", "8 MB", "14 MB", "--", "--" }; static const char *config_tos_wrprot[] = {"none", "A:", "B:", "A: and B:"}; static const char *config_tos_usb[] = {"none", "control", "debug", "serial", "parallel", "midi"}; +static const char *config_tos_cart[] = {"File", "Ethernec", "Cubase"}; static char tos_file_selected(uint8_t idx, const char *SelectedName) { @@ -1413,7 +1413,7 @@ static char tos_file_selected(uint8_t idx, const char *SelectedName) { case 16: // TOS tos_upload(SelectedName); break; - case 17: // Cart + case 18: // Cart tos_load_cartridge(SelectedName); break; } @@ -1447,8 +1447,8 @@ static char tos_getmenuitem(uint8_t idx, char action, menu_item_t *item) { item->item = ""; if(idx<=6) item->page = 0; else if(idx<=13) item->page = 1; - else if(idx<=20) item->page = 2; - else if(idx<=27) item->page = 3; + else if(idx<=21) item->page = 2; + else if(idx<=28) item->page = 3; else if(idx<=33) item->page = 6; else if(idx<=39) item->page = 4; else if(idx<=45) item->page = 5; @@ -1539,33 +1539,45 @@ static char tos_getmenuitem(uint8_t idx, char action, menu_item_t *item) { strcat(s, tos_get_image_name()); item->item = s; break; - case 17: + case 17: { + uint8_t cartport = ((tos_system_ctrl() & TOS_CONTROL_ETHERNET) ? 1 : 0) | + ((tos_system_ctrl() & TOS_CONTROL_CUBASE) ? 2 : 0); + strcpy(s, " Cart.port: "); + strcat(s, config_tos_cart[cartport]); + item->item = s; + } + break; + case 18: strcpy(s, " Cartridge: "); strcat(s, tos_get_cartridge_name()); item->item = s; + if (tos_system_ctrl() & (TOS_CONTROL_ETHERNET | TOS_CONTROL_CUBASE)) { + item->active = 0; + item->stipple = 1; + } break; - case 18: + case 19: strcpy(s, " USB I/O: "); strcat(s, config_tos_usb[tos_get_cdc_control_redirect()]); item->item = s; break; - case 19: + case 20: item->item = " Reset"; break; - case 20: + case 21: item->item = " Cold boot"; break; // Page 3 - A/V case 1: - case 21: + case 22: strcpy(s, " Screen: "); if (idx==1) strcat(s, " "); if(tos_system_ctrl() & TOS_CONTROL_VIDEO_COLOR) strcat(s, "Color"); else strcat(s, "Mono"); item->item = s; break; - case 22: // Viking card can only be enabled with max 8MB RAM + case 23: // 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"); @@ -1573,7 +1585,7 @@ static char tos_getmenuitem(uint8_t idx, char action, menu_item_t *item) { item->active = enable; item->stipple = !enable; break; - case 23: + case 24: // Blitter is always present in >= STE enable = (tos_system_ctrl() & (TOS_CONTROL_STE | TOS_CONTROL_MSTE))?1:0; strcpy(s, " Blitter: "); @@ -1582,13 +1594,13 @@ static char tos_getmenuitem(uint8_t idx, char action, menu_item_t *item) { item->active = !enable; item->stipple = enable; break; - case 24: + case 25: strcpy(s, " Chipset: "); // extract TOS_CONTROL_STE and TOS_CONTROL_MSTE bits strcat(s, atari_chipset[(tos_system_ctrl()>>23)&3]); item->item = s; break; - case 25: + case 26: if(user_io_core_type() == CORE_TYPE_MIST) { item->item = " Video adjust"; item->newpage = 6; @@ -1598,12 +1610,12 @@ static char tos_getmenuitem(uint8_t idx, char action, menu_item_t *item) { item->item = s; } break; - case 26: + case 27: strcpy(s, " YM-Audio: "); strcat(s, stereo[(tos_system_ctrl() & TOS_CONTROL_STEREO)?1:0]); item->item = s; break; - case 27: + case 28: if(user_io_core_type() == CORE_TYPE_MIST) { item->item = ""; item->active = 0; @@ -1718,49 +1730,61 @@ static char tos_getmenuitem(uint8_t idx, char action, menu_item_t *item) { case 16: // TOS SelectFileNG("IMG", SCAN_LFN, tos_file_selected, 0); break; - case 17: // Cart + case 17: { + unsigned long system_ctrl = tos_system_ctrl(); + uint8_t cartport = ((system_ctrl & TOS_CONTROL_ETHERNET) ? 1 : 0) | + ((system_ctrl & TOS_CONTROL_CUBASE) ? 2 : 0); + cartport += 1; + if (cartport>2) cartport = 0; + system_ctrl &= ~(TOS_CONTROL_ETHERNET | TOS_CONTROL_CUBASE); + if (cartport & 1) system_ctrl |= TOS_CONTROL_ETHERNET; + if (cartport & 2) system_ctrl |= TOS_CONTROL_CUBASE; + tos_update_sysctrl(system_ctrl); + } + break; + case 18: // Cart // if a cart name is set, then remove it if(tos_cartridge_is_inserted()) { tos_load_cartridge(""); } else SelectFileNG("IMG", SCAN_LFN, tos_file_selected, 0); break; - case 18: + case 19: 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); break; - case 19: // Reset + case 20: // Reset tos_reset(0); CloseMenu(); break; - case 20: // Cold Boot + case 21: // Cold Boot tos_reset(1); CloseMenu(); break; case 1: - case 21: + case 22: tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_VIDEO_COLOR); break; - case 22: + case 23: // viking/sm194 tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_VIKING); break; - case 23: + case 24: if(!(tos_system_ctrl() & TOS_CONTROL_STE)) { tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_BLITTER ); } break; - case 24: { + case 25: { 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)); } break; - case 25: + case 26: if(user_io_core_type() == CORE_TYPE_MIST) { item->newpage = 6; } else { @@ -1769,10 +1793,10 @@ static char tos_getmenuitem(uint8_t idx, char action, menu_item_t *item) { tos_update_sysctrl((tos_system_ctrl() & ~TOS_CONTROL_SCANLINES) | (scan << 20)); } break; - case 26: + case 27: tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_STEREO); break; - case 27: + case 28: tos_update_sysctrl(tos_system_ctrl() ^ TOS_CONTROL_BLEND); break; case 29: diff --git a/tos.h b/tos.h index 9c6e5f8..ab668ea 100644 --- a/tos.h +++ b/tos.h @@ -72,7 +72,8 @@ #define TOS_CONTROL_STE 0x00800000 #define TOS_CONTROL_MSTE 0x01000000 #define TOS_CONTROL_ETHERNET 0x02000000 - +#define TOS_CONTROL_CUBASE 0x40000000 + // USB redirection modes // (NONE=0, RS232=1, PARALLEL=2, MIDI=3) #define TOS_CONTROL_REDIR0 0x04000000