Merge pull request #369 from negativeExponent/switch
authorTwinaphex <libretro@gmail.com>
Mon, 16 Dec 2019 17:50:50 +0000 (18:50 +0100)
committerGitHub <noreply@github.com>
Mon, 16 Dec 2019 17:50:50 +0000 (18:50 +0100)
Update

1  2 
frontend/libretro.c
frontend/libretro_core_options.h

diff --combined frontend/libretro.c
  #include <sys/syscall.h>
  #endif
  
+ #ifdef SWITCH
+ #include <switch.h>
+ #endif
  #include "../libpcsxcore/misc.h"
  #include "../libpcsxcore/psxcounters.h"
  #include "../libpcsxcore/psxmem_map.h"
@@@ -572,8 -576,6 +576,8 @@@ static void update_controller_port_vari
                        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
@@@ -1052,20 -1054,6 +1056,20 @@@ strcasestr(const char *s, const char*fi
  }
  #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;
  }
  
@@@ -1630,16 -1616,6 +1634,16 @@@ static void update_variables(bool in_fl
           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";
@@@ -2028,93 -2004,6 +2032,93 @@@ void retro_run(void
           }
        }
  
 +              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++)
@@@ -2441,7 -2330,7 +2445,7 @@@ void retro_init(void
  
  #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);
@@@ -106,7 -106,6 +106,7 @@@ struct retro_core_option_definition opt
           { "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
     {