rom_data -> rom_loaded
[libpicofe.git] / common / emu.c
index 9e07260..b7832bb 100644 (file)
@@ -35,7 +35,7 @@
 \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
@@ -137,6 +137,19 @@ int emu_findBios(int region, char **bios_file)
        }\r
 }\r
 \r
+/* check if the name begins with BIOS name */\r
+static int emu_isBios(const char *name)\r
+{\r
+       int i;\r
+       for (i = 0; i < sizeof(biosfiles_us)/sizeof(biosfiles_us[0]); i++)\r
+               if (strstr(name, biosfiles_us[i]) != NULL) return 1;\r
+       for (i = 0; i < sizeof(biosfiles_eu)/sizeof(biosfiles_eu[0]); i++)\r
+               if (strstr(name, biosfiles_eu[i]) != NULL) return 1;\r
+       for (i = 0; i < sizeof(biosfiles_jp)/sizeof(biosfiles_jp[0]); i++)\r
+               if (strstr(name, biosfiles_jp[i]) != NULL) return 1;\r
+       return 0;\r
+}\r
+\r
 /* checks if romFileName points to valid MegaCD image\r
  * if so, checks for suitable BIOS */\r
 int emu_cdCheck(int *pregion)\r
@@ -180,6 +193,7 @@ int emu_ReloadRom(void)
 {\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
@@ -189,7 +203,7 @@ int emu_ReloadRom(void)
        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
@@ -197,11 +211,11 @@ int emu_ReloadRom(void)
        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
@@ -280,20 +294,17 @@ int emu_ReloadRom(void)
        }\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);\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
@@ -301,14 +312,13 @@ int emu_ReloadRom(void)
                return 0;\r
        }\r
        pm_close(rom);\r
-       menu_romload_end();\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
@@ -319,8 +329,9 @@ int emu_ReloadRom(void)
        }\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
        }\r
 \r
@@ -332,13 +343,19 @@ int emu_ReloadRom(void)
                if (ret != 0) {\r
                        sprintf(menuErrorMsg, "Insert_CD() failed, invalid CD image?");\r
                        lprintf("%s\n", menuErrorMsg);\r
+                       menu_romload_end();\r
                        return 0;\r
                }\r
        }\r
 \r
-       // emu_ReadConfig() might have messed currentConfig.lastRomFile\r
-       strncpy(currentConfig.lastRomFile, romFileName, sizeof(currentConfig.lastRomFile)-1);\r
-       currentConfig.lastRomFile[sizeof(currentConfig.lastRomFile)-1] = 0;\r
+       menu_romload_end();\r
+\r
+       if (!emu_isBios(romFileName))\r
+       {\r
+               // emu_ReadConfig() might have messed currentConfig.lastRomFile\r
+               strncpy(currentConfig.lastRomFile, romFileName, sizeof(currentConfig.lastRomFile)-1);\r
+               currentConfig.lastRomFile[sizeof(currentConfig.lastRomFile)-1] = 0;\r
+       }\r
 \r
        if (PicoPatches) {\r
                PicoPatchPrepare();\r
@@ -375,9 +392,10 @@ int emu_ReloadRom(void)
        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
@@ -448,7 +466,11 @@ int emu_ReadConfig(int game, int no_defaults)
        //scaling_update();\r
        // some sanity checks\r
        if (currentConfig.CPUclock < 10 || currentConfig.CPUclock > 4096) currentConfig.CPUclock = 200;\r
+#ifdef PSP\r
+       if (currentConfig.gamma < -4 || currentConfig.gamma >  16) currentConfig.gamma = 0;\r
+#else\r
        if (currentConfig.gamma < 10 || currentConfig.gamma > 300) currentConfig.gamma = 100;\r
+#endif\r
        if (currentConfig.volume < 0 || currentConfig.volume > 99) currentConfig.volume = 50;\r
 #ifdef __GP2X__\r
        // if volume keys are unbound, bind them to volume control\r