Browse Source

rom_data -> rom_loaded

git-svn-id: file:///home/notaz/opt/svn/PicoDrive@372 be3aeb3a-fb24-0410-a615-afba39da0efa
notaz 16 years ago
parent
commit
eacee137ee
6 changed files with 65 additions and 67 deletions
  1. 13 15
      platform/common/emu.c
  2. 1 1
      platform/common/emu.h
  3. 15 15
      platform/gizmondo/menu.c
  4. 15 15
      platform/gp2x/menu.c
  5. 17 17
      platform/psp/menu.c
  6. 4 4
      platform/win32/GenaDrive/Main.cpp

+ 13 - 15
platform/common/emu.c

@@ -35,7 +35,7 @@
 
 char *PicoConfigFile = "picoconfig.bin";
 currentConfig_t currentConfig;
-unsigned char *rom_data = NULL;
+int rom_loaded = 0;
 char noticeMsg[64];
 int state_slot = 0;
 int config_slot = 0, config_slot_current = 0;
@@ -193,6 +193,7 @@ int emu_ReloadRom(void)
 {
 	unsigned int rom_size = 0;
 	char *used_rom_name = romFileName;
+	unsigned char *rom_data = NULL;
 	char ext[5];
 	pm_file *rom;
 	int ret, cd_state, cd_region, cfg_loaded = 0;
@@ -202,7 +203,7 @@ int emu_ReloadRom(void)
 	get_ext(romFileName, ext);
 
 	// detect wrong extensions
-	if(!strcmp(ext, ".srm") || !strcmp(ext, "s.gz") || !strcmp(ext, ".mds")) { // s.gz ~ .mds.gz
+	if (!strcmp(ext, ".srm") || !strcmp(ext, "s.gz") || !strcmp(ext, ".mds")) { // s.gz ~ .mds.gz
 		sprintf(menuErrorMsg, "Not a ROM selected.");
 		return 0;
 	}
@@ -210,11 +211,11 @@ int emu_ReloadRom(void)
 	PicoPatchUnload();
 
 	// check for movie file
-	if(movie_data) {
+	if (movie_data) {
 		free(movie_data);
 		movie_data = 0;
 	}
-	if(!strcmp(ext, ".gmv")) {
+	if (!strcmp(ext, ".gmv")) {
 		// check for both gmv and rom
 		int dummy;
 		FILE *movie_file = fopen(romFileName, "rb");
@@ -293,20 +294,17 @@ int emu_ReloadRom(void)
 	}
 
 	rom = pm_open(used_rom_name);
-	if(!rom) {
+	if (!rom) {
 		sprintf(menuErrorMsg, "Failed to open rom.");
 		return 0;
 	}
 
 	menu_romload_prepare(used_rom_name); // also CD load
 
-	if(rom_data) {
-		free(rom_data);
-		rom_data = 0;
-		rom_size = 0;
-	}
+	PicoCartUnload();
+	rom_loaded = 0;
 
-	if( (ret = PicoCartLoad(rom, &rom_data, &rom_size)) ) {
+	if ( (ret = PicoCartLoad(rom, &rom_data, &rom_size)) ) {
 		sprintf(menuErrorMsg, "PicoCartLoad() failed.");
 		lprintf("%s\n", menuErrorMsg);
 		pm_close(rom);
@@ -316,10 +314,9 @@ int emu_ReloadRom(void)
 	pm_close(rom);
 
 	// detect wrong files (Pico crashes on very small files), also see if ROM EP is good
-	if(rom_size <= 0x200 || strncmp((char *)rom_data, "Pico", 4) == 0 ||
+	if (rom_size <= 0x200 || strncmp((char *)rom_data, "Pico", 4) == 0 ||
 	  ((*(unsigned char *)(rom_data+4)<<16)|(*(unsigned short *)(rom_data+6))) >= (int)rom_size) {
 		if (rom_data) free(rom_data);
-		rom_data = 0;
 		sprintf(menuErrorMsg, "Not a ROM selected.");
 		menu_romload_end();
 		return 0;
@@ -332,7 +329,7 @@ int emu_ReloadRom(void)
 	}
 
 	lprintf("PicoCartInsert(%p, %d);\n", rom_data, rom_size);
-	if(PicoCartInsert(rom_data, rom_size)) {
+	if (PicoCartInsert(rom_data, rom_size)) {
 		sprintf(menuErrorMsg, "Failed to load ROM.");
 		menu_romload_end();
 		return 0;
@@ -395,9 +392,10 @@ int emu_ReloadRom(void)
 	emu_noticeMsgUpdated();
 
 	// load SRAM for this ROM
-	if(currentConfig.EmuOpt & 1)
+	if (currentConfig.EmuOpt & 1)
 		emu_SaveLoadGame(1, 1);
 
+	rom_loaded = 1;
 	return 1;
 }
 

+ 1 - 1
platform/common/emu.h

@@ -29,7 +29,7 @@ typedef struct {
 
 extern currentConfig_t currentConfig;
 extern char *PicoConfigFile;
-extern unsigned char *rom_data;
+extern int rom_loaded;
 extern char noticeMsg[64];
 extern int state_slot;
 extern int config_slot, config_slot_current;

+ 15 - 15
platform/gizmondo/menu.c

@@ -124,7 +124,7 @@ void menu_romload_prepare(const char *rom_name)
 	const char *p = rom_name + strlen(rom_name);
 	while (p > rom_name && *p != '/') p--;
 
-	if (rom_data == NULL)
+	if (!rom_loaded)
 		memset(menu_screen, 0, 321*240*2);
 	menu_draw_begin(1);
 
@@ -179,7 +179,7 @@ static void draw_dirlist(char *curdir, struct my_dirent **namelist, int n, int s
 
 	menu_draw_begin(1);
 
-	if (rom_data == NULL) {
+	if (!rom_loaded) {
 		menu_darken_bg(menu_screen, menu_screen, 321*240, 0);
 	}
 
@@ -826,7 +826,7 @@ static void kc_sel_loop(void)
 				case 1: key_config_loop(ctrl_actions, is_6button ? 12 : 8, 1); return;
 				case 2: key_config_loop(emuctrl_actions,
 						sizeof(emuctrl_actions)/sizeof(emuctrl_actions[0]), -1); return;
-				case 3: if (rom_data == NULL) emu_WriteConfig(0); return;
+				case 3: if (!rom_loaded) emu_WriteConfig(0); return;
 				default: return;
 			}
 		}
@@ -1232,7 +1232,7 @@ static int menu_loop_options(void)
 	currentConfig.PsndRate = PsndRate;
 	currentConfig.PicoRegion = PicoRegionOverride;
 
-	me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_SAVECFG_GAME, rom_data != NULL);
+	me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_SAVECFG_GAME, rom_loaded);
 	me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_LOADCFG, config_slot != config_slot_current);
 	menu_sel_max = me_count_enabled(opt_entries, OPT_ENTRY_COUNT) - 1;
 	if (menu_sel > menu_sel_max) menu_sel = menu_sel_max;
@@ -1422,10 +1422,10 @@ static void menu_loop_root(void)
 	int ret, menu_sel_max;
 	unsigned long inp = 0;
 
-	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESUME_GAME, rom_data != NULL);
-	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_SAVE_STATE,  rom_data != NULL);
-	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_LOAD_STATE,  rom_data != NULL);
-	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESET_GAME,  rom_data != NULL);
+	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESUME_GAME, rom_loaded);
+	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_SAVE_STATE,  rom_loaded);
+	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_LOAD_STATE,  rom_loaded);
+	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESET_GAME,  rom_loaded);
 	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_PATCHES,     PicoPatches != NULL);
 
 	menu_sel_max = me_count_enabled(main_entries, MAIN_ENTRY_COUNT) - 1;
