int S9xOpenROM (const char *rom_filename) { uint32 flags; bool8 loaded; if (gui_config->rom_loaded) { S9xAutoSaveSRAM (); } #ifdef NETPLAY_SUPPORT S9xNetplayDisconnect (); #endif flags = CPU.Flags; loaded = FALSE; if (Settings.Multi) loaded = Memory.LoadMultiCart (Settings.CartAName, Settings.CartBName); else if (rom_filename) loaded = Memory.LoadROM (rom_filename); Settings.StopEmulation = !loaded; if (!loaded && rom_filename) { char dir [_MAX_DIR + 1]; char drive [_MAX_DRIVE + 1]; char name [_MAX_FNAME + 1]; char ext [_MAX_EXT + 1]; char fname [_MAX_PATH + 1]; _splitpath (rom_filename, drive, dir, name, ext); _makepath (fname, drive, dir, name, ext); strcpy (fname, S9xGetDirectory (ROM_DIR)); strcat (fname, SLASH_STR); strcat (fname, name); if (ext [0]) { strcat (fname, "."); strcat (fname, ext); } _splitpath (fname, drive, dir, name, ext); _makepath (fname, drive, dir, name, ext); if ((Settings.StopEmulation = !Memory.LoadROM (fname))) { fprintf (stderr, _("Error opening: %s\n"), rom_filename); loaded = FALSE; } else loaded = TRUE; } if (loaded) { Memory.LoadSRAM (S9xGetFilename (".srm", SRAM_DIR)); S9xLoadCheatFile (S9xGetFilename (".cht", CHEAT_DIR)); for (unsigned int i = 0; i < Cheat.num_cheats; i++) { if (Cheat.c[i].enabled) { /* RAM is fresh, so we need to clean out old saved values */ Cheat.c[i].saved = FALSE; S9xApplyCheat (i); } } } else { S9xReset (); CPU.Flags = flags; Settings.Paused = 1; S9xNoROMLoaded (); top_level->refresh (); return 1; } CPU.Flags = flags; S9xROMLoaded (); return 0; }
int main (int argc, char *argv[]) { struct sigaction sig_callback; g_thread_init (NULL); gdk_threads_init (); gtk_init (&argc, &argv); bindtextdomain (GETTEXT_PACKAGE, SNES9XLOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); ZeroMemory (&Settings, sizeof (Settings)); /* Allow original config file for backend settings */ S9xLoadConfigFiles (argv, argc); /* Perform our config here */ gui_config = new Snes9xConfig (); S9xInitInputDevices (); gui_config->load_config_file (); char *rom_filename = S9xParseArgs (argv, argc); S9xReportControllers (); if (!Memory.Init () || !S9xInitAPU ()) exit (3); g_set_application_name ("Snes9x"); top_level = new Snes9xWindow (gui_config); /* If we're going to fullscreen, do it before showing window to avoid flicker. */ if ((gui_config->full_screen_on_open && rom_filename) || (gui_config->fullscreen)) gtk_window_fullscreen (top_level->get_window ()); top_level->show (); S9xInitDisplay (argc, argv); Memory.PostRomInitFunc = S9xPostRomInit; S9xPortSoundInit (); gui_config->reconfigure (); top_level->update_accels (); Settings.Paused = TRUE; syncing = 0; idle_func_id = g_idle_add_full (IDLE_FUNC_PRIORITY, S9xIdleFunc, NULL, NULL); g_timeout_add (10000, S9xScreenSaverCheckFunc, NULL); S9xNoROMLoaded (); if (rom_filename) { if (S9xOpenROM (rom_filename) && gui_config->full_screen_on_open) gtk_window_unfullscreen (top_level->get_window()); } memset (&sig_callback, 0, sizeof (struct sigaction)); sig_callback.sa_handler = S9xTerm; sigaction (15 /* SIGTERM */, &sig_callback, NULL); sigaction (3 /* SIGQUIT */, &sig_callback, NULL); sigaction (2 /* SIGINT */, &sig_callback, NULL); if (gui_config->fullscreen) { gui_config->fullscreen = 0; needs_fullscreening = 1; } #ifdef USE_JOYSTICK gui_config->flush_joysticks (); #endif gtk_window_present (top_level->get_window ()); gdk_threads_lock (); gtk_main (); return 0; }
int S9xOpenROM (const char *rom_filename) { uint32 flags; bool8 loaded; if (gui_config->rom_loaded) { S9xAutoSaveSRAM (); } #ifdef NETPLAY_SUPPORT S9xNetplayDisconnect (); #endif flags = CPU.Flags; loaded = FALSE; if (Settings.Multi) loaded = Memory.LoadMultiCart (Settings.CartAName, Settings.CartBName); else if (rom_filename) loaded = Memory.LoadROM (rom_filename); Settings.StopEmulation = !loaded; if (!loaded && rom_filename) { char dir [_MAX_DIR + 1]; char drive [_MAX_DRIVE + 1]; char name [_MAX_FNAME + 1]; char ext [_MAX_EXT + 1]; char fname [_MAX_PATH + 1]; _splitpath (rom_filename, drive, dir, name, ext); _makepath (fname, drive, dir, name, ext); strcpy (fname, S9xGetDirectory (ROM_DIR)); strcat (fname, SLASH_STR); strcat (fname, name); if (ext [0]) { strcat (fname, "."); strcat (fname, ext); } _splitpath (fname, drive, dir, name, ext); _makepath (fname, drive, dir, name, ext); if ((Settings.StopEmulation = !Memory.LoadROM (fname))) { fprintf (stderr, _("Error opening: %s\n"), rom_filename); loaded = FALSE; } else loaded = TRUE; } if (loaded) { Memory.LoadSRAM (S9xGetFilename (".srm", SRAM_DIR)); } else { CPU.Flags = flags; Settings.Paused = 1; S9xNoROMLoaded (); top_level->refresh (); return 1; } CPU.Flags = flags; if (stateMan.init (gui_config->rewind_buffer_size * 1024 * 1024)) { printf ("Using rewind buffer of %uMB\n", gui_config->rewind_buffer_size); } S9xROMLoaded (); return 0; }