X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=common%2Fmain.c;fp=common%2Fmain.c;h=00cbac715692900bc66d7d09017b8e4f496642b0;hb=046c454067c66b783417f4a61ab1445d06412d66;hp=0000000000000000000000000000000000000000;hpb=fa8d133192876a802fbac43c0a0bfe4f5f85b682;p=libpicofe.git diff --git a/common/main.c b/common/main.c new file mode 100644 index 0000000..00cbac7 --- /dev/null +++ b/common/main.c @@ -0,0 +1,138 @@ +// (c) Copyright 2006-2009 notaz, All rights reserved. +// Free for non-commercial use. + +// For commercial use, separate licencing terms must be obtained. + +#include +#include +#include +#include + +#include "menu.h" +#include "emu.h" +#include "config.h" +#include "input.h" +#include "plat.h" +#include + + +extern char *PicoConfigFile; +static int load_state_slot = -1; +char **g_argv; + +void parse_cmd_line(int argc, char *argv[]) +{ + int x, unrecognized = 0; + + for (x = 1; x < argc; x++) + { + if (argv[x][0] == '-') + { + if (strcasecmp(argv[x], "-config") == 0) { + if (x+1 < argc) { ++x; PicoConfigFile = argv[x]; } + } + else if (strcasecmp(argv[x], "-loadstate") == 0) { + if (x+1 < argc) { ++x; load_state_slot = atoi(argv[x]); } + } + else { + unrecognized = 1; + break; + } + } else { + /* External Frontend: ROM Name */ + FILE *f; + strncpy(rom_fname_reload, argv[x], sizeof(rom_fname_reload)); + rom_fname_reload[sizeof(rom_fname_reload) - 1] = 0; + f = fopen(rom_fname_reload, "rb"); + if (f) fclose(f); + else unrecognized = 1; + engineState = PGS_ReloadRom; + break; + } + } + + if (unrecognized) { + printf("\n\n\nPicoDrive v" VERSION " (c) notaz, 2006-2009\n"); + printf("usage: %s [options] [romfile]\n", argv[0]); + printf("options:\n" + " -config use specified config file instead of default 'config.cfg'\n" + " -loadstate if ROM is specified, try loading slot \n"); + } +} + + +int main(int argc, char *argv[]) +{ + g_argv = argv; + + plat_early_init(); + + /* in_init() must go before config, config accesses in_ fwk */ + in_init(); + emu_prepareDefaultConfig(); + emu_ReadConfig(0, 0); + config_readlrom(PicoConfigFile); + + plat_init(); + in_probe(); + in_debug_dump(); + + emu_Init(); + menu_init(); + + engineState = PGS_Menu; + + if (argc > 1) + parse_cmd_line(argc, argv); + + if (engineState == PGS_ReloadRom) + { + if (emu_ReloadRom(rom_fname_reload)) { + engineState = PGS_Running; + if (load_state_slot >= 0) { + state_slot = load_state_slot; + emu_SaveLoadGame(1, 0); + } + } + } + + for (;;) + { + switch (engineState) + { + case PGS_Menu: + menu_loop(); + break; + + case PGS_ReloadRom: + if (emu_ReloadRom(rom_fname_reload)) + engineState = PGS_Running; + else { + printf("PGS_ReloadRom == 0\n"); + engineState = PGS_Menu; + } + break; + + case PGS_RestartRun: + engineState = PGS_Running; + + case PGS_Running: + emu_Loop(); + break; + + case PGS_Quit: + goto endloop; + + default: + printf("engine got into unknown state (%i), exitting\n", engineState); + goto endloop; + } + } + + endloop: + + emu_Deinit(); + plat_finish(); + + return 0; +}