fonts, buffer aligment, save progress
[libpicofe.git] / gp2x / emu.c
index a5a46ea..56c83ff 100644 (file)
@@ -564,7 +564,7 @@ void emu_Deinit(void)
 }\r
 \r
 \r
-void osd_text(int x, int y, char *text)\r
+void osd_text(int x, int y, const char *text)\r
 {\r
        int len = strlen(text)*8;\r
 \r
@@ -637,7 +637,7 @@ static int EmuScan8(unsigned int num, void *sdata)
 int localPal[0x100];\r
 static void (*vidCpyM2)(void *dest, void *src) = NULL;\r
 \r
-static void blit(char *fps, char *notice)\r
+static void blit(const char *fps, const char *notice)\r
 {\r
        int emu_opt = currentConfig.EmuOpt;\r
 \r
@@ -777,8 +777,8 @@ static void RunEvents(unsigned int which)
                        clearArea(0);\r
                }\r
                if (do_it) {\r
-                       blit("", (which & 0x1000) ? "LOADING GAME" : "SAVING GAME");\r
-                       emu_SaveLoadGame(which & 0x1000, 0);\r
+                       osd_text(4, 232, (which & 0x1000) ? "LOADING GAME" : "SAVING GAME");\r
+                       emu_SaveLoadGame((which & 0x1000) >> 12, 0);\r
                }\r
 \r
                reset_timing = 1;\r
@@ -1224,7 +1224,7 @@ if (Pico.m.frame_count == 31563) {
 \r
        // save SRAM\r
        if((currentConfig.EmuOpt & 1) && SRam.changed) {\r
-               blit("", "Writing SRAM/BRAM..");\r
+               osd_text(4, 232, "Writing SRAM/BRAM..");\r
                emu_SaveLoadGame(0, 1);\r
                SRam.changed = 0;\r
        }\r
@@ -1232,11 +1232,15 @@ if (Pico.m.frame_count == 31563) {
        // if in 16bit mode, generate 8it image for menu background\r
        if (!(PicoOpt&0x10) && (currentConfig.EmuOpt&0x80)) {\r
                PicoOpt |= 0x10;\r
-               Pico.m.dirtyPal = 1;\r
                PicoFrameFull();\r
-               blit("", NULL); blit("", NULL); blit("", NULL); blit("", NULL); // be sure buffer3 gets updated\r
+               vidCpyM2((unsigned char *)gp2x_screen+320*8, framebuff+328*8);\r
+               vidConvCpyRGB32(localPal, Pico.cram, 0x40);\r
+               gp2x_video_setpalette(localPal, 0x40);\r
                PicoOpt &= ~0x10;\r
        }\r
+\r
+       // for menu bg\r
+       gp2x_memcpy_all_buffers(gp2x_screen, 0, 320*240*2);\r
 }\r
 \r
 \r
@@ -1259,11 +1263,20 @@ size_t gzWrite2(void *p, size_t _size, size_t _n, void *file)
 }\r
 \r
 \r
+static void emu_state_cb(const char *str)\r
+{\r
+       clearArea(0);\r
+       blit("", str);\r
+}\r
+\r
 int emu_SaveLoadGame(int load, int sram)\r
 {\r
        int ret = 0;\r
        char saveFname[512];\r
 \r
+       PicoStateProgressCB = emu_state_cb;\r
+       gp2x_memcpy_all_buffers(gp2x_screen, 0, 320*240*2);\r
+\r
        // make save filename\r
        romfname_ext(saveFname, "");\r
        if(sram) strcat(saveFname, (PicoMCD&1) ? ".brm" : ".srm");\r