PCM sound, refactored code940
[picodrive.git] / platform / gp2x / emu.c
index dcc8f6e..e564dfb 100644 (file)
@@ -276,6 +276,7 @@ int emu_ReloadRom(void)
                // bios_help() ?\r
                return 0;\r
        } else {\r
+               if (PicoMCD & 1) PicoExitMCD();\r
                PicoMCD &= ~1;\r
        }\r
 \r
@@ -374,7 +375,7 @@ int emu_ReloadRom(void)
                }\r
        }\r
        gettimeofday(&noticeMsgTime, 0);\r
-printf("PicoMCD: %x\n", PicoMCD);\r
+\r
        // load SRAM for this ROM\r
        if(currentConfig.EmuOpt & 1)\r
                emu_SaveLoadGame(1, 1);\r
@@ -452,10 +453,11 @@ int emu_ReadConfig(int game)
                // set default config\r
                memset(&currentConfig, 0, sizeof(currentConfig));\r
                currentConfig.lastRomFile[0] = 0;\r
-               currentConfig.EmuOpt  = 0x1f | 0xc00; // | cd_leds | cd_cdda\r
-               currentConfig.PicoOpt = 0x0f | 0x200; // | use_940\r
+               currentConfig.EmuOpt  = 0x1f | 0x400; // | cd_leds\r
+               currentConfig.PicoOpt = 0x0f | 0xe00; // | use_940 | cd_pcm | cd_cdda\r
                currentConfig.PsndRate = 44100;\r
                currentConfig.PicoRegion = 0; // auto\r
+               currentConfig.PicoAutoRgnOrder = 0x184; // US, EU, JP\r
                currentConfig.Frameskip = -1; // auto\r
                currentConfig.CPUclock = 200;\r
                currentConfig.volume = 50;\r
@@ -490,6 +492,7 @@ int emu_ReadConfig(int game)
        PicoOpt = currentConfig.PicoOpt;\r
        PsndRate = currentConfig.PsndRate;\r
        PicoRegionOverride = currentConfig.PicoRegion;\r
+       PicoAutoRgnOrder = currentConfig.PicoAutoRgnOrder;\r
        if (PicoOpt & 0x20) {\r
                actionNames[ 8] = "Z"; actionNames[ 9] = "Y";\r
                actionNames[10] = "X"; actionNames[11] = "MODE";\r
@@ -527,6 +530,7 @@ int emu_WriteConfig(int game)
                currentConfig.PicoOpt = PicoOpt;\r
                currentConfig.PsndRate = PsndRate;\r
                currentConfig.PicoRegion = PicoRegionOverride;\r
+               currentConfig.PicoAutoRgnOrder = PicoAutoRgnOrder;\r
                bwrite = fwrite(&currentConfig, 1, sizeof(currentConfig), f);\r
                fflush(f);\r
                fclose(f);\r
@@ -596,20 +600,20 @@ static void cd_leds(void)
                // 8-bit modes\r
                unsigned int col_g = (old_reg & 2) ? 0xc0c0c0c0 : 0xe0e0e0e0;\r
                unsigned int col_r = (old_reg & 1) ? 0xd0d0d0d0 : 0xe0e0e0e0;\r
-               *(unsigned int *)((char *)gp2x_screen + 320*2+306) =\r
-               *(unsigned int *)((char *)gp2x_screen + 320*3+306) =\r
-               *(unsigned int *)((char *)gp2x_screen + 320*4+306) = col_g;\r
-               *(unsigned int *)((char *)gp2x_screen + 320*2+312) =\r
-               *(unsigned int *)((char *)gp2x_screen + 320*3+312) =\r
-               *(unsigned int *)((char *)gp2x_screen + 320*4+312) = col_r;\r
+               *(unsigned int *)((char *)gp2x_screen + 320*2+ 4) =\r
+               *(unsigned int *)((char *)gp2x_screen + 320*3+ 4) =\r
+               *(unsigned int *)((char *)gp2x_screen + 320*4+ 4) = col_g;\r
+               *(unsigned int *)((char *)gp2x_screen + 320*2+12) =\r
+               *(unsigned int *)((char *)gp2x_screen + 320*3+12) =\r
+               *(unsigned int *)((char *)gp2x_screen + 320*4+12) = col_r;\r
        } else {\r
                // 16-bit modes\r
-               unsigned int *p = (unsigned int *)((short *)gp2x_screen + 320*2+306);\r
+               unsigned int *p = (unsigned int *)((short *)gp2x_screen + 320*2+4);\r
                unsigned int col_g = (old_reg & 2) ? 0x06000600 : 0;\r
                unsigned int col_r = (old_reg & 1) ? 0xc000c000 : 0;\r
-               *p++ = col_g; *p++ = col_g; p++; *p++ = col_r; *p++ = col_r; p += 320/2 - 10/2;\r
-               *p++ = col_g; *p++ = col_g; p++; *p++ = col_r; *p++ = col_r; p += 320/2 - 10/2;\r
-               *p++ = col_g; *p++ = col_g; p++; *p++ = col_r; *p++ = col_r; p += 320/2 - 10/2;\r
+               *p++ = col_g; *p++ = col_g; p+=2; *p++ = col_r; *p++ = col_r; p += 320/2 - 12/2;\r
+               *p++ = col_g; *p++ = col_g; p+=2; *p++ = col_r; *p++ = col_r; p += 320/2 - 12/2;\r
+               *p++ = col_g; *p++ = col_g; p+=2; *p++ = col_r; *p++ = col_r; p += 320/2 - 12/2;\r
        }\r
 }\r
 \r
@@ -1231,6 +1235,7 @@ if (Pico.m.frame_count == 31563) {
 \r
        // save SRAM\r
        if((currentConfig.EmuOpt & 1) && SRam.changed) {\r
+               blit("", "Writing SRAM/BRAM..");\r
                emu_SaveLoadGame(0, 1);\r
                SRam.changed = 0;\r
        }\r
@@ -1260,7 +1265,6 @@ size_t gzWrite2(void *p, size_t _size, size_t _n, void *file)
        return gzwrite(file, p, _n);\r
 }\r
 \r
-typedef unsigned int (*STATE_SL_FUNC)(void *, unsigned int, unsigned int, void *);\r
 \r
 int emu_SaveLoadGame(int load, int sram)\r
 {\r
@@ -1321,26 +1325,34 @@ int emu_SaveLoadGame(int load, int sram)
                        if( (PmovFile = gzopen(saveFname, load ? "rb" : "wb")) ) {\r
                                areaRead  = gzRead2;\r
                                areaWrite = gzWrite2;\r
+                               areaEof   = (areaeof *) gzeof;\r
+                               areaSeek  = (areaseek *) gzseek;\r
                                if(!load) gzsetparams(PmovFile, 9, Z_DEFAULT_STRATEGY);\r
                        } else\r
                                saveFname[strlen(saveFname)-3] = 0;\r
                }\r
                if(!PmovFile) { // gzip failed or was disabled\r
                        if( (PmovFile = fopen(saveFname, load ? "rb" : "wb")) ) {\r
-                               areaRead  = (STATE_SL_FUNC) fread;\r
-                               areaWrite = (STATE_SL_FUNC) fwrite;\r
+                               areaRead  = (arearw *) fread;\r
+                               areaWrite = (arearw *) fwrite;\r
+                               areaEof   = (areaeof *) feof;\r
+                               areaSeek  = (areaseek *) fseek;\r
                        }\r
                }\r
                if(PmovFile) {\r
-                       PmovState(load ? 6 : 5, PmovFile);\r
-                       strcpy(noticeMsg, load ? "GAME LOADED  " : "GAME SAVED   ");\r
+                       ret = PmovState(load ? 6 : 5, PmovFile);\r
                        if(areaRead == gzRead2)\r
                                 gzclose(PmovFile);\r
                        else fclose ((FILE *) PmovFile);\r
                        PmovFile = 0;\r
                        if (!load) sync();\r
                        else Pico.m.dirtyPal=1;\r
-               } else {\r
+               }\r
+               else    ret = -1;\r
+               if (!ret)\r
+                       strcpy(noticeMsg, load ? "GAME LOADED  " : "GAME SAVED   ");\r
+               else\r
+               {\r
                        strcpy(noticeMsg, load ? "LOAD FAILED  " : "SAVE FAILED  ");\r
                        ret = -1;\r
                }\r