buffering, PCM DMA, memcpy12bswap
[picodrive.git] / platform / gp2x / emu.c
index 3d6cd3a..99c80ba 100644 (file)
@@ -496,6 +496,7 @@ int emu_ReadConfig(int game)
                currentConfig.KeyBinds[23] = 1<<29; // vol up\r
                currentConfig.KeyBinds[22] = 1<<30; // vol down\r
                currentConfig.gamma = 100;\r
+               currentConfig.PicoCDBuffers = 64;\r
                strncpy(cfg, PicoConfigFile, 511);\r
                cfg[511] = 0;\r
        } else {\r
@@ -517,6 +518,7 @@ int emu_ReadConfig(int game)
        PsndRate = currentConfig.PsndRate;\r
        PicoRegionOverride = currentConfig.PicoRegion;\r
        PicoAutoRgnOrder = currentConfig.PicoAutoRgnOrder;\r
+       PicoCDBuffers = currentConfig.PicoCDBuffers;\r
        if (PicoOpt & 0x20) {\r
                actionNames[ 8] = "Z"; actionNames[ 9] = "Y";\r
                actionNames[10] = "X"; actionNames[11] = "MODE";\r
@@ -555,6 +557,7 @@ int emu_WriteConfig(int game)
                currentConfig.PsndRate = PsndRate;\r
                currentConfig.PicoRegion = PicoRegionOverride;\r
                currentConfig.PicoAutoRgnOrder = PicoAutoRgnOrder;\r
+               currentConfig.PicoCDBuffers = PicoCDBuffers;\r
                bwrite = fwrite(&currentConfig, 1, sizeof(currentConfig), f);\r
                fflush(f);\r
                fclose(f);\r
@@ -1068,6 +1071,9 @@ void emu_Loop(void)
                PsndOut = 0;\r
        }\r
 \r
+       // prepare CD buffer\r
+       if (PicoMCD & 1) PicoCDBufferInit();\r
+\r
        // loop?\r
        while (engineState == PGS_Running)\r
        {\r
@@ -1253,6 +1259,9 @@ if (Pico.m.frame_count == 31563) {
                frames_done++; frames_shown++;\r
        }\r
 \r
+\r
+       if (PicoMCD & 1) PicoCDBufferFree();\r
+\r
        // save SRAM\r
        if((currentConfig.EmuOpt & 1) && SRam.changed) {\r
                osd_text(4, 232, "Writing SRAM/BRAM..");\r