static char rom_fname_reload[MAXPATHLEN];
static char last_selected_fname[MAXPATHLEN];
static int warned_about_bios, region, in_type_sel1, in_type_sel2;
+static int psx_clock;
static int memcard1_sel, memcard2_sel;
int g_opts, analog_deadzone;
+#ifdef __ARM_ARCH_7A__
+#define DEFAULT_PSX_CLOCK 57
+#define DEFAULT_PSX_CLOCK_S "57"
+#else
+#define DEFAULT_PSX_CLOCK 50
+#define DEFAULT_PSX_CLOCK_S "50"
+#endif
+
// sound plugin
extern int iUseReverb;
extern int iUseInterpolation;
Config.PsxAuto = 0;
Config.PsxType = region - 1;
}
+ cycle_multiplier = 10000 / psx_clock;
+
switch (in_type_sel1) {
case 1: in_type1 = PSE_PAD_TYPE_ANALOGPAD; break;
case 2: in_type1 = PSE_PAD_TYPE_GUNCON; break;
scaling = SCALE_4_3;
volume_boost = 0;
frameskip = 0;
- analog_deadzone = 50;
+ analog_deadzone = 70;
+ psx_clock = DEFAULT_PSX_CLOCK;
region = 0;
in_type_sel1 = in_type_sel2 = 0;
iXAPitch = 0;
iSPUIRQWait = 1;
iUseTimer = 2;
+#ifndef __ARM_ARCH_7A__ /* XXX */
+ iUseReverb = 0;
+ iUseInterpolation = 0;
+#endif
menu_sync_config();
}
CE_INTVAL(warned_about_bios),
CE_INTVAL(in_evdev_allow_abs_only),
CE_INTVAL(volume_boost),
+ CE_INTVAL(psx_clock),
};
static char *get_cd_label(void)
"(timing hack, breaks other games)";
static const char h_cfg_cdrr[] = "Compatibility tweak (fixes Team Buddies, maybe more)\n"
"(CD timing hack, breaks FMVs)";
+static const char h_cfg_psxclk[] = "Over/under-clock the PSX, default is " DEFAULT_PSX_CLOCK_S "\n"
+ "(may break games, must reload game to take effect)";
static const char h_cfg_nodrc[] = "Disable dynamic recompiler and use interpreter\n"
"Might be useful to overcome some dynarec bugs";
mee_onoff_h ("Rootcounter hack", 0, Config.RCntFix, 1, h_cfg_rcnt1),
mee_onoff_h ("Rootcounter hack 2", 0, Config.VSyncWA, 1, h_cfg_rcnt2),
mee_enum_h ("CD read reschedule hack",0, Config.CdrReschedule, men_cfg_cdrr, h_cfg_cdrr),
+ mee_range_h ("PSX CPU clock, %%", 0, psx_clock, 1, 500, h_cfg_psxclk),
mee_onoff_h ("Disable dynarec (slow!)",0, Config.Cpu, 1, h_cfg_nodrc),
mee_end,
};
g_layer_w = w; g_layer_h = h;
break;
- case SCALE_4_3:
- mult = 240.0f / (float)h * 4.0f / 3.0f;
- if (h > 256)
- mult *= 2.0f;
- g_layer_w = mult * (float)g_menuscreen_h;
- g_layer_h = g_menuscreen_h;
- printf(" -> %dx%d %.1f\n", g_layer_w, g_layer_h, mult);
- break;
-
case SCALE_4_3v2:
+ if (h > g_menuscreen_h || (240 < h && h <= 360))
+ goto fractional_4_3;
+
// 4:3 that prefers integer scaling
imult = g_menuscreen_h / h;
g_layer_w = w * imult;
printf(" -> %dx%d %.1f\n", g_layer_w, g_layer_h, mult);
break;
+ fractional_4_3:
+ case SCALE_4_3:
+ mult = 240.0f / (float)h * 4.0f / 3.0f;
+ if (h > 256)
+ mult *= 2.0f;
+ g_layer_w = mult * (float)g_menuscreen_h;
+ g_layer_h = g_menuscreen_h;
+ printf(" -> %dx%d %.1f\n", g_layer_w, g_layer_h, mult);
+ break;
+
case SCALE_FULLSCREEN:
g_layer_w = g_menuscreen_w;
g_layer_h = g_menuscreen_h;