// check for both gmv and rom\r
int dummy;\r
FILE *movie_file = fopen(rom_fname, "rb");\r
- if(!movie_file) {\r
+ if (!movie_file) {\r
me_update_msg("Failed to open movie.");\r
return 0;\r
}\r
fseek(movie_file, 0, SEEK_END);\r
movie_size = ftell(movie_file);\r
fseek(movie_file, 0, SEEK_SET);\r
- if(movie_size < 64+3) {\r
+ if (movie_size < 64+3) {\r
me_update_msg("Invalid GMV file.");\r
fclose(movie_file);\r
return 0;\r
}\r
movie_data = malloc(movie_size);\r
- if(movie_data == NULL) {\r
+ if (movie_data == NULL) {\r
me_update_msg("low memory.");\r
fclose(movie_file);\r
return 0;\r
}\r
- fread(movie_data, 1, movie_size, movie_file);\r
+ dummy = fread(movie_data, 1, movie_size, movie_file);\r
fclose(movie_file);\r
if (strncmp((char *)movie_data, "Gens Movie TEST", 15) != 0) {\r
me_update_msg("Invalid GMV file.");\r
cfg_buff_512[511] = 0;\r
}\r
\r
+void emu_prep_defconfig(void)\r
+{\r
+ memset(&defaultConfig, 0, sizeof(defaultConfig));\r
+ defaultConfig.EmuOpt = 0x9d | EOPT_RAM_TIMINGS|EOPT_CONFIRM_SAVE|EOPT_EN_CD_LEDS;\r
+ defaultConfig.s_PicoOpt = POPT_EN_STEREO|POPT_EN_FM|POPT_EN_PSG|POPT_EN_Z80 |\r
+ POPT_EN_MCD_PCM|POPT_EN_MCD_CDDA|POPT_EN_SVP_DRC|POPT_ACC_SPRITES |\r
+ POPT_EN_32X|POPT_EN_PWM;\r
+ defaultConfig.s_PsndRate = 44100;\r
+ defaultConfig.s_PicoRegion = 0; // auto\r
+ defaultConfig.s_PicoAutoRgnOrder = 0x184; // US, EU, JP\r
+ defaultConfig.s_PicoCDBuffers = 0;\r
+ defaultConfig.Frameskip = -1; // auto\r
+ defaultConfig.volume = 50;\r
+ defaultConfig.gamma = 100;\r
+ defaultConfig.scaling = 0;\r
+ defaultConfig.turbo_rate = 15;\r
+\r
+ // platform specific overrides\r
+ pemu_prep_defconfig();\r
+}\r
+\r
void emu_set_defconfig(void)\r
{\r
memcpy(¤tConfig, &defaultConfig, sizeof(currentConfig));\r
}\r
}\r
\r
- plat_validate_config();\r
+ pemu_validate_config();\r
\r
// some sanity checks\r
#ifdef PSP\r
sram_size = SRam.size;\r
sram_data = SRam.data;\r
}\r
- if (!sram_data) return 0; // SRam forcefully disabled for this game\r
+ if (sram_data == NULL)\r
+ return 0; // SRam forcefully disabled for this game\r
\r
if (load)\r
{\r
sramFile = fopen(saveFname, "rb");\r
- if(!sramFile) return -1;\r
- fread(sram_data, 1, sram_size, sramFile);\r
+ if (!sramFile)\r
+ return -1;\r
+ ret = fread(sram_data, 1, sram_size, sramFile);\r
+ ret = ret > 0 ? 0 : -1;\r
fclose(sramFile);\r
if ((PicoAHW & PAHW_MCD) && (PicoOpt&POPT_EN_MCD_RAMCART))\r
memcpy32((int *)Pico_mcd->bram, (int *)sram_data, 0x2000/4);\r
\r
void emu_32x_startup(void)\r
{\r
- plat_video_toggle_renderer(0, 1, 0);\r
+ plat_video_toggle_renderer(0, 0);\r
system_announce();\r
}\r
\r
PicoStateProgressCB = NULL;\r
}\r
}\r
- if ((which & PEV_SWITCH_RND) && !(PicoAHW & PAHW_32X))\r
+ if (which & PEV_SWITCH_RND)\r
{\r
- plat_video_toggle_renderer(1, 0, 0);\r
+ plat_video_toggle_renderer(1, 0);\r
}\r
if (which & (PEV_SSLOT_PREV|PEV_SSLOT_NEXT))\r
{\r
mkdir_path(path, pos, "srm");\r
mkdir_path(path, pos, "brm");\r
\r
+ pprof_init();\r
+\r
make_config_cfg(path);\r
config_readlrom(path);\r
\r
#endif\r
}\r
\r
+ pprof_finish();\r
+\r
PicoExit();\r
}\r
\r
unsigned int timestamp;\r
int diff, diff_lim;\r
\r
+ pprof_start(main);\r
+\r
timestamp = get_ticks();\r
if (reset_timing) {\r
reset_timing = 0;\r
}\r
bench_fps += frames_shown;\r
sprintf(fpsbuff, "%02i/%02i/%02i", frames_shown, bench_fps_s, (bf[0]+bf[1]+bf[2]+bf[3])>>2);\r
+ printf("%s\n", fpsbuff);\r
#else\r
if (currentConfig.EmuOpt & EOPT_SHOW_FPS) {\r
sprintf(fpsbuff, "%02i/%02i", frames_shown, frames_done);\r
{\r
if ((currentConfig.EmuOpt & EOPT_NO_FRMLIMIT) && currentConfig.Frameskip >= 0)\r
pframes_done = 0;\r
- else {\r
+ else\r
pframes_done -= target_fps;\r
- /* don't allow it to drift during heavy slowdowns */\r
- if (pframes_done < -5) {\r
- reset_timing = 1;\r
- continue;\r
- }\r
- if (pframes_done < -2)\r
- pframes_done = -2;\r
+ if (pframes_done < -2) {\r
+ /* don't drag more than 2 frames behind */\r
+ pframes_done = -2;\r
+ timestamp_base = timestamp - 2 * target_frametime;\r
}\r
- timestamp_base += ms_to_ticks(1000);\r
+ else\r
+ timestamp_base += ms_to_ticks(1000);\r
}\r
\r
diff = timestamp - timestamp_base;\r
else if (diff > diff_lim)\r
{\r
/* no time left for this frame - skip */\r
- if (diff - diff_lim >= ms_to_ticks(200)) {\r
- /* if too much behind, reset instead */\r
- reset_timing = 1;\r
+ /* limit auto frameskip to 8 */\r
+ if (frames_done / 8 <= frames_shown) {\r
+ emu_update_input();\r
+ skip_frame(diff < diff_lim + target_frametime * 16);\r
+ pframes_done++; frames_done++;\r
continue;\r
}\r
- emu_update_input();\r
- skip_frame(diff < diff_lim + target_frametime * 2);\r
- pframes_done++; frames_done++;\r
- continue;\r
}\r
\r
emu_update_input();\r
PicoFrame();\r
+ pemu_finalize_frame(fpsbuff, notice_msg);\r
+\r
+ // plat_video_flip();\r
\r
/* frame limiter */\r
if (!reset_timing && !(currentConfig.EmuOpt & (EOPT_NO_FRMLIMIT|EOPT_EXT_FRMLIMIT)))\r
}\r
}\r
\r
- pemu_update_display(fpsbuff, notice_msg);\r
+ // XXX: for some plats it might be better to flip before vsync\r
+ // (due to shadow registers in display hw)\r
+ plat_video_flip();\r
\r
pframes_done++; frames_done++; frames_shown++;\r
+\r
+ pprof_end(main);\r
}\r
\r
emu_set_fastforward(0);\r