}\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
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
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
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
\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
// if in 16bit mode, generate 8it image for menu background\r
if (!(PicoOpt&0x10) && (currentConfig.EmuOpt&0x80)) {\r
PicoOpt |= 0x10;\r
+ if (!(Pico.video.reg[12]&1)) clearArea(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