extend mmap wrapper functionality
[libpicofe.git] / common / emu.c
index 8e5a8d5..7d680b8 100644 (file)
@@ -497,11 +497,13 @@ int emu_reload_rom(char *rom_fname)
 \r
        get_ext(rom_fname, ext);\r
 \r
-       // check for movie file\r
+       // early cleanup\r
+       PicoPatchUnload();\r
        if (movie_data) {\r
                free(movie_data);\r
                movie_data = 0;\r
        }\r
+\r
        if (!strcmp(ext, ".gmv"))\r
        {\r
                // check for both gmv and rom\r
@@ -558,7 +560,6 @@ int emu_reload_rom(char *rom_fname)
        }\r
 \r
        shutdown_MCD();\r
-       PicoPatchUnload();\r
        PicoCartUnload();\r
        rom_loaded = 0;\r
 \r
@@ -1011,7 +1012,7 @@ char *emu_get_save_fname(int load, int is_sram, int slot)
        return NULL;\r
 }\r
 \r
-int emu_check_save_file(int slot)\r
+int emu_check_save_file(int slot, int *time)\r
 {\r
        return emu_get_save_fname(1, 0, slot) ? 1 : 0;\r
 }\r
@@ -1238,7 +1239,7 @@ static void run_events_ui(unsigned int which)
        if (which & (PEV_STATE_LOAD|PEV_STATE_SAVE))\r
        {\r
                int do_it = 1;\r
-               if ( emu_check_save_file(state_slot) &&\r
+               if ( emu_check_save_file(state_slot, NULL) &&\r
                        (((which & PEV_STATE_LOAD) && (currentConfig.confirm_save & EOPT_CONFIRM_LOAD)) ||\r
                         ((which & PEV_STATE_SAVE) && (currentConfig.confirm_save & EOPT_CONFIRM_SAVE))) )\r
                {\r
@@ -1257,13 +1258,13 @@ static void run_events_ui(unsigned int which)
                        plat_status_msg_busy_first(tmp);\r
 \r
                        in_set_config_int(0, IN_CFG_BLOCKING, 1);\r
-                       while (in_menu_wait_any(50) & (PBTN_MA3|PBTN_MBACK))\r
+                       while (in_menu_wait_any(NULL, 50) & (PBTN_MA3|PBTN_MBACK))\r
                                ;\r
-                       while ( !((keys = in_menu_wait_any(50)) & (PBTN_MA3|PBTN_MBACK)) )\r
+                       while ( !((keys = in_menu_wait_any(NULL, 50)) & (PBTN_MA3|PBTN_MBACK)) )\r
                                ;\r
                        if (keys & PBTN_MBACK)\r
                                do_it = 0;\r
-                       while (in_menu_wait_any(50) & (PBTN_MA3|PBTN_MBACK))\r
+                       while (in_menu_wait_any(NULL, 50) & (PBTN_MA3|PBTN_MBACK))\r
                                ;\r
                        in_set_config_int(0, IN_CFG_BLOCKING, 0);\r
                }\r
@@ -1291,7 +1292,7 @@ static void run_events_ui(unsigned int which)
                }\r
 \r
                emu_status_msg("SAVE SLOT %i [%s]", state_slot,\r
-                       emu_check_save_file(state_slot) ? "USED" : "FREE");\r
+                       emu_check_save_file(state_slot, NULL) ? "USED" : "FREE");\r
        }\r
        if (which & PEV_MENU)\r
                engineState = PGS_Menu;\r
@@ -1350,6 +1351,27 @@ static void mkdir_path(char *path_with_reserve, int pos, const char *name)
                lprintf("failed to create: %s\n", path_with_reserve);\r
 }\r
 \r
+void emu_cmn_forced_frame(int no_scale, int do_emu)\r
+{\r
+       int po_old = PicoOpt;\r
+\r
+       memset32(g_screen_ptr, 0, g_screen_width * g_screen_height * 2 / 4);\r
+\r
+       PicoOpt &= ~POPT_ALT_RENDERER;\r
+       PicoOpt |= POPT_ACC_SPRITES;\r
+       if (!no_scale)\r
+               PicoOpt |= POPT_EN_SOFTSCALE;\r
+\r
+       PicoDrawSetOutFormat(PDF_RGB555, 1);\r
+       Pico.m.dirtyPal = 1;\r
+       if (do_emu)\r
+               PicoFrame();\r
+       else\r
+               PicoFrameDrawOnly();\r
+\r
+       PicoOpt = po_old;\r
+}\r
+\r
 void emu_init(void)\r
 {\r
        char path[512];\r