X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=frontend%2Flibretro.c;h=34e3b4eff7d91009b0e2e535d1568a0b83e3b153;hp=4cd4e47f19c0b488b0efce0c1778cde04d3d294d;hb=03f55e6b49eb81d099f33b67ee6b5fa4620a54bc;hpb=01394a7f6afd51681cf7ef2f5d55e607a53517f2 diff --git a/frontend/libretro.c b/frontend/libretro.c index 4cd4e47f..34e3b4ef 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -33,6 +33,7 @@ static retro_input_poll_t input_poll_cb; static retro_input_state_t input_state_cb; static retro_environment_t environ_cb; static retro_audio_sample_batch_t audio_batch_cb; +static struct retro_rumble_interface rumble; static void *vout_buf; static int vout_width, vout_height; @@ -51,7 +52,7 @@ extern char McdDisable[2]; int in_type1, in_type2; int in_a1[2] = { 127, 127 }, in_a2[2] = { 127, 127 }; int in_keystate; -int in_enable_vibration; +int in_enable_vibration = 1; /* PSX max resolution is 640x512, but with enhancement it's 1024x512 */ #define VOUT_MAX_WIDTH 1024 @@ -196,8 +197,10 @@ void pl_timing_prepare(int is_pal) is_pal_mode = is_pal; } -void plat_trigger_vibrate(int is_strong) +void plat_trigger_vibrate(int pad, int low, int high) { + rumble.set_rumble_state(pad, RETRO_RUMBLE_STRONG, high << 8); + rumble.set_rumble_state(pad, RETRO_RUMBLE_WEAK, low ? 0xffff : 0x0); } void pl_update_gun(int *xn, int *yn, int *xres, int *yres, int *in) @@ -238,11 +241,12 @@ void out_register_libretro(struct out_driver *drv) 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" }, - { "pad1type", "Pad 1 Type; standard|analog" }, + { "pcsx_rearmed_frameskip", "Frameskip; 0|1|2|3" }, + { "pcsx_rearmed_region", "Region; Auto|NTSC|PAL" }, + { "pcsx_rearmed_pad1type", "Pad 1 Type; standard|analog" }, + { "pcsx_rearmed_pad2type", "Pad 2 Type; standard|analog" }, #ifndef DRC_DISABLE - { "rearmed_drc", "Dynamic recompiler; enabled|disabled" }, + { "pcsx_rearmed_drc", "Dynamic recompiler; enabled|disabled" }, #endif #ifdef __ARM_NEON__ { "pcsx_rearmed_neon_interlace_enable", "Enable interlacing mode(s); disabled|enabled" }, @@ -299,8 +303,9 @@ void retro_get_system_av_info(struct retro_system_av_info *info) /* savestates */ size_t retro_serialize_size(void) { - // it's currently 4380651 bytes, but have some reserved for future - return 0x430000; + // it's currently 4380651-4397047 bytes, + // but have some reserved for future + return 0x440000; } struct save_fp { @@ -947,13 +952,13 @@ static void update_variables(bool in_flight) struct retro_variable var; var.value = NULL; - var.key = "frameskip"; + var.key = "pcsx_rearmed_frameskip"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) pl_rearmed_cbs.frameskip = atoi(var.value); var.value = NULL; - var.key = "region"; + var.key = "pcsx_rearmed_region"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) { @@ -967,7 +972,7 @@ static void update_variables(bool in_flight) } var.value = NULL; - var.key = "pad1type"; + var.key = "pcsx_rearmed_pad1type"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) { @@ -976,6 +981,16 @@ static void update_variables(bool in_flight) in_type1 = PSE_PAD_TYPE_ANALOGPAD; } + var.value = NULL; + var.key = "pcsx_rearmed_pad2type"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) + { + in_type2 = PSE_PAD_TYPE_STANDARD; + if (strcmp(var.value, "analog") == 0) + in_type2 = PSE_PAD_TYPE_ANALOGPAD; + } + #ifdef __ARM_NEON__ var.value = "NULL"; var.key = "pcsx_rearmed_neon_interlace_enable"; @@ -1024,7 +1039,7 @@ static void update_variables(bool in_flight) #ifndef DRC_DISABLE var.value = NULL; - var.key = "rearmed_drc"; + var.key = "pcsx_rearmed_drc"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) { @@ -1183,7 +1198,7 @@ void retro_init(void) const char *bios[] = { "scph1001", "scph5501", "scph7001" }; const char *dir; char path[256]; - int i, ret, level; + int i, ret; bool found_bios = false; ret = emu_core_preinit(); @@ -1227,20 +1242,19 @@ void retro_init(void) environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE, (void*)&msg); } - level = 1; - environ_cb(RETRO_ENVIRONMENT_SET_PERFORMANCE_LEVEL, &level); - environ_cb(RETRO_ENVIRONMENT_GET_CAN_DUPE, &vout_can_dupe); environ_cb(RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE, &disk_control); + environ_cb(RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE, &rumble); /* Set how much slower PSX CPU runs * 100 (so that 200 is 2 times) * we have to do this because cache misses and some IO penalties * are not emulated. Warning: changing this may break compatibility. */ -#ifdef __ARM_ARCH_7A__ +#if !defined(__arm__) || defined(__ARM_ARCH_7A__) cycle_multiplier = 175; #else cycle_multiplier = 200; #endif + pl_rearmed_cbs.gpu_peops.iUseDither = 1; McdDisable[0] = 0; McdDisable[1] = 1;