#include <sys/syscall.h>
#endif
+ #ifdef SWITCH
+ #include <switch.h>
+ #endif
+
#include "../libpcsxcore/misc.h"
#include "../libpcsxcore/psxcounters.h"
#include "../libpcsxcore/psxmem_map.h"
in_type[port] = PSE_PAD_TYPE_ANALOGPAD;
else if (strcmp(var.value, "negcon") == 0)
in_type[port] = PSE_PAD_TYPE_NEGCON;
+ else if (strcmp(var.value, "guncon") == 0)
+ in_type[port] = PSE_PAD_TYPE_GUNCON;
else if (strcmp(var.value, "none") == 0)
in_type[port] = PSE_PAD_TYPE_NONE;
// else 'default' case, do nothing
}
#endif
+static void set_retro_memmap(void)
+{
+ struct retro_memory_map retromap = { 0 };
+ struct retro_memory_descriptor mmap =
+ {
+ 0, psxM, 0, 0, 0, 0, 0x200000
+ };
+
+ retromap.descriptors = &mmap;
+ retromap.num_descriptors = 1;
+
+ environ_cb(RETRO_ENVIRONMENT_SET_MEMORY_MAPS, &retromap);
+}
+
bool retro_load_game(const struct retro_game_info *info)
{
size_t i;
}
}
+ set_retro_memmap();
+
return true;
}
Config.Cdda = 0;
}
+ var.value = NULL;
+ var.key = "pcsx_rearmed_spuirq";
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ if (strcmp(var.value, "disabled") == 0)
+ Config.SpuIrq = 0;
+ else
+ Config.SpuIrq = 1;
+ }
+
#ifndef DRC_DISABLE
var.value = NULL;
var.key = "pcsx_rearmed_nosmccheck";
}
}
+ if (in_type[i] == PSE_PAD_TYPE_GUNCON)
+ {
+ //ToDo move across to:
+ //RETRO_DEVICE_ID_LIGHTGUN_SCREEN_X
+ //RETRO_DEVICE_ID_LIGHTGUN_SCREEN_Y
+ //RETRO_DEVICE_ID_LIGHTGUN_TRIGGER
+ //RETRO_DEVICE_ID_LIGHTGUN_RELOAD
+ //RETRO_DEVICE_ID_LIGHTGUN_AUX_A
+ //RETRO_DEVICE_ID_LIGHTGUN_AUX_B
+ //Though not sure these are hooked up properly on the Pi
+
+ //ToDo
+ //Put the controller index back to i instead of hardcoding to 1 when the libretro overlay crash bug is fixed
+ //This is required for 2 player
+
+ //GUNCON has 3 controls, Trigger,A,B which equal Circle,Start,Cross
+
+ // Trigger
+ //The 1 is hardcoded instead of i to prevent the overlay mouse button libretro crash bug
+ if (input_state_cb(1, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_LEFT)){
+ in_keystate[i] |= (1 << DKEY_CIRCLE);
+ }
+
+ // A
+ if (input_state_cb(1, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_RIGHT)){
+ in_keystate[i] |= (1 << DKEY_START);
+ }
+
+ // B
+ if (input_state_cb(1, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_MIDDLE)){
+ in_keystate[i] |= (1 << DKEY_CROSS);
+ }
+
+ //The 1 is hardcoded instead of i to prevent the overlay mouse button libretro crash bug
+ int gunx = input_state_cb(1, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_X);
+ int guny = input_state_cb(1, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_Y);
+
+ //This adjustment process gives the user the ability to manually align the mouse up better
+ //with where the shots are in the emulator.
+
+ //Percentage distance of screen to adjust
+ int GunconAdjustX = 0;
+ int GunconAdjustY = 0;
+
+ //Used when out by a percentage
+ float GunconAdjustRatioX = 1;
+ float GunconAdjustRatioY = 1;
+
+ struct retro_variable var;
+ var.value = NULL;
+ var.key = "pcsx_rearmed_gunconadjustx";
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ GunconAdjustX = atoi(var.value);
+ }
+
+ var.value = NULL;
+ var.key = "pcsx_rearmed_gunconadjusty";
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ GunconAdjustY = atoi(var.value);
+ }
+
+
+ var.value = NULL;
+ var.key = "pcsx_rearmed_gunconadjustratiox";
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ GunconAdjustRatioX = atof(var.value);
+ }
+
+
+ var.value = NULL;
+ var.key = "pcsx_rearmed_gunconadjustratioy";
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ GunconAdjustRatioY = atof(var.value);
+ }
+
+ //Mouse range is -32767 -> 32767
+ //1% is about 655
+ //Use the left analog stick field to store the absolute coordinates
+ in_analog_left[0][0] = (gunx*GunconAdjustRatioX) + (GunconAdjustX * 655);
+ in_analog_left[0][1] = (guny*GunconAdjustRatioY) + (GunconAdjustY * 655);
+
+
+ }
if (in_type[i] == PSE_PAD_TYPE_NEGCON)
{
// Query digital inputs
// > NeGcon L
in_analog_left[i][1] = get_analog_button(ret, input_state_cb, i, RETRO_DEVICE_ID_JOYPAD_L);
}
- else
+ if (in_type[i] != PSE_PAD_TYPE_NEGCON && in_type[i] != PSE_PAD_TYPE_GUNCON)
{
// Query digital inputs
for (j = 0; j < RETRO_PSX_MAP_LEN; j++)
#ifdef _3DS
vout_buf = linearMemAlign(VOUT_MAX_WIDTH * VOUT_MAX_HEIGHT * 2, 0x80);
- #elif defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L) && !defined(VITA)
+ #elif defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L) && !defined(VITA) && !defined(__SWITCH__)
posix_memalign(&vout_buf, 16, VOUT_MAX_WIDTH * VOUT_MAX_HEIGHT * 2);
#else
vout_buf = malloc(VOUT_MAX_WIDTH * VOUT_MAX_HEIGHT * 2);
{ "analog", NULL },
{ "dualshock", NULL },
{ "negcon", NULL },
+ { "guncon", NULL },
{ "none", NULL },
{ NULL, NULL },
},
{ "analog", NULL },
{ "dualshock", NULL },
{ "negcon", NULL },
+ { "guncon", NULL },
{ "none", NULL },
{ NULL, NULL },
},
{ "analog", NULL },
{ "dualshock", NULL },
{ "negcon", NULL },
+ { "guncon", NULL },
{ "none", NULL },
{ NULL, NULL },
},
{ "analog", NULL },
{ "dualshock", NULL },
{ "negcon", NULL },
+ { "guncon", NULL },
{ "none", NULL },
{ NULL, NULL },
},
{ "analog", NULL },
{ "dualshock", NULL },
{ "negcon", NULL },
+ { "guncon", NULL },
{ "none", NULL },
{ NULL, NULL },
},
{ "analog", NULL },
{ "dualshock", NULL },
{ "negcon", NULL },
+ { "guncon", NULL },
{ "none", NULL },
{ NULL, NULL },
},
{ "analog", NULL },
{ "dualshock", NULL },
{ "negcon", NULL },
+ { "guncon", NULL },
{ "none", NULL },
{ NULL, NULL },
},
{ "analog", NULL },
{ "dualshock", NULL },
{ "negcon", NULL },
+ { "guncon", NULL },
{ "none", NULL },
{ NULL, NULL },
},
},
"enabled",
},
+ {
+ "pcsx_rearmed_gunconadjustx",
+ "Guncon Adjust X",
+ "When using Guncon mode, you can override aim in emulator if shots misaligned, this applies an increment on the x axis.",
+ {
+ { "0", NULL },
+ { "-25", NULL },
+ { "-24", NULL },
+ { "-23", NULL },
+ { "-22", NULL },
+ { "-21", NULL },
+ { "-20", NULL },
+ { "-19", NULL },
+ { "-18", NULL },
+ { "-17", NULL },
+ { "-16", NULL },
+ { "-15", NULL },
+ { "-14", NULL },
+ { "-13", NULL },
+ { "-12", NULL },
+ { "-11", NULL },
+ { "-10", NULL },
+ { "-09", NULL },
+ { "-08", NULL },
+ { "-07", NULL },
+ { "-06", NULL },
+ { "-05", NULL },
+ { "-04", NULL },
+ { "-03", NULL },
+ { "-02", NULL },
+ { "-01", NULL },
+ { "00", NULL },
+ { "01", NULL },
+ { "02", NULL },
+ { "03", NULL },
+ { "04", NULL },
+ { "05", NULL },
+ { "06", NULL },
+ { "07", NULL },
+ { "08", NULL },
+ { "09", NULL },
+ { "10", NULL },
+ { "11", NULL },
+ { "12", NULL },
+ { "13", NULL },
+ { "14", NULL },
+ { "15", NULL },
+ { "16", NULL },
+ { "17", NULL },
+ { "18", NULL },
+ { "19", NULL },
+ { "20", NULL },
+ { "21", NULL },
+ { "22", NULL },
+ { "23", NULL },
+ { "24", NULL },
+ { "25", NULL },
+ { NULL, NULL },
+ },
+ "0",
+ },
+ {
+ "pcsx_rearmed_gunconadjusty",
+ "Guncon Adjust Y",
+ "When using Guncon mode, you can override aim in emulator if shots misaligned, this applies an increment on the y axis.",
+ {
+ { "0", NULL },
+ { "-25", NULL },
+ { "-24", NULL },
+ { "-23", NULL },
+ { "-22", NULL },
+ { "-21", NULL },
+ { "-20", NULL },
+ { "-19", NULL },
+ { "-18", NULL },
+ { "-17", NULL },
+ { "-16", NULL },
+ { "-15", NULL },
+ { "-14", NULL },
+ { "-13", NULL },
+ { "-12", NULL },
+ { "-11", NULL },
+ { "-10", NULL },
+ { "-09", NULL },
+ { "-08", NULL },
+ { "-07", NULL },
+ { "-06", NULL },
+ { "-05", NULL },
+ { "-04", NULL },
+ { "-03", NULL },
+ { "-02", NULL },
+ { "-01", NULL },
+ { "00", NULL },
+ { "01", NULL },
+ { "02", NULL },
+ { "03", NULL },
+ { "04", NULL },
+ { "05", NULL },
+ { "06", NULL },
+ { "07", NULL },
+ { "08", NULL },
+ { "09", NULL },
+ { "10", NULL },
+ { "11", NULL },
+ { "12", NULL },
+ { "13", NULL },
+ { "14", NULL },
+ { "15", NULL },
+ { "16", NULL },
+ { "17", NULL },
+ { "18", NULL },
+ { "19", NULL },
+ { "20", NULL },
+ { "21", NULL },
+ { "22", NULL },
+ { "23", NULL },
+ { "24", NULL },
+ { "25", NULL },
+ { NULL, NULL },
+ },
+ "0",
+ },
+ {
+ "pcsx_rearmed_gunconadjustratiox",
+ "Guncon Adjust Ratio X",
+ "When using Guncon mode, you can override aim in emulator if shots misaligned, this applies a ratio on the x axis.",
+ {
+ { "1", NULL },
+ { "0.75", NULL },
+ { "0.76", NULL },
+ { "0.77", NULL },
+ { "0.78", NULL },
+ { "0.79", NULL },
+ { "0.80", NULL },
+ { "0.81", NULL },
+ { "0.82", NULL },
+ { "0.83", NULL },
+ { "0.84", NULL },
+ { "0.85", NULL },
+ { "0.86", NULL },
+ { "0.87", NULL },
+ { "0.88", NULL },
+ { "0.89", NULL },
+ { "0.90", NULL },
+ { "0.91", NULL },
+ { "0.92", NULL },
+ { "0.93", NULL },
+ { "0.94", NULL },
+ { "0.95", NULL },
+ { "0.96", NULL },
+ { "0.97", NULL },
+ { "0.98", NULL },
+ { "0.99", NULL },
+ { "1.00", NULL },
+ { "1.01", NULL },
+ { "1.02", NULL },
+ { "1.03", NULL },
+ { "1.04", NULL },
+ { "1.05", NULL },
+ { "1.06", NULL },
+ { "1.07", NULL },
+ { "1.08", NULL },
+ { "1.09", NULL },
+ { "1.10", NULL },
+ { "1.11", NULL },
+ { "1.12", NULL },
+ { "1.13", NULL },
+ { "1.14", NULL },
+ { "1.15", NULL },
+ { "1.16", NULL },
+ { "1.17", NULL },
+ { "1.18", NULL },
+ { "1.19", NULL },
+ { "1.20", NULL },
+ { "1.21", NULL },
+ { "1.22", NULL },
+ { "1.23", NULL },
+ { "1.24", NULL },
+ { "1.25", NULL },
+ { NULL, NULL },
+ },
+ "1",
+ },
+ {
+ "pcsx_rearmed_gunconadjustratioy",
+ "Guncon Adjust Ratio Y",
+ "When using Guncon mode, you can override aim in emulator if shots misaligned, this applies a ratio on the y axis.",
+ {
+ { "1", NULL },
+ { "0.75", NULL },
+ { "0.76", NULL },
+ { "0.77", NULL },
+ { "0.78", NULL },
+ { "0.79", NULL },
+ { "0.80", NULL },
+ { "0.81", NULL },
+ { "0.82", NULL },
+ { "0.83", NULL },
+ { "0.84", NULL },
+ { "0.85", NULL },
+ { "0.86", NULL },
+ { "0.87", NULL },
+ { "0.88", NULL },
+ { "0.89", NULL },
+ { "0.90", NULL },
+ { "0.91", NULL },
+ { "0.92", NULL },
+ { "0.93", NULL },
+ { "0.94", NULL },
+ { "0.95", NULL },
+ { "0.96", NULL },
+ { "0.97", NULL },
+ { "0.98", NULL },
+ { "0.99", NULL },
+ { "1.00", NULL },
+ { "1.01", NULL },
+ { "1.02", NULL },
+ { "1.03", NULL },
+ { "1.04", NULL },
+ { "1.05", NULL },
+ { "1.06", NULL },
+ { "1.07", NULL },
+ { "1.08", NULL },
+ { "1.09", NULL },
+ { "1.10", NULL },
+ { "1.11", NULL },
+ { "1.12", NULL },
+ { "1.13", NULL },
+ { "1.14", NULL },
+ { "1.15", NULL },
+ { "1.16", NULL },
+ { "1.17", NULL },
+ { "1.18", NULL },
+ { "1.19", NULL },
+ { "1.20", NULL },
+ { "1.21", NULL },
+ { "1.22", NULL },
+ { "1.23", NULL },
+ { "1.24", NULL },
+ { "1.25", NULL },
+ { NULL, NULL },
+ },
+ "1",
+ },
{
"pcsx_rearmed_dithering",
"Enable Dithering",
{ "enabled", NULL },
{ NULL, NULL },
},
+ #ifdef HAVE_LIBNX
+ "disabled",
+ #else
"enabled",
+ #endif
},
#ifndef DRC_DISABLE
},
"enabled",
},
+ {
+ "pcsx_rearmed_spuirq",
+ "SPU IRQ Always Enabled",
+ "Compatibility tweak, should be left to off in most cases.",
+ {
+ { "disabled", NULL },
+ { "enabled", NULL },
+ { NULL, NULL },
+ },
+ "disabled",
+ },
#ifndef DRC_DISABLE
{