예제 #1
0
파일: main.c 프로젝트: ficoos/fceu-next
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);
 }
}
예제 #2
0
파일: sdl.cpp 프로젝트: RenaKunisaki/fceux
/**
 * 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);
}
예제 #3
0
static int cmd_exit() {
	FCEUI_CloseGame();
	return 1;
}
예제 #4
0
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;
	}
}