@@ -1444,7 +1444,7 @@ static void menu_loop_root(void)
 		if(inp & BTN_DOWN)  { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
 		if((inp & (BTN_L|BTN_R)) == (BTN_L|BTN_R)) debug_menu_loop();
 		if( inp & (BTN_HOME|BTN_STOP)) {
-			if (rom_data) {
+			if (rom_loaded) {
 				while (Framework_PollGetButtons() & (BTN_HOME|BTN_STOP)) Sleep(50); // wait until released
 				engineState = PGS_Running;
 				break;
@@ -1454,14 +1454,14 @@ static void menu_loop_root(void)
 			switch (me_index2id(main_entries, MAIN_ENTRY_COUNT, menu_sel))
 			{
 				case MA_MAIN_RESUME_GAME:
-					if (rom_data) {
+					if (rom_loaded) {
 						while (Framework_PollGetButtons() & BTN_PLAY) Sleep(50);
 						engineState = PGS_Running;
 						return;
 					}
 					break;
 				case MA_MAIN_SAVE_STATE:
-					if (rom_data) {
+					if (rom_loaded) {
 						if(savestate_menu_loop(0))
 							continue;
 						engineState = PGS_Running;
@@ -1469,7 +1469,7 @@ static void menu_loop_root(void)
 					}
 					break;
 				case MA_MAIN_LOAD_STATE:
-					if (rom_data) {
+					if (rom_loaded) {
 						if(savestate_menu_loop(1))
 							continue;
 						engineState = PGS_Running;
@@ -1477,7 +1477,7 @@ static void menu_loop_root(void)
 					}
 					break;
 				case MA_MAIN_RESET_GAME:
-					if (rom_data) {
+					if (rom_loaded) {
 						emu_ResetGame();
 						engineState = PGS_Running;
 						return;
@@ -1520,7 +1520,7 @@ static void menu_loop_root(void)
 					engineState = PGS_Quit;
 					return;
 				case MA_MAIN_PATCHES:
-					if (rom_data && PicoPatches) {
+					if (rom_loaded && PicoPatches) {
 						patches_menu_loop();
 						PicoPatchApply();
 						strcpy(menuErrorMsg, "Patches applied");
@@ -1586,7 +1586,7 @@ static void menu_prepare_bg(int use_game_bg)
 
 static void menu_gfx_prepare(void)
 {
-	menu_prepare_bg(rom_data != NULL);
+	menu_prepare_bg(rom_loaded);
 
 	menu_draw_begin(1);
 	menu_draw_end();

+ 15 - 15
platform/gp2x/menu.c

@@ -169,7 +169,7 @@ void menu_romload_prepare(const char *rom_name)
 	const char *p = rom_name + strlen(rom_name);
 	while (p > rom_name && *p != '/') p--;
 
-	if (rom_data) gp2x_pd_clone_buffer2();
+	if (rom_loaded) gp2x_pd_clone_buffer2();
 	else memset(gp2x_screen, 0, 320*240*2);
 
 	smalltext_out16(1, 1, "Loading", 0xffff);
@@ -215,7 +215,7 @@ static void draw_dirlist(char *curdir, struct dirent **namelist, int n, int sel)
 
 	gp2x_pd_clone_buffer2();
 
-	if (rom_data == NULL) {
+	if (!rom_loaded) {
 		menu_darken_bg(gp2x_screen, 320*240, 0);
 	}
 
@@ -860,7 +860,7 @@ static void kc_sel_loop(void)
 				case 1: key_config_loop(ctrl_actions, is_6button ? 12 : 8, 1); return;
 				case 2: key_config_loop(emuctrl_actions,
 						sizeof(emuctrl_actions)/sizeof(emuctrl_actions[0]), -1); return;
-				case 3: if (rom_data == NULL) emu_WriteConfig(0); return;
+				case 3: if (!rom_loaded) emu_WriteConfig(0); return;
 				default: return;
 			}
 		}
@@ -1294,7 +1294,7 @@ static int menu_loop_options(void)
 	currentConfig.PsndRate = PsndRate;
 	currentConfig.PicoRegion = PicoRegionOverride;
 
-	me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_SAVECFG_GAME, rom_data != NULL);
+	me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_SAVECFG_GAME, rom_loaded);
 	me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_LOADCFG, config_slot != config_slot_current);
 	menu_sel_max = me_count_enabled(opt_entries, OPT_ENTRY_COUNT) - 1;
 	if (menu_sel > menu_sel_max) menu_sel = menu_sel_max;
@@ -1485,10 +1485,10 @@ static void menu_loop_root(void)
 	int ret, menu_sel_max;
 	unsigned long inp = 0;
 
-	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESUME_GAME, rom_data != NULL);
-	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_SAVE_STATE,  rom_data != NULL);
-	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_LOAD_STATE,  rom_data != NULL);
-	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESET_GAME,  rom_data != NULL);
+	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESUME_GAME, rom_loaded);
+	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_SAVE_STATE,  rom_loaded);
+	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_LOAD_STATE,  rom_loaded);
+	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESET_GAME,  rom_loaded);
 	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_PATCHES,     PicoPatches != NULL);
 
 	menu_sel_max = me_count_enabled(main_entries, MAIN_ENTRY_COUNT) - 1;
@@ -1506,7 +1506,7 @@ static void menu_loop_root(void)
 		if(inp & GP2X_DOWN)  { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
 		if((inp & (GP2X_L|GP2X_R)) == (GP2X_L|GP2X_R)) debug_menu_loop();
 		if(inp &(GP2X_SELECT|GP2X_X)){
-			if (rom_data) {
+			if (rom_loaded) {
 				while (gp2x_joystick_read(1) & (GP2X_SELECT|GP2X_X)) usleep(50*1000); // wait until select is released
 				engineState = PGS_Running;
 				break;
@@ -1516,14 +1516,14 @@ static void menu_loop_root(void)
 			switch (me_index2id(main_entries, MAIN_ENTRY_COUNT, menu_sel))
 			{
 				case MA_MAIN_RESUME_GAME:
-					if (rom_data) {
+					if (rom_loaded) {
 						while (gp2x_joystick_read(1) & GP2X_B) usleep(50*1000);
 						engineState = PGS_Running;
 						return;
 					}
 					break;
 				case MA_MAIN_SAVE_STATE:
-					if (rom_data) {
+					if (rom_loaded) {
 						if(savestate_menu_loop(0))
 							continue;
 						engineState = PGS_Running;
@@ -1531,7 +1531,7 @@ static void menu_loop_root(void)
 					}
 					break;
 				case MA_MAIN_LOAD_STATE:
-					if (rom_data) {
+					if (rom_loaded) {
 						if(savestate_menu_loop(1))
 							continue;
 						engineState = PGS_Running;
@@ -1539,7 +1539,7 @@ static void menu_loop_root(void)
 					}
 					break;
 				case MA_MAIN_RESET_GAME:
-					if (rom_data) {
+					if (rom_loaded) {
 						emu_ResetGame();
 						engineState = PGS_Running;
 						return;
@@ -1582,7 +1582,7 @@ static void menu_loop_root(void)
 					engineState = PGS_Quit;
 					return;
 				case MA_MAIN_PATCHES:
-					if (rom_data && PicoPatches) {
+					if (rom_loaded && PicoPatches) {
 						patches_menu_loop();
 						PicoPatchApply();
 						strcpy(menuErrorMsg, "Patches applied");
@@ -1641,7 +1641,7 @@ static void menu_prepare_bg(int use_game_bg)
 
 static void menu_gfx_prepare(void)
 {
-	menu_prepare_bg(rom_data != NULL);
+	menu_prepare_bg(rom_loaded);
 
 	// switch to 16bpp
 	gp2x_video_changemode2(16);

+ 17 - 17
platform/psp/menu.c

@@ -153,7 +153,7 @@ void menu_romload_prepare(const char *rom_name)
 	while (p > rom_name && *p != '/') p--;
 
 	psp_video_switch_to_single();
-	if (rom_data) menu_draw_begin();
+	if (rom_loaded) menu_draw_begin();
 	else memset32_uncached(psp_screen, 0, 512*272*2/4);
 
 	smalltext_out16(1, 1, "Loading", 0xffff);
@@ -206,7 +206,7 @@ static void draw_dirlist(char *curdir, struct my_dirent **namelist, int n, int s
 
 	menu_draw_begin();
 
-	if (rom_data == NULL) {
+	if (!rom_loaded) {
 //		menu_darken_bg(menu_screen, menu_screen, 321*240, 0);
 	}
 
@@ -836,7 +836,7 @@ static void kc_sel_loop(void)
 				case 1: key_config_loop(ctrl_actions, is_6button ? 12 : 8, 1); return;
 				case 2: key_config_loop(emuctrl_actions,
 						sizeof(emuctrl_actions)/sizeof(emuctrl_actions[0]), -1); return;
-				case 3: if (rom_data == NULL) emu_WriteConfig(0); return;
+				case 3: if (!rom_loaded) emu_WriteConfig(0); return;
 				default: return;
 			}
 		}
@@ -1051,7 +1051,7 @@ static void menu_opt3_preview(int is_32col)
 {
 	void *oldstate = NULL;
 
-	if (rom_data == NULL || ((Pico.video.reg[12]&1)^1) != is_32col)
+	if (!rom_loaded || ((Pico.video.reg[12]&1)^1) != is_32col)
 	{
 		extern char bgdatac32_start[], bgdatac40_start[];
 		extern int bgdatac32_size, bgdatac40_size;
@@ -1061,7 +1061,7 @@ static void menu_opt3_preview(int is_32col)
 		ret = uncompress((Bytef *)bg_buffer, &outsize, bgdata, insize);
 		if (ret == 0)
 		{
-			if (rom_data != NULL) oldstate = get_oldstate_for_preview();
+			if (rom_loaded) oldstate = get_oldstate_for_preview();
 			memcpy(Pico.vram,  bg_buffer, sizeof(Pico.vram));
 			memcpy(Pico.cram,  (char *)bg_buffer + 0x10000, 0x40*2);
 			memcpy(Pico.vsram, (char *)bg_buffer + 0x10080, 0x40*2);
@@ -1415,7 +1415,7 @@ static int menu_loop_options(void)
 	currentConfig.PsndRate = PsndRate;
 	currentConfig.PicoRegion = PicoRegionOverride;
 
-	me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_SAVECFG_GAME, rom_data != NULL);
+	me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_SAVECFG_GAME, rom_loaded);
 	me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_LOADCFG, config_slot != config_slot_current);
 	menu_sel_max = me_count_enabled(opt_entries, OPT_ENTRY_COUNT) - 1;
 	if (menu_sel > menu_sel_max) menu_sel = menu_sel_max;
@@ -1602,10 +1602,10 @@ static void menu_loop_root(void)
 	int ret, menu_sel_max;
 	unsigned long inp = 0;
 
-	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESUME_GAME, rom_data != NULL);
-	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_SAVE_STATE,  rom_data != NULL);
-	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_LOAD_STATE,  rom_data != NULL);
-	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESET_GAME,  rom_data != NULL);
+	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESUME_GAME, rom_loaded);
+	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_SAVE_STATE,  rom_loaded);
+	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_LOAD_STATE,  rom_loaded);
+	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESET_GAME,  rom_loaded);
 	me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_PATCHES,     PicoPatches != NULL);
 
 	menu_sel_max = me_count_enabled(main_entries, MAIN_ENTRY_COUNT) - 1;
@@ -1632,7 +1632,7 @@ static void menu_loop_root(void)
 		if(inp & BTN_DOWN)  { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
 		if((inp & (BTN_L|BTN_R)) == (BTN_L|BTN_R)) debug_menu_loop();
 		if( inp & (BTN_SELECT|BTN_X)) {
-			if (rom_data) {
+			if (rom_loaded) {
 				while (psp_pad_read(1) & (BTN_SELECT|BTN_X)) psp_msleep(50); // wait until released
 				engineState = PGS_Running;
 				break;
@@ -1643,14 +1643,14 @@ static void menu_loop_root(void)
 			switch (me_index2id(main_entries, MAIN_ENTRY_COUNT, menu_sel))
 			{
 				case MA_MAIN_RESUME_GAME:
-					if (rom_data) {
+					if (rom_loaded) {
 						while (psp_pad_read(1) & BTN_CIRCLE) psp_msleep(50);
 						engineState = PGS_Running;
 						return;
 					}
 					break;
 				case MA_MAIN_SAVE_STATE:
-					if (rom_data) {
+					if (rom_loaded) {
 						if(savestate_menu_loop(0))
 							continue;
 						engineState = PGS_Running;
@@ -1658,7 +1658,7 @@ static void menu_loop_root(void)
 					}
 					break;
 				case MA_MAIN_LOAD_STATE:
-					if (rom_data) {
+					if (rom_loaded) {
 						if(savestate_menu_loop(1))
 							continue;
 						engineState = PGS_Running;
@@ -1666,7 +1666,7 @@ static void menu_loop_root(void)
 					}
 					break;
 				case MA_MAIN_RESET_GAME:
-					if (rom_data) {
+					if (rom_loaded) {
 						emu_ResetGame();
 						engineState = PGS_Running;
 						return;
@@ -1711,7 +1711,7 @@ static void menu_loop_root(void)
 					engineState = PGS_Quit;
 					return;
 				case MA_MAIN_PATCHES:
-					if (rom_data && PicoPatches) {
+					if (rom_loaded && PicoPatches) {
 						patches_menu_loop();
 						PicoPatchApply();
 						strcpy(menuErrorMsg, "Patches applied");
@@ -1773,7 +1773,7 @@ static void menu_prepare_bg(int use_game_bg, int use_fg)
 
 static void menu_gfx_prepare(void)
 {
-	menu_prepare_bg(rom_data != NULL, 1);
+	menu_prepare_bg(rom_loaded, 1);
 
 	menu_draw_begin();
 	menu_draw_end();

+ 4 - 4
platform/win32/GenaDrive/Main.cpp

@@ -11,7 +11,7 @@ int lock_to_1_1 = 1;
 int MainWidth=720,MainHeight=480;
 
 static HMENU mdisplay = 0;
-static unsigned char *rom_data = NULL;
+static int rom_loaded = 0;
 
 static void UpdateRect()
 {
@@ -63,10 +63,10 @@ static void LoadROM(const char *cmdpath)
   LoopWait=1;
   for (i = 0; LoopWaiting == 0 && i < 10; i++) Sleep(100);
 
+  PicoUnloadCart();
   PicoCartInsert(rom_data_new, rom_size);
 
-  if (rom_data) free(rom_data);
-  rom_data = rom_data_new;
+  rom_loaded = 1;
   romname = rompath;
   LoopWait=0;
 }
@@ -106,7 +106,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
             lock_to_1_1=0;
             CheckMenuItem(mdisplay, 1104, MF_UNCHECKED);
           }
-          if (rom_data != NULL) LoopWait=0;
+          if (rom_loaded) LoopWait=0;
           return 0;
         case 1104:
           lock_to_1_1=!lock_to_1_1;