-// (c) Copyright 2006 notaz, All rights reserved.\r
+// (c) Copyright 2006-2009 notaz, All rights reserved.\r
// Free for non-commercial use.\r
\r
// For commercial use, separate licencing terms must be obtained.\r
\r
#include <stdio.h>\r
+#include <stdlib.h>\r
#include <string.h>\r
-#include <unistd.h>\r
#include <strings.h>\r
-#include <linux/limits.h>\r
\r
-#include "gp2x.h"\r
-#include "menu.h"\r
#include "../common/menu.h"\r
#include "../common/emu.h"\r
+#include "../common/config.h"\r
+#include "../common/input.h"\r
+#include "../common/plat.h"\r
#include "emu.h"\r
-#include "940ctl.h"\r
#include "version.h"\r
\r
-#include "squidgehack.h"\r
-#include "cpuctrl.h"\r
\r
-\r
-extern char *ext_menu, *ext_state;\r
-extern int select_exits;\r
extern char *PicoConfigFile;\r
-int mmuhack_status = 0;\r
+static int load_state_slot = -1;\r
char **g_argv;\r
\r
void parse_cmd_line(int argc, char *argv[])\r
{\r
int x, unrecognized = 0;\r
\r
- for(x = 1; x < argc; x++)\r
+ for (x = 1; x < argc; x++)\r
{\r
- if(argv[x][0] == '-')\r
+ if (argv[x][0] == '-')\r
{\r
- if(strcasecmp(argv[x], "-menu") == 0) {\r
- if(x+1 < argc) { ++x; ext_menu = argv[x]; } /* External Frontend: Program Name */\r
- }\r
- else if(strcasecmp(argv[x], "-state") == 0) {\r
- if(x+1 < argc) { ++x; ext_state = argv[x]; } /* External Frontend: Arguments */\r
- }\r
- else if(strcasecmp(argv[x], "-config") == 0) {\r
- if(x+1 < argc) { ++x; PicoConfigFile = argv[x]; }\r
+ if (strcasecmp(argv[x], "-config") == 0) {\r
+ if (x+1 < argc) { ++x; PicoConfigFile = argv[x]; }\r
}\r
- else if(strcasecmp(argv[x], "-selectexit") == 0) {\r
- select_exits = 1;\r
+ else if (strcasecmp(argv[x], "-loadstate") == 0) {\r
+ if (x+1 < argc) { ++x; load_state_slot = atoi(argv[x]); }\r
}\r
else {\r
unrecognized = 1;\r
} else {\r
/* External Frontend: ROM Name */\r
FILE *f;\r
- strncpy(romFileName, argv[x], PATH_MAX);\r
- romFileName[PATH_MAX-1] = 0;\r
- f = fopen(romFileName, "rb");\r
+ strncpy(rom_fname_reload, argv[x], sizeof(rom_fname_reload));\r
+ rom_fname_reload[sizeof(rom_fname_reload) - 1] = 0;\r
+ f = fopen(rom_fname_reload, "rb");\r
if (f) fclose(f);\r
else unrecognized = 1;\r
engineState = PGS_ReloadRom;\r
}\r
\r
if (unrecognized) {\r
- printf("\n\n\nPicoDrive v" VERSION " (c) notaz, 2006-2007\n");\r
+ printf("\n\n\nPicoDrive v" VERSION " (c) notaz, 2006-2009\n");\r
printf("usage: %s [options] [romfile]\n", argv[0]);\r
- printf( "options:\n"\r
- "-menu <menu_path> launch a custom program on exit instead of default gp2xmenu\n"\r
- "-state <param> pass '-state param' to the menu program\n"\r
- "-config <file> use specified config file instead of default 'picoconfig.bin'\n"\r
- " see currentConfig_t structure in emu.h for the file format\n"\r
- "-selectexit pressing SELECT will exit the emu and start 'menu_path'\n");\r
+ printf("options:\n"\r
+ " -config <file> use specified config file instead of default 'config.cfg'\n"\r
+ " -loadstate <num> if ROM is specified, try loading slot <num>\n");\r
}\r
}\r
\r
{\r
g_argv = argv;\r
\r
+ /* in_init() must go before config, config accesses in_ fwk */\r
+ in_init();\r
+ emu_prepareDefaultConfig();\r
emu_ReadConfig(0, 0);\r
- gp2x_init();\r
- if (currentConfig.EmuOpt&0x10) {\r
- int ret = mmuhack();\r
- printf("squidge hack code finished and returned %i\n", ret); fflush(stdout);\r
- mmuhack_status = ret;\r
- }\r
- cpuctrl_init();\r
- // Reset940(1);\r
- // Pause940(1);\r
- if (currentConfig.EmuOpt&0x100) {\r
- printf("setting RAM timings.. "); fflush(stdout);\r
- // craigix: --trc 6 --tras 4 --twr 1 --tmrd 1 --trfc 1 --trp 2 --trcd 2\r
- set_RAM_Timings(6, 4, 1, 1, 1, 2, 2);\r
- printf("done.\n"); fflush(stdout);\r
- }\r
- sharedmem_init();\r
+ config_readlrom(PicoConfigFile);\r
+\r
+ plat_init();\r
+ in_probe();\r
+ in_debug_dump();\r
+\r
emu_Init();\r
menu_init();\r
\r
if (argc > 1)\r
parse_cmd_line(argc, argv);\r
\r
+ if (engineState == PGS_ReloadRom)\r
+ {\r
+ if (emu_ReloadRom(rom_fname_reload)) {\r
+ engineState = PGS_Running;\r
+ if (load_state_slot >= 0) {\r
+ state_slot = load_state_slot;\r
+ emu_SaveLoadGame(1, 0);\r
+ }\r
+ }\r
+ }\r
+\r
for (;;)\r
{\r
switch (engineState)\r
break;\r
\r
case PGS_ReloadRom:\r
- if (emu_ReloadRom())\r
+ if (emu_ReloadRom(rom_fname_reload))\r
engineState = PGS_Running;\r
else {\r
printf("PGS_ReloadRom == 0\n");\r
endloop:\r
\r
emu_Deinit();\r
- sharedmem_deinit();\r
- cpuctrl_deinit();\r
- gp2x_deinit();\r
- if(mmuhack_status)\r
- mmuunhack();\r
+ plat_finish();\r
\r
return 0;\r
}\r