split memories away from Pico
[picodrive.git] / platform / common / emu.c
index 18f63f2..9535bfd 100644 (file)
@@ -738,8 +738,26 @@ mk_text_out(emu_text_out16_rot, unsigned short, 0xffff,
 \r
 #undef mk_text_out\r
 \r
+void emu_osd_text16(int x, int y, const char *text)\r
+{\r
+       int len = strlen(text) * 8;\r
+       int i, h;\r
+\r
+       len++;\r
+       if (x + len > g_screen_width)\r
+               len = g_screen_width - x;\r
+\r
+       for (h = 0; h < 8; h++) {\r
+               unsigned short *p;\r
+               p = (unsigned short *)g_screen_ptr\r
+                       + x + g_screen_width * (y + h);\r
+               for (i = len; i > 0; i--, p++)\r
+                       *p = (*p >> 2) & 0x39e7;\r
+       }\r
+       emu_text_out16(x, y, text);\r
+}\r
 \r
-void update_movie(void)\r
+static void update_movie(void)\r
 {\r
        int offs = Pico.m.frame_count*3 + 0x40;\r
        if (offs+3 > movie_size) {\r
@@ -871,7 +889,7 @@ int emu_save_load_game(int load, int sram)
                {\r
                        if (PicoOpt & POPT_EN_MCD_RAMCART) {\r
                                sram_size = 0x12000;\r
-                               sram_data = SRam.data;\r
+                               sram_data = Pico.sv.data;\r
                                if (sram_data)\r
                                        memcpy32((int *)sram_data, (int *)Pico_mcd->bram, 0x2000/4);\r
                        } else {\r
@@ -880,11 +898,11 @@ int emu_save_load_game(int load, int sram)
                                truncate  = 0; // the .brm may contain RAM cart data after normal brm\r
                        }\r
                } else {\r
-                       sram_size = SRam.size;\r
-                       sram_data = SRam.data;\r
+                       sram_size = Pico.sv.size;\r
+                       sram_data = Pico.sv.data;\r
                }\r
                if (sram_data == NULL)\r
-                       return 0; // SRam forcefully disabled for this game\r
+                       return 0; // cart saves forcefully disabled for this game\r
 \r
                if (load)\r
                {\r
@@ -955,6 +973,9 @@ void emu_set_fastforward(int set_on)
                currentConfig.EmuOpt = set_EmuOpt;\r
                PsndRerate(1);\r
                is_on = 0;\r
+               // mainly to unbreak pcm\r
+               if (PicoAHW & PAHW_MCD)\r
+                       pcd_state_loaded();\r
        }\r
 }\r
 \r
@@ -1073,9 +1094,9 @@ static void run_events_ui(unsigned int which)
                        char tmp[64];\r
                        int keys, len;\r
 \r
-                       strcpy(tmp, (which & PEV_STATE_LOAD) ? "LOAD STATE?" : "OVERWRITE SAVE?");\r
+                       strcpy(tmp, (which & PEV_STATE_LOAD) ? "LOAD STATE? " : "OVERWRITE SAVE? ");\r
                        len = strlen(tmp);\r
-                       nm = in_get_key_name(-1, -PBTN_MA3);\r
+                       nm = in_get_key_name(-1, -PBTN_MOK);\r
                        snprintf(tmp + len, sizeof(tmp) - len, "(%s=yes, ", nm);\r
                        len = strlen(tmp);\r
                        nm = in_get_key_name(-1, -PBTN_MBACK);\r
@@ -1084,13 +1105,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(NULL, 50) & (PBTN_MA3|PBTN_MBACK))\r
+                       while (in_menu_wait_any(NULL, 50) & (PBTN_MOK | PBTN_MBACK))\r
                                ;\r
-                       while ( !((keys = in_menu_wait_any(NULL, 50)) & (PBTN_MA3|PBTN_MBACK)) )\r
+                       while ( !((keys = in_menu_wait_any(NULL, 50)) & (PBTN_MOK | PBTN_MBACK)))\r
                                ;\r
                        if (keys & PBTN_MBACK)\r
                                do_it = 0;\r
-                       while (in_menu_wait_any(NULL, 50) & (PBTN_MA3|PBTN_MBACK))\r
+                       while (in_menu_wait_any(NULL, 50) & (PBTN_MOK | PBTN_MBACK))\r
                                ;\r
                        in_set_config_int(0, IN_CFG_BLOCKING, 0);\r
                }\r
@@ -1120,6 +1141,8 @@ static void run_events_ui(unsigned int which)
                emu_status_msg("SAVE SLOT %i [%s]", state_slot,\r
                        emu_check_save_file(state_slot, NULL) ? "USED" : "FREE");\r
        }\r
+       if (which & PEV_RESET)\r
+               emu_reset_game();\r
        if (which & PEV_MENU)\r
                engineState = PGS_Menu;\r
 }\r
@@ -1239,9 +1262,9 @@ void emu_init(void)
 void emu_finish(void)\r
 {\r
        // save SRAM\r
-       if ((currentConfig.EmuOpt & EOPT_EN_SRAM) && SRam.changed) {\r
+       if ((currentConfig.EmuOpt & EOPT_EN_SRAM) && Pico.sv.changed) {\r
                emu_save_load_game(0, 1);\r
-               SRam.changed = 0;\r
+               Pico.sv.changed = 0;\r
        }\r
 \r
        if (!(currentConfig.EmuOpt & EOPT_NO_AUTOSVCFG)) {\r
@@ -1379,6 +1402,8 @@ void emu_loop(void)
                        {\r
                                notice_msg_time = 0;\r
                                plat_status_msg_clear();\r
+                               plat_video_flip();\r
+                               plat_status_msg_clear(); /* Do it again in case of double buffering */\r
                                notice_msg = NULL;\r
                        }\r
                        else {\r
@@ -1407,7 +1432,7 @@ void emu_loop(void)
                        printf("%s\n", fpsbuff);\r
 #else\r
                        if (currentConfig.EmuOpt & EOPT_SHOW_FPS)\r
-                               sprintf(fpsbuff, "%02i/%02i  ", frames_shown, frames_done);\r
+                               snprintf(fpsbuff, 8, "%02i/%02i  ", frames_shown, frames_done);\r
 #endif\r
                        frames_shown = frames_done = 0;\r
                        timestamp_fps_x3 += ms_to_ticks(1000) * 3;\r
@@ -1489,10 +1514,10 @@ void emu_loop(void)
        emu_set_fastforward(0);\r
 \r
        // save SRAM\r
-       if ((currentConfig.EmuOpt & EOPT_EN_SRAM) && SRam.changed) {\r
+       if ((currentConfig.EmuOpt & EOPT_EN_SRAM) && Pico.sv.changed) {\r
                plat_status_msg_busy_first("Writing SRAM/BRAM...");\r
                emu_save_load_game(0, 1);\r
-               SRam.changed = 0;\r
+               Pico.sv.changed = 0;\r
        }\r
 \r
        pemu_loop_end();\r