diff --git a/libretro/libretro.cpp b/libretro/libretro.cpp index 127739b9..7f89a5cb 100644 --- a/libretro/libretro.cpp +++ b/libretro/libretro.cpp @@ -680,32 +680,6 @@ static int is_bsx (uint8 *p) return (0); } -static void Remove_Header(uint8_t *&romptr, size_t &romsize, bool multicart_sufami) -{ - if (romptr==0 || romsize==0) return; - - uint32 calc_size = (romsize / 0x2000) * 0x2000; - if ((romsize - calc_size == 512 && !Settings.ForceNoHeader) || Settings.ForceHeader) - { - romptr += 512; - romsize -= 512; - - if(log_cb) log_cb(RETRO_LOG_INFO,"[libretro]: ROM header removed\n"); - } - - if (multicart_sufami) - { - if (strncmp((const char*)(romptr+0x100000), "BANDAI SFC-ADX", 14) == 0 && - strncmp((const char*)(romptr+0x000000), "BANDAI SFC-ADX", 14) == 0) - { - romptr += 0x100000; - romsize -= 0x100000; - - if(log_cb) log_cb(RETRO_LOG_INFO,"[libretro]: Sufami Turbo Multi-ROM bios removed\n"); - } - } -} - static bool8 LoadBIOS(uint8 *biosrom, char *biosname, int biossize) { FILE *fp; @@ -808,17 +782,42 @@ bool retro_load_game(const struct retro_game_info *game) return rom_loaded; } +static void remove_header(uint8_t *&romptr, size_t &romsize, bool multicart_sufami) +{ + if (romptr==0 || romsize==0) return; + + uint32 calc_size = (romsize / 0x2000) * 0x2000; + if ((romsize - calc_size == 512 && !Settings.ForceNoHeader) || Settings.ForceHeader) + { + romptr += 512; + romsize -= 512; + + if(log_cb) log_cb(RETRO_LOG_INFO,"[libretro]: ROM header removed\n"); + } + + if (multicart_sufami && (romptr + romsize) >= (romptr + 0x100000)) + { + if (strncmp((const char*)(romptr + 0x100000), "BANDAI SFC-ADX", 14) == 0 && + strncmp((const char*)(romptr + 0x000000), "BANDAI SFC-ADX", 14) == 0) + { + romptr += 0x100000; + romsize -= 0x100000; + + if(log_cb) log_cb(RETRO_LOG_INFO,"[libretro]: Sufami Turbo Multi-ROM bios removed\n"); + } + } +} + bool retro_load_game_special(unsigned game_type, const struct retro_game_info *info, size_t num_info) { uint8_t *romptr[3]; size_t romsize[3]; - for(size_t lcv=0; lcv