}
/* libretro */
-void retro_set_environment(retro_environment_t cb) { environ_cb = cb; }
+void retro_set_environment(retro_environment_t cb)
+{
+ static const struct retro_variable vars[] = {
+ { "frameskip", "Frameskip; 0|1|2|3" },
+ { "region", "Region; Auto|NTSC|PAL" },
+#ifdef __ARM_NEON__
+ { "neon_interlace_enable", "Enable interlacing mode(s); disabled|enabled" },
+#if 0
+ { "neon_enhancement_enable", "Enhanced resolution (slow); disabled|enabled" },
+#endif
+#endif
+ { NULL, NULL },
+ };
+
+ environ_cb = cb;
+
+ cb(RETRO_ENVIRONMENT_SET_VARIABLES, (void*)vars);
+}
+
void retro_set_video_refresh(retro_video_refresh_t cb) { video_cb = cb; }
void retro_set_audio_sample(retro_audio_sample_t cb) { (void)cb; }
void retro_set_audio_sample_batch(retro_audio_sample_batch_t cb) { audio_batch_cb = cb; }
};
#define RETRO_PSX_MAP_LEN (sizeof(retro_psx_map) / sizeof(retro_psx_map[0]))
+static void update_variables(void)
+{
+ struct retro_variable var;
+
+ var.value = NULL;
+ var.key = "frameskip";
+
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ pl_rearmed_cbs.frameskip = atoi(var.value);
+
+ var.value = NULL;
+ var.key = "region";
+
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ Config.PsxAuto = 0;
+ if (strcmp(var.value, "Automatic") == 0)
+ Config.PsxAuto = 1;
+ else if (strcmp(var.value, "NTSC") == 0)
+ Config.PsxType = 0;
+ else if (strcmp(var.value, "PAL") == 0)
+ Config.PsxType = 1;
+ }
+#ifdef __ARM_NEON__
+ var.value = "NULL";
+ var.key = "neon_interlace_enable";
+
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ if (strcmp(var.value, "disabled") == 0)
+ pl_rearmed_cbs.gpu_neon.allow_interlace = 0;
+ else if (strcmp(var.value, "enabled") == 0)
+ pl_rearmed_cbs.gpu_neon.allow_interlace = 1;
+ }
+
+#if 0
+ var.value = NULL;
+ var.key = "neon_enhancement_enable";
+
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ if (strcmp(var.value, "disabled") == 0)
+ pl_rearmed_cbs.gpu_neon.enhancement_enable = 0;
+ else if (strcmp(var.value, "enabled") == 0)
+ pl_rearmed_cbs.gpu_neon.enhancement_enable = 1;
+ }
+#endif
+#endif
+}
+
void retro_run(void)
{
int i;
input_poll_cb();
+
+ bool updated = false;
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated)
+ update_variables();
+
in_keystate = 0;
for (i = 0; i < RETRO_PSX_MAP_LEN; i++)
if (input_state_cb(1, RETRO_DEVICE_JOYPAD, 0, i))
SaveFuncs.write = save_write;
SaveFuncs.seek = save_seek;
SaveFuncs.close = save_close;
+
+ update_variables();
}
void retro_deinit(void)