diff options
-rw-r--r-- | libretro.c | 84 | ||||
-rw-r--r-- | source/gfx.c | 4 | ||||
-rw-r--r-- | source/memmap.c | 35 | ||||
-rw-r--r-- | source/memmap.h | 3 |
4 files changed, 56 insertions, 70 deletions
@@ -312,11 +312,6 @@ void init_sfc_setting(void) } -void S9xAutoSaveSRAM() -{ - SaveSRAM(S9xGetFilename("srm")); -} - #ifdef USE_BLARGG_APU static void S9xAudioCallback() { @@ -373,10 +368,6 @@ void retro_deinit(void) if (Settings.SPC7110) (*CleanUp7110)(); - if(retro_save_directory[0] == '\0') - SaveSRAM(S9xGetFilename("srm")); - else - SaveSRAM(retro_save_directory); S9xDeinitGFX(); S9xDeinitDisplay(); @@ -936,21 +927,6 @@ bool retro_load_game(const struct retro_game_info* game) Settings.FrameTime = (Settings.PAL ? Settings.FrameTimePAL : Settings.FrameTimeNTSC); - - const char *dir = NULL; - if (environ_cb(RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY, &dir) && dir) - { - GetBaseName(""); - snprintf(retro_save_directory,sizeof(retro_save_directory),"%s%c%s.srm",dir,slash,retro_base_name); - log_cb(RETRO_LOG_INFO, - "SAVE LOCATION: %s\n", retro_save_directory); - } - - if(retro_save_directory[0] != '\0') - LoadSRAM(retro_save_directory); - else - LoadSRAM(S9xGetFilename("srm")); - struct retro_system_av_info av_info; retro_get_system_av_info(&av_info); @@ -973,12 +949,64 @@ void retro_unload_game(void) } -void* retro_get_memory_data(unsigned id) +void* retro_get_memory_data(unsigned type) { - return NULL; + uint8_t* data; + + switch(type) + { + case RETRO_MEMORY_SAVE_RAM: + data = Memory.SRAM; + break; + case RETRO_MEMORY_RTC: +#if 0 + data = RTCData.reg; +#endif + break; + case RETRO_MEMORY_SYSTEM_RAM: + data = Memory.RAM; + break; + case RETRO_MEMORY_VIDEO_RAM: + data = Memory.VRAM; + break; + //case RETRO_MEMORY_ROM: + // data = Memory.ROM; + // break; + default: + data = NULL; + break; + } + + return data; } -size_t retro_get_memory_size(unsigned id) +size_t retro_get_memory_size(unsigned type) { - return 0; + unsigned size; + + switch(type) + { + case RETRO_MEMORY_SAVE_RAM: + size = (unsigned) (Memory.SRAMSize ? (1 << (Memory.SRAMSize + 3)) * 128 : 0); + if (size > 0x20000) + size = 0x20000; + break; + case RETRO_MEMORY_RTC: + size = (Settings.SRTC || Settings.SPC7110RTC)?20:0; + break; + case RETRO_MEMORY_SYSTEM_RAM: + size = 128 * 1024; + break; + case RETRO_MEMORY_VIDEO_RAM: + size = 64 * 1024; + break; + //case RETRO_MEMORY_ROM: + // data = Memory.CalculatedSize; + // break; + default: + size = 0; + break; + } + + return size; } diff --git a/source/gfx.c b/source/gfx.c index 1c3efa1..d55ae09 100644 --- a/source/gfx.c +++ b/source/gfx.c @@ -717,11 +717,7 @@ void S9xEndScreenRefresh() #endif if (CPU.SRAMModified) - { - S9xAutoSaveSRAM(); CPU.SRAMModified = false; - } - } void S9xSetInfoString(const char* string) diff --git a/source/memmap.c b/source/memmap.c index 01d0707..6c013ea 100644 --- a/source/memmap.c +++ b/source/memmap.c @@ -1535,41 +1535,6 @@ bool LoadSRAM(const char* filename) return (true); } -bool SaveSRAM(const char* filename) -{ - if (Settings.SuperFX && Memory.ROMType < 0x15) - return true; - if (Settings.SA1 && Memory.ROMType == 0x34) - return true; - - int size = Memory.SRAMSize ? - (1 << (Memory.SRAMSize + 3)) * 128 : 0; - if (Settings.SRTC) - { - size += SRTC_SRAM_PAD; - S9xSRTCPreSaveState(); - } - - if (size > 0x20000) - size = 0x20000; - - if (size && *Memory.ROMFilename) - { - - FILE* file = fopen(filename, "w"); - if (file) - { - fwrite((unsigned char*) Memory.SRAM, size, 1, file); - fclose(file); - if (Settings.SPC7110RTC) - S9xSaveSPC7110RTC(&rtc_f9); - - return (true); - } - } - return (false); -} - void FixROMSpeed() { int c; diff --git a/source/memmap.h b/source/memmap.h index 0be1192..3be1cd3 100644 --- a/source/memmap.h +++ b/source/memmap.h @@ -145,7 +145,6 @@ uint32_t FileLoader(uint8_t* buffer, const char* filename, int32_t maxsize); #endif void InitROM(bool); bool LoadSRAM(const char*); -bool SaveSRAM(const char*); bool S9xInitMemory(); void S9xDeinitMemory(); void FreeSDD1Data(); @@ -258,8 +257,6 @@ bool LoadZip(const char* zipname, uint8_t* buffer); -void S9xAutoSaveSRAM(); - #ifdef NO_INLINE_SET_GET uint8_t S9xGetByte(uint32_t Address); uint16_t S9xGetWord(uint32_t Address); |