gen/cd frame loops merged
authornotaz <notasas@gmail.com>
Sun, 16 Sep 2007 20:45:13 +0000 (20:45 +0000)
committernotaz <notasas@gmail.com>
Sun, 16 Sep 2007 20:45:13 +0000 (20:45 +0000)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive/platform@250 be3aeb3a-fb24-0410-a615-afba39da0efa

gp2x/emu.c
gp2x/emu.h

index 3096edd..9615013 100644 (file)
@@ -151,7 +151,7 @@ int find_bios(int region, char **bios_file)
 \r
 /* checks if romFileName points to valid MegaCD image\r
  * if so, checks for suitable BIOS */\r
-int emu_cd_check(char **bios_file)\r
+int emu_cd_check(int *pregion)\r
 {\r
        unsigned char buf[32];\r
        pm_file *cd_f;\r
@@ -183,17 +183,9 @@ int emu_cd_check(char **bios_file)
        printf("detected %s Sega/Mega CD image with %s region\n",\r
                type == 2 ? "BIN" : "ISO", region != 4 ? (region == 8 ? "EU" : "JAP") : "USA");\r
 \r
-       if (PicoRegionOverride) {\r
-               region = PicoRegionOverride;\r
-               printf("overrided region to %s\n", region != 4 ? (region == 8 ? "EU" : "JAP") : "USA");\r
-       }\r
-\r
-       if (bios_file == NULL) return type;\r
-\r
-       if (find_bios(region, bios_file))\r
-                return type;   // CD and BIOS detected\r
+       if (pregion != NULL) *pregion = region;\r
 \r
-       return -1;              // CD detected but load failed\r
+       return type;\r
 }\r
 \r
 int emu_ReloadRom(void)\r
@@ -202,7 +194,7 @@ int emu_ReloadRom(void)
        char *used_rom_name = romFileName;\r
        char ext[5];\r
        pm_file *rom;\r
-       int ret, cd_state;\r
+       int ret, cd_state, cd_region, cfg_loaded = 0;\r
 \r
        printf("emu_ReloadRom(%s)\n", romFileName);\r
 \r
@@ -271,14 +263,30 @@ int emu_ReloadRom(void)
                Stop_CD();\r
 \r
        // check for MegaCD image\r
-       cd_state = emu_cd_check(&used_rom_name);\r
-       if (cd_state > 0) {\r
+       cd_state = emu_cd_check(&cd_region);\r
+       if (cd_state > 0)\r
+       {\r
+               // valid CD image, check for BIOS..\r
+\r
+               // we need to have config loaded at this point\r
+               ret = emu_ReadConfig(1, 1);\r
+               if (!ret) emu_ReadConfig(0, 1);\r
+               cfg_loaded = 1;\r
+\r
+               if (PicoRegionOverride) {\r
+                       cd_region = PicoRegionOverride;\r
+                       printf("overrided region to %s\n", cd_region != 4 ? (cd_region == 8 ? "EU" : "JAP") : "USA");\r
+               }\r
+               if (!find_bios(cd_region, &used_rom_name)) {\r
+                       // bios_help() ?\r
+                       return 0;\r
+               }\r
+\r
                PicoMCD |= 1;\r
                get_ext(used_rom_name, ext);\r
-       } else if (cd_state == -1) {\r
-               // bios_help() ?\r
-               return 0;\r
-       } else {\r
+       }\r
+       else\r
+       {\r
                if (PicoMCD & 1) Stop_CD();\r
                PicoMCD &= ~1;\r
        }\r
@@ -317,9 +325,10 @@ int emu_ReloadRom(void)
        }\r
 \r
        // load config for this ROM (do this before insert to get correct region)\r
-       ret = emu_ReadConfig(1, 1);\r
-       if (!ret)\r
-               emu_ReadConfig(0, 1);\r
+       if (!cfg_loaded) {\r
+               ret = emu_ReadConfig(1, 1);\r
+               if (!ret) emu_ReadConfig(0, 1);\r
+       }\r
 \r
        printf("PicoCartInsert(%p, %d);\n", rom_data, rom_size);\r
        if(PicoCartInsert(rom_data, rom_size)) {\r
index 55bb53e..6ae089d 100644 (file)
@@ -53,7 +53,7 @@ char *emu_GetSaveFName(int load, int is_sram, int slot);
 int  emu_check_save_file(int slot);\r
 void emu_set_save_cbs(int gz);\r
 void emu_forced_frame(void);\r
-int  emu_cd_check(char **bios_file);\r
+int  emu_cd_check(int *pregion);\r
 int  find_bios(int region, char **bios_file);\r
 void scaling_update(void);\r
 \r