#include "pcnt.h"
#include "menu.h"
#include "../libpcsxcore/misc.h"
+#include "../libpcsxcore/new_dynarec/new_dynarec.h"
#include "../plugins/cdrcimg/cdrcimg.h"
#include "common/plat.h"
#include "common/input.h"
unsigned long gpuDisp;
char cfgfile_basename[MAXPATHLEN];
static char *(*real_getenv)(const char *name);
+int state_slot;
+enum sched_action emu_action, emu_action_old;
+char hud_msg[64];
+int hud_new_msg;
+
+// from softgpu plugin
+extern int UseFrameSkip;
static void make_path(char *buf, size_t size, const char *dir, const char *fname)
{
{
const char *ext = NULL;
- if (fname != NULL) {
- int len = strlen(fname);
- ext = fname;
- if (len > 2)
- ext = fname + len - 2;
- }
+ if (fname != NULL)
+ ext = strrchr(fname, '.');
- if (ext && strcasecmp(ext, ".z") == 0) {
+ if (ext && (
+ strcasecmp(ext, ".z") == 0 || strcasecmp(ext, ".bz") == 0 ||
+ strcasecmp(ext, ".znx") == 0 || strcasecmp(ext, ".pbp") == 0)) {
SetIsoFile(NULL);
cdrcimg_set_fname(fname);
strcpy(Config.Cdr, "builtin_cdrcimg");
snprintf(Config.PatchesDir, sizeof(Config.PatchesDir), "." PATCHES_DIR);
}
+void do_emu_action(void)
+{
+ int ret;
+
+ emu_action_old = emu_action;
+
+ switch (emu_action) {
+ case SACTION_NONE:
+ return;
+ case SACTION_ENTER_MENU:
+ menu_loop();
+ return;
+ case SACTION_LOAD_STATE:
+ ret = emu_load_state(state_slot);
+ snprintf(hud_msg, sizeof(hud_msg), ret == 0 ? "LOADED" : "FAIL!");
+ break;
+ case SACTION_SAVE_STATE:
+ ret = emu_save_state(state_slot);
+ snprintf(hud_msg, sizeof(hud_msg), ret == 0 ? "SAVED" : "FAIL!");
+ break;
+ case SACTION_NEXT_SSLOT:
+ state_slot++;
+ if (state_slot > 9)
+ state_slot = 0;
+ goto do_state_slot;
+ case SACTION_PREV_SSLOT:
+ state_slot--;
+ if (state_slot < 0)
+ state_slot = 9;
+ goto do_state_slot;
+ case SACTION_TOGGLE_FSKIP:
+ UseFrameSkip ^= 1;
+ snprintf(hud_msg, sizeof(hud_msg), "FRAMESKIP %s",
+ UseFrameSkip ? "ON" : "OFF");
+ break;
+ }
+ hud_new_msg = 3;
+ return;
+
+do_state_slot:
+ snprintf(hud_msg, sizeof(hud_msg), "STATE SLOT %d [%s]", state_slot,
+ emu_check_state(state_slot) == 0 ? "USED" : "FREE");
+ hud_new_msg = 3;
+}
+
int main(int argc, char *argv[])
{
- char file[MAXPATHLEN] = "";
- char path[MAXPATHLEN];
- const char *cdfile = NULL;
- int loadst = 0;
void *tmp;
- int i;
tmp = dlopen("/lib/libdl.so.2", RTLD_LAZY);
if (tmp == NULL)
emuLog = stdout;
SetIsoFile(NULL);
+ memset(&Config, 0, sizeof(Config));
+
+ CheckSubDir();
+ set_default_paths();
+ strcpy(Config.Bios, "HLE");
+
+#ifdef MAEMO
+ extern int maemo_main(int argc, char **argv);
+ return maemo_main(argc, argv);
+#else
+ char file[MAXPATHLEN] = "";
+ char path[MAXPATHLEN];
+ const char *cdfile = NULL;
+ int loadst = 0;
+ int i;
+
// read command line options
for (i = 1; i < argc; i++) {
if (!strcmp(argv[i], "-psxout")) Config.PsxOut = 1;
}
}
- memset(&Config, 0, sizeof(PcsxConfig));
-
- CheckSubDir();
- set_default_paths();
- strcpy(Config.Bios, "HLE");
-
if (cdfile)
set_cd_image(cdfile);
}
}
- // If a state has been specified, then load that
- if (loadst) {
- char state_filename[MAXPATHLEN];
- int ret = get_state_filename(state_filename, sizeof(state_filename), loadst - 1);
- if (ret == 0)
- ret = LoadState(state_filename);
- printf("%s state %s\n", ret ? "failed to load" : "loaded", state_filename);
- }
-
- if (ready_to_go)
+ if (ready_to_go) {
menu_prepare_emu();
+
+ // If a state has been specified, then load that
+ if (loadst) {
+ int ret = emu_load_state(loadst - 1);
+ printf("%s state %d\n", ret ? "failed to load" : "loaded", loadst);
+ }
+ }
else
menu_loop();
while (1)
{
+ stop = 0;
+ emu_action = SACTION_NONE;
+
psxCpu->Execute();
- menu_loop();
+ if (emu_action != SACTION_NONE)
+ do_emu_action();
}
return 0;
+#endif
}
int SysInit() {
void OnFile_Exit() {
printf("OnFile_Exit\n");
+#ifndef MAEMO
menu_finish();
+#endif
plat_finish();
SysClose();
exit(0);
return 0;
}
+int emu_check_state(int slot)
+{
+ char fname[MAXPATHLEN];
+ int ret;
+
+ ret = get_state_filename(fname, sizeof(fname), slot);
+ if (ret != 0)
+ return ret;
+
+ return CheckState(fname);
+}
+
+int emu_save_state(int slot)
+{
+ char fname[MAXPATHLEN];
+ int ret;
+
+ ret = get_state_filename(fname, sizeof(fname), slot);
+ if (ret != 0)
+ return ret;
+
+ return SaveState(fname);
+}
+
+int emu_load_state(int slot)
+{
+ char fname[MAXPATHLEN];
+ int ret;
+
+ ret = get_state_filename(fname, sizeof(fname), slot);
+ if (ret != 0)
+ return ret;
+
+ return LoadState(fname);
+}
+
void SysPrintf(const char *fmt, ...) {
va_list list;
char msg[512];