new cfg file system
[libpicofe.git] / gp2x / emu.c
index 1fd7665..bd4253d 100644 (file)
@@ -21,6 +21,7 @@
 #include "../common/arm_utils.h"\r
 #include "../common/fonts.h"\r
 #include "../common/emu.h"\r
+#include "../common/config.h"\r
 #include "cpuctrl.h"\r
 \r
 #include <Pico/PicoInt.h>\r
@@ -160,20 +161,10 @@ void emu_Deinit(void)
        }\r
 \r
        if (!(currentConfig.EmuOpt & 0x20)) {\r
-               FILE *f = fopen(PicoConfigFile, "r+b");\r
-               if (!f) emu_WriteConfig(0);\r
-               else {\r
-                       // if we already have config, reload it, except last ROM\r
-                       fseek(f, sizeof(currentConfig.lastRomFile), SEEK_SET);\r
-                       fread(&currentConfig.EmuOpt, 1, sizeof(currentConfig) - sizeof(currentConfig.lastRomFile), f);\r
-                       fseek(f, 0, SEEK_SET);\r
-                       fwrite(&currentConfig, 1, sizeof(currentConfig), f);\r
-                       fflush(f);\r
-                       fclose(f);\r
+               config_writelrom(PicoConfigFile);\r
 #ifndef NO_SYNC\r
-                       sync();\r
+               sync();\r
 #endif\r
-               }\r
        }\r
 \r
        free(PicoDraw2FB);\r
@@ -185,34 +176,44 @@ void emu_Deinit(void)
                set_gamma(100, 0);\r
 }\r
 \r
+void emu_prepareDefaultConfig(void)\r
+{\r
+       memset(&defaultConfig, 0, sizeof(defaultConfig));\r
+       defaultConfig.lastRomFile[0] = 0;\r
+       defaultConfig.EmuOpt  = 0x1f | 0x600; // | confirm_save, cd_leds\r
+       defaultConfig.s_PicoOpt = 0x0f | 0xe00; // | use_940, cd_pcm, cd_cdda\r
+       defaultConfig.s_PsndRate = 44100;\r
+       defaultConfig.s_PicoRegion = 0; // auto\r
+       defaultConfig.s_PicoAutoRgnOrder = 0x184; // US, EU, JP\r
+       defaultConfig.s_PicoCDBuffers = 64;\r
+       defaultConfig.Frameskip = -1; // auto\r
+       defaultConfig.CPUclock = 200;\r
+       defaultConfig.volume = 50;\r
+       defaultConfig.KeyBinds[ 0] = 1<<0; // SACB RLDU\r
+       defaultConfig.KeyBinds[ 4] = 1<<1;\r
+       defaultConfig.KeyBinds[ 2] = 1<<2;\r
+       defaultConfig.KeyBinds[ 6] = 1<<3;\r
+       defaultConfig.KeyBinds[14] = 1<<4;\r
+       defaultConfig.KeyBinds[13] = 1<<5;\r
+       defaultConfig.KeyBinds[12] = 1<<6;\r
+       defaultConfig.KeyBinds[ 8] = 1<<7;\r
+       defaultConfig.KeyBinds[15] = 1<<26; // switch rend\r
+       defaultConfig.KeyBinds[10] = 1<<27; // save state\r
+       defaultConfig.KeyBinds[11] = 1<<28; // load state\r
+       defaultConfig.KeyBinds[23] = 1<<29; // vol up\r
+       defaultConfig.KeyBinds[22] = 1<<30; // vol down\r
+       defaultConfig.gamma = 100;\r
+       defaultConfig.scaling = 0;\r
+}\r
+\r
 void emu_setDefaultConfig(void)\r
 {\r
-       memset(&currentConfig, 0, sizeof(currentConfig));\r
-       currentConfig.lastRomFile[0] = 0;\r
-       currentConfig.EmuOpt  = 0x1f | 0x600; // | confirm_save, cd_leds\r
-       currentConfig.PicoOpt = 0x0f | 0xe00; // | use_940, cd_pcm, cd_cdda\r
-       currentConfig.PsndRate = 22050; // 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
-       currentConfig.KeyBinds[ 0] = 1<<0; // SACB RLDU\r
-       currentConfig.KeyBinds[ 4] = 1<<1;\r
-       currentConfig.KeyBinds[ 2] = 1<<2;\r
-       currentConfig.KeyBinds[ 6] = 1<<3;\r
-       currentConfig.KeyBinds[14] = 1<<4;\r
-       currentConfig.KeyBinds[13] = 1<<5;\r
-       currentConfig.KeyBinds[12] = 1<<6;\r
-       currentConfig.KeyBinds[ 8] = 1<<7;\r
-       currentConfig.KeyBinds[15] = 1<<26; // switch rend\r
-       currentConfig.KeyBinds[10] = 1<<27; // save state\r
-       currentConfig.KeyBinds[11] = 1<<28; // load state\r
-       currentConfig.KeyBinds[23] = 1<<29; // vol up\r
-       currentConfig.KeyBinds[22] = 1<<30; // vol down\r
-       currentConfig.gamma = 100;\r
-       currentConfig.PicoCDBuffers = 64;\r
-       currentConfig.scaling = 0;\r
+       memcpy(&currentConfig, &defaultConfig, sizeof(currentConfig));\r
+       PicoOpt = currentConfig.s_PicoOpt;\r
+       PsndRate = currentConfig.s_PsndRate;\r
+       PicoRegionOverride = currentConfig.s_PicoRegion;\r
+       PicoAutoRgnOrder = currentConfig.s_PicoAutoRgnOrder;\r
+       PicoCDBuffers = currentConfig.s_PicoCDBuffers;\r
 }\r
 \r
 void osd_text(int x, int y, const char *text)\r