diff --git a/audio.cpp b/audio.cpp index c4ac808..9ace888 100644 --- a/audio.cpp +++ b/audio.cpp @@ -198,14 +198,14 @@ void save_volume() FileSaveConfig("Volume.dat", &vol_att, 1); static char cfg_name[128]; - sprintf(cfg_name, "%s_volume.cfg", user_io_get_core_name_ex()); + sprintf(cfg_name, "%s_volume.cfg", user_io_get_core_name()); FileSaveConfig(cfg_name, &corevol_att, 1); } } void load_volume() { - sprintf(filter_cfg_path, "%s_afilter.cfg", user_io_get_core_name_ex()); + sprintf(filter_cfg_path, "%s_afilter.cfg", user_io_get_core_name()); if (!FileLoadConfig(filter_cfg_path, &filter_cfg, sizeof(filter_cfg) - 1) || filter_cfg[0] > 1) { memset(filter_cfg, 0, sizeof(filter_cfg)); @@ -220,7 +220,7 @@ void load_volume() if (!is_menu()) { static char cfg_name[128]; - sprintf(cfg_name, "%s_volume.cfg", user_io_get_core_name_ex()); + sprintf(cfg_name, "%s_volume.cfg", user_io_get_core_name()); FileLoadConfig(cfg_name, &corevol_att, 1); } @@ -244,7 +244,7 @@ char* audio_get_filter() void audio_set_filter(char *name) { strcpy(filter_cfg + 1, name); - sprintf(filter_cfg_path, "%s_afilter.cfg", user_io_get_core_name_ex()); + sprintf(filter_cfg_path, "%s_afilter.cfg", user_io_get_core_name()); FileSaveConfig(filter_cfg_path, &filter_cfg, sizeof(filter_cfg)); setFilter(); } @@ -252,7 +252,7 @@ void audio_set_filter(char *name) void audio_set_filter_en(int n) { filter_cfg[0] = n ? 1 : 0; - sprintf(filter_cfg_path, "%s_afilter.cfg", user_io_get_core_name_ex()); + sprintf(filter_cfg_path, "%s_afilter.cfg", user_io_get_core_name()); FileSaveConfig(filter_cfg_path, &filter_cfg, sizeof(filter_cfg)); setFilter(); } diff --git a/cfg.cpp b/cfg.cpp index 671ac6b..021e2df 100644 --- a/cfg.cpp +++ b/cfg.cpp @@ -174,7 +174,10 @@ static int ini_get_section(char* buf) else buf[i] = toupper(buf[i]); } - if (!strcasecmp(buf, "MiSTer") || ((wc_pos >= 0) ? !strncasecmp(buf, user_io_get_core_name_ex(), wc_pos) : !strcasecmp(buf, user_io_get_core_name_ex()))) + if (!strcasecmp(buf, "MiSTer") || + (is_arcade() && !strcasecmp(buf, "arcade")) || + ((wc_pos >= 0) ? !strncasecmp(buf, user_io_get_core_name(1), wc_pos) : !strcasecmp(buf, user_io_get_core_name(1))) || + ((wc_pos >= 0) ? !strncasecmp(buf, user_io_get_core_name(0), wc_pos) : !strcasecmp(buf, user_io_get_core_name(0)))) { ini_parser_debugf("Got SECTION '%s'", buf); return 1; @@ -271,7 +274,7 @@ static void ini_parse(int alt) int section = INI_SECTION_INVALID_ID; int line_status; - ini_parser_debugf("Start INI parser for core \"%s\".", user_io_get_core_name_ex()); + ini_parser_debugf("Start INI parser for core \"%s\"(%s).", user_io_get_core_name(0), user_io_get_core_name(1)); memset(&ini_file, 0, sizeof(ini_file)); diff --git a/input.cpp b/input.cpp index 8d9b5c8..46b3739 100644 --- a/input.cpp +++ b/input.cpp @@ -1134,7 +1134,7 @@ static char *get_map_name(int dev, int def) { static char name[128]; if (def || is_menu()) sprintf(name, "input_%s_v3.map", input[dev].idstr); - else sprintf(name, "%s_input_%s_v3.map", user_io_get_core_name_ex(), input[dev].idstr); + else sprintf(name, "%s_input_%s_v3.map", user_io_get_core_name(), input[dev].idstr); return name; } @@ -1173,7 +1173,7 @@ void finish_map_setting(int dismiss) void input_lightgun_save(int idx, uint16_t *cal) { static char name[128]; - sprintf(name, "%s_gun_cal_%04x_%04x.cfg", user_io_get_core_name_ex(), input[idx].vid, input[idx].pid); + sprintf(name, "%s_gun_cal_%04x_%04x.cfg", user_io_get_core_name(), input[idx].vid, input[idx].pid); FileSaveConfig(name, cal, 4 * sizeof(uint16_t)); memcpy(input[idx].guncal, cal, sizeof(input[idx].guncal)); } @@ -1181,7 +1181,7 @@ void input_lightgun_save(int idx, uint16_t *cal) static void input_lightgun_load(int idx) { static char name[128]; - sprintf(name, "%s_gun_cal_%04x_%04x.cfg", user_io_get_core_name_ex(), input[idx].vid, input[idx].pid); + sprintf(name, "%s_gun_cal_%04x_%04x.cfg", user_io_get_core_name(), input[idx].vid, input[idx].pid); FileLoadConfig(name, input[idx].guncal, 4 * sizeof(uint16_t)); } diff --git a/menu.cpp b/menu.cpp index 3aee816..da4f987 100644 --- a/menu.cpp +++ b/menu.cpp @@ -983,7 +983,6 @@ void HandleUI(void) { case CORE_TYPE_8BIT: case CORE_TYPE_SHARPMZ: - case CORE_TYPE_ARCHIE: break; default: @@ -1849,6 +1848,12 @@ void HandleUI(void) // set helptext with core display on top of basic info sprintf(helptext_custom, HELPTEXT_SPACER); strcat(helptext_custom, OsdCoreNameGet()); + if (is_arcade()) + { + strcat(helptext_custom, " ("); + strcat(helptext_custom, user_io_get_core_name(1)); + strcat(helptext_custom, ")"); + } strcat(helptext_custom, helptexts[HELPTEXT_MAIN]); helptext_idx = HELPTEXT_CUSTOM; @@ -2183,7 +2188,7 @@ void HandleUI(void) if (store_name) { char str[64]; - sprintf(str, "%s.f%d", user_io_get_core_name_ex(), ioctl_index); + sprintf(str, "%s.f%d", user_io_get_core_name(), ioctl_index); FileSaveConfig(str, selPath, sizeof(selPath)); } @@ -2269,7 +2274,7 @@ void HandleUI(void) MenuWrite(n++, " Core \x16", menusub == 0, 0); MenuWrite(n++); - sprintf(s, " Define %s buttons ", is_menu() ? "System" : user_io_get_core_name_ex()); + sprintf(s, " Define %s buttons ", is_menu() ? "System" : user_io_get_core_name()); s[27] = '\x16'; s[28] = 0; MenuWrite(n++, s, menusub == 1, 0); @@ -2549,11 +2554,6 @@ void HandleUI(void) // go back to core requesting this menu switch (user_io_core_type()) { - case CORE_TYPE_ARCHIE: - menusub = 0; - menustate = MENU_ARCHIE_MAIN1; - break; - case CORE_TYPE_8BIT: if (is_minimig()) { @@ -2866,11 +2866,11 @@ void HandleUI(void) if (select) { int mode = GetUARTMode() | (GetMidiLinkMode() << 8); - sprintf(s, "uartmode.%s", user_io_get_core_name_ex()); + sprintf(s, "uartmode.%s", user_io_get_core_name()); FileSaveConfig(s, &mode, 4); uint64_t speeds = GetUARTbaud(3); speeds = (speeds << 32) | GetUARTbaud(1); - sprintf(s, "uartspeed.%s", user_io_get_core_name_ex()); + sprintf(s, "uartspeed.%s", user_io_get_core_name()); FileSaveConfig(s, &speeds, 8); menustate = MENU_COMMON1; menusub = 4; @@ -3177,10 +3177,6 @@ void HandleUI(void) // go back to core requesting this menu switch (user_io_core_type()) { - case CORE_TYPE_ARCHIE: - menusub = 0; - menustate = MENU_ARCHIE_MAIN1; - break; case CORE_TYPE_8BIT: if (is_menu()) { diff --git a/support/arcade/mra_loader.cpp b/support/arcade/mra_loader.cpp index fe563eb..587ea33 100644 --- a/support/arcade/mra_loader.cpp +++ b/support/arcade/mra_loader.cpp @@ -1008,17 +1008,8 @@ static int xml_read_setname(XMLEvent evt, const XMLNode* node, SXML_CHAR* text, return true; } - -static int arcade_type = 0; -int is_arcade() -{ - return arcade_type; -} - int arcade_send_rom(const char *xml) { - arcade_type = 1; - const char *p = strrchr(xml, '/'); p = p ? p + 1 : xml; snprintf(switches.name, sizeof(switches.name), p); diff --git a/support/arcade/mra_loader.h b/support/arcade/mra_loader.h index a5c8864..8085d66 100644 --- a/support/arcade/mra_loader.h +++ b/support/arcade/mra_loader.h @@ -4,7 +4,6 @@ int arcade_send_rom(const char *xml); int arcade_load(const char *xml); void arcade_check_error(); -int is_arcade(); struct dip_struct { diff --git a/user_io.cpp b/user_io.cpp index 006a69b..55e06fa 100644 --- a/user_io.cpp +++ b/user_io.cpp @@ -130,6 +130,9 @@ char* user_io_create_config_name() } static char core_name[32] = {}; +static char ovr_name[32] = {}; +static char orig_name[32] = {}; + static char filepath_store[1024]; char *user_io_make_filepath(const char *path, const char *filename) @@ -139,7 +142,6 @@ char *user_io_make_filepath(const char *path, const char *filename) return filepath_store; } -static char ovr_name[32] = {}; void user_io_name_override(const char* name) { snprintf(ovr_name, sizeof(ovr_name), "%s", name); @@ -151,9 +153,9 @@ void user_io_set_core_name(const char *name) printf("Core name set to \"%s\"\n", core_name); } -char *user_io_get_core_name() +char *user_io_get_core_name(int orig) { - return core_name; + return orig ? orig_name : core_name; } char *user_io_get_core_path(const char *suffix, int recheck) @@ -172,21 +174,10 @@ char *user_io_get_core_path(const char *suffix, int recheck) return tmp; } -const char *user_io_get_core_name_ex() +static char is_arcade_type = 0; +char is_arcade() { - switch (user_io_core_type()) - { - case CORE_TYPE_ARCHIE: - return "ARCHIE"; - - case CORE_TYPE_SHARPMZ: - return "SHARPMZ"; - - case CORE_TYPE_8BIT: - return core_name; - } - - return ""; + return is_arcade_type; } static int is_menu_type = 0; @@ -255,7 +246,6 @@ char is_pce() static int is_archie_type = 0; char is_archie() { - if (core_type == CORE_TYPE_ARCHIE) return 1; if (!is_archie_type) is_archie_type = strcasecmp(core_name, "ARCHIE") ? 2 : 1; return (is_archie_type == 1); } @@ -292,7 +282,7 @@ char has_menu() { if (disable_osd) return 0; - if (!is_no_type) is_no_type = user_io_get_core_name_ex()[0] ? 1 : 2; + if (!is_no_type) is_no_type = user_io_get_core_name()[0] ? 1 : 2; return (is_no_type == 1); } @@ -314,13 +304,12 @@ void user_io_read_core_name() is_st_type = 0; core_name[0] = 0; + char *p = user_io_get_confstr(0); + if (p && p[0]) snprintf(orig_name, sizeof(orig_name), "%s", p); + // get core name if (ovr_name[0]) strcpy(core_name, ovr_name); - else - { - char *p = user_io_get_confstr(0); - if (p && p[0]) strcpy(core_name, p); - } + else if (orig_name[0]) strcpy(core_name, p); printf("Core name is \"%s\"\n", core_name); } @@ -632,7 +621,7 @@ static void parse_config() if (p[0] == 'F' && p[1] == 'C') { static char str[1024]; - sprintf(str, "%s.f%c", user_io_get_core_name_ex(), p[2]); + sprintf(str, "%s.f%c", user_io_get_core_name(), p[2]); if (FileLoadConfig(str, str, sizeof(str))) { user_io_file_tx(str, p[2] - '0'); @@ -775,7 +764,7 @@ void SetUARTMode(int mode) spi_w(baud >> 16); DisableIO(); - MakeFile("/tmp/CORENAME", user_io_get_core_name_ex()); + MakeFile("/tmp/CORENAME", user_io_get_core_name()); char data[20]; sprintf(data, "%d", baud); @@ -1032,8 +1021,7 @@ void user_io_init(const char *path, const char *xml) core_type = CORE_TYPE_8BIT; } - if ((core_type != CORE_TYPE_ARCHIE) && - (core_type != CORE_TYPE_8BIT) && + if ((core_type != CORE_TYPE_8BIT) && (core_type != CORE_TYPE_SHARPMZ)) { core_type = CORE_TYPE_UNKNOWN; @@ -1052,7 +1040,11 @@ void user_io_init(const char *path, const char *xml) printf("Using default MRA: %s\n", xml); } - if (xml) arcade_override_name(xml); + if (xml) + { + is_arcade_type = 1; + arcade_override_name(xml); + } if (core_type == CORE_TYPE_8BIT) { @@ -1065,6 +1057,10 @@ void user_io_init(const char *path, const char *xml) // send a reset user_io_8bit_set_status(UIO_STATUS_RESET, UIO_STATUS_RESET); } + else if (core_type == CORE_TYPE_SHARPMZ) + { + user_io_set_core_name("sharpmz"); + } cfg_parse(); if (cfg.bootcore[0] != '\0') @@ -1084,15 +1080,6 @@ void user_io_init(const char *path, const char *xml) printf("Unable to identify core (%x)!\n", core_type); break; - case CORE_TYPE_ARCHIE: - puts("Identified Archimedes core"); - spi_uio_cmd16(UIO_SET_MEMSZ, sdram_sz(-1)); - send_rtc(1); - user_io_set_core_name("Archie"); - archie_init(); - parse_buttons(); - break; - case CORE_TYPE_SHARPMZ: puts("Identified Sharp MZ Series core"); user_io_set_core_name("sharpmz"); @@ -1275,11 +1262,11 @@ void user_io_init(const char *path, const char *xml) } } - sprintf(mainpath, "uartmode.%s", user_io_get_core_name_ex()); + sprintf(mainpath, "uartmode.%s", user_io_get_core_name()); FileLoadConfig(mainpath, &mode, 4); uint64_t speeds = 0; - sprintf(mainpath, "uartspeed.%s", user_io_get_core_name_ex()); + sprintf(mainpath, "uartspeed.%s", user_io_get_core_name()); FileLoadConfig(mainpath, &speeds, 8); ValidateUARTbaud(1, speeds & 0xFFFFFFFF); @@ -1551,7 +1538,7 @@ int user_io_file_mount(const char *name, unsigned char index, char pre) if (len) { - if (!strcasecmp(user_io_get_core_name_ex(), "apple-ii")) + if (!strcasecmp(user_io_get_core_name(), "apple-ii")) { ret = dsk2nib(name, sd_image + index); } @@ -2580,8 +2567,7 @@ static uint32_t res_timer = 0; void user_io_poll() { - if ((core_type != CORE_TYPE_ARCHIE) && - (core_type != CORE_TYPE_SHARPMZ) && + if ((core_type != CORE_TYPE_SHARPMZ) && (core_type != CORE_TYPE_8BIT)) { return; // no user io for the installed core @@ -2703,7 +2689,7 @@ void user_io_poll() { x86_poll(); } - else if ((core_type == CORE_TYPE_8BIT || core_type == CORE_TYPE_ARCHIE) && !is_menu() && !is_minimig()) + else if ((core_type == CORE_TYPE_8BIT) && !is_menu() && !is_minimig()) { if (is_st()) tos_poll(); @@ -2950,7 +2936,7 @@ void user_io_poll() send_rtc(1); } - if (core_type == CORE_TYPE_ARCHIE || is_archie()) archie_poll(); + if (is_archie()) archie_poll(); if (core_type == CORE_TYPE_SHARPMZ) sharpmz_poll(); static uint8_t leds = 0; @@ -3254,7 +3240,7 @@ static void send_keycode(unsigned short key, int press) return; } - if (core_type == CORE_TYPE_ARCHIE || is_archie()) + if (is_archie()) { if (press > 1) return; @@ -3409,10 +3395,6 @@ void user_io_mouse(unsigned char b, int16_t x, int16_t y, int16_t w) mouse_flags |= 0x08 | (b & 7); } return; - - case CORE_TYPE_ARCHIE: - archie_mouse(b, x, y); - return; } } @@ -3445,7 +3427,6 @@ void user_io_check_reset(unsigned short modifiers, char useKeys) else switch (core_type) { - case CORE_TYPE_ARCHIE: case CORE_TYPE_8BIT: if(is_minimig()) minimig_reset(); else kbd_reset = 1; diff --git a/user_io.h b/user_io.h index d1fdd5b..bfa609c 100644 --- a/user_io.h +++ b/user_io.h @@ -146,7 +146,6 @@ // core type value should be unlikely to be returned by broken cores #define CORE_TYPE_UNKNOWN 0x55 #define CORE_TYPE_8BIT 0xa4 // generic core -#define CORE_TYPE_ARCHIE 0xa6 // Acorn Archimedes #define CORE_TYPE_SHARPMZ 0xa7 // Sharp MZ Series #define CORE_TYPE_8BIT2 0xa8 // generic core using dual SDRAM @@ -197,9 +196,8 @@ int user_io_get_kbd_reset(); uint32_t user_io_get_file_crc(); int user_io_file_mount(const char *name, unsigned char index = 0, char pre = 0); char *user_io_make_filepath(const char *path, const char *filename); -char *user_io_get_core_name(); +char *user_io_get_core_name(int orig = 0); char *user_io_get_core_path(const char *suffix = NULL, int recheck = 0); -const char *user_io_get_core_name_ex(); void user_io_name_override(const char* name); char has_menu(); @@ -278,6 +276,7 @@ char is_archie(); char is_gba(); char is_c64(); char is_st(); +char is_arcade(); #define HomeDir(x) user_io_get_core_path(x) #define CoreName user_io_get_core_name() diff --git a/video.cpp b/video.cpp index 36ffbea..11cd470 100644 --- a/video.cpp +++ b/video.cpp @@ -313,7 +313,7 @@ void video_set_scaler_coeff(char *name) static void loadScalerCfg() { - sprintf(scaler_cfg, "%s_scaler.cfg", user_io_get_core_name_ex()); + sprintf(scaler_cfg, "%s_scaler.cfg", user_io_get_core_name()); if (!FileLoadConfig(scaler_cfg, &scaler_flt_cfg, sizeof(scaler_flt_cfg) - 1) || scaler_flt_cfg[0]>4) { memset(scaler_flt_cfg, 0, sizeof(scaler_flt_cfg)); @@ -424,7 +424,7 @@ void video_set_gamma_curve(char *name) static void loadGammaCfg() { - sprintf(gamma_cfg_path, "%s_gamma.cfg", user_io_get_core_name_ex()); + sprintf(gamma_cfg_path, "%s_gamma.cfg", user_io_get_core_name()); if (!FileLoadConfig(gamma_cfg_path, &gamma_cfg, sizeof(gamma_cfg) - 1) || gamma_cfg[0]>1) { memset(gamma_cfg, 0, sizeof(gamma_cfg));