X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=platform%2Flibretro%2Flibretro.c;h=332cf65150c68afcbb8f584f7c61ca11fea11d8c;hb=f0a3d0dc4bd9060eb6bfdb16fb20dbb80a9e6ae9;hp=46363618d8ad7f15f66e4e71a38163021077d8f8;hpb=88f7643f70681d211c71a30d845592d48b1b9bea;p=picodrive.git diff --git a/platform/libretro/libretro.c b/platform/libretro/libretro.c index 4636361..332cf65 100644 --- a/platform/libretro/libretro.c +++ b/platform/libretro/libretro.c @@ -1,6 +1,8 @@ /* * libretro core glue for PicoDrive * (C) notaz, 2013 + * (C) aliaspider, 2016 + * (C) Daniel De Matteis, 2013 * * This work is licensed under the terms of MAME license. * See COPYING file in the top-level directory. @@ -69,6 +71,8 @@ static const float VOUT_PAR = 0.0; static const float VOUT_4_3 = (224.0f * (4.0f / 3.0f)); static const float VOUT_CRT = (224.0f * 1.29911f); +bool show_overscan = false; + static void *vout_buf; static int vout_width, vout_height, vout_offset; static float user_vout_width = 0.0; @@ -470,6 +474,8 @@ void emu_video_mode_change(int start_line, int line_count, int is_32cols) memset(vout_buf, 0, 320 * 240 * 2); vout_width = is_32cols ? 256 : 320; PicoDrawSetOutBuf(vout_buf, vout_width * 2); + if (show_overscan == true) line_count += 16; + if (show_overscan == true) start_line -= 8; vout_height = line_count; vout_offset = vout_width * start_line; @@ -507,6 +513,7 @@ void retro_set_environment(retro_environment_t cb) { "picodrive_region", "Region; Auto|Japan NTSC|Japan PAL|US|Europe" }, { "picodrive_region_fps", "Region FPS; Auto|NTSC|PAL" }, { "picodrive_aspect", "Core-provided aspect ratio; PAR|4/3|CRT" }, + { "picodrive_overscan", "Show Overscan; disabled|enabled" }, #ifdef DRC_SH2 { "picodrive_drc", "Dynamic recompilers; enabled|disabled" }, #endif @@ -537,7 +544,10 @@ void retro_get_system_info(struct retro_system_info *info) { memset(info, 0, sizeof(*info)); info->library_name = "PicoDrive"; - info->library_version = VERSION; +#ifndef GIT_VERSION +#define GIT_VERSION "" +#endif + info->library_version = VERSION GIT_VERSION; info->valid_extensions = "bin|gen|smd|md|32x|cue|iso|sms"; info->need_fullpath = true; } @@ -551,11 +561,11 @@ void retro_get_system_av_info(struct retro_system_av_info *info) info->geometry.base_height = vout_height; info->geometry.max_width = vout_width; info->geometry.max_height = vout_height; - + float common_width = vout_width; if (user_vout_width != 0) common_width = user_vout_width; - + info->geometry.aspect_ratio = common_width / vout_height; } @@ -877,6 +887,22 @@ static const char *find_bios(int *region, const char *cd_fname) return NULL; } +static void sram_reset() +{ + SRam.data = NULL; + SRam.start = 0; + SRam.end = 0; + SRam.flags = '\0'; + SRam.unused2 = '\0'; + SRam.changed = '\0' ; + SRam.eeprom_type = '\0'; + SRam.unused3 = '\0'; + SRam.eeprom_bit_cl = '\0'; + SRam.eeprom_bit_in = '\0'; + SRam.eeprom_bit_out = '\0'; + SRam.size = 0; +} + bool retro_load_game(const struct retro_game_info *info) { enum media_type_e media_type; @@ -933,6 +959,8 @@ bool retro_load_game(const struct retro_game_info *info) { 0 }, }; + sram_reset(); + enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_RGB565; if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { if (log_cb) @@ -1034,7 +1062,7 @@ void *retro_get_memory_data(unsigned type) data = NULL; break; } - + return data; } @@ -1042,7 +1070,7 @@ size_t retro_get_memory_size(unsigned type) { unsigned int i; int sum; - + switch(type) { case RETRO_MEMORY_SAVE_RAM: @@ -1059,17 +1087,17 @@ size_t retro_get_memory_size(unsigned type) sum |= SRam.data[i]; return (sum != 0) ? SRam.size : 0; - + case RETRO_MEMORY_SYSTEM_RAM: if (PicoAHW & PAHW_SMS) return sizeof(Pico.vramb); else return sizeof(Pico.ram); - + default: return 0; } - + } void retro_reset(void) @@ -1169,7 +1197,7 @@ static void update_variables(void) else if (strcmp(var.value, "NTSC") == 0) PicoRegionFPSOverride = 1; else if (strcmp(var.value, "PAL") == 0) - PicoRegionFPSOverride = 2; + PicoRegionFPSOverride = 2; } // Update region, fps and sound flags if needed @@ -1190,7 +1218,16 @@ static void update_variables(void) else if (strcmp(var.value, "CRT") == 0) user_vout_width = VOUT_CRT; else - user_vout_width = VOUT_PAR; + user_vout_width = VOUT_PAR; + } + + var.value = NULL; + var.key = "picodrive_overscan"; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "enabled") == 0) + show_overscan = true; + else + show_overscan = false; } if (user_vout_width != old_user_vout_width)