mirror of
https://github.com/FunKey-Project/picodrive-irixxxx.git
synced 2026-02-04 14:05:37 +01:00
Merge pull request #17 from AkimanBengus/master
Add core option to force the Region FPS (NTSC, PAL)
This commit is contained in:
commit
8eaad80c18
@ -244,7 +244,7 @@ enum media_type_e PicoLoadMedia(const char *filename,
|
||||
|
||||
rom = pm_open(rom_fname);
|
||||
if (rom == NULL) {
|
||||
lprintf("Failed to open ROM");
|
||||
lprintf("Failed to open ROM\n");
|
||||
media_type = PM_ERROR;
|
||||
goto out;
|
||||
}
|
||||
@ -252,9 +252,9 @@ enum media_type_e PicoLoadMedia(const char *filename,
|
||||
ret = PicoCartLoad(rom, &rom_data, &rom_size, (PicoAHW & PAHW_SMS) ? 1 : 0);
|
||||
pm_close(rom);
|
||||
if (ret != 0) {
|
||||
if (ret == 2) lprintf("Out of memory");
|
||||
else if (ret == 3) lprintf("Read failed");
|
||||
else lprintf("PicoCartLoad() failed.");
|
||||
if (ret == 2) lprintf("Out of memory\n");
|
||||
else if (ret == 3) lprintf("Read failed\n");
|
||||
else lprintf("PicoCartLoad() failed.\n");
|
||||
media_type = PM_ERROR;
|
||||
goto out;
|
||||
}
|
||||
|
||||
30
pico/pico.c
30
pico/pico.c
@ -12,12 +12,13 @@
|
||||
|
||||
struct Pico Pico;
|
||||
int PicoOpt;
|
||||
int PicoSkipFrame; // skip rendering frame?
|
||||
int PicoPad[2]; // Joypads, format is MXYZ SACB RLDU
|
||||
int PicoPadInt[2]; // internal copy
|
||||
int PicoAHW; // active addon hardware: PAHW_*
|
||||
int PicoQuirks; // game-specific quirks
|
||||
int PicoRegionOverride; // override the region detection 0: Auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe
|
||||
int PicoSkipFrame; // skip rendering frame?
|
||||
int PicoPad[2]; // Joypads, format is MXYZ SACB RLDU
|
||||
int PicoPadInt[2]; // internal copy
|
||||
int PicoAHW; // active addon hardware: PAHW_*
|
||||
int PicoQuirks; // game-specific quirks
|
||||
int PicoRegionOverride; // override the region detection 0: Auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe
|
||||
int PicoRegionFPSOverride; // override the refresh rate of the region 0: Auto, 1: NTSC, 2: PAL
|
||||
int PicoAutoRgnOrder;
|
||||
|
||||
struct PicoSRAM SRam;
|
||||
@ -91,6 +92,10 @@ void PicoPower(void)
|
||||
|
||||
PICO_INTERNAL void PicoDetectRegion(void)
|
||||
{
|
||||
// PicoDetectRegion not ready yet
|
||||
if (Pico.romsize <= 0)
|
||||
return;
|
||||
|
||||
int support=0, hw=0, i;
|
||||
unsigned char pal=0;
|
||||
|
||||
@ -143,6 +148,10 @@ PICO_INTERNAL void PicoDetectRegion(void)
|
||||
else hw=0x80; // USA
|
||||
|
||||
Pico.m.hardware=(unsigned char)(hw|0x20); // No disk attached
|
||||
|
||||
if (PicoRegionFPSOverride > 0)
|
||||
pal = PicoRegionFPSOverride - 1; // pal - 0: NTSC, 1: PAL | PicoRegionFPSOverride - 0: Auto, 1: NTSC, 2: PAL
|
||||
|
||||
Pico.m.pal=pal;
|
||||
}
|
||||
|
||||
@ -216,9 +225,16 @@ int PicoReset(void)
|
||||
// flush config changes before emu loop starts
|
||||
void PicoLoopPrepare(void)
|
||||
{
|
||||
if (PicoRegionOverride)
|
||||
if (PicoRegionFPSOverride) // PicoRegionFPSOverride is proprietary on PicoRegionOverride
|
||||
{
|
||||
// force setting possibly changed..
|
||||
Pico.m.pal = PicoRegionFPSOverride - 1; // Pico.m.pal - 0: NTSC, 1: PAL | PicoRegionFPSOverride - 0: Auto, 1: NTSC, 2: PAL
|
||||
}
|
||||
else if (PicoRegionOverride)
|
||||
{
|
||||
// force setting possibly changed..
|
||||
Pico.m.pal = (PicoRegionOverride == 2 || PicoRegionOverride == 8) ? 1 : 0;
|
||||
}
|
||||
|
||||
// FIXME: PAL has 313 scanlines..
|
||||
scanlines_total = Pico.m.pal ? 312 : 262;
|
||||
|
||||
@ -81,9 +81,10 @@ extern int PicoAHW; // Pico active hw
|
||||
#define PQUIRK_FORCE_6BTN (1<<0)
|
||||
extern int PicoQuirks;
|
||||
|
||||
extern int PicoSkipFrame; // skip rendering frame, but still do sound (if enabled) and emulation stuff
|
||||
extern int PicoRegionOverride; // override the region detection 0: auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe
|
||||
extern int PicoAutoRgnOrder; // packed priority list of regions, for example 0x148 means this detection order: EUR, USA, JAP
|
||||
extern int PicoSkipFrame; // skip rendering frame, but still do sound (if enabled) and emulation stuff
|
||||
extern int PicoRegionOverride; // override the region detection 0: auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe
|
||||
extern int PicoRegionFPSOverride; // override the refresh rate of the region 0: Auto, 1: NTSC, 2: PAL
|
||||
extern int PicoAutoRgnOrder; // packed priority list of regions, for example 0x148 means this detection order: EUR, USA, JAP
|
||||
extern int PicoSVPCycles;
|
||||
void PicoInit(void);
|
||||
void PicoExit(void);
|
||||
|
||||
@ -118,6 +118,10 @@ PICO_INTERNAL void PsndReset(void)
|
||||
// to be called after changing sound rate or chips
|
||||
void PsndRerate(int preserve_state)
|
||||
{
|
||||
// PsndRerate not ready yet
|
||||
if (Pico.romsize <= 0)
|
||||
return;
|
||||
|
||||
void *state = NULL;
|
||||
int target_fps = Pico.m.pal ? 50 : 60;
|
||||
|
||||
|
||||
@ -469,7 +469,7 @@ void lprintf(const char *fmt, ...)
|
||||
vsprintf(buffer, fmt, ap);
|
||||
/* TODO - add 'level' param for warning/error messages? */
|
||||
if (log_cb)
|
||||
log_cb(RETRO_LOG_INFO, "%s\n", fmt, ap);
|
||||
log_cb(RETRO_LOG_INFO, "%s", buffer);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
@ -477,12 +477,12 @@ void lprintf(const char *fmt, ...)
|
||||
void retro_set_environment(retro_environment_t cb)
|
||||
{
|
||||
static const struct retro_variable vars[] = {
|
||||
//{ "region", "Region; Auto|NTSC|PAL" },
|
||||
{ "picodrive_input1", "Input device 1; 3 button pad|6 button pad|None" },
|
||||
{ "picodrive_input2", "Input device 2; 3 button pad|6 button pad|None" },
|
||||
{ "picodrive_sprlim", "No sprite limit; disabled|enabled" },
|
||||
{ "picodrive_ramcart", "MegaCD RAM cart; disabled|enabled" },
|
||||
{ "picodrive_region", "Region; Auto|Japan NTSC|Japan PAL|US|Europe" },
|
||||
{ "picodrive_input1", "Input device 1; 3 button pad|6 button pad|None" },
|
||||
{ "picodrive_input2", "Input device 2; 3 button pad|6 button pad|None" },
|
||||
{ "picodrive_sprlim", "No sprite limit; disabled|enabled" },
|
||||
{ "picodrive_ramcart", "MegaCD RAM cart; disabled|enabled" },
|
||||
{ "picodrive_region", "Region; Auto|Japan NTSC|Japan PAL|US|Europe" },
|
||||
{ "picodrive_region_fps", "Region FPS; Auto|NTSC|PAL"},
|
||||
#ifdef DRC_SH2
|
||||
{ "picodrive_drc", "Dynamic recompilers; enabled|disabled" },
|
||||
#endif
|
||||
@ -1144,6 +1144,7 @@ static void update_variables(void)
|
||||
PicoOpt &= ~POPT_EN_MCD_RAMCART;
|
||||
}
|
||||
|
||||
int OldPicoRegionOverride = PicoRegionOverride;
|
||||
var.value = NULL;
|
||||
var.key = "picodrive_region";
|
||||
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
|
||||
@ -1159,6 +1160,27 @@ static void update_variables(void)
|
||||
PicoRegionOverride = 8;
|
||||
}
|
||||
|
||||
int OldPicoRegionFPSOverride = PicoRegionFPSOverride;
|
||||
var.value = NULL;
|
||||
var.key = "picodrive_region_fps";
|
||||
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
|
||||
if (strcmp(var.value, "Auto") == 0)
|
||||
PicoRegionFPSOverride = 0;
|
||||
else if (strcmp(var.value, "NTSC") == 0)
|
||||
PicoRegionFPSOverride = 1;
|
||||
else if (strcmp(var.value, "PAL") == 0)
|
||||
PicoRegionFPSOverride = 2;
|
||||
}
|
||||
|
||||
// Update region, fps and sound flags if needed
|
||||
if (PicoRegionOverride != OldPicoRegionOverride ||
|
||||
PicoRegionFPSOverride != OldPicoRegionFPSOverride)
|
||||
{
|
||||
PicoDetectRegion();
|
||||
PicoLoopPrepare();
|
||||
PsndRerate(1);
|
||||
}
|
||||
|
||||
#ifdef DRC_SH2
|
||||
var.value = NULL;
|
||||
var.key = "picodrive_drc";
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user