puae: fix region change

This commit is contained in:
feos 2024-12-10 19:31:46 +03:00
parent dad929fd9f
commit aca5ccae50
1 changed files with 44 additions and 40 deletions

View File

@ -33,8 +33,9 @@ namespace BizHawk.Emulation.Cores.Computers.Amiga
MaxSamples = 2 * 1024,
DefaultWidth = LibPUAE.NTSC_WIDTH,
DefaultHeight = LibPUAE.NTSC_HEIGHT,
MaxWidth = LibPUAE.NTSC_WIDTH,
MaxHeight = LibPUAE.NTSC_HEIGHT,
// games never switch region, and video dumping won't be happy, but amiga can still do it
MaxWidth = LibPUAE.PAL_WIDTH,
MaxHeight = LibPUAE.PAL_HEIGHT,
DefaultFpsNumerator = LibPUAE.PUAE_VIDEO_NUMERATOR_NTSC,
DefaultFpsDenominator = LibPUAE.PUAE_VIDEO_DENOMINATOR_NTSC
};
@ -77,7 +78,7 @@ namespace BizHawk.Emulation.Cores.Computers.Amiga
_drives = new(_syncSettings.FloppyDrives);
DriveLightEnabled = _syncSettings.FloppyDrives > 0;
UpdateAspectRatio(_syncSettings);
UpdateVideoStandard(true);
CreateArguments(_syncSettings);
ControllerDefinition = CreateControllerDefinition(_syncSettings);
_ledCallback = LEDCallback;
@ -277,17 +278,7 @@ namespace BizHawk.Emulation.Cores.Computers.Amiga
protected override void FrameAdvancePost()
{
if (BufferHeight == LibPUAE.NTSC_HEIGHT)
{
VsyncNumerator = LibPUAE.PUAE_VIDEO_NUMERATOR_NTSC;
VsyncDenominator = LibPUAE.PUAE_VIDEO_DENOMINATOR_NTSC;
}
else
{
VsyncNumerator = LibPUAE.PUAE_VIDEO_NUMERATOR_PAL;
VsyncDenominator = LibPUAE.PUAE_VIDEO_DENOMINATOR_PAL;
}
UpdateAspectRatio(_syncSettings);
UpdateVideoStandard(false);
}
protected override void SaveStateBinaryInternal(BinaryWriter writer)
@ -310,11 +301,24 @@ namespace BizHawk.Emulation.Cores.Computers.Amiga
_currentSlot = reader.ReadInt32();
}
private void UpdateAspectRatio(PUAESyncSettings settings)
private void UpdateVideoStandard(bool initial)
{
_correctedWidth = settings.Region is VideoStandard.PAL
? LibPUAE.PAL_WIDTH
: LibPUAE.PAL_WIDTH * 6 / 7;
var ntsc = initial
? _syncSettings.Region is VideoStandard.NTSC
: BufferHeight == LibPUAE.NTSC_HEIGHT;
if (ntsc)
{
_correctedWidth = LibPUAE.PAL_WIDTH * 6 / 7;
VsyncNumerator = LibPUAE.PUAE_VIDEO_NUMERATOR_NTSC;
VsyncDenominator = LibPUAE.PUAE_VIDEO_DENOMINATOR_NTSC;
}
else
{
_correctedWidth = LibPUAE.PAL_WIDTH;
VsyncNumerator = LibPUAE.PUAE_VIDEO_NUMERATOR_PAL;
VsyncDenominator = LibPUAE.PUAE_VIDEO_DENOMINATOR_PAL;
}
}
private static class FileNames