diff --git a/Frameworks/vio2sf/vio2sf/src/vio2sf/desmume/state.c b/Frameworks/vio2sf/vio2sf/src/vio2sf/desmume/state.c index a113c45c1..6d1149d7a 100644 --- a/Frameworks/vio2sf/vio2sf/src/vio2sf/desmume/state.c +++ b/Frameworks/vio2sf/vio2sf/src/vio2sf/desmume/state.c @@ -259,8 +259,10 @@ int state_init(struct NDS_state *state) void state_deinit(struct NDS_state *state) { - MMU_unsetRom(state); - NDS_DeInit(state); + if (state->MMU) + MMU_unsetRom(state); + if (state->nds && state->MMU && state->NDS_ARM7 && state->NDS_ARM9 && state->MainScreen && state->SubScreen) + NDS_DeInit(state); if (state->nds) free(state->nds); state->nds = NULL; if (state->NDS_ARM7) free(state->NDS_ARM7); diff --git a/Plugins/HighlyComplete/HighlyComplete/HCDecoder.mm b/Plugins/HighlyComplete/HighlyComplete/HCDecoder.mm index 7bfa1c478..e7dc5685c 100644 --- a/Plugins/HighlyComplete/HighlyComplete/HCDecoder.mm +++ b/Plugins/HighlyComplete/HighlyComplete/HCDecoder.mm @@ -1003,12 +1003,17 @@ static int twosf_info(void * context, const char * name, const char * value) return NO; } + if ( state_init(core) ) + { + state_deinit(core); + if (state.rom) free(state.rom); + if (state.state) free(state.state); + return NO; + } + emulatorCore = ( uint8_t * ) core; emulatorExtra = state.rom; - if ( state_init(core) ) - return NO; - if ( state.rom ) state_setrom(core, state.rom, (u32) state.rom_size );