static retro_environment_t environ_cb;
static retro_audio_sample_batch_t audio_batch_cb;
static struct retro_rumble_interface rumble;
+static struct retro_log_callback logging;
+static retro_log_printf_t log_cb;
static void *vout_buf;
static void * vout_buf_ptr;
{
static const struct retro_variable vars[] = {
{ "pcsx_rearmed_frameskip", "Frameskip; 0|1|2|3" },
- { "pcsx_rearmed_region", "Region; Auto|NTSC|PAL" },
+ { "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|negcon" },
{ "pcsx_rearmed_pad2type", "Pad 2 Type; default|none|standard|analog|negcon" },
{ "pcsx_rearmed_pad3type", "Pad 3 Type; default|none|standard|analog|negcon" },
{ "pcsx_rearmed_multitap1", "Multitap 1; auto|disabled|enabled" },
{ "pcsx_rearmed_multitap2", "Multitap 2; auto|disabled|enabled" },
{ "pcsx_rearmed_vibration", "Enable Vibration; enabled|disabled" },
+ { "pcsx_rearmed_dithering", "Enable Dithering; enabled|disabled" },
#ifndef DRC_DISABLE
{ "pcsx_rearmed_drc", "Dynamic recompiler; enabled|disabled" },
#endif
{ NULL, NULL },
};
+ if (cb(RETRO_ENVIRONMENT_GET_LOG_INTERFACE, &logging))
+ log_cb = logging.log;
+
environ_cb = cb;
cb(RETRO_ENVIRONMENT_SET_VARIABLES, (void*)vars);
if (is_m3u) {
if (!read_m3u(info->path)) {
- SysPrintf("failed to read m3u file\n");
+ log_cb(RETRO_LOG_INFO, "failed to read m3u file\n");
return false;
}
} else {
/* have to reload after set_cd_image for correct cdr plugin */
if (LoadPlugins() == -1) {
- SysPrintf("failed to load plugins\n");
+ log_cb(RETRO_LOG_INFO, "failed to load plugins\n");
return false;
}
NetOpened = 0;
if (OpenPlugins() == -1) {
- SysPrintf("failed to open plugins\n");
+ log_cb(RETRO_LOG_INFO, "failed to open plugins\n");
return false;
}
plugin_call_rearmed_cbs();
dfinput_activate();
- Config.PsxAuto = 1;
if (CheckCdrom() == -1) {
- SysPrintf("unsupported/invalid CD image: %s\n", info->path);
+ log_cb(RETRO_LOG_INFO, "unsupported/invalid CD image: %s\n", info->path);
return false;
}
SysReset();
if (LoadCdrom() == -1) {
- SysPrintf("could not load CD-ROM!\n");
+ log_cb(RETRO_LOG_INFO, "could not load CD\n");
return false;
}
emu_on_new_cd(0);
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
{
Config.PsxAuto = 0;
- if (strcmp(var.value, "Automatic") == 0)
+ if (strcmp(var.value, "auto") == 0)
Config.PsxAuto = 1;
else if (strcmp(var.value, "NTSC") == 0)
Config.PsxType = 0;
in_enable_vibration = 1;
}
+ var.value = NULL;
+ var.key = "pcsx_rearmed_dithering";
+
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ if (strcmp(var.value, "disabled") == 0) {
+ pl_rearmed_cbs.gpu_peops.iUseDither = 0;
+ pl_rearmed_cbs.gpu_peopsgl.bDrawDither = 0;
+#ifdef __ARM_NEON__
+ pl_rearmed_cbs.gpu_neon.allow_dithering = 0;
+#endif
+ }
+ else if (strcmp(var.value, "enabled") == 0) {
+ pl_rearmed_cbs.gpu_peops.iUseDither = 1;
+ pl_rearmed_cbs.gpu_peopsgl.bDrawDither = 1;
+#ifdef __ARM_NEON__
+ pl_rearmed_cbs.gpu_neon.allow_dithering = 1;
+#endif
+ }
+ }
+
#ifdef __ARM_NEON__
var.value = "NULL";
var.key = "pcsx_rearmed_neon_interlace_enable";
environ_cb(RETRO_ENVIRONMENT_SET_PERFORMANCE_LEVEL, &level);
}
+static int init_memcards(void)
+{
+ int ret = 0;
+ const char *dir;
+ 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;
+ init_memcard(Mcd1Data);
+ // Memcard 2 is managed by the emulator on the filesystem,
+ // There is no need to initialize Mcd2Data like Mcd1Data.
+
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
+ SysPrintf("Memcard 2: %s\n", var.value);
+ if (memcmp(var.value, "enabled", 7) == 0) {
+ if (environ_cb(RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY, &dir) && dir) {
+ if (strlen(dir) + strlen(CARD2_FILE) + 2 > sizeof(Config.Mcd2)) {
+ SysPrintf("Path '%s' is too long. Cannot use memcard 2. Use a shorter path.\n", dir);
+ ret = -1;
+ } else {
+ McdDisable[1] = 0;
+ snprintf(Config.Mcd2, sizeof(Config.Mcd2), "%s/%s", dir, CARD2_FILE);
+ SysPrintf("Use memcard 2: %s\n", Config.Mcd2);
+ }
+ } else {
+ SysPrintf("Could not get save directory! Could not create memcard 2.");
+ ret = -1;
+ }
+ }
+ }
+ return ret;
+}
+
void retro_init(void)
{
const char *bios[] = { "SCPH101", "SCPH7001", "SCPH5501", "SCPH1001" };
if(!__ctr_svchax)
Config.Cpu = CPU_INTERPRETER;
#endif
+ ret |= init_memcards();
ret |= emu_core_init();
if (ret != 0) {
SysPrintf("no BIOS files found.\n");
struct retro_message msg =
{
- "No BIOS file found - add for better compatibility",
+ "No PlayStation BIOS file found - add for better compatibility",
180
};
environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE, (void*)&msg);
pl_rearmed_cbs.gpu_peops.iUseDither = 1;
spu_config.iUseFixedUpdates = 1;
- McdDisable[0] = 0;
- McdDisable[1] = 1;
- init_memcard(Mcd1Data);
- init_memcard(Mcd2Data);
-
SaveFuncs.open = save_open;
SaveFuncs.read = save_read;
SaveFuncs.write = save_write;