Auto-disable "Game Genie ROM" feature when no "gg.rom" file is found.
This commit is contained in:
parent
2f43547607
commit
ef132c44e4
|
@ -340,40 +340,48 @@ static uint8 *GENIEROM = 0;
|
|||
|
||||
void FixGenieMap(void);
|
||||
|
||||
// Called when a game(file) is opened successfully.
|
||||
void FCEU_OpenGenie(void) {
|
||||
// Called when a game(file) is opened successfully. Returns TRUE on error.
|
||||
bool FCEU_OpenGenie(void)
|
||||
{
|
||||
FILE *fp;
|
||||
int x;
|
||||
|
||||
if (!GENIEROM) {
|
||||
if (!GENIEROM)
|
||||
{
|
||||
char *fn;
|
||||
|
||||
if (!(GENIEROM = (uint8*)FCEU_malloc(4096 + 1024))) return;
|
||||
if (!(GENIEROM = (uint8*)FCEU_malloc(4096 + 1024)))
|
||||
return true;
|
||||
|
||||
fn = strdup(FCEU_MakeFName(FCEUMKF_GGROM, 0, 0).c_str());
|
||||
fp = FCEUD_UTF8fopen(fn, "rb");
|
||||
if (!fp) {
|
||||
FCEU_PrintError("Error opening Game Genie ROM image!");
|
||||
if (!fp)
|
||||
{
|
||||
FCEU_PrintError("Error opening Game Genie ROM image!\nIt should be named \"gg.rom\"!");
|
||||
free(GENIEROM);
|
||||
GENIEROM = 0;
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
if (fread(GENIEROM, 1, 16, fp) != 16) {
|
||||
if (fread(GENIEROM, 1, 16, fp) != 16)
|
||||
{
|
||||
grerr:
|
||||
FCEU_PrintError("Error reading from Game Genie ROM image!");
|
||||
free(GENIEROM);
|
||||
GENIEROM = 0;
|
||||
fclose(fp);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
if (GENIEROM[0] == 0x4E) { /* iNES ROM image */
|
||||
if (GENIEROM[0] == 0x4E)
|
||||
{
|
||||
/* iNES ROM image */
|
||||
if (fread(GENIEROM, 1, 4096, fp) != 4096)
|
||||
goto grerr;
|
||||
if (fseek(fp, 16384 - 4096, SEEK_CUR))
|
||||
goto grerr;
|
||||
if (fread(GENIEROM + 4096, 1, 256, fp) != 256)
|
||||
goto grerr;
|
||||
} else {
|
||||
} else
|
||||
{
|
||||
if (fread(GENIEROM + 16, 1, 4352 - 16, fp) != (4352 - 16))
|
||||
goto grerr;
|
||||
}
|
||||
|
@ -381,10 +389,13 @@ void FCEU_OpenGenie(void) {
|
|||
|
||||
/* Workaround for the FCE Ultra CHR page size only being 1KB */
|
||||
for (x = 0; x < 4; x++)
|
||||
{
|
||||
memcpy(GENIEROM + 4096 + (x << 8), GENIEROM + 4096, 256);
|
||||
}
|
||||
}
|
||||
|
||||
geniestage = 1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Called when a game is closed. */
|
||||
|
|
|
@ -89,6 +89,6 @@ extern int geniestage;
|
|||
|
||||
void FCEU_GeniePower(void);
|
||||
|
||||
void FCEU_OpenGenie(void);
|
||||
bool FCEU_OpenGenie(void);
|
||||
void FCEU_CloseGenie(void);
|
||||
void FCEU_KillGenie(void);
|
||||
|
|
|
@ -486,8 +486,18 @@ FCEUGI *FCEUI_LoadGameVirtual(const char *name, int OverwriteVidMode, bool silen
|
|||
FCEU_ResetVidSys();
|
||||
|
||||
if (GameInfo->type != GIT_NSF)
|
||||
{
|
||||
if (FSettings.GameGenie)
|
||||
FCEU_OpenGenie();
|
||||
{
|
||||
if (FCEU_OpenGenie())
|
||||
{
|
||||
FCEUI_SetGameGenie(false);
|
||||
#ifdef WIN32
|
||||
genie = 0;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
PowerNES();
|
||||
|
||||
if (GameInfo->type != GIT_NSF)
|
||||
|
|
Loading…
Reference in New Issue