\r
char *PicoConfigFile = "picoconfig.bin";\r
currentConfig_t currentConfig;\r
-unsigned char *rom_data = NULL;\r
+int rom_loaded = 0;\r
char noticeMsg[64];\r
int state_slot = 0;\r
int config_slot = 0, config_slot_current = 0;\r
{\r
unsigned int rom_size = 0;\r
char *used_rom_name = romFileName;\r
+ unsigned char *rom_data = NULL;\r
char ext[5];\r
pm_file *rom;\r
int ret, cd_state, cd_region, cfg_loaded = 0;\r
get_ext(romFileName, ext);\r
\r
// detect wrong extensions\r
- if(!strcmp(ext, ".srm") || !strcmp(ext, "s.gz") || !strcmp(ext, ".mds")) { // s.gz ~ .mds.gz\r
+ if (!strcmp(ext, ".srm") || !strcmp(ext, "s.gz") || !strcmp(ext, ".mds")) { // s.gz ~ .mds.gz\r
sprintf(menuErrorMsg, "Not a ROM selected.");\r
return 0;\r
}\r
PicoPatchUnload();\r
\r
// check for movie file\r
- if(movie_data) {\r
+ if (movie_data) {\r
free(movie_data);\r
movie_data = 0;\r
}\r
- if(!strcmp(ext, ".gmv")) {\r
+ if (!strcmp(ext, ".gmv")) {\r
// check for both gmv and rom\r
int dummy;\r
FILE *movie_file = fopen(romFileName, "rb");\r
}\r
\r
rom = pm_open(used_rom_name);\r
- if(!rom) {\r
+ if (!rom) {\r
sprintf(menuErrorMsg, "Failed to open rom.");\r
return 0;\r
}\r
\r
menu_romload_prepare(used_rom_name); // also CD load\r
\r
- if(rom_data) {\r
- free(rom_data);\r
- rom_data = 0;\r
- rom_size = 0;\r
- }\r
+ PicoCartUnload();\r
+ rom_loaded = 0;\r
\r
- if( (ret = PicoCartLoad(rom, &rom_data, &rom_size)) ) {\r
+ if ( (ret = PicoCartLoad(rom, &rom_data, &rom_size)) ) {\r
sprintf(menuErrorMsg, "PicoCartLoad() failed.");\r
lprintf("%s\n", menuErrorMsg);\r
pm_close(rom);\r
pm_close(rom);\r
\r
// detect wrong files (Pico crashes on very small files), also see if ROM EP is good\r
- if(rom_size <= 0x200 || strncmp((char *)rom_data, "Pico", 4) == 0 ||\r
+ if (rom_size <= 0x200 || strncmp((char *)rom_data, "Pico", 4) == 0 ||\r
((*(unsigned char *)(rom_data+4)<<16)|(*(unsigned short *)(rom_data+6))) >= (int)rom_size) {\r
if (rom_data) free(rom_data);\r
- rom_data = 0;\r
sprintf(menuErrorMsg, "Not a ROM selected.");\r
menu_romload_end();\r
return 0;\r
}\r
\r
lprintf("PicoCartInsert(%p, %d);\n", rom_data, rom_size);\r
- if(PicoCartInsert(rom_data, rom_size)) {\r
+ if (PicoCartInsert(rom_data, rom_size)) {\r
sprintf(menuErrorMsg, "Failed to load ROM.");\r
menu_romload_end();\r
return 0;\r
emu_noticeMsgUpdated();\r
\r
// load SRAM for this ROM\r
- if(currentConfig.EmuOpt & 1)\r
+ if (currentConfig.EmuOpt & 1)\r
emu_SaveLoadGame(1, 1);\r
\r
+ rom_loaded = 1;\r
return 1;\r
}\r
\r
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;
const char *p = rom_name + strlen(rom_name);\r
while (p > rom_name && *p != '/') p--;\r
\r
- if (rom_data == NULL)\r
+ if (!rom_loaded)\r
memset(menu_screen, 0, 321*240*2);\r
menu_draw_begin(1);\r
\r
\r
menu_draw_begin(1);\r
\r
- if (rom_data == NULL) {\r
+ if (!rom_loaded) {\r
menu_darken_bg(menu_screen, menu_screen, 321*240, 0);\r
}\r
\r
case 1: key_config_loop(ctrl_actions, is_6button ? 12 : 8, 1); return;\r
case 2: key_config_loop(emuctrl_actions,\r
sizeof(emuctrl_actions)/sizeof(emuctrl_actions[0]), -1); return;\r
- case 3: if (rom_data == NULL) emu_WriteConfig(0); return;\r
+ case 3: if (!rom_loaded) emu_WriteConfig(0); return;\r
default: return;\r
}\r
}\r
currentConfig.PsndRate = PsndRate;\r
currentConfig.PicoRegion = PicoRegionOverride;\r
\r
- me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_SAVECFG_GAME, rom_data != NULL);\r
+ me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_SAVECFG_GAME, rom_loaded);\r
me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_LOADCFG, config_slot != config_slot_current);\r
menu_sel_max = me_count_enabled(opt_entries, OPT_ENTRY_COUNT) - 1;\r
if (menu_sel > menu_sel_max) menu_sel = menu_sel_max;\r
int ret, menu_sel_max;\r
unsigned long inp = 0;\r
\r
- me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESUME_GAME, rom_data != NULL);\r
- me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_SAVE_STATE, rom_data != NULL);\r
- me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_LOAD_STATE, rom_data != NULL);\r
- me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESET_GAME, rom_data != NULL);\r
+ me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESUME_GAME, rom_loaded);\r
+ me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_SAVE_STATE, rom_loaded);\r
+ me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_LOAD_STATE, rom_loaded);\r
+ me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESET_GAME, rom_loaded);\r
me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_PATCHES, PicoPatches != NULL);\r
\r
menu_sel_max = me_count_enabled(main_entries, MAIN_ENTRY_COUNT) - 1;\r
if(inp & BTN_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }\r
if((inp & (BTN_L|BTN_R)) == (BTN_L|BTN_R)) debug_menu_loop();\r
if( inp & (BTN_HOME|BTN_STOP)) {\r
- if (rom_data) {\r
+ if (rom_loaded) {\r
while (Framework_PollGetButtons() & (BTN_HOME|BTN_STOP)) Sleep(50); // wait until released\r
engineState = PGS_Running;\r
break;\r
switch (me_index2id(main_entries, MAIN_ENTRY_COUNT, menu_sel))\r
{\r
case MA_MAIN_RESUME_GAME:\r
- if (rom_data) {\r
+ if (rom_loaded) {\r
while (Framework_PollGetButtons() & BTN_PLAY) Sleep(50);\r
engineState = PGS_Running;\r
return;\r
}\r
break;\r
case MA_MAIN_SAVE_STATE:\r
- if (rom_data) {\r
+ if (rom_loaded) {\r
if(savestate_menu_loop(0))\r
continue;\r
engineState = PGS_Running;\r
}\r
break;\r
case MA_MAIN_LOAD_STATE:\r
- if (rom_data) {\r
+ if (rom_loaded) {\r
if(savestate_menu_loop(1))\r
continue;\r
engineState = PGS_Running;\r
}\r
break;\r
case MA_MAIN_RESET_GAME:\r
- if (rom_data) {\r
+ if (rom_loaded) {\r
emu_ResetGame();\r
engineState = PGS_Running;\r
return;\r
engineState = PGS_Quit;\r
return;\r
case MA_MAIN_PATCHES:\r
- if (rom_data && PicoPatches) {\r
+ if (rom_loaded && PicoPatches) {\r
patches_menu_loop();\r
PicoPatchApply();\r
strcpy(menuErrorMsg, "Patches applied");\r
\r
static void menu_gfx_prepare(void)\r
{\r
- menu_prepare_bg(rom_data != NULL);\r
+ menu_prepare_bg(rom_loaded);\r
\r
menu_draw_begin(1);\r
menu_draw_end();\r
const char *p = rom_name + strlen(rom_name);\r
while (p > rom_name && *p != '/') p--;\r
\r
- if (rom_data) gp2x_pd_clone_buffer2();\r
+ if (rom_loaded) gp2x_pd_clone_buffer2();\r
else memset(gp2x_screen, 0, 320*240*2);\r
\r
smalltext_out16(1, 1, "Loading", 0xffff);\r
\r
gp2x_pd_clone_buffer2();\r
\r
- if (rom_data == NULL) {\r
+ if (!rom_loaded) {\r
menu_darken_bg(gp2x_screen, 320*240, 0);\r
}\r
\r
case 1: key_config_loop(ctrl_actions, is_6button ? 12 : 8, 1); return;\r
case 2: key_config_loop(emuctrl_actions,\r
sizeof(emuctrl_actions)/sizeof(emuctrl_actions[0]), -1); return;\r
- case 3: if (rom_data == NULL) emu_WriteConfig(0); return;\r
+ case 3: if (!rom_loaded) emu_WriteConfig(0); return;\r
default: return;\r
}\r
}\r
currentConfig.PsndRate = PsndRate;\r
currentConfig.PicoRegion = PicoRegionOverride;\r
\r
- me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_SAVECFG_GAME, rom_data != NULL);\r
+ me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_SAVECFG_GAME, rom_loaded);\r
me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_LOADCFG, config_slot != config_slot_current);\r
menu_sel_max = me_count_enabled(opt_entries, OPT_ENTRY_COUNT) - 1;\r
if (menu_sel > menu_sel_max) menu_sel = menu_sel_max;\r
int ret, menu_sel_max;\r
unsigned long inp = 0;\r
\r
- me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESUME_GAME, rom_data != NULL);\r
- me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_SAVE_STATE, rom_data != NULL);\r
- me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_LOAD_STATE, rom_data != NULL);\r
- me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESET_GAME, rom_data != NULL);\r
+ me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESUME_GAME, rom_loaded);\r
+ me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_SAVE_STATE, rom_loaded);\r
+ me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_LOAD_STATE, rom_loaded);\r
+ me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_RESET_GAME, rom_loaded);\r
me_enable(main_entries, MAIN_ENTRY_COUNT, MA_MAIN_PATCHES, PicoPatches != NULL);\r
\r
menu_sel_max = me_count_enabled(main_entries, MAIN_ENTRY_COUNT) - 1;\r
if(inp & GP2X_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }\r
if((inp & (GP2X_L|GP2X_R)) == (GP2X_L|GP2X_R)) debug_menu_loop();\r
if(inp &(GP2X_SELECT|GP2X_X)){\r
- if (rom_data) {\r
+ if (rom_loaded) {\r
while (gp2x_joystick_read(1) & (GP2X_SELECT|GP2X_X)) usleep(50*1000); // wait until select is released\r
engineState = PGS_Running;\r
break;\r
switch (me_index2id(main_entries, MAIN_ENTRY_COUNT, menu_sel))\r
{\r
case MA_MAIN_RESUME_GAME:\r
- if (rom_data) {\r
+ if (rom_loaded) {\r
while (gp2x_joystick_read(1) & GP2X_B) usleep(50*1000);\r
engineState = PGS_Running;\r
return;\r
}\r
break;\r
case MA_MAIN_SAVE_STATE:\r
- if (rom_data) {\r
+ if (rom_loaded) {\r
if(savestate_menu_loop(0))\r
continue;\r
engineState = PGS_Running;\r
}\r
break;\r
case MA_MAIN_LOAD_STATE:\r
- if (rom_data) {\r
+ if (rom_loaded) {\r
if(savestate_menu_loop(1))\r
continue;\r
engineState = PGS_Running;\r
}\r
break;\r
case MA_MAIN_RESET_GAME:\r
- if (rom_data) {\r
+ if (rom_loaded) {\r
emu_ResetGame();\r
engineState = PGS_Running;\r
return;\r
engineState = PGS_Quit;\r
return;\r
case MA_MAIN_PATCHES:\r
- if (rom_data && PicoPatches) {\r
+ if (rom_loaded && PicoPatches) {\r
patches_menu_loop();\r
PicoPatchApply();\r
strcpy(menuErrorMsg, "Patches applied");\r
\r
static void menu_gfx_prepare(void)\r
{\r
- menu_prepare_bg(rom_data != NULL);\r
+ menu_prepare_bg(rom_loaded);\r
\r
// switch to 16bpp\r
gp2x_video_changemode2(16);\r
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);
menu_draw_begin();
- if (rom_data == NULL) {
+ if (!rom_loaded) {
// menu_darken_bg(menu_screen, menu_screen, 321*240, 0);
}
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;
}
}
{
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;
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);
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;
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;
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;
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;
}
break;
case MA_MAIN_LOAD_STATE:
- if (rom_data) {
+ if (rom_loaded) {
if(savestate_menu_loop(1))
continue;
engineState = PGS_Running;
}
break;
case MA_MAIN_RESET_GAME:
- if (rom_data) {
+ if (rom_loaded) {
emu_ResetGame();
engineState = PGS_Running;
return;
engineState = PGS_Quit;
return;
case MA_MAIN_PATCHES:
- if (rom_data && PicoPatches) {
+ if (rom_loaded && PicoPatches) {
patches_menu_loop();
PicoPatchApply();
strcpy(menuErrorMsg, "Patches applied");
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();
int MainWidth=720,MainHeight=480;\r
\r
static HMENU mdisplay = 0;\r
-static unsigned char *rom_data = NULL;\r
+static int rom_loaded = 0;\r
\r
static void UpdateRect()\r
{\r
LoopWait=1;\r
for (i = 0; LoopWaiting == 0 && i < 10; i++) Sleep(100);\r
\r
+ PicoUnloadCart();\r
PicoCartInsert(rom_data_new, rom_size);\r
\r
- if (rom_data) free(rom_data);\r
- rom_data = rom_data_new;\r
+ rom_loaded = 1;\r
romname = rompath;\r
LoopWait=0;\r
}\r
lock_to_1_1=0;\r
CheckMenuItem(mdisplay, 1104, MF_UNCHECKED);\r
}\r
- if (rom_data != NULL) LoopWait=0;\r
+ if (rom_loaded) LoopWait=0;\r
return 0;\r
case 1104:\r
lock_to_1_1=!lock_to_1_1;\r