#include "../plugins/dfinput/externals.h"
#include "cspace.h"
#include "main.h"
+#include "menu.h"
#include "plugin.h"
#include "plugin_lib.h"
#include "arm_features.h"
#define ISHEXDEC ((buf[cursor]>='0') && (buf[cursor]<='9')) || ((buf[cursor]>='a') && (buf[cursor]<='f')) || ((buf[cursor]>='A') && (buf[cursor]<='F'))
+#define INTERNAL_FPS_SAMPLE_PERIOD 64
+
//hack to prevent retroarch freezing when reseting in the menu but not while running with the hot key
static int rebootemu = 0;
static bool vout_can_dupe;
static bool duping_enable;
static bool found_bios;
+static bool display_internal_fps = false;
+static unsigned frame_count = 0;
static int plugins_opened;
static int is_pal_mode;
{ "pcsx_rearmed_bios", "Use BIOS; auto|HLE" },
{ "pcsx_rearmed_region", "Region; auto|NTSC|PAL" },
{ "pcsx_rearmed_memcard2", "Enable second memory card; disabled|enabled" },
- { "pcsx_rearmed_pad1type", "Pad 1 Type; default|none|standard|analog|dualshock|negcon" },
- { "pcsx_rearmed_pad2type", "Pad 2 Type; default|none|standard|analog|dualshock|negcon" },
- { "pcsx_rearmed_pad3type", "Pad 3 Type; default|none|standard|analog|dualshock|negcon" },
- { "pcsx_rearmed_pad4type", "Pad 4 Type; default|none|standard|analog|dualshock|negcon" },
- { "pcsx_rearmed_pad5type", "Pad 5 Type; default|none|standard|analog|dualshock|negcon" },
- { "pcsx_rearmed_pad6type", "Pad 6 Type; default|none|standard|analog|dualshock|negcon" },
- { "pcsx_rearmed_pad7type", "Pad 7 Type; default|none|standard|analog|dualshock|negcon" },
- { "pcsx_rearmed_pad8type", "Pad 8 Type; default|none|standard|analog|dualshock|negcon" },
+ { "pcsx_rearmed_pad1type", "Pad 1 Type; standard|analog|dualshock|negcon|none" },
+ { "pcsx_rearmed_pad2type", "Pad 2 Type; standard|analog|dualshock|negcon|none" },
+ { "pcsx_rearmed_pad3type", "Pad 3 Type; none|standard|analog|dualshock|negcon" },
+ { "pcsx_rearmed_pad4type", "Pad 4 Type; none|standard|analog|dualshock|negcon" },
+ { "pcsx_rearmed_pad5type", "Pad 5 Type; none|standard|analog|dualshock|negcon" },
+ { "pcsx_rearmed_pad6type", "Pad 6 Type; none|standard|analog|dualshock|negcon" },
+ { "pcsx_rearmed_pad7type", "Pad 7 Type; none|standard|analog|dualshock|negcon" },
+ { "pcsx_rearmed_pad8type", "Pad 8 Type; none|standard|analog|dualshock|negcon" },
{ "pcsx_rearmed_multitap1", "Multitap 1; auto|disabled|enabled" },
{ "pcsx_rearmed_multitap2", "Multitap 2; auto|disabled|enabled" },
{ "pcsx_rearmed_negcon_deadzone", "NegCon Twist Deadzone (percent); 0|5|10|15|20|25|30" },
{ "pcsx_rearmed_dithering", "Enable Dithering; enabled|disabled" },
#ifndef DRC_DISABLE
{ "pcsx_rearmed_drc", "Dynamic recompiler; enabled|disabled" },
+#ifdef HAVE_PRE_ARMV7
+ { "pcsx_rearmed_psxclock", "PSX cpu clock (default 50); 50|51|52|53|54|55|5657|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49" },
+#else
+ { "pcsx_rearmed_psxclock", "PSX cpu clock (default 57); 57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56" },
+#endif
#endif
#ifdef __ARM_NEON__
{ "pcsx_rearmed_neon_interlace_enable", "Enable interlacing mode(s); disabled|enabled" },
{ "pcsx_rearmed_neon_enhancement_no_main", "Enhanced resolution speed hack; disabled|enabled" },
#endif
{ "pcsx_rearmed_duping_enable", "Frame duping; enabled|disabled" },
+ { "pcsx_rearmed_display_internal_fps", "Display Internal FPS; disabled|enabled" },
{ "pcsx_rearmed_show_bios_bootlogo", "Show Bios Bootlogo(Breaks some games); disabled|enabled" },
{ "pcsx_rearmed_spu_reverb", "Sound: Reverb; enabled|disabled" },
{ "pcsx_rearmed_spu_interpolation", "Sound: Interpolation; simple|gaussian|cubic|off" },
+ { "pcsx_rearmed_idiablofix", "Diablo Music Fix; disabled|enabled" },
{ "pcsx_rearmed_pe2_fix", "Parasite Eve 2/Vandal Hearts 1/2 Fix; disabled|enabled" },
{ "pcsx_rearmed_inuyasha_fix", "InuYasha Sengoku Battle Fix; disabled|enabled" },
- { NULL, NULL },
+
+ /* Advance options */
+ { "pcsx_rearmed_noxadecoding", "XA Decoding; enabled|disabled" },
+ { "pcsx_rearmed_nocdaudio", "CD Audio; enabled|disabled" },
+#ifndef DRC_DISABLE
+ { "pcsx_rearmed_nosmccheck", "(Speed Hack) Disable SMC Checks; disabled|enabled" },
+ { "pcsx_rearmed_gteregsunneeded", "(Speed Hack) Assume GTE Regs Unneeded; disabled|enabled" },
+ { "pcsx_rearmed_nogteflags", "(Speed Hack) Disable GTE Flags; disabled|enabled" },
+#endif
+
+ { NULL, NULL }
};
if (cb(RETRO_ENVIRONMENT_GET_LOG_INTERFACE, &logging))
#define GIT_VERSION ""
#endif
info->library_version = "r22" GIT_VERSION;
- info->valid_extensions = "bin|cue|img|mdf|pbp|toc|cbn|m3u";
+ info->valid_extensions = "bin|cue|img|mdf|pbp|toc|cbn|m3u|chd";
info->need_fullpath = true;
}
// cheat funcs are destructive, need a copy..
strncpy(buf, code, sizeof(buf));
buf[sizeof(buf) - 1] = 0;
-
+
//Prepare buffered cheat for PCSX's AddCheat fucntion.
int cursor=0;
int nonhexdec=0;
}
cursor++;
}
-
+
if (index < NumCheats)
ret = EditCheat(index, "", buf);
{ 0 },
};
+ frame_count = 0;
+
environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, desc);
#ifdef FRONTEND_SUPPORTS_RGB565
return false;
}
- /* TODO: Calling SysReset() outside retro_run for some system
- * causes RetroArch to freeze, e.g Ludo */
- //SysReset();
- rebootemu = 1;
+ SysReset();
if (LoadCdrom() == -1) {
log_cb(RETRO_LOG_INFO, "could not load CD\n");
duping_enable = true;
}
+ var.value = "NULL";
+ var.key = "pcsx_rearmed_display_internal_fps";
+
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ if (strcmp(var.value, "disabled") == 0)
+ display_internal_fps = false;
+ else if (strcmp(var.value, "enabled") == 0)
+ display_internal_fps = true;
+ }
+
#ifndef DRC_DISABLE
var.value = NULL;
var.key = "pcsx_rearmed_drc";
Config.RCntFix = 1;
}
+ var.value = "NULL";
+ var.key = "pcsx_rearmed_idiablofix";
+
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ if (strcmp(var.value, "disabled") == 0)
+ spu_config.idiablofix = 0;
+ else if (strcmp(var.value, "enabled") == 0)
+ spu_config.idiablofix = 1;
+ }
+
var.value = "NULL";
var.key = "pcsx_rearmed_inuyasha_fix";
Config.VSyncWA = 1;
}
+ var.value = NULL;
+ var.key = "pcsx_rearmed_noxadecoding";
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ if (strcmp(var.value, "disabled") == 0)
+ Config.Xa = 1;
+ else
+ Config.Xa = 0;
+ }
+
+ var.value = NULL;
+ var.key = "pcsx_rearmed_nocdaudio";
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ if (strcmp(var.value, "disabled") == 0)
+ Config.Cdda = 1;
+ else
+ Config.Cdda = 0;
+ }
+
+#ifndef DRC_DISABLE
+ var.value = NULL;
+ var.key = "pcsx_rearmed_nosmccheck";
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ if (strcmp(var.value, "enabled") == 0)
+ new_dynarec_hacks |= NDHACK_NO_SMC_CHECK;
+ else
+ new_dynarec_hacks &= ~NDHACK_NO_SMC_CHECK;
+ }
+
+ var.value = NULL;
+ var.key = "pcsx_rearmed_gteregsunneeded";
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ if (strcmp(var.value, "enabled") == 0)
+ new_dynarec_hacks |= NDHACK_GTE_UNNEEDED;
+ else
+ new_dynarec_hacks &= ~NDHACK_GTE_UNNEEDED;
+ }
+
+ var.value = NULL;
+ var.key = "pcsx_rearmed_nogteflags";
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ if (strcmp(var.value, "enabled") == 0)
+ new_dynarec_hacks |= NDHACK_GTE_NO_FLAGS;
+ else
+ new_dynarec_hacks &= ~NDHACK_GTE_NO_FLAGS;
+ }
+#endif
+
if (in_flight) {
// inform core things about possible config changes
plugin_call_rearmed_cbs();
dfinput_activate();
}
- else{
+ else
+ {
//not yet running
-
+
//bootlogo display hack
if (found_bios) {
var.value = "NULL";
var.key = "pcsx_rearmed_show_bios_bootlogo";
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
{
+ Config.SlowBoot = 0;
+ rebootemu = 0;
if (strcmp(var.value, "enabled") == 0)
+ {
Config.SlowBoot = 1;
- else
- Config.SlowBoot = 0;
+ rebootemu = 1;
+ }
}
}
+#ifndef DRC_DISABLE
+ var.value = "NULL";
+ var.key = "pcsx_rearmed_psxclock";
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ int psxclock = atoi(var.value);
+ cycle_multiplier = 10000 / psxclock;
+ }
+#endif
}
}
// skip BIOS logos
psxRegs.pc = psxRegs.GPR.n.ra;
}
- }
+ }
+
+ if (display_internal_fps) {
+ frame_count++;
+
+ if (frame_count % INTERNAL_FPS_SAMPLE_PERIOD == 0) {
+ unsigned internal_fps = pl_rearmed_cbs.flip_cnt * (is_pal_mode ? 50 : 60) / INTERNAL_FPS_SAMPLE_PERIOD;
+ char str[64];
+ const char *strc = (const char*)str;
+ struct retro_message msg =
+ {
+ strc,
+ 180
+ };
+
+ str[0] = '\0';
+
+ snprintf(str, sizeof(str), "Internal FPS: %2d", internal_fps);
+
+ pl_rearmed_cbs.flip_cnt = 0;
+
+ environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE, &msg);
+ }
+ } else {
+ frame_count = 0;
+ }
input_poll_cb();
struct retro_variable var = { .key="pcsx_rearmed_memcard2", .value=NULL };
static const char CARD2_FILE[] = "pcsx-card2.mcd";
- McdDisable[0] = 0;
- // Disable memcard 2 by default
- McdDisable[1] = 1;
+ // Memcard2 will be handled and is re-enabled if needed using core
+ // operations.
+ // Memcard1 is handled by libretro, doing this will set core to
+ // skip file io operations for memcard1 like SaveMcd
+ snprintf(Config.Mcd1, sizeof(Config.Mcd1), "none");
+ snprintf(Config.Mcd2, sizeof(Config.Mcd2), "none");
init_memcard(Mcd1Data);
// Memcard 2 is managed by the emulator on the filesystem,
// There is no need to initialize Mcd2Data like Mcd1Data.
unsigned useHLE = 0;
const char *bios[] = {
- "SCPH101", "SCPH7001", "SCPH5501", "SCPH1001",
- "scph101", "scph7001", "scph5501", "scph1001"
+ "SCPH101", "scph101",
+ "SCPH5501", "scph5501",
+ "SCPH7001", "scph7001",
+ "SCPH1001", "scph1001"
};
struct retro_variable var = {
psxUnmapHook = pl_vita_munmap;
#endif
ret = emu_core_preinit();
-#ifdef _3DS
+#ifdef _3DS
/* emu_core_preinit sets the cpu to dynarec */
if(!__ctr_svchax)
Config.Cpu = CPU_INTERPRETER;
#else
vout_buf = malloc(VOUT_MAX_WIDTH * VOUT_MAX_HEIGHT * 2);
#endif
-
+
vout_buf_ptr = vout_buf;
loadPSXBios();