void DoFCEUExit(void) { /* Wolfenstein 3D had cute exit messages. */ char *emsg[4]={"Are you sure you want to leave? I'll become lonely!", "If you exit, I'll... EAT YOUR MOUSE.", "You can never really exit, you know.", "E-x-i-t?" }; if(exiting) /* Eh, oops. I'll need to try to fix this later. */ return; StopSound(); if(goptions & GOO_CONFIRMEXIT) if(IDYES != MessageBox(hAppWnd,emsg[rand()&3],"Exit FCE Ultra?",MB_ICONQUESTION|MB_YESNO)) return; exiting=1; if(GI) { GI=0; RedoMenuGI(GI); #ifdef FCEUDEF_DEBUGGER KillDebugger(); #endif FCEUI_CloseGame(); //GI=0; //RedoMenuGI(GI); } }
/** * Closes a game. Frees memory, and deinitializes the drivers. */ int CloseGame() { std::string filename; if(!isloaded) { return(0); } int state_to_save; g_config->getOption("SDL.AutoSaveState", &state_to_save); if (state_to_save < 10 && state_to_save >= 0){ FCEUI_SelectState(state_to_save, 0); FCEUI_SaveState(NULL, false); } FCEUI_CloseGame(); DriverKill(); isloaded = 0; GameInfo = 0; g_config->getOption("SDL.Sound.RecordFile", &filename); if(filename.size()) { FCEUI_EndWaveRecord(); } InputUserActiveFix(); return(1); }
static int cmd_exit() { FCEUI_CloseGame(); return 1; }
bool LoadRom(const char* fname, int size) { bool biosError = false; bool rom_loaded = false; ResetGameLoaded(); FCEUI_CloseGame(); GameInfo = new FCEUGI(); memset(GameInfo, 0, sizeof(FCEUGI)); GameInfo->filename = strdup(fname); GameInfo->archiveCount = 0; // Set some default values #define AUDIO_OUT_RATE (48300) // We want slightly more than 48kHz to make sure we're blocking on audio rather than video. GameInfo->soundchan = 2; GameInfo->soundrate = AUDIO_OUT_RATE; GameInfo->name=0; GameInfo->type=GIT_CART; GameInfo->vidsys=GIV_USER; GameInfo->input[0]=GameInfo->input[1]=SI_UNSET; GameInfo->inputfc=SIFC_UNSET; GameInfo->cspecial=SIS_NONE; //Set internal sound information FCEUI_Sound(AUDIO_OUT_RATE); FCEUFILE * fceufp = new FCEUFILE(); fceufp->size = size; fceufp->filename = fname; fceufp->mode = FCEUFILE::READ; // read only EMUFILE_MEMFILE *fceumem = new EMUFILE_MEMFILE(nesrom, size); fceufp->stream = fceumem; rom_loaded = iNESLoad(fname, fceufp, 1); if(!rom_loaded) { rom_loaded = UNIFLoad(fname, fceufp); } if(!rom_loaded) { rom_loaded = NSFLoad(fname, fceufp); } if(!rom_loaded) { /* // read FDS BIOS into FDSBIOS - should be 8192 bytes if (FDSBIOS[1] == 0) { size_t biosSize = 0; char * tmpbuffer = (char *) memalign(32, 64 * 1024); char filepath[1024]; sprintf (filepath, "%s%s/disksys.rom", pathPrefix[GCSettings.LoadMethod], APPFOLDER); biosSize = LoadFile(tmpbuffer, filepath, 0, SILENT); if(biosSize == 0 && strlen(appPath) > 0) { sprintf (filepath, "%s/disksys.rom", appPath); biosSize = LoadFile(tmpbuffer, filepath, 0, SILENT); } if (biosSize == 8192) { memcpy(FDSBIOS, tmpbuffer, 8192); } else { biosError = true; if (biosSize > 0) ErrorPrompt("FDS BIOS file is invalid!"); else ErrorPrompt("FDS BIOS file not found!"); } free(tmpbuffer); } if (FDSBIOS[1] != 0) { rom_loaded = FDSLoad(current_rom, fceufp); }*/ } delete fceufp; if (rom_loaded) { GetFileBase(GameInfo->filename); FCEU_ResetVidSys(); if(GameInfo->type!=GIT_NSF) { if(FSettings.GameGenie) { OpenGenie(); } } PowerNES(); if(GameInfo->type!=GIT_NSF) { FCEU_LoadGamePalette(); FCEU_LoadGameCheats(0); FCEUI_DisableAllCheats(); } FCEU_ResetPalette(); FCEU_ResetMessages(); return 1; } else { delete GameInfo; GameInfo = 0; if(!biosError) FCEU_printf("Invalid game file: %s!",fname); rom_loaded = false; return 0; } }