static int psx_clock;
static int memcard1_sel = -1, memcard2_sel = -1;
extern int g_autostateld_opt;
+static int menu_iopts[8];
int g_opts, g_scaler, g_gamma = 100;
int scanlines, scanline_level = 20;
int soft_scaling, analog_deadzone; // for Caanoo
int soft_filter;
#ifndef HAVE_PRE_ARMV7
-#define DEFAULT_PSX_CLOCK 57
+#define DEFAULT_PSX_CLOCK (10000 / CYCLE_MULT_DEFAULT)
#define DEFAULT_PSX_CLOCK_S "57"
#else
#define DEFAULT_PSX_CLOCK 50
Config.PsxAuto = 0;
Config.PsxType = region - 1;
}
- cycle_multiplier = 10000 / psx_clock;
+ Config.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;
- default: in_type1 = PSE_PAD_TYPE_STANDARD;
+ case 1: in_type[0] = PSE_PAD_TYPE_ANALOGPAD; break;
+ case 2: in_type[0] = PSE_PAD_TYPE_NEGCON; break;
+ default: in_type[0] = PSE_PAD_TYPE_STANDARD;
}
switch (in_type_sel2) {
- case 1: in_type2 = PSE_PAD_TYPE_ANALOGPAD; break;
- case 2: in_type2 = PSE_PAD_TYPE_GUNCON; break;
- default: in_type2 = PSE_PAD_TYPE_STANDARD;
+ case 1: in_type[1] = PSE_PAD_TYPE_ANALOGPAD; break;
+ case 2: in_type[1] = PSE_PAD_TYPE_NEGCON; break;
+ default: in_type[1] = PSE_PAD_TYPE_STANDARD;
}
if (in_evdev_allow_abs_only != allow_abs_only_old) {
in_probe();
CE_CONFIG_STR(Spu),
// CE_CONFIG_STR(Cdr),
CE_CONFIG_VAL(Xa),
-// CE_CONFIG_VAL(Sio),
CE_CONFIG_VAL(Mdec),
CE_CONFIG_VAL(Cdda),
CE_CONFIG_VAL(Debug),
CE_CONFIG_VAL(PsxOut),
- CE_CONFIG_VAL(SpuIrq),
- CE_CONFIG_VAL(RCntFix),
- CE_CONFIG_VAL(VSyncWA),
CE_CONFIG_VAL(icache_emulation),
+ CE_CONFIG_VAL(DisableStalls),
CE_CONFIG_VAL(Cpu),
+ CE_CONFIG_VAL(GpuListWalking),
CE_INTVAL(region),
CE_INTVAL_V(g_scaler, 3),
CE_INTVAL(g_gamma),
// ------------ bios/plugins ------------
-#ifdef __ARM_NEON__
+#ifdef BUILTIN_GPU_NEON
static const char h_gpu_neon[] =
"Configure built-in NEON GPU plugin";
mee_range_h ("Volume boost", 0, volume_boost, -5, 30, h_spu_volboost),
mee_onoff ("Reverb", 0, spu_config.iUseReverb, 1),
mee_enum ("Interpolation", 0, spu_config.iUseInterpolation, men_spu_interp),
- mee_onoff ("Adjust XA pitch", 0, spu_config.iXAPitch, 1),
+ //mee_onoff ("Adjust XA pitch", 0, spu_config.iXAPitch, 1),
mee_onoff_h ("Adjust tempo", 0, spu_config.iTempo, 1, h_spu_tempo),
mee_end,
};
"savestates and can't be changed there. Must save\n"
"config and reload the game for change to take effect";
static const char h_plugin_gpu[] =
-#ifdef __ARM_NEON__
+#ifdef BUILTIN_GPU_NEON
"builtin_gpu is the NEON GPU, very fast and accurate\n"
#endif
"gpu_peops is Pete's soft GPU, slow but accurate\n"
mee_enum_h ("BIOS", 0, bios_sel, bioses, h_bios),
mee_enum_h ("GPU plugin", 0, gpu_plugsel, gpu_plugins, h_plugin_gpu),
mee_enum_h ("SPU plugin", 0, spu_plugsel, spu_plugins, h_plugin_spu),
-#ifdef __ARM_NEON__
+#ifdef BUILTIN_GPU_NEON
mee_handler_h ("Configure built-in GPU plugin", menu_loop_plugin_gpu_neon, h_gpu_neon),
#endif
mee_handler_h ("Configure gpu_peops plugin", menu_loop_plugin_gpu_peops, h_gpu_peops),
// ------------ adv options menu ------------
-static const char h_cfg_psxclk[] = "Over/under-clock the PSX, default is " DEFAULT_PSX_CLOCK_S "\n"
- "(lower value - less work for the emu, may be faster)";
+#ifndef DRC_DISABLE
+static const char h_cfg_noch[] = "Disables game-specific compatibility hacks";
static const char h_cfg_nosmc[] = "Will cause crashes when loading, break memcards";
static const char h_cfg_gteunn[] = "May cause graphical glitches";
static const char h_cfg_gteflgs[] = "Will cause graphical glitches";
-static const char h_cfg_gtestll[] = "Some games will run too fast";
+#endif
+static const char h_cfg_stalls[] = "Will cause some games to run too fast";
static menu_entry e_menu_speed_hacks[] =
{
- mee_range_h ("PSX CPU clock, %%", 0, psx_clock, 1, 500, h_cfg_psxclk),
+#ifndef DRC_DISABLE
+ mee_onoff_h ("Disable compat hacks", 0, new_dynarec_hacks, NDHACK_NO_COMPAT_HACKS, h_cfg_noch),
mee_onoff_h ("Disable SMC checks", 0, new_dynarec_hacks, NDHACK_NO_SMC_CHECK, h_cfg_nosmc),
mee_onoff_h ("Assume GTE regs unneeded", 0, new_dynarec_hacks, NDHACK_GTE_UNNEEDED, h_cfg_gteunn),
mee_onoff_h ("Disable GTE flags", 0, new_dynarec_hacks, NDHACK_GTE_NO_FLAGS, h_cfg_gteflgs),
+#endif
+ mee_onoff_h ("Disable CPU/GTE stalls", 0, menu_iopts[0], 1, h_cfg_stalls),
mee_end,
};
static int menu_loop_speed_hacks(int id, int keys)
{
static int sel = 0;
+ menu_iopts[0] = Config.DisableStalls;
me_loop(e_menu_speed_hacks, &sel);
+ Config.DisableStalls = menu_iopts[0];
return 0;
}
+static const char *men_gpul[] = { "Auto", "Off", "On", NULL };
+
static const char h_cfg_cpul[] = "Shows CPU usage in %";
static const char h_cfg_spu[] = "Shows active SPU channels\n"
"(green: normal, red: fmod, blue: noise)";
static const char h_cfg_xa[] = "Disables XA sound, which can sometimes improve performance";
static const char h_cfg_cdda[] = "Disable CD Audio for a performance boost\n"
"(proper .cue/.bin dump is needed otherwise)";
-//static const char h_cfg_sio[] = "You should not need this, breaks games";
-static const char h_cfg_spuirq[] = "Compatibility tweak; should be left off";
-//static const char h_cfg_rcnt1[] = "Parasite Eve 2, Vandal Hearts 1/2 Fix\n"
-// "(timing hack, breaks other games)";
-static const char h_cfg_rcnt2[] = "InuYasha Sengoku Battle Fix\n"
- "(timing hack, breaks other games)";
+#ifndef DRC_DISABLE
static const char h_cfg_nodrc[] = "Disable dynamic recompiler and use interpreter\n"
"Might be useful to overcome some dynarec bugs";
-static const char h_cfg_shacks[] = "Breaks games but may give better performance\n"
- "must reload game for any change to take effect";
-#ifdef ICACHE_EMULATION
-static const char h_cfg_icache[] = "Allows you to play the F1 games.\n"
- "Note: This breaks the PAL version of Spyro 2.";
#endif
-
+static const char h_cfg_shacks[] = "Breaks games but may give better performance";
+static const char h_cfg_icache[] = "Support F1 games (only when dynarec is off)";
+static const char h_cfg_gpul[] = "Try enabling this if the game is missing some graphics\n"
+ "causes a performance hit";
+static const char h_cfg_psxclk[] = "Over/under-clock the PSX, default is " DEFAULT_PSX_CLOCK_S "\n"
+ "(adjust this if the game is too slow/too fast/hangs)";
+
+enum { AMO_XA, AMO_CDDA, AMO_IC, AMO_CPU, AMO_GPUL };
+
static menu_entry e_menu_adv_options[] =
{
mee_onoff_h ("Show CPU load", 0, g_opts, OPT_SHOWCPU, h_cfg_cpul),
mee_onoff_h ("Show SPU channels", 0, g_opts, OPT_SHOWSPU, h_cfg_spu),
mee_onoff_h ("Disable Frame Limiter", 0, g_opts, OPT_NO_FRAMELIM, h_cfg_fl),
- mee_onoff_h ("Disable XA Decoding", 0, Config.Xa, 1, h_cfg_xa),
- mee_onoff_h ("Disable CD Audio", 0, Config.Cdda, 1, h_cfg_cdda),
- //mee_onoff_h ("SIO IRQ Always Enabled", 0, Config.Sio, 1, h_cfg_sio),
- mee_onoff_h ("SPU IRQ Always Enabled", 0, Config.SpuIrq, 1, h_cfg_spuirq),
-#ifdef ICACHE_EMULATION
- mee_onoff_h ("ICache emulation", 0, Config.icache_emulation, 1, h_cfg_icache),
+ mee_onoff_h ("Disable XA Decoding", 0, menu_iopts[AMO_XA], 1, h_cfg_xa),
+ mee_onoff_h ("Disable CD Audio", 0, menu_iopts[AMO_CDDA], 1, h_cfg_cdda),
+ mee_onoff_h ("ICache emulation", 0, menu_iopts[AMO_IC], 1, h_cfg_icache),
+ mee_enum_h ("GPU l-list slow walking",0, menu_iopts[AMO_GPUL], men_gpul, h_cfg_gpul),
+#if !defined(DRC_DISABLE) || defined(LIGHTREC)
+ mee_onoff_h ("Disable dynarec (slow!)",0, menu_iopts[AMO_CPU], 1, h_cfg_nodrc),
#endif
- //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_onoff_h ("Disable dynarec (slow!)",0, Config.Cpu, 1, h_cfg_nodrc),
+ mee_range_h ("PSX CPU clock, %", 0, psx_clock, 1, 500, h_cfg_psxclk),
mee_handler_h ("[Speed hacks]", menu_loop_speed_hacks, h_cfg_shacks),
mee_end,
};
static int menu_loop_adv_options(int id, int keys)
{
static int sel = 0;
+ static struct {
+ boolean *opt;
+ int *mopt;
+ } opts[] = {
+ { &Config.Xa, &menu_iopts[AMO_XA] },
+ { &Config.Cdda, &menu_iopts[AMO_CDDA] },
+ { &Config.icache_emulation, &menu_iopts[AMO_IC] },
+ { &Config.Cpu, &menu_iopts[AMO_CPU] },
+ };
+ int i;
+ for (i = 0; i < ARRAY_SIZE(opts); i++)
+ *opts[i].mopt = *opts[i].opt;
+ menu_iopts[AMO_GPUL] = Config.GpuListWalking + 1;
+
me_loop(e_menu_adv_options, &sel);
+
+ for (i = 0; i < ARRAY_SIZE(opts); i++)
+ *opts[i].opt = *opts[i].mopt;
+ Config.GpuListWalking = menu_iopts[AMO_GPUL] - 1;
+
return 0;
}
"(C) 2005-2009 PCSX-df Team\n"
"(C) 2009-2011 PCSX-Reloaded Team\n\n"
"ARM recompiler (C) 2009-2011 Ari64\n"
-#ifdef __ARM_NEON__
+#ifdef BUILTIN_GPU_NEON
"ARM NEON GPU (c) 2011-2012 Exophase\n"
#endif
"PEOpS GPU and SPU by Pete Bernert\n"
void menu_loop(void)
{
- int cycle_multiplier_old = cycle_multiplier;
- int ndrc_hacks_old = new_dynarec_hacks;
static int warned_about_bios = 0;
static int sel = 0;
- int ndrc_changed;
menu_leave_emu();
in_set_config_int(0, IN_CFG_BLOCKING, 0);
- ndrc_changed = cycle_multiplier_old != cycle_multiplier
- || ndrc_hacks_old != new_dynarec_hacks;
- menu_prepare_emu(ndrc_changed);
+ menu_prepare_emu();
}
static int qsort_strcmp(const void *p1, const void *p2)
cpu_clock = plat_target_cpu_clock_get();
}
-void menu_prepare_emu(int ndrc_config_changed)
+void menu_prepare_emu(void)
{
R3000Acpu *prev_cpu = psxCpu;
plat_video_menu_leave();
- #ifndef DRC_DISABLE
+ #if !defined(DRC_DISABLE) || defined(LIGHTREC)
psxCpu = (Config.Cpu == CPU_INTERPRETER) ? &psxInt : &psxRec;
#else
psxCpu = &psxInt;
// note that this does not really reset, just clears drc caches
psxCpu->Reset();
}
- else if (ndrc_config_changed)
- new_dynarec_clear_full();
+
+ menu_sync_config();
+ psxCpu->ApplyConfig();
// core doesn't care about Config.Cdda changes,
// so handle them manually here
if (Config.Cdda)
CDR_stop();
- menu_sync_config();
if (cpu_clock > 0)
plat_target_cpu_clock_set(cpu_clock);