#include "lprintf.h"\r
#include "config.h"\r
#include "plat.h"\r
+#include "input.h"\r
\r
#include <pico/pico_int.h>\r
#include <pico/patch.h>\r
\r
char *PicoConfigFile = "config.cfg";\r
currentConfig_t currentConfig, defaultConfig;\r
-char noticeMsg[64] = { 0, };\r
int state_slot = 0;\r
int config_slot = 0, config_slot_current = 0;\r
int pico_inp_mode = 0;\r
// TODO: bits 6 & 5\r
}\r
movie_data[0x18+30] = 0;\r
- sprintf(noticeMsg, "MOVIE: %s", (char *) &movie_data[0x18]);\r
+ plat_status_msg("MOVIE: %s", (char *) &movie_data[0x18]);\r
}\r
else\r
{\r
PicoOpt &= ~POPT_DIS_VDP_FIFO;\r
- if (Pico.m.pal) {\r
- strcpy(noticeMsg, "PAL SYSTEM / 50 FPS");\r
- } else {\r
- strcpy(noticeMsg, "NTSC SYSTEM / 60 FPS");\r
- }\r
+ plat_status_msg(Pico.m.pal ? "PAL SYSTEM / 50 FPS" : "NTSC SYSTEM / 60 FPS");\r
}\r
- emu_noticeMsgUpdated();\r
\r
// load SRAM for this ROM\r
if (currentConfig.EmuOpt & EOPT_USE_SRAM)\r
#undef mk_text_out\r
\r
\r
-void emu_updateMovie(void)\r
+void update_movie(void)\r
{\r
int offs = Pico.m.frame_count*3 + 0x40;\r
if (offs+3 > movie_size) {\r
free(movie_data);\r
movie_data = 0;\r
- strcpy(noticeMsg, "END OF MOVIE.");\r
+ plat_status_msg("END OF MOVIE.");\r
lprintf("END OF MOVIE.\n");\r
- emu_noticeMsgUpdated();\r
} else {\r
// MXYZ SACB RLDU\r
PicoPad[0] = ~movie_data[offs] & 0x8f; // ! SCBA RLDU\r
// make save filename\r
saveFname = emu_GetSaveFName(load, sram, state_slot);\r
if (saveFname == NULL) {\r
- if (!sram) {\r
- strcpy(noticeMsg, load ? "LOAD FAILED (missing file)" : "SAVE FAILED ");\r
- emu_noticeMsgUpdated();\r
- }\r
+ if (!sram)\r
+ plat_status_msg(load ? "LOAD FAILED (missing file)" : "SAVE FAILED");\r
return -1;\r
}\r
\r
}\r
else ret = -1;\r
if (!ret)\r
- strcpy(noticeMsg, load ? "GAME LOADED " : "GAME SAVED ");\r
+ plat_status_msg(load ? "GAME LOADED" : "GAME SAVED");\r
else\r
{\r
- strcpy(noticeMsg, load ? "LOAD FAILED " : "SAVE FAILED ");\r
+ plat_status_msg(load ? "LOAD FAILED" : "SAVE FAILED");\r
ret = -1;\r
}\r
\r
- emu_noticeMsgUpdated();\r
return ret;\r
}\r
}\r
currentConfig.EmuOpt &= ~4;\r
currentConfig.EmuOpt |= 0x40000;\r
is_on = 1;\r
- strcpy(noticeMsg, "FAST FORWARD ");\r
- emu_noticeMsgUpdated();\r
+ plat_status_msg("FAST FORWARD");\r
}\r
else if (!set_on && is_on) {\r
PsndOut = set_PsndOut;\r
{\r
if (events & (1 << 3)) {\r
pico_inp_mode++;\r
- if (pico_inp_mode > 2) pico_inp_mode = 0;\r
+ if (pico_inp_mode > 2)\r
+ pico_inp_mode = 0;\r
switch (pico_inp_mode) {\r
- case 2: strcpy(noticeMsg, "Input: Pen on Pad "); break;\r
- case 1: strcpy(noticeMsg, "Input: Pen on Storyware"); break;\r
- case 0: strcpy(noticeMsg, "Input: Joytick ");\r
+ case 2: plat_status_msg("Input: Pen on Pad"); break;\r
+ case 1: plat_status_msg("Input: Pen on Storyware"); break;\r
+ case 0: plat_status_msg("Input: Joystick");\r
PicoPicohw.pen_pos[0] = PicoPicohw.pen_pos[1] = 0x8000;\r
break;\r
}\r
- emu_noticeMsgUpdated();\r
}\r
if (events & (1 << 4)) {\r
PicoPicohw.page--;\r
- if (PicoPicohw.page < 0) PicoPicohw.page = 0;\r
- sprintf(noticeMsg, "Page %i ", PicoPicohw.page);\r
- emu_noticeMsgUpdated();\r
+ if (PicoPicohw.page < 0)\r
+ PicoPicohw.page = 0;\r
+ plat_status_msg("Page %i", PicoPicohw.page);\r
}\r
if (events & (1 << 5)) {\r
PicoPicohw.page++;\r
- if (PicoPicohw.page > 6) PicoPicohw.page = 6;\r
- sprintf(noticeMsg, "Page %i ", PicoPicohw.page);\r
- emu_noticeMsgUpdated();\r
+ if (PicoPicohw.page > 6)\r
+ PicoPicohw.page = 6;\r
+ plat_status_msg("Page %i", PicoPicohw.page);\r
}\r
}\r
\r
-void emu_DoTurbo(int *pad, int acts)\r
+static void do_turbo(int *pad, int acts)\r
{\r
static int turbo_pad = 0;\r
static unsigned char turbo_cnt[3] = { 0, 0, 0 };\r
*pad |= turbo_pad & (acts >> 8);\r
}\r
\r
+static void run_ui_events(unsigned int which)\r
+{\r
+ if (which & (PEV_STATE_LOAD|PEV_STATE_SAVE))\r
+ {\r
+ int do_it = 1;\r
+ if ( emu_checkSaveFile(state_slot) &&\r
+ (((which & PEV_STATE_LOAD) && (currentConfig.EmuOpt & EOPT_CONFIRM_LOAD)) ||\r
+ ((which & PEV_STATE_SAVE) && (currentConfig.EmuOpt & EOPT_CONFIRM_SAVE))) )\r
+ {\r
+ const char *nm;\r
+ char tmp[64];\r
+ int keys, len;\r
+\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
+ snprintf(tmp + len, sizeof(tmp) - len, "(%s=yes, ", nm);\r
+ len = strlen(tmp);\r
+ nm = in_get_key_name(-1, -PBTN_MBACK);\r
+ snprintf(tmp + len, sizeof(tmp) - len, "%s=no)", nm);\r
+\r
+ plat_status_msg_busy_first(tmp);\r
+\r
+ in_set_blocking(1);\r
+ while (in_menu_wait_any(50) & (PBTN_MA3|PBTN_MBACK))\r
+ ;\r
+ while ( !((keys = in_menu_wait_any(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
+ ;\r
+ in_set_blocking(0);\r
+ }\r
+ if (do_it) {\r
+ plat_status_msg_busy_first((which & PEV_STATE_LOAD) ? "LOADING GAME" : "SAVING GAME");\r
+ PicoStateProgressCB = plat_status_msg_busy_next;\r
+ emu_SaveLoadGame((which & PEV_STATE_LOAD) ? 1 : 0, 0);\r
+ PicoStateProgressCB = NULL;\r
+ }\r
+ }\r
+ if (which & PEV_SWITCH_RND)\r
+ {\r
+ plat_video_toggle_renderer();\r
+ }\r
+ if (which & (PEV_SSLOT_PREV|PEV_SSLOT_NEXT))\r
+ {\r
+ if (which & PEV_SSLOT_PREV) {\r
+ state_slot -= 1;\r
+ if (state_slot < 0)\r
+ state_slot = 9;\r
+ } else {\r
+ state_slot += 1;\r
+ if (state_slot > 9)\r
+ state_slot = 0;\r
+ }\r
+\r
+ plat_status_msg("SAVE SLOT %i [%s]", state_slot,\r
+ emu_checkSaveFile(state_slot) ? "USED" : "FREE");\r
+ }\r
+ if (which & PEV_MENU)\r
+ engineState = PGS_Menu;\r
+}\r
+\r
+void emu_update_input(void)\r
+{\r
+ unsigned int allActions[2] = { 0, 0 }, events;\r
+ static unsigned int prevEvents = 0;\r
+\r
+ /* FIXME: player2 */\r
+ allActions[0] = in_update();\r
+\r
+ PicoPad[0] = allActions[0] & 0xfff;\r
+ PicoPad[1] = allActions[1] & 0xfff;\r
+\r
+ if (allActions[0] & 0x7000) do_turbo(&PicoPad[0], allActions[0]);\r
+ if (allActions[1] & 0x7000) do_turbo(&PicoPad[1], allActions[1]);\r
+\r
+ events = (allActions[0] | allActions[1]) & PEV_MASK;\r
+\r
+ // volume is treated in special way and triggered every frame\r
+ if (events & (PEV_VOL_DOWN|PEV_VOL_UP))\r
+ plat_update_volume(1, events & PEV_VOL_UP);\r
+\r
+ if ((events ^ prevEvents) & PEV_FF) {\r
+ emu_changeFastForward(events & PEV_FF);\r
+ plat_update_volume(0, 0);\r
+// reset_timing = 1;\r
+ }\r
+\r
+ events &= ~prevEvents;\r
+\r
+// TODO if (PicoAHW == PAHW_PICO)\r
+// RunEventsPico(events);\r
+ if (events)\r
+ run_ui_events(events);\r
+ if (movie_data)\r
+ update_movie();\r
+\r
+ prevEvents = (allActions[0] | allActions[1]) & PEV_MASK;\r
+}\r
+\r