Add core option: RAM power up state
This commit is contained in:
@@ -718,6 +718,7 @@ void retro_set_environment(retro_environment_t cb)
|
|||||||
{ "fceumm_zapper_mode", "Zapper Mode; lightgun|mouse" },
|
{ "fceumm_zapper_mode", "Zapper Mode; lightgun|mouse" },
|
||||||
{ "fceumm_show_crosshair", "Show Crosshair; enabled|disabled" },
|
{ "fceumm_show_crosshair", "Show Crosshair; enabled|disabled" },
|
||||||
{ "fceumm_overclocking", "Overclocking; disabled|2x-Postrender|2x-VBlank" },
|
{ "fceumm_overclocking", "Overclocking; disabled|2x-Postrender|2x-VBlank" },
|
||||||
|
{ "fceumm_ramstate", "RAM power up state (Restart); fill $ff|fill $00|random" },
|
||||||
{ NULL, NULL },
|
{ NULL, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1841,6 +1842,7 @@ static char slash = '/';
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern uint32_t iNESGameCRC32;
|
extern uint32_t iNESGameCRC32;
|
||||||
|
extern int option_ramstate;
|
||||||
|
|
||||||
bool retro_load_game(const struct retro_game_info *game)
|
bool retro_load_game(const struct retro_game_info *game)
|
||||||
{
|
{
|
||||||
@@ -1903,10 +1905,25 @@ bool retro_load_game(const struct retro_game_info *game)
|
|||||||
|
|
||||||
struct retro_memory_descriptor descs[64];
|
struct retro_memory_descriptor descs[64];
|
||||||
struct retro_memory_map mmaps;
|
struct retro_memory_map mmaps;
|
||||||
|
struct retro_variable var = {0};
|
||||||
|
|
||||||
if (!game)
|
if (!game)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
var.value = 0;
|
||||||
|
var.key = "fceumm_ramstate";
|
||||||
|
|
||||||
|
/* set this variable before calling PowerNES() */
|
||||||
|
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
|
||||||
|
{
|
||||||
|
if (!strcmp(var.value, "random"))
|
||||||
|
option_ramstate = 2;
|
||||||
|
else if (!strcmp(var.value, "fill $00"))
|
||||||
|
option_ramstate = 1;
|
||||||
|
else
|
||||||
|
option_ramstate = 0;
|
||||||
|
}
|
||||||
|
|
||||||
PowerNES();
|
PowerNES();
|
||||||
check_system_specs();
|
check_system_specs();
|
||||||
#if defined(_3DS)
|
#if defined(_3DS)
|
||||||
|
|||||||
11
src/fceu.c
11
src/fceu.c
@@ -381,6 +381,8 @@ void ResetNES(void)
|
|||||||
X6502_Reset();
|
X6502_Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int option_ramstate = 0;
|
||||||
|
|
||||||
void FCEU_MemoryRand(uint8 *ptr, uint32 size)
|
void FCEU_MemoryRand(uint8 *ptr, uint32 size)
|
||||||
{
|
{
|
||||||
int x = 0;
|
int x = 0;
|
||||||
@@ -394,7 +396,14 @@ void FCEU_MemoryRand(uint8 *ptr, uint32 size)
|
|||||||
*ptr = (x & 1) ? 0x55 : 0xAA; /* F-15 Sity War HISCORE is screwed... */
|
*ptr = (x & 1) ? 0x55 : 0xAA; /* F-15 Sity War HISCORE is screwed... */
|
||||||
/* 1942 SCORE/HISCORE is screwed... */
|
/* 1942 SCORE/HISCORE is screwed... */
|
||||||
#endif
|
#endif
|
||||||
*ptr = 0xFF;
|
uint8_t v;
|
||||||
|
switch (option_ramstate)
|
||||||
|
{
|
||||||
|
case 0: v = 0xff; break;
|
||||||
|
case 1: v = 0x00; break;
|
||||||
|
case 2: v = (uint8_t)rand(); break;
|
||||||
|
}
|
||||||
|
*ptr = v;
|
||||||
x++;
|
x++;
|
||||||
size--;
|
size--;
|
||||||
ptr++;
|
ptr++;
|
||||||
|
|||||||
Reference in New Issue
Block a user