HLE: Merge HLE BIOS improvements from upstream
[pcsx_rearmed.git] / frontend / libretro.c
index 9971a4f..992da60 100644 (file)
@@ -76,6 +76,9 @@ static bool display_internal_fps = false;
 static unsigned frame_count = 0;
 static bool libretro_supports_bitmasks = false;
 
+static unsigned previous_width = 0;
+static unsigned previous_height = 0;
+
 static int plugins_opened;
 static int is_pal_mode;
 
@@ -180,6 +183,18 @@ static void vout_set_mode(int w, int h, int raw_w, int raw_h, int bpp)
   vout_width = w;
   vout_height = h;
 
+       if (previous_width != vout_width || previous_height != vout_height)
+       {
+               previous_width = vout_width;
+               previous_height = vout_height;
+
+       SysPrintf("setting mode width: %d height %d\n", vout_width, vout_height);
+
+       struct retro_system_av_info info;
+       retro_get_system_av_info(&info);
+       environ_cb(RETRO_ENVIRONMENT_SET_GEOMETRY, &info.geometry);
+       }
+
   set_vout_fb();
 }
 
@@ -714,11 +729,15 @@ void retro_get_system_info(struct retro_system_info *info)
 
 void retro_get_system_av_info(struct retro_system_av_info *info)
 {
+
+       unsigned geom_height = vout_height > 0 ? vout_height : 240;
+       unsigned geom_width = vout_width > 0 ? vout_width : 320;
+
        memset(info, 0, sizeof(*info));
        info->timing.fps            = is_pal_mode ? 50 : 60;
        info->timing.sample_rate    = 44100;
-       info->geometry.base_width   = 320;
-       info->geometry.base_height  = 240;
+       info->geometry.base_width   = geom_width;
+       info->geometry.base_height  = geom_height;
        info->geometry.max_width    = VOUT_MAX_WIDTH;
        info->geometry.max_height   = VOUT_MAX_HEIGHT;
        info->geometry.aspect_ratio = 4.0 / 3.0;
@@ -1345,6 +1364,8 @@ void *retro_get_memory_data(unsigned id)
 {
        if (id == RETRO_MEMORY_SAVE_RAM)
                return Mcd1Data;
+       else if (id == RETRO_MEMORY_SYSTEM_RAM)
+               return psxM;
        else
                return NULL;
 }
@@ -1353,6 +1374,8 @@ size_t retro_get_memory_size(unsigned id)
 {
        if (id == RETRO_MEMORY_SAVE_RAM)
                return MCD_SIZE;
+       else if (id == RETRO_MEMORY_SYSTEM_RAM)
+               return 0x210000;
        else
                return 0;
 }
@@ -1791,11 +1814,11 @@ void retro_run(void)
          ret = input_state_cb(i, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_MASK);
       else
       {
-         unsigned i;
-         for (i = 0; i < RETRO_DEVICE_ID_JOYPAD_R3+1; i++)
+         unsigned j;
+         for (j = 0; j < (RETRO_DEVICE_ID_JOYPAD_R3+1); j++)
          {
-            if (input_state_cb(i, RETRO_DEVICE_JOYPAD, 0, i))
-               ret |= (1 << i);
+            if (input_state_cb(i, RETRO_DEVICE_JOYPAD, 0, j))
+               ret |= (1 << j);
          }
       }
 
@@ -1804,7 +1827,7 @@ void retro_run(void)
                        // Query digital inputs
                        //
                        // > Pad-Up
-                       if (ret & (1 < RETRO_DEVICE_ID_JOYPAD_UP))
+                       if (ret & (1 << RETRO_DEVICE_ID_JOYPAD_UP))
                                in_keystate[i] |= (1 << DKEY_UP);
                        // > Pad-Right
                        if (ret & (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT))