return 0;\r
}\r
\r
-static void get_ext(char *file, char *ext)\r
+static void get_ext(const char *file, char *ext)\r
{\r
- char *p;\r
+ const char *p;\r
\r
p = file + strlen(file) - 4;\r
if (p < file) p = file;\r
\r
/* checks if fname points to valid MegaCD image\r
* if so, checks for suitable BIOS */\r
-int emu_cd_check(int *pregion, char *fname_in)\r
+static int emu_cd_check(int *pregion, const char *fname_in)\r
{\r
+ const char *fname = fname_in;\r
unsigned char buf[32];\r
pm_file *cd_f;\r
int region = 4; // 1: Japan, 4: US, 8: Europe\r
- char ext[5], *fname = fname_in;\r
+ char ext[5];\r
cue_track_type type = CT_UNKNOWN;\r
cue_data_t *cue_data = NULL;\r
\r
// valid CD image, check for BIOS..\r
\r
// we need to have config loaded at this point\r
- ret = emu_read_config(1, 1);\r
- if (!ret) emu_read_config(0, 1);\r
+ ret = emu_read_config(1, 0);\r
+ if (!ret) emu_read_config(0, 0);\r
cfg_loaded = 1;\r
\r
if (PicoRegionOverride) {\r
if (!(PicoAHW & PAHW_MCD))\r
memcpy(id_header, rom_data + 0x100, sizeof(id_header));\r
if (!cfg_loaded) {\r
- ret = emu_read_config(1, 1);\r
- if (!ret) emu_read_config(0, 1);\r
+ ret = emu_read_config(1, 0);\r
+ if (!ret) emu_read_config(0, 0);\r
}\r
\r
lprintf("PicoCartInsert(%p, %d);\n", rom_data, rom_size);\r
return 0;\r
}\r
\r
+int emu_swap_cd(const char *fname)\r
+{\r
+ cd_img_type cd_type;\r
+ int ret = -1;\r
+\r
+ cd_type = emu_cd_check(NULL, fname);\r
+ if (cd_type != CIT_NOT_CD)\r
+ ret = Insert_CD(fname, cd_type);\r
+ if (ret != 0) {\r
+ me_update_msg("Load failed, invalid CD image?");\r
+ return 0;\r
+ }\r
+\r
+ strncpy(rom_fname_loaded, fname, sizeof(rom_fname_loaded)-1);\r
+ rom_fname_loaded[sizeof(rom_fname_loaded)-1] = 0;\r
+ return 1;\r
+}\r
+\r
static void romfname_ext(char *dst, const char *prefix, const char *ext)\r
{\r
char *p;\r
char cfg[512];\r
int ret;\r
\r
+ if (!no_defaults)\r
+ emu_set_defconfig();\r
+\r
if (!game)\r
{\r
- if (!no_defaults)\r
- emu_set_defconfig();\r
make_config_cfg(cfg);\r
ret = config_readsect(cfg, NULL);\r
}\r
// read global config, and apply game_def.cfg on top\r
make_config_cfg(cfg);\r
config_readsect(cfg, NULL);\r
- ret = config_readsect("game_def.cfg", sect);\r
+ emu_make_path(cfg, "game_def.cfg", sizeof(cfg));\r
+ ret = config_readsect(cfg, sect);\r
}\r
\r
if (ret == 0)\r
if (PicoAHW & PAHW_MCD)\r
PicoCDBufferInit();\r
\r
- if (currentConfig.EmuOpt & EOPT_PSYNC)\r
- plat_video_wait_vsync();\r
-\r
pemu_loop_prep();\r
\r
timestamp_fps = get_ticks();\r
\r
frames_done = frames_shown = pframes_done = 0;\r
\r
+ plat_video_wait_vsync();\r
+\r
/* loop with resync every 1 sec. */\r
while (engineState == PGS_Running)\r
{\r
if (diff < diff_lim)\r
{\r
// we are too fast\r
- if (currentConfig.EmuOpt & EOPT_PSYNC) {\r
- if (diff_lim - diff > target_frametime/2)\r
- plat_wait_till_us(timestamp_base + target_frametime/4);\r
+ plat_wait_till_us(timestamp_base + diff_lim - target_frametime / 4);\r
+ if (currentConfig.EmuOpt & EOPT_VSYNC)\r
plat_video_wait_vsync();\r
- } else\r
- plat_wait_till_us(timestamp_base + diff_lim);\r
}\r
}\r
\r
\r
emu_set_fastforward(0);\r
\r
- if (PicoAHW & PAHW_MCD)\r
- PicoCDBufferFree();\r
-\r
// save SRAM\r
if ((currentConfig.EmuOpt & EOPT_EN_SRAM) && SRam.changed) {\r
plat_status_msg_busy_first("Writing SRAM/BRAM...");\r
SRam.changed = 0;\r
}\r
\r
- // do menu background to be sure it's right\r
- pemu_forced_frame(POPT_EN_SOFTSCALE);\r
-\r
pemu_loop_end();\r
+\r
+ // pemu_loop_end() might want to do 1 frame for bg image,\r
+ // so free CD buffer here\r
+ if (PicoAHW & PAHW_MCD)\r
+ PicoCDBufferFree();\r
}\r
\r