emu_save_load_game((which & PEV_STATE_LOAD) ? 1 : 0, 0);\r
PicoStateProgressCB = NULL;\r
}\r
+ plat_status_msg_busy_done();\r
}\r
if (which & PEV_SWITCH_RND)\r
{\r
/* used before things blocking for a while (these funcs redraw on return) */
void plat_status_msg_busy_first(const char *msg);
void plat_status_msg_busy_next(const char *msg);
+void plat_status_msg_busy_done(void);
void plat_status_msg_clear(void);
void plat_video_toggle_renderer(int change, int menu_call);
plat_status_msg_busy_next(msg);\r
}\r
\r
+void plat_status_msg_busy_done(void)\r
+{\r
+}\r
+\r
static void vid_reset_mode(void)\r
{\r
int gp2x_mode = 16;\r
plat_status_msg_busy_next(msg);\r
}\r
\r
+void plat_status_msg_busy_done(void)\r
+{\r
+}\r
+\r
void plat_update_volume(int has_changed, int is_up)\r
{\r
}\r
plat_status_msg_busy_next(msg);\r
}\r
\r
+void plat_status_msg_busy_done(void)\r
+{\r
+}\r
+\r
void plat_update_volume(int has_changed, int is_up)\r
{\r
}\r
video_deinit();
}
-/* display emulator status messages before holding emulation */
+/* display emulator status messages while holding emulation */
void plat_status_msg_busy_first(const char *msg)
{
+ // stop sound to make sure silence is played
+ pemu_sound_stop();
plat_status_msg_busy_next(msg);
}
void plat_status_msg_busy_next(const char *msg)
{
- plat_status_msg_clear();
pemu_finalize_frame("", msg);
+ // flip twice since our gskit pipeline has one frame delay
+ plat_video_flip();
plat_video_flip();
emu_status_msg("");
reset_timing = 1;
}
+void plat_status_msg_busy_done(void)
+{
+ pemu_sound_start();
+}
+
/* clear status message area */
void plat_status_msg_clear(void)
{
{
// TODO hsync depends on NTSC/PAL (15750/15625 Hz), it however doesn't
// matter if it falls a bit short, the while loop will catch the rest
- unsigned hsyncs = (us_to - plat_get_ticks_us()) * 15620 / 1000000;
+ int hsyncs = (us_to - plat_get_ticks_us()) * 15620 / 1000000;
- if (hsyncs && SetAlarm(hsyncs, alarm_cb, (void *)GetThreadId()) >= 0)
+ if (hsyncs > 0 && SetAlarm(hsyncs, alarm_cb, (void *)GetThreadId()) >= 0)
SleepThread();
while ((int)(us_to - plat_get_ticks_us()) > 0)
RotateThreadReadyQueue(0);
{
plat_status_msg_clear();
pemu_finalize_frame("", msg);
+ // flip twice since our GU pipeline has one frame delay
+ plat_video_flip();
plat_video_flip();
emu_status_msg("");
reset_timing = 1;
}
+void plat_status_msg_busy_done(void)
+{
+}
+
/* clear status message area */
void plat_status_msg_clear(void)
{