runs code in 1M wram, cell arrange, decode (untested)
[picodrive.git] / platform / gp2x / emu.c
index 871d05f..24496fd 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
@@ -634,10 +634,10 @@ static int EmuScan8(unsigned int num, void *sdata)
        return 0;\r
 }\r
 \r
-static int localPal[0x100];\r
+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
@@ -764,6 +764,12 @@ static int check_save_file(void)
        return 0;\r
 }\r
 \r
+static void emu_state_cb(const char *str)\r
+{\r
+       clearArea(0);\r
+       blit("", str);\r
+}\r
+\r
 static void RunEvents(unsigned int which)\r
 {\r
        if(which & 0x1800) { // save or load (but not both)\r
@@ -777,8 +783,11 @@ 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
+                       PicoStateProgressCB = emu_state_cb;\r
+                       gp2x_memcpy_all_buffers(gp2x_screen, 0, 320*240*2);\r
+                       emu_SaveLoadGame((which & 0x1000) >> 12, 0);\r
+                       PicoStateProgressCB = NULL;\r
                }\r
 \r
                reset_timing = 1;\r
@@ -1001,6 +1010,7 @@ void emu_Loop(void)
 \r
        // make sure we are in correct mode\r
        vidResetMode();\r
+       Pico.m.dirtyPal = 1;\r
        oldmodes = ((Pico.video.reg[12]&1)<<2) ^ 0xc;\r
        find_combos();\r
 \r
@@ -1223,10 +1233,23 @@ 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
+\r
+       // if in 16bit mode, generate 8it image for menu background\r
+       if (!(PicoOpt&0x10) && (currentConfig.EmuOpt&0x80)) {\r
+               PicoOpt |= 0x10;\r
+               PicoFrameFull();\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