libretro/win32: make sure S9xFreezeSize is only called after rom load

This commit is contained in:
OV2 2012-05-08 00:03:20 +02:00
parent 19b458bc47
commit 518110646a
2 changed files with 22 additions and 24 deletions

View File

@ -21,7 +21,6 @@
#include <sys/types.h> #include <sys/types.h>
#include <fcntl.h> #include <fcntl.h>
static retro_video_refresh_t s9x_video_cb = NULL; static retro_video_refresh_t s9x_video_cb = NULL;
static retro_audio_sample_t s9x_audio_cb = NULL; static retro_audio_sample_t s9x_audio_cb = NULL;
static retro_audio_sample_batch_t s9x_audio_batch_cb = NULL; static retro_audio_sample_batch_t s9x_audio_batch_cb = NULL;
@ -54,7 +53,8 @@ void retro_set_input_state(retro_input_state_t cb)
} }
static retro_environment_t environ_cb; static retro_environment_t environ_cb;
static bool use_overscan; static bool use_overscan = false;
static bool rom_loaded = false;
void retro_set_environment(retro_environment_t cb) void retro_set_environment(retro_environment_t cb)
{ {
environ_cb = cb; environ_cb = cb;
@ -153,19 +153,18 @@ void retro_cheat_set(unsigned, bool, const char*)
bool retro_load_game(const struct retro_game_info *game) bool retro_load_game(const struct retro_game_info *game)
{ {
int loaded = 0;
if(game->data == NULL && game->size == NULL && game->path != NULL) if(game->data == NULL && game->size == NULL && game->path != NULL)
loaded = Memory.LoadROM(game->path); rom_loaded = Memory.LoadROM(game->path);
else else
loaded = Memory.LoadROMMem((const uint8_t*)game->data ,game->size); rom_loaded = Memory.LoadROMMem((const uint8_t*)game->data ,game->size);
if (!loaded) if (!rom_loaded)
{ {
fprintf(stderr, "[libretro]: Rom loading failed...\n"); fprintf(stderr, "[libretro]: Rom loading failed...\n");
} }
return loaded; return rom_loaded;
} }
void retro_unload_game(void) void retro_unload_game(void)
@ -174,53 +173,55 @@ void retro_unload_game(void)
bool retro_load_game_special(unsigned game_type, bool retro_load_game_special(unsigned game_type,
const struct retro_game_info *info, size_t num_info) { const struct retro_game_info *info, size_t num_info) {
int loaded = 0;
switch (game_type) { switch (game_type) {
case RETRO_GAME_TYPE_BSX: case RETRO_GAME_TYPE_BSX:
if(num_info == 1) { if(num_info == 1) {
loaded = Memory.LoadROMMem((const uint8_t*)info[0].data,info[0].size); rom_loaded = Memory.LoadROMMem((const uint8_t*)info[0].data,info[0].size);
} else if(num_info == 2) { } else if(num_info == 2) {
memcpy(Memory.BIOSROM,(const uint8_t*)info[0].data,info[0].size); memcpy(Memory.BIOSROM,(const uint8_t*)info[0].data,info[0].size);
loaded = Memory.LoadROMMem((const uint8_t*)info[1].data,info[1].size); rom_loaded = Memory.LoadROMMem((const uint8_t*)info[1].data,info[1].size);
} }
if (!loaded) if (!rom_loaded)
{ {
fprintf(stderr, "[libretro]: BSX Rom loading failed...\n"); fprintf(stderr, "[libretro]: BSX Rom loading failed...\n");
} }
return loaded; break;
case RETRO_GAME_TYPE_BSX_SLOTTED: case RETRO_GAME_TYPE_BSX_SLOTTED:
if(num_info == 2) if(num_info == 2)
loaded = Memory.LoadMultiCartMem((const uint8_t*)info[0].data, info[0].size, rom_loaded = Memory.LoadMultiCartMem((const uint8_t*)info[0].data, info[0].size,
(const uint8_t*)info[1].data, info[1].size, NULL, NULL); (const uint8_t*)info[1].data, info[1].size, NULL, NULL);
if (!loaded) if (!rom_loaded)
{ {
fprintf(stderr, "[libretro]: Multirom loading failed...\n"); fprintf(stderr, "[libretro]: Multirom loading failed...\n");
} }
return loaded; break;
case RETRO_GAME_TYPE_SUFAMI_TURBO: case RETRO_GAME_TYPE_SUFAMI_TURBO:
if(num_info == 3) if(num_info == 3)
loaded = Memory.LoadMultiCartMem((const uint8_t*)info[1].data, info[1].size, rom_loaded = Memory.LoadMultiCartMem((const uint8_t*)info[1].data, info[1].size,
(const uint8_t*)info[2].data, info[2].size, (const uint8_t*)info[0].data, info[0].size); (const uint8_t*)info[2].data, info[2].size, (const uint8_t*)info[0].data, info[0].size);
if (!loaded) if (!rom_loaded)
{ {
fprintf(stderr, "[libretro]: Sufami Turbo Rom loading failed...\n"); fprintf(stderr, "[libretro]: Sufami Turbo Rom loading failed...\n");
} }
return loaded; break;
default: default:
return false; rom_loaded = false;
break;
} }
return rom_loaded;
} }
static void map_buttons(); static void map_buttons();
@ -251,13 +252,10 @@ void retro_init()
Settings.InitialInfoStringTimeout = 120; Settings.InitialInfoStringTimeout = 120;
Settings.HDMATimingHack = 100; Settings.HDMATimingHack = 100;
Settings.BlockInvalidVRAMAccessMaster = TRUE; Settings.BlockInvalidVRAMAccessMaster = TRUE;
Settings.StopEmulation = TRUE;
Settings.WrongMovieStateProtection = TRUE; Settings.WrongMovieStateProtection = TRUE;
Settings.DumpStreamsMaxFrames = -1; Settings.DumpStreamsMaxFrames = -1;
Settings.StretchScreenshots = 0; Settings.StretchScreenshots = 0;
Settings.SnapshotScreenshots = FALSE; Settings.SnapshotScreenshots = FALSE;
Settings.SkipFrames = AUTO_FRAMERATE;
Settings.TurboSkipFrames = 15;
Settings.CartAName[0] = 0; Settings.CartAName[0] = 0;
Settings.CartBName[0] = 0; Settings.CartBName[0] = 0;
Settings.AutoSaveDelay = 1; Settings.AutoSaveDelay = 1;
@ -560,7 +558,7 @@ size_t retro_get_memory_size(unsigned type)
size_t retro_serialize_size() size_t retro_serialize_size()
{ {
return S9xFreezeSize(); return rom_loaded ? S9xFreezeSize() : 0;
} }
bool retro_serialize(void *data, size_t size) bool retro_serialize(void *data, size_t size)

View File

@ -5041,7 +5041,7 @@ INT_PTR CALLBACK DlgEmulatorProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lPar
unsigned int newRewindBufSize = SendDlgItemMessage(hDlg, IDC_REWIND_BUFFER_SPIN, UDM_GETPOS, 0,0); unsigned int newRewindBufSize = SendDlgItemMessage(hDlg, IDC_REWIND_BUFFER_SPIN, UDM_GETPOS, 0,0);
if(GUI.rewindBufferSize != newRewindBufSize) { if(GUI.rewindBufferSize != newRewindBufSize) {
GUI.rewindBufferSize = newRewindBufSize; GUI.rewindBufferSize = newRewindBufSize;
stateMan.init(GUI.rewindBufferSize * 1024 * 1024); if(!Settings.StopEmulation) stateMan.init(GUI.rewindBufferSize * 1024 * 1024);
} }
WinSaveConfigFile(); WinSaveConfigFile();