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