#include <stdlib.h>\r
#include <string.h>\r
#include <stdarg.h>\r
-#ifndef NO_SYNC\r
+#ifdef __GP2X__\r
#include <unistd.h>\r
#endif\r
\r
#include <pico/pico_int.h>\r
#include <pico/patch.h>\r
\r
+#ifndef _WIN32\r
+#define PATH_SEP "/"\r
+#define PATH_SEP_C '/'\r
+#else\r
+#define PATH_SEP "\\"\r
+#define PATH_SEP_C '\\'\r
+#endif\r
\r
#define STATUS_MSG_TIMEOUT 2000\r
\r
void *g_screen_ptr;\r
\r
-#if !SCREEN_SIZE_FIXED\r
-int g_screen_width = SCREEN_WIDTH;\r
-int g_screen_height = SCREEN_HEIGHT;\r
-#endif\r
+int g_screen_width = 320;\r
+int g_screen_height = 240;\r
\r
char *PicoConfigFile = "config.cfg";\r
currentConfig_t currentConfig, defaultConfig;\r
int state_slot = 0;\r
int config_slot = 0, config_slot_current = 0;\r
int pico_pen_x = 320/2, pico_pen_y = 240/2;\r
-int pico_inp_mode = 0;\r
+int pico_inp_mode;\r
+int flip_after_sync;\r
int engineState = PGS_Menu;\r
\r
static short __attribute__((aligned(4))) sndBuffer[2*44100/50];\r
// additional movie stuff\r
if (movie_data)\r
{\r
- if (movie_data[0x14] == '6')\r
- PicoOpt |= POPT_6BTN_PAD; // 6 button pad\r
- else PicoOpt &= ~POPT_6BTN_PAD;\r
+ enum input_device indev = (movie_data[0x14] == '6') ?\r
+ PICO_INPUT_PAD_6BTN : PICO_INPUT_PAD_3BTN;\r
+ PicoSetInputDevice(0, indev);\r
+ PicoSetInputDevice(1, indev);\r
+\r
PicoOpt |= POPT_DIS_VDP_FIFO; // no VDP fifo timing\r
if (movie_data[0xF] >= 'A') {\r
if (movie_data[0x16] & 0x80) {\r
defaultConfig.s_PicoCDBuffers = 0;\r
defaultConfig.confirm_save = EOPT_CONFIRM_SAVE;\r
defaultConfig.Frameskip = -1; // auto\r
+ defaultConfig.input_dev0 = PICO_INPUT_PAD_3BTN;\r
+ defaultConfig.input_dev1 = PICO_INPUT_PAD_3BTN;\r
defaultConfig.volume = 50;\r
defaultConfig.gamma = 100;\r
defaultConfig.scaling = 0;\r
defaultConfig.turbo_rate = 15;\r
+ defaultConfig.msh2_khz = PICO_MSH2_HZ / 1000;\r
+ defaultConfig.ssh2_khz = PICO_SSH2_HZ / 1000;\r
\r
// platform specific overrides\r
pemu_prep_defconfig();\r
PicoRegionOverride = currentConfig.s_PicoRegion;\r
PicoAutoRgnOrder = currentConfig.s_PicoAutoRgnOrder;\r
PicoCDBuffers = currentConfig.s_PicoCDBuffers;\r
- p32x_msh2_multiplier = MSH2_MULTI_DEFAULT;\r
- p32x_ssh2_multiplier = SSH2_MULTI_DEFAULT;\r
}\r
\r
int emu_read_config(const char *rom_fname, int no_defaults)\r
lprintf("emu_write_config: %s ", cfg);\r
ret = config_write(cfg);\r
if (write_lrom) config_writelrom(cfg);\r
-#ifndef NO_SYNC\r
+#ifdef __GP2X__\r
sync();\r
#endif\r
lprintf((ret == 0) ? "(ok)\n" : "(failed)\n");\r
ret = fwrite(sram_data, 1, sram_size, sramFile);\r
ret = (ret != sram_size) ? -1 : 0;\r
fclose(sramFile);\r
-#ifndef NO_SYNC\r
+#ifdef __GP2X__\r
sync();\r
#endif\r
}\r
{\r
ret = PicoState(saveFname, !load);\r
if (!ret) {\r
-#ifndef NO_SYNC\r
+#ifdef __GP2X__\r
if (!load) sync();\r
#endif\r
emu_status_msg(load ? "STATE LOADED" : "STATE SAVED");\r
char cfg[512];\r
make_config_cfg(cfg);\r
config_writelrom(cfg);\r
-#ifndef NO_SYNC\r
+#ifdef __GP2X__\r
sync();\r
#endif\r
}\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
- if (fpsbuff[5] == 0) { fpsbuff[5] = fpsbuff[6] = ' '; fpsbuff[7] = 0; }\r
- }\r
+ if (currentConfig.EmuOpt & EOPT_SHOW_FPS)\r
+ sprintf(fpsbuff, "%02i/%02i ", frames_shown, frames_done);\r
#endif\r
frames_shown = frames_done = 0;\r
timestamp_fps += ms_to_ticks(1000);\r
PicoFrame();\r
pemu_finalize_frame(fpsbuff, notice_msg);\r
\r
- // plat_video_flip();\r
+ if (!flip_after_sync)\r
+ plat_video_flip();\r
\r
/* frame limiter */\r
if (!reset_timing && !(currentConfig.EmuOpt & (EOPT_NO_FRMLIMIT|EOPT_EXT_FRMLIMIT)))\r
}\r
}\r
\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
+ if (flip_after_sync)\r
+ plat_video_flip();\r
\r
pframes_done++; frames_done++; frames_shown++;\r
\r