int init_vice(const char *c64Dir) { printf("Initing vice from %s", c64Dir); maincpu_early_init(); machine_setup_context(); drive_setup_context(); machine_early_init(); sysfile_init("C64"); gfxoutput_early_init(); if(init_resources() < 0) { archdep_startup_log_error("Failed to init resources"); return -1; } if(resources_set_defaults() < 0) { archdep_startup_log_error("Cannot set defaults.\n"); return -2; } resources_set_int("SidResidSampling", 0); resources_set_int("VICIIVideoCache", 0); resources_set_string("Directory", c64Dir); if(init_main() < 0) { archdep_startup_log_error("Failed to init main"); return -3; } fprintf(stderr, "All is OK"); return 0; }
int cmdline_register_options(const cmdline_option_t *c) { cmdline_option_ram_t *p; p = options + num_options; for (; c->name != NULL; c++, p++) { if (lookup_exact(c->name)) { archdep_startup_log_error("CMDLINE: (%d) Duplicated option '%s'.\n", num_options, c->name); return -1; } if (c->use_description_id != USE_DESCRIPTION_ID) { if (c->description == NULL) { archdep_startup_log_error("CMDLINE: (%d) description id not used and description NULL for '%s'.\n", num_options, c->name); return -1; } } /* archdep_startup_log_error("CMDLINE: (%d) registering option '%s'.\n", num_options, c->name); */ if (num_allocated_options <= num_options) { num_allocated_options *= 2; options = lib_realloc(options, (sizeof(cmdline_option_ram_t) * num_allocated_options)); p = options + num_options; } p->name = lib_stralloc(c->name); p->type = c->type; p->need_arg = c->need_arg; p->set_func = c->set_func; p->extra_param = c->extra_param; if (c->resource_name != NULL) { p->resource_name = lib_stralloc(c->resource_name); } else { p->resource_name = NULL; } p->resource_value = c->resource_value; p->use_param_name_id = c->use_param_name_id; p->use_description_id = c->use_description_id; p->param_name = c->param_name; p->description = c->description; p->param_name_trans = c->param_name_trans; p->description_trans = c->description_trans; p->combined_string = NULL; num_options++; } return 0; }
int initcmdline_check_args(int argc, char **argv) { DBG(("initcmdline_check_args (argc:%d)\n", argc)); if (cmdline_parse(&argc, argv) < 0) { archdep_startup_log_error("Error parsing command-line options, bailing out. For help use '-help'\n"); return -1; } DBG(("initcmdline_check_args 1 (argc:%d)\n", argc)); /* The last orphan option is the same as `-autostart'. */ if ((argc > 1) && (autostart_string == NULL)) { autostart_string = lib_stralloc(argv[1]); argc--, argv++; } DBG(("initcmdline_check_args 2 (argc:%d)\n", argc)); if (argc > 1) { int len = 0, j; for (j = 1; j < argc; j++) { len += argv[j] ? (int)strlen(argv[j]) : 0; } { char *txt = lib_calloc(1, len + argc + 1); for (j = 1; j < argc; j++) { if (argv[j]) { strcat(strcat(txt, " "), argv[j]); } } archdep_startup_log_error("Extra arguments on command-line: %s\n", txt); lib_free(txt); } return -1; } return 0; }
JNIEXPORT void JNICALL Java_com_ssb_droidsound_plugins_VICEPlugin_N_1setDataDir(JNIEnv *env, jclass cl, jstring path) { const char* cpath = env->GetStringUTFChars(path, 0); __android_log_print(ANDROID_LOG_VERBOSE, "VICEPlugin", "setRootDir() to %s", cpath); maincpu_early_init(); machine_setup_context(); drive_setup_context(); machine_early_init(); sysfile_init("C64"); gfxoutput_early_init(0); if (init_resources() < 0) { archdep_startup_log_error("Failed to init resources"); return; } /* Set factory defaults. */ if (resources_set_defaults() < 0) { archdep_startup_log_error("Cannot set defaults.\n"); return; } resources_set_int("SidResidSampling", 0); resources_set_int("VICIIVideoCache", 0); resources_set_string("Directory", cpath); if (init_main() < 0) { archdep_startup_log_error("Failed to init main"); return; } env->ReleaseStringUTFChars(path, cpath); }
static int cmdline_attach(const char *param, void *extra_param) { int unit = vice_ptr_to_int(extra_param); switch (unit) { case 1: lib_free(startup_tape_image); startup_tape_image = lib_stralloc(param); break; case 8: case 9: case 10: case 11: lib_free(startup_disk_images[unit - 8]); startup_disk_images[unit - 8] = lib_stralloc(param); break; default: archdep_startup_log_error("cmdline_attach(): unexpected unit number %d?!\n", unit); } return 0; }
/* returns -1 on error, else a positive CRT ID FIXME: to simplify this function a little bit, all subfunctions should also return the respective CRT ID on success */ int crt_attach(const char *filename, BYTE *rawcart) { BYTE header[0x40]; int rc, new_crttype; FILE *fd; DBG(("crt_attach: %s\n", filename)); fd = fopen(filename, MODE_READ); if (fd == NULL) { return -1; } if (crt_read_header(fd, header) == -1) { return -1; } new_crttype = (header[0x17] + (header[0x16] * 256)); if (header[0x17] & 0x80) { /* handle our negative test IDs */ new_crttype -= 0x10000; } DBG(("crt_attach ID: %d\n", new_crttype)); /* cart should always be detached. there is no reason for doing fancy checks here, and it will cause problems incase a cart MUST be detached before attaching another, or even itself. (eg for initialization reasons) most obvious reason: attaching a different ROM (software) for the same cartridge (hardware) */ cartridge_detach_image(new_crttype); switch (new_crttype) { case CARTRIDGE_CRT: rc = generic_crt_attach(fd, rawcart); if ( rc != CARTRIDGE_NONE) { new_crttype = rc; } break; case CARTRIDGE_ACTION_REPLAY: rc = actionreplay_crt_attach(fd, rawcart); break; case CARTRIDGE_ACTION_REPLAY2: rc = actionreplay2_crt_attach(fd, rawcart); break; case CARTRIDGE_ACTION_REPLAY3: rc = actionreplay3_crt_attach(fd, rawcart); break; case CARTRIDGE_ACTION_REPLAY4: rc = actionreplay4_crt_attach(fd, rawcart); break; case CARTRIDGE_ATOMIC_POWER: rc = atomicpower_crt_attach(fd, rawcart); break; case CARTRIDGE_CAPTURE: rc = capture_crt_attach(fd, rawcart); break; case CARTRIDGE_COMAL80: rc = comal80_crt_attach(fd, rawcart); break; case CARTRIDGE_DELA_EP256: rc = delaep256_crt_attach(fd, rawcart); break; case CARTRIDGE_DELA_EP64: rc = delaep64_crt_attach(fd, rawcart); break; case CARTRIDGE_DELA_EP7x8: rc = delaep7x8_crt_attach(fd, rawcart); break; case CARTRIDGE_DIASHOW_MAKER: rc = dsm_crt_attach(fd, rawcart); break; case CARTRIDGE_DINAMIC: rc = dinamic_crt_attach(fd, rawcart); break; case CARTRIDGE_EASYFLASH: rc = easyflash_crt_attach(fd, rawcart, header, filename); break; case CARTRIDGE_EPYX_FASTLOAD: rc = epyxfastload_crt_attach(fd, rawcart); break; case CARTRIDGE_EXOS: rc = exos_crt_attach(fd, rawcart); break; case CARTRIDGE_EXPERT: rc = expert_crt_attach(fd, rawcart, filename); break; case CARTRIDGE_FINAL_I: rc = final_v1_crt_attach(fd, rawcart); break; case CARTRIDGE_FINAL_III: rc = final_v3_crt_attach(fd, rawcart); break; case CARTRIDGE_FINAL_PLUS: rc = final_plus_crt_attach(fd, rawcart); break; case CARTRIDGE_FREEZE_FRAME: rc = freezeframe_crt_attach(fd, rawcart); break; case CARTRIDGE_FREEZE_MACHINE: rc = freezemachine_crt_attach(fd, rawcart); break; case CARTRIDGE_FUNPLAY: rc = funplay_crt_attach(fd, rawcart); break; case CARTRIDGE_GAME_KILLER: rc = gamekiller_crt_attach(fd, rawcart); break; case CARTRIDGE_GS: rc = gs_crt_attach(fd, rawcart); break; case CARTRIDGE_IDE64: rc = ide64_crt_attach(fd, rawcart); break; case CARTRIDGE_IEEE488: rc = tpi_crt_attach(fd, rawcart); break; case CARTRIDGE_ISEPIC: rc = isepic_crt_attach(fd, rawcart, filename); break; case CARTRIDGE_KCS_POWER: rc = kcs_crt_attach(fd, rawcart); break; case CARTRIDGE_KINGSOFT: rc = kingsoft_crt_attach(fd, rawcart); break; case CARTRIDGE_MACH5: rc = mach5_crt_attach(fd, rawcart); break; case CARTRIDGE_MAGIC_DESK: rc = magicdesk_crt_attach(fd, rawcart); break; case CARTRIDGE_MAGIC_FORMEL: rc = magicformel_crt_attach(fd, rawcart); break; case CARTRIDGE_MAGIC_VOICE: rc = magicvoice_crt_attach(fd, rawcart); break; case CARTRIDGE_MIKRO_ASSEMBLER: rc = mikroass_crt_attach(fd, rawcart); break; case CARTRIDGE_MMC64: rc = mmc64_crt_attach(fd, rawcart); break; case CARTRIDGE_MMC_REPLAY: rc = mmcreplay_crt_attach(fd, rawcart, filename); break; case CARTRIDGE_OCEAN: rc = ocean_crt_attach(fd, rawcart); break; case CARTRIDGE_P64: rc = p64_crt_attach(fd, rawcart); break; case CARTRIDGE_PAGEFOX: rc = pagefox_crt_attach(fd, rawcart); break; case CARTRIDGE_RETRO_REPLAY: rc = retroreplay_crt_attach(fd, rawcart, filename); break; case CARTRIDGE_REX_EP256: rc = rexep256_crt_attach(fd, rawcart); break; case CARTRIDGE_REX: rc = rex_crt_attach(fd, rawcart); break; case CARTRIDGE_ROSS: rc = ross_crt_attach(fd, rawcart); break; case CARTRIDGE_SIMONS_BASIC: rc = simon_crt_attach(fd, rawcart); break; case CARTRIDGE_STARDOS: rc = stardos_crt_attach(fd, rawcart); break; case CARTRIDGE_SNAPSHOT64: rc = snapshot64_crt_attach(fd, rawcart); break; case CARTRIDGE_STRUCTURED_BASIC: rc = stb_crt_attach(fd, rawcart); break; case CARTRIDGE_SUPER_GAMES: rc = supergames_crt_attach(fd, rawcart); break; case CARTRIDGE_SUPER_SNAPSHOT: rc = supersnapshot_v4_crt_attach(fd, rawcart); break; case CARTRIDGE_SUPER_SNAPSHOT_V5: rc = supersnapshot_v5_crt_attach(fd, rawcart); break; case CARTRIDGE_SUPER_EXPLODE_V5: rc = se5_crt_attach(fd, rawcart); break; case CARTRIDGE_WARPSPEED: rc = warpspeed_crt_attach(fd, rawcart); break; case CARTRIDGE_WESTERMANN: rc = westermann_crt_attach(fd, rawcart); break; case CARTRIDGE_ZAXXON: rc = zaxxon_crt_attach(fd, rawcart); break; default: archdep_startup_log_error("unknown CRT ID: %d\n", new_crttype); rc = -1; break; } fclose(fd); if (rc == -1) { DBG(("crt_attach error (%d)\n", rc)); return -1; } DBG(("crt_attach return ID: %d\n", new_crttype)); return new_crttype; }
int cmdline_parse(int *argc, char **argv) { int i = 1; unsigned j; DBG(("cmdline_parse (argc:%d)\n", *argc)); while ((i < *argc) && (argv[i] != NULL)) { DBG(("%d:%s\n", i, argv[i])); if ((argv[i][0] == '-') || (argv[i][0] == '+')) { int is_ambiguous, retval; cmdline_option_ram_t *p; if (argv[i][1] == '\0') { archdep_startup_log_error("Invalid option '%s'.\n", argv[i]); return -1; } if (argv[i][1] == '-') { /* `--' delimits the end of the option list. */ if (argv[i][2] == '\0') { i++; break; } /* This is a kludge to allow --long options */ for (j = 0; j < strlen(argv[i]); j++) { argv[i][j] = argv[i][j + 1]; } } p = lookup(argv[i], &is_ambiguous); if (p == NULL) { archdep_startup_log_error("Unknown option '%s'.\n", argv[i]); return -1; } if (is_ambiguous) { archdep_startup_log_error("Option '%s' is ambiguous.\n", argv[i]); return -1; } if (p->need_arg && i >= *argc - 1) { archdep_startup_log_error("Option '%s' requires a parameter.\n", p->name); return -1; } switch (p->type) { case SET_RESOURCE: if (p->need_arg) { retval = resources_set_value_string(p->resource_name, argv[i + 1]); } else { retval = resources_set_value(p->resource_name, p->resource_value); } break; case CALL_FUNCTION: retval = p->set_func(p->need_arg ? argv[i + 1] : NULL, p->extra_param); break; default: archdep_startup_log_error("Invalid type for option '%s'.\n", p->name); return -1; } if (retval < 0) { if (p->need_arg) { archdep_startup_log_error("Argument '%s' not valid for option `%s'.\n", argv[i + 1], p->name); } else { archdep_startup_log_error("Option '%s' not valid.\n", p->name); } return -1; } i += p->need_arg ? 2 : 1; } else { break; } } /* Remove all of the parsed options. */ DBG(("i:%d argc:%d\n", i, *argc)); j = 1; while (1) { argv[j] = argv[i]; if ((argv[i] == NULL) || (i >= *argc)) { break; } DBG(("%u <- %d:%s\n", j, i, argv[i])); j++; i++; } *argc = (int)j; DBG(("new argc:%u\n", j)); return 0; }
int cmdline_parse(int *argc, char **argv) { int i = 1; while (i < *argc) { if (*argv[i] == '-' || *argv[i] == '+') { int is_ambiguous, retval; cmdline_option_ram_t *p; if (argv[i][1] == '\0') { archdep_startup_log_error("Invalid option '%s'.\n", argv[i]); return -1; } /* `--' delimits the end of the option list. */ if (argv[i][1] == '-') { i++; break; } p = lookup(argv[i], &is_ambiguous); if (p == NULL) { archdep_startup_log_error("Unknown option '%s'.\n", argv[i]); return -1; } if (is_ambiguous) { archdep_startup_log_error("Option '%s' is ambiguous.\n", argv[i]); return -1; } if (p->need_arg && i >= *argc - 1) { archdep_startup_log_error("Option '%s' requires a parameter.\n", p->name); return -1; } switch(p->type) { case SET_RESOURCE: if (p->need_arg) retval = resources_set_value_string(p->resource_name, argv[i + 1]); else retval = resources_set_value(p->resource_name, p->resource_value); break; case CALL_FUNCTION: retval = p->set_func(p->need_arg ? argv[i+1] : NULL, p->extra_param); break; default: archdep_startup_log_error("Invalid type for option '%s'.\n", p->name); return -1; } if (retval < 0) { if (p->need_arg) archdep_startup_log_error("Argument '%s' not valid for option `%s'.\n", argv[i + 1], p->name); else archdep_startup_log_error("Option '%s' not valid.\n", p->name); return -1; } i += p->need_arg ? 2 : 1; } else break; } /* Remove all the parsed options. */ { int j; for (j = 1; j <= (*argc - i); j++) argv[j] = argv[i + j - 1]; *argc -= i; } return 0; }
int init_resources(void) { if (resources_init(machine_get_name())) { archdep_startup_log_error("Cannot initialize resource handling.\n"); return -1; } if (log_resources_init() < 0) { init_resource_fail("log"); return -1; } if (sysfile_resources_init() < 0) { init_resource_fail("system file locator"); return -1; } if (autostart_resources_init() < 0) { init_resource_fail("autostart"); return -1; } if (romset_resources_init() < 0) { init_resource_fail("romset"); return -1; } if (ui_resources_init() < 0) { init_resource_fail("UI"); return -1; } if (fliplist_resources_init() < 0) { init_resource_fail("flip list"); return -1; } if (file_system_resources_init() < 0) { init_resource_fail("file system"); return -1; } /* Initialize file system device-specific resources. */ if (fsdevice_resources_init() < 0) { init_resource_fail("file system device"); return -1; } if (disk_image_resources_init() < 0) { init_resource_fail("disk image"); return -1; } if (event_resources_init() < 0) { init_resource_fail("event"); return -1; } if (debug_resources_init() < 0) { init_resource_fail("debug"); return -1; } if (machine_common_resources_init() < 0) { init_resource_fail("machine common"); return -1; } if (machine_resources_init() < 0) { init_resource_fail("machine"); return -1; } if (joystick_init_resources() < 0) { init_resource_fail("joystick"); return -1; } if (ram_resources_init() < 0) { init_resource_fail("RAM"); return -1; } if (gfxoutput_resources_init() < 0) { init_resource_fail("GFXOUTPUT"); return -1; } if (network_resources_init() < 0) { init_resource_fail("network"); return -1; } if (monitor_resources_init() < 0) { init_resource_fail("monitor"); return -1; } #ifdef HAVE_NETWORK if (monitor_network_resources_init() < 0) { init_resource_fail("MONITOR_NETWORK"); return -1; } #endif return 0; }
static void init_resource_fail(const char *module) { archdep_startup_log_error("Cannot initialize %s resources.\n", module); }
int init_cmdline_options(void) { if (cmdline_init()) { archdep_startup_log_error("Cannot initialize command-line handling.\n"); return -1; } if (log_cmdline_options_init() < 0) { init_cmdline_options_fail("log"); return -1; } if (initcmdline_init() < 0) { init_cmdline_options_fail("main"); return -1; } if (sysfile_cmdline_options_init() < 0) { init_cmdline_options_fail("system file locator"); return -1; } if (!video_disabled_mode && ui_cmdline_options_init() < 0) { init_cmdline_options_fail("UI"); return -1; } if (machine_class != VICE_MACHINE_VSID) { if (autostart_cmdline_options_init() < 0) { init_resource_fail("autostart"); return -1; } if (romset_cmdline_options_init() < 0) { init_cmdline_options_fail("romset"); return -1; } if (fliplist_cmdline_options_init() < 0) { init_cmdline_options_fail("flip list"); return -1; } if (file_system_cmdline_options_init() < 0) { init_cmdline_options_fail("attach"); return -1; } if (disk_image_cmdline_options_init() < 0) { init_cmdline_options_fail("disk image"); return -1; } if (event_cmdline_options_init() < 0) { init_cmdline_options_fail("event"); return -1; } } if (monitor_cmdline_options_init() < 0) { init_cmdline_options_fail("monitor"); return -1; } #ifdef DEBUG if (debug_cmdline_options_init() < 0) { init_cmdline_options_fail("debug"); return -1; } #endif if (machine_common_cmdline_options_init() < 0) { init_cmdline_options_fail("machine common"); return -1; } if (machine_cmdline_options_init() < 0) { init_cmdline_options_fail("machine"); return -1; } if (machine_class != VICE_MACHINE_VSID) { if (fsdevice_cmdline_options_init() < 0) { init_cmdline_options_fail("file system"); return -1; } } if (!video_disabled_mode && joystick_init_cmdline_options() < 0) { init_cmdline_options_fail("joystick"); return -1; } if (machine_class != VICE_MACHINE_VSID) { if (kbdbuf_cmdline_options_init() < 0) { init_cmdline_options_fail("keyboard"); return -1; } if (ram_cmdline_options_init() < 0) { init_cmdline_options_fail("RAM"); return -1; } if (gfxoutput_cmdline_options_init() < 0) { init_cmdline_options_fail("GFXOUTPUT"); return -1; } } #ifdef HAVE_NETWORK if (monitor_network_cmdline_options_init() < 0) { init_cmdline_options_fail("MONITOR_NETWORK"); return -1; } #endif return 0; }
static void init_cmdline_options_fail(const char *module) { archdep_startup_log_error("Cannot initialize %s command-line options.\n", module); }
int init_resources(void) { DBG(("init_resources\n")); if (resources_init(machine_get_name())) { archdep_startup_log_error("Cannot initialize resource handling.\n"); return -1; } if (log_resources_init() < 0) { init_resource_fail("log"); return -1; } if (sysfile_resources_init() < 0) { init_resource_fail("system file locator"); return -1; } if (romset_resources_init() < 0) { init_resource_fail("romset"); return -1; } if (ui_resources_init() < 0) { init_resource_fail("UI"); return -1; } if (machine_common_resources_init() < 0) { init_resource_fail("machine common"); return -1; } if (vsync_resources_init() < 0) { init_resource_fail("vsync"); return -1; } if (sound_resources_init() < 0) { init_resource_fail("sound"); return -1; } if (keyboard_resources_init() < 0) { init_resource_fail("keyboard"); return -1; } if (machine_video_resources_init() < 0) { init_resource_fail("machine video"); return -1; } if (machine_resources_init() < 0) { init_resource_fail("machine"); return -1; } if (ram_resources_init() < 0) { init_resource_fail("RAM"); return -1; } if (monitor_resources_init() < 0) { init_resource_fail("monitor"); return -1; } #ifdef HAVE_NETWORK if (monitor_network_resources_init() < 0) { init_resource_fail("MONITOR_NETWORK"); return -1; } #endif return 0; }
int init_cmdline_options(void) { if (cmdline_init()) { archdep_startup_log_error("Cannot initialize command-line handling.\n"); return -1; } if (log_cmdline_options_init() < 0) { init_cmdline_options_fail("log"); return -1; } if (initcmdline_init() < 0) { init_cmdline_options_fail("main"); return -1; } if (sysfile_cmdline_options_init() < 0) { init_cmdline_options_fail("system file locator"); return -1; } if (!video_disabled_mode && ui_cmdline_options_init() < 0) { init_cmdline_options_fail("UI"); return -1; } if (machine_class != VICE_MACHINE_VSID) { if (romset_cmdline_options_init() < 0) { init_cmdline_options_fail("romset"); return -1; } } if (monitor_cmdline_options_init() < 0) { init_cmdline_options_fail("monitor"); return -1; } if (machine_common_cmdline_options_init() < 0) { init_cmdline_options_fail("machine common"); return -1; } if (vsync_cmdline_options_init() < 0) { init_cmdline_options_fail("vsync"); return -1; } if (sound_cmdline_options_init() < 0) { init_cmdline_options_fail("sound"); return -1; } if (keyboard_cmdline_options_init() < 0) { init_cmdline_options_fail("keyboard"); return -1; } if (video_cmdline_options_init() < 0) { init_cmdline_options_fail("video"); return -1; } if (machine_cmdline_options_init() < 0) { init_cmdline_options_fail("machine"); return -1; } if (machine_class != VICE_MACHINE_VSID) { if (ram_cmdline_options_init() < 0) { init_cmdline_options_fail("RAM"); return -1; } } #ifdef HAVE_NETWORK if (monitor_network_cmdline_options_init() < 0) { init_cmdline_options_fail("MONITOR_NETWORK"); return -1; } #endif return 0; }
/* This is the main program entry point. Call this from `main()'. */ int main_program(int argc, char **argv) { int i, n; char *program_name; char *tmp; int ishelp = 0; lib_init_rand(); /* Check for -config and -console before initializing the user interface. -config => use specified configuration file -console => no user interface */ DBG(("main:early cmdline(argc:%d)\n", argc)); for (i = 0; i < argc; i++) { #ifndef __OS2__ if ((!strcmp(argv[i], "-console")) || (!strcmp(argv[i], "--console"))) { console_mode = 1; video_disabled_mode = 1; } else #endif if ((!strcmp(argv[i], "-config")) || (!strcmp(argv[i], "--config"))) { if ((i + 1) < argc) { vice_config_file = lib_stralloc(argv[++i]); } } else if ((!strcmp(argv[i], "-help")) || (!strcmp(argv[i], "--help")) || (!strcmp(argv[i], "-h")) || (!strcmp(argv[i], "-?"))) { ishelp = 1; } } #ifdef ENABLE_NLS /* gettext stuff, not needed in Gnome, but here I can overrule the default locale path */ setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, NLS_LOCALEDIR); textdomain(PACKAGE); #endif DBG(("main:archdep_init(argc:%d)\n", argc)); if (archdep_init(&argc, argv) != 0) { archdep_startup_log_error("archdep_init failed.\n"); return -1; } #ifndef __LIBRETRO__ //retro fix atexit in other thread if (atexit(main_exit) < 0) { archdep_startup_log_error("atexit failed.\n"); return -1; } #endif maincpu_early_init(); machine_setup_context(); drive_setup_context(); machine_early_init(); /* Initialize system file locator. */ sysfile_init(machine_name); gfxoutput_early_init(ishelp); if ((init_resources() < 0) || (init_cmdline_options() < 0)) { return -1; } /* Set factory defaults. */ if (resources_set_defaults() < 0) { archdep_startup_log_error("Cannot set defaults.\n"); return -1; } /* Initialize the user interface. `ui_init()' might need to handle the command line somehow, so we call it before parsing the options. (e.g. under X11, the `-display' option is handled independently). */ DBG(("main:ui_init(argc:%d)\n", argc)); if (!console_mode && ui_init(&argc, argv) < 0) { archdep_startup_log_error("Cannot initialize the UI.\n"); return -1; } #ifdef HAS_TRANSLATION /* set the default arch language */ translate_arch_language_init(); #endif if (!ishelp) { /* Load the user's default configuration file. */ if (resources_load(NULL) < 0) { /* The resource file might contain errors, and thus certain resources might have been initialized anyway. */ if (resources_set_defaults() < 0) { archdep_startup_log_error("Cannot set defaults.\n"); return -1; } } } if (log_init() < 0) { archdep_startup_log_error("Cannot startup logging system.\n"); } DBG(("main:initcmdline_check_args(argc:%d)\n", argc)); if (initcmdline_check_args(argc, argv) < 0) { return -1; } program_name = archdep_program_name(); /* VICE boot sequence. */ log_message(LOG_DEFAULT, " "); #ifdef USE_SVN_REVISION log_message(LOG_DEFAULT, "*** VICE Version %s, rev %s ***", VERSION, VICE_SVN_REV_STRING); #else log_message(LOG_DEFAULT, "*** VICE Version %s ***", VERSION); #endif log_message(LOG_DEFAULT, "OS compiled for: %s", platform_get_compile_time_os()); log_message(LOG_DEFAULT, "GUI compiled for: %s", platform_get_ui()); log_message(LOG_DEFAULT, "CPU compiled for: %s", platform_get_compile_time_cpu()); log_message(LOG_DEFAULT, "Compiler used: %s", platform_get_compile_time_compiler()); log_message(LOG_DEFAULT, "Current OS: %s", platform_get_runtime_os()); log_message(LOG_DEFAULT, "Current CPU: %s", platform_get_runtime_cpu()); log_message(LOG_DEFAULT, " "); if (machine_class == VICE_MACHINE_VSID) { log_message(LOG_DEFAULT, "Welcome to %s, the free portable SID Player.", program_name); } else { log_message(LOG_DEFAULT, "Welcome to %s, the free portable %s Emulator.", program_name, machine_name); } log_message(LOG_DEFAULT, " "); log_message(LOG_DEFAULT, "Current VICE team members:"); tmp = lib_malloc(80); n = 0; *tmp = 0; for (i = 0; core_team[i].name; i++) { n += strlen(core_team[i].name); if (n > 74) { log_message(LOG_DEFAULT, tmp); n = 0; *tmp = 0; } strcat(tmp, core_team[i].name); if (core_team[i + 1].name) { strcat(tmp, ", "); } else { strcat(tmp, "."); log_message(LOG_DEFAULT, tmp); } } lib_free(tmp); log_message(LOG_DEFAULT, " "); log_message(LOG_DEFAULT, "This is free software with ABSOLUTELY NO WARRANTY."); log_message(LOG_DEFAULT, "See the \"About VICE\" command for more info."); log_message(LOG_DEFAULT, " "); lib_free(program_name); /* Complete the GUI initialization (after loading the resources and parsing the command-line) if necessary. */ if (!console_mode && ui_init_finish() < 0) { return -1; } if (!console_mode && video_init() < 0) { return -1; } if (initcmdline_check_psid() < 0) { return -1; } if (init_main() < 0) { return -1; } initcmdline_check_attach(); init_done = 1; #ifdef __LIBRETRO__ #ifndef NO_LIBCO resources_save("./vicerc0"); co_switch(mainThread); #endif #endif /* Let's go... */ log_message(LOG_DEFAULT, "Main CPU: starting at ($FFFC)."); maincpu_mainloop(); log_error(LOG_DEFAULT, "perkele!"); return 0; }
int main_program(int argc, char **argv) { int i; char *program_name; /* Check for -config, -console and -vsid before initializing the user interface. -config => use specified configuration file -console => no user interface -vsid => user interface in separate process */ console_mode = 0; video_disabled_mode = 0; vsid_mode=0; machine_class = VICE_MACHINE_C64; //machine_class = VICE_MACHINE_CBM6x0; archdep_init(&argc, argv); if (atexit(emulator_shutdown) < 0) { archdep_startup_log_error("atexit"); return -1; } maincpu_early_init(); machine_setup_context(); drive_setup_context(); machine_early_init(); /* Initialize system file locator. */ sysfile_init(machine_name); gfxoutput_early_init(); if (init_resources() < 0 || init_cmdline_options() < 0) return -1; /* Set factory defaults. */ if (resources_set_defaults() < 0) { archdep_startup_log_error("Cannot set defaults.\n"); return -1; } /* Initialize the user interface. `ui_init()' might need to handle the command line somehow, so we call it before parsing the options. (e.g. under X11, the `-display' option is handled independently). */ if (!console_mode && ui_init(&argc, argv) < 0) { archdep_startup_log_error("Cannot initialize the UI.\n"); return -1; } if (initcmdline_check_args(argc, argv) < 0) return -1; program_name = archdep_program_name(); /* VICE boot sequence. */ #if 0 log_message(LOG_DEFAULT, "*** VICE Version %s ***", VERSION); log_message(LOG_DEFAULT, "OS compiled for: %s", platform_get_compile_time_os()); log_message(LOG_DEFAULT, "GUI compiled for: %s", platform_get_ui()); log_message(LOG_DEFAULT, "CPU compiled for: %s", platform_get_compile_time_cpu()); log_message(LOG_DEFAULT, "Compiler used: %s", platform_get_compile_time_compiler()); log_message(LOG_DEFAULT, "Current OS: %s", platform_get_runtime_os()); log_message(LOG_DEFAULT, "Current CPU: %s", platform_get_runtime_cpu()); log_message(LOG_DEFAULT, " "); log_message(LOG_DEFAULT, "Welcome to %s, the free portable %s Emulator.", program_name, machine_name); log_message(LOG_DEFAULT, " "); log_message(LOG_DEFAULT, "Current VICE team members:"); log_message(LOG_DEFAULT, "A. Boose, D. Lem, T. Biczo, A. Dehmel, T. Bretz, A. Matthies,"); log_message(LOG_DEFAULT, "M. Pottendorfer, M. Brenner, S. Trikaliotis, M. van den Heuvel,"); log_message(LOG_DEFAULT, "C. Vogelgsang, F. Gennari, H. Nuotio, D. Kahlin, A. Lankila."); log_message(LOG_DEFAULT, " "); log_message(LOG_DEFAULT, "This is free software with ABSOLUTELY NO WARRANTY."); log_message(LOG_DEFAULT, "See the \"About VICE\" command for more info."); log_message(LOG_DEFAULT, " "); #endif lib_free(program_name); /* Complete the GUI initialization (after loading the resources and parsing the command-line) if necessary. */ if (!console_mode && ui_init_finish() < 0) return -1; if (!console_mode && video_init() < 0) return -1; if (initcmdline_check_psid() < 0) return -1; if (init_main() < 0) return -1; initcmdline_check_attach(); init_done = 1; /* Let's go... */ #ifdef CELL_DEBUG printf("Main CPU: starting at ($FFFC).\n"); #endif maincpu_mainloop(); #ifdef CELL_DEBUG printf("perkele!\n"); #endif return 0; }