int state_slot = 0;\r
int config_slot = 0, config_slot_current = 0;\r
char lastRomFile[512];\r
+int kb_combo_keys = 0, kb_combo_acts = 0; // keys and actions which need button combos\r
\r
unsigned char *movie_data = NULL;\r
static int movie_size = 0;\r
strlwr_(ext);\r
}\r
\r
-char *biosfiles_us[] = { "us_scd2_9306", "SegaCDBIOS9303", "us_scd1_9210" };\r
-char *biosfiles_eu[] = { "eu_mcd2_9306", "eu_mcd2_9303", "eu_mcd1_9210" };\r
+char *biosfiles_us[] = { "us_scd1_9210", "us_scd2_9306", "SegaCDBIOS9303" };\r
+char *biosfiles_eu[] = { "eu_mcd1_9210", "eu_mcd2_9306", "eu_mcd2_9303" };\r
char *biosfiles_jp[] = { "jp_mcd1_9112", "jp_mcd1_9111" };\r
\r
int emu_findBios(int region, char **bios_file)\r
char *emu_makeRomId(void)\r
{\r
static char id_string[3+0x11+0x11+0x30+16];\r
- int pos;\r
+ int pos, swab = 1;\r
\r
- if (PicoMCD & 1)\r
- strcpy(id_string, "CD|");\r
+ if (PicoMCD & 1) {\r
+ strcpy(id_string, "CD|");\r
+ swab = 0;\r
+ }\r
else strcpy(id_string, "MD|");\r
pos = 3;\r
\r
- pos += extract_text(id_string + pos, id_header + 0x80, 0x0e, 1); // serial\r
+ pos += extract_text(id_string + pos, id_header + 0x80, 0x0e, swab); // serial\r
id_string[pos] = '|'; pos++;\r
- pos += extract_text(id_string + pos, id_header + 0xf0, 0x03, 1); // region\r
+ pos += extract_text(id_string + pos, id_header + 0xf0, 0x03, swab); // region\r
id_string[pos] = '|'; pos++;\r
- pos += extract_text(id_string + pos, id_header + 0x50, 0x30, 1); // overseas name\r
+ pos += extract_text(id_string + pos, id_header + 0x50, 0x30, swab); // overseas name\r
id_string[pos] = 0;\r
\r
return id_string;\r
free(movie_data);\r
movie_data = 0;\r
}\r
- if (!strcmp(ext, ".gmv")) {\r
+ if (!strcmp(ext, ".gmv"))\r
+ {\r
// check for both gmv and rom\r
int dummy;\r
FILE *movie_file = fopen(romFileName, "rb");\r
cd_state = emu_cdCheck(&cd_region);\r
if (cd_state > 0)\r
{\r
+ PicoMCD |= 1;\r
// valid CD image, check for BIOS..\r
\r
// we need to have config loaded at this point\r
}\r
if (!emu_findBios(cd_region, &used_rom_name)) {\r
// bios_help() ?\r
+ PicoMCD &= ~1;\r
return 0;\r
}\r
\r
- PicoMCD |= 1;\r
get_ext(used_rom_name, ext);\r
}\r
else\r
\r
ret = -1;\r
if (config_havesect(cfg, sect)) {\r
+ int vol = currentConfig.volume;\r
emu_setDefaultConfig();\r
ret = config_readsect(cfg, sect);\r
+ currentConfig.volume = vol; // make vol global (bah)\r
}\r
\r
if (ret != 0)\r
PsndRate = currentConfig.s_PsndRate;\r
PicoRegionOverride = currentConfig.s_PicoRegion;\r
PicoAutoRgnOrder = currentConfig.s_PicoAutoRgnOrder;\r
- PicoCDBuffers = currentConfig.s_PicoCDBuffers;\r
+ // PicoCDBuffers = currentConfig.s_PicoCDBuffers; // ignore in this case\r
}\r
}\r
else\r
}\r
}\r
\r
+void emu_findKeyBindCombos(void)\r
+{\r
+ int act, u;\r
+\r
+ // find out which keys and actions are combos\r
+ kb_combo_keys = kb_combo_acts = 0;\r
+ for (act = 0; act < 32; act++)\r
+ {\r
+ int keyc = 0, keyc2 = 0;\r
+ if (act == 16 || act == 17) continue; // player2 flag\r
+ if (act > 17)\r
+ {\r
+ for (u = 0; u < 32; u++)\r
+ if (currentConfig.KeyBinds[u] & (1 << act)) keyc++;\r
+ }\r
+ else\r
+ {\r
+ for (u = 0; u < 32; u++)\r
+ if ((currentConfig.KeyBinds[u] & 0x30000) == 0 && // pl. 1\r
+ (currentConfig.KeyBinds[u] & (1 << act))) keyc++;\r
+ for (u = 0; u < 32; u++)\r
+ if ((currentConfig.KeyBinds[u] & 0x30000) == 1 && // pl. 2\r
+ (currentConfig.KeyBinds[u] & (1 << act))) keyc2++;\r
+ if (keyc2 > keyc) keyc = keyc2;\r
+ }\r
+ if (keyc > 1)\r
+ {\r
+ // loop again and mark those keys and actions as combo\r
+ for (u = 0; u < 32; u++)\r
+ {\r
+ if (currentConfig.KeyBinds[u] & (1 << act)) {\r
+ kb_combo_keys |= 1 << u;\r
+ kb_combo_acts |= 1 << act;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ // printf("combo keys/acts: %08x %08x\n", kb_combo_keys, kb_combo_acts);\r
+}\r
+\r
\r
void emu_updateMovie(void)\r
{\r
return ret;\r
}\r
}\r
+\r