cue support wip
[libpicofe.git] / common / emu.c
index 14cc52a..1bbdf35 100644 (file)
@@ -164,6 +164,9 @@ int emu_cdCheck(int *pregion)
        unsigned char buf[32];\r
        pm_file *cd_f;\r
        int type = 0, region = 4; // 1: Japan, 4: US, 8: Europe\r
+       char ext[5];\r
+\r
+       get_ext(romFileName, ext);\r
 \r
        cd_f = pm_open(romFileName);\r
        if (!cd_f) return 0; // let the upper level handle this\r
@@ -235,7 +238,7 @@ char *emu_makeRomId(void)
        static char id_string[3+0x11+0x11+0x30+16];\r
        int pos, swab = 1;\r
 \r
-       if (PicoMCD & 1) {\r
+       if (PicoAHW & PAHW_MCD) {\r
                strcpy(id_string, "CD|");\r
                swab = 0;\r
        }\r
@@ -325,14 +328,14 @@ int emu_ReloadRom(void)
                get_ext(romFileName, ext);\r
        }\r
 \r
-       if ((PicoMCD & 1) && Pico_mcd != NULL)\r
+       if ((PicoAHW & PAHW_MCD) && Pico_mcd != NULL)\r
                Stop_CD();\r
 \r
        // check for MegaCD image\r
        cd_state = emu_cdCheck(&cd_region);\r
-       if (cd_state > 0)\r
+       if (cd_state != CIT_NOT_CD)\r
        {\r
-               PicoMCD |= 1;\r
+               PicoAHW |= PAHW_MCD;\r
                // valid CD image, check for BIOS..\r
 \r
                // we need to have config loaded at this point\r
@@ -346,7 +349,7 @@ int emu_ReloadRom(void)
                }\r
                if (!emu_findBios(cd_region, &used_rom_name)) {\r
                        // bios_help() ?\r
-                       PicoMCD &= ~1;\r
+                       PicoAHW &= ~PAHW_MCD;\r
                        return 0;\r
                }\r
 \r
@@ -354,8 +357,8 @@ int emu_ReloadRom(void)
        }\r
        else\r
        {\r
-               if (PicoMCD & 1) Stop_CD();\r
-               PicoMCD &= ~1;\r
+               if (PicoAHW & PAHW_MCD) Stop_CD();\r
+               PicoAHW &= ~PAHW_MCD;\r
        }\r
 \r
        rom = pm_open(used_rom_name);\r
@@ -388,7 +391,7 @@ int emu_ReloadRom(void)
        }\r
 \r
        // load config for this ROM (do this before insert to get correct region)\r
-       if (!(PicoMCD&1))\r
+       if (!(PicoAHW & PAHW_MCD))\r
                memcpy(id_header, rom_data + 0x100, sizeof(id_header));\r
        if (!cfg_loaded) {\r
                ret = emu_ReadConfig(1, 1);\r
@@ -405,8 +408,8 @@ int emu_ReloadRom(void)
        Pico.m.frame_count = 0;\r
 \r
        // insert CD if it was detected\r
-       if (cd_state > 0) {\r
-               ret = Insert_CD(romFileName, cd_state == 2);\r
+       if (cd_state != CIT_NOT_CD) {\r
+               ret = Insert_CD(romFileName, cd_state);\r
                if (ret != 0) {\r
                        sprintf(menuErrorMsg, "Insert_CD() failed, invalid CD image?");\r
                        lprintf("%s\n", menuErrorMsg);\r
@@ -425,9 +428,9 @@ int emu_ReloadRom(void)
        // additional movie stuff\r
        if (movie_data) {\r
                if(movie_data[0x14] == '6')\r
-                    PicoOpt |=  0x20; // 6 button pad\r
-               else PicoOpt &= ~0x20;\r
-               PicoOpt |= 0x10040; // accurate timing, no VDP fifo timing\r
+                    PicoOpt |=  POPT_6BTN_PAD; // 6 button pad\r
+               else PicoOpt &= ~POPT_6BTN_PAD;\r
+               PicoOpt |= POPT_DIS_VDP_FIFO|POPT_ACC_TIMING; // accurate timing, no VDP fifo timing\r
                if(movie_data[0xF] >= 'A') {\r
                        if(movie_data[0x16] & 0x80) {\r
                                PicoRegionOverride = 8;\r
@@ -442,7 +445,7 @@ int emu_ReloadRom(void)
        }\r
        else\r
        {\r
-               PicoOpt &= ~0x10000;\r
+               PicoOpt &= ~POPT_DIS_VDP_FIFO;\r
                if(Pico.m.pal) {\r
                        strcpy(noticeMsg, "PAL SYSTEM / 50 FPS");\r
                } else {\r
@@ -572,6 +575,7 @@ int emu_ReadConfig(int game, int no_defaults)
        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
+       if (currentConfig.gamma2 < 0 || currentConfig.gamma2 > 2)  currentConfig.gamma2 = 0;\r
 #else\r
        if (currentConfig.gamma < 10 || currentConfig.gamma > 300) currentConfig.gamma = 100;\r
 #endif\r
@@ -672,6 +676,12 @@ void emu_textOut16(int x, int y, const char *text)
        }\r
 }\r
 \r
+#ifdef PSP\r
+#define MAX_COMBO_KEY 23\r
+#else\r
+#define MAX_COMBO_KEY 31\r
+#endif\r
+\r
 void emu_findKeyBindCombos(void)\r
 {\r
        int act, u;\r
@@ -684,15 +694,15 @@ void emu_findKeyBindCombos(void)
                if (act == 16 || act == 17) continue; // player2 flag\r
                if (act > 17)\r
                {\r
-                       for (u = 0; u < 32; u++)\r
+                       for (u = 0; u <= MAX_COMBO_KEY; u++)\r
                                if (currentConfig.KeyBinds[u] & (1 << act)) keyc++;\r
                }\r
                else\r
                {\r
-                       for (u = 0; u < 32; u++)\r
+                       for (u = 0; u <= MAX_COMBO_KEY; u++)\r
                                if ((currentConfig.KeyBinds[u] & 0x30000) == 0 && // pl. 1\r
                                        (currentConfig.KeyBinds[u] & (1 << act))) keyc++;\r
-                       for (u = 0; u < 32; u++)\r
+                       for (u = 0; u <= MAX_COMBO_KEY; u++)\r
                                if ((currentConfig.KeyBinds[u] & 0x30000) == 1 && // pl. 2\r
                                        (currentConfig.KeyBinds[u] & (1 << act))) keyc2++;\r
                        if (keyc2 > keyc) keyc = keyc2;\r
@@ -700,7 +710,7 @@ void emu_findKeyBindCombos(void)
                if (keyc > 1)\r
                {\r
                        // loop again and mark those keys and actions as combo\r
-                       for (u = 0; u < 32; u++)\r
+                       for (u = 0; u <= MAX_COMBO_KEY; u++)\r
                        {\r
                                if (currentConfig.KeyBinds[u] & (1 << act)) {\r
                                        kb_combo_keys |= 1 << u;\r
@@ -773,11 +783,11 @@ char *emu_GetSaveFName(int load, int is_sram, int slot)
 \r
        if (is_sram)\r
        {\r
-               romfname_ext(saveFname, (PicoMCD&1) ? "brm/" : "srm/", (PicoMCD&1) ? ".brm" : ".srm");\r
+               romfname_ext(saveFname, (PicoAHW&1) ? "brm/" : "srm/", (PicoAHW&1) ? ".brm" : ".srm");\r
                if (load) {\r
                        if (try_ropen_file(saveFname)) return saveFname;\r
                        // try in current dir..\r
-                       romfname_ext(saveFname, NULL, (PicoMCD&1) ? ".brm" : ".srm");\r
+                       romfname_ext(saveFname, NULL, (PicoAHW & PAHW_MCD) ? ".brm" : ".srm");\r
                        if (try_ropen_file(saveFname)) return saveFname;\r
                        return NULL; // give up\r
                }\r
@@ -855,8 +865,9 @@ int emu_SaveLoadGame(int load, int sram)
                int sram_size;\r
                unsigned char *sram_data;\r
                int truncate = 1;\r
-               if (PicoMCD&1) {\r
-                       if (PicoOpt&0x8000) { // MCD RAM cart?\r
+               if (PicoAHW & PAHW_MCD)\r
+               {\r
+                       if (PicoOpt&POPT_EN_MCD_RAMCART) {\r
                                sram_size = 0x12000;\r
                                sram_data = SRam.data;\r
                                if (sram_data)\r
@@ -873,12 +884,13 @@ int emu_SaveLoadGame(int load, int sram)
                }\r
                if (!sram_data) return 0; // SRam forcefully disabled for this game\r
 \r
-               if (load) {\r
+               if (load)\r
+               {\r
                        sramFile = fopen(saveFname, "rb");\r
                        if(!sramFile) return -1;\r
                        fread(sram_data, 1, sram_size, sramFile);\r
                        fclose(sramFile);\r
-                       if ((PicoMCD&1) && (PicoOpt&0x8000))\r
+                       if ((PicoAHW & PAHW_MCD) && (PicoOpt&POPT_EN_MCD_RAMCART))\r
                                memcpy32((int *)Pico_mcd->bram, (int *)sram_data, 0x2000/4);\r
                } else {\r
                        // sram save needs some special processing\r