puae: support region changes

by user at the start and by the game on the fly
todo: ntsc par (pal par is 1:1)
This commit is contained in:
feos 2024-10-25 01:17:52 +03:00
parent 703955fcd7
commit 90287b3396
4 changed files with 25 additions and 2 deletions

Binary file not shown.

View File

@ -60,6 +60,12 @@ namespace BizHawk.Emulation.Cores.Computers.Amiga
Auto Auto
} }
public enum VideoStandard
{
PAL,
NTSC
}
public enum ChipMemory public enum ChipMemory
{ {
[Display(Name = "512KB")] [Display(Name = "512KB")]
@ -224,6 +230,12 @@ namespace BizHawk.Emulation.Cores.Computers.Amiga
AppendSetting("fastmem_size=" + settings.FastMemory); AppendSetting("fastmem_size=" + settings.FastMemory);
} }
if (settings.Region == VideoStandard.NTSC)
{
AppendSetting("ntsc=true");
VsyncNumerator = 60;
}
AppendSetting("input.mouse_speed=" + settings.MouseSpeed); AppendSetting("input.mouse_speed=" + settings.MouseSpeed);
AppendSetting("sound_stereo_separation=" + settings.StereoSeparation / 10); AppendSetting("sound_stereo_separation=" + settings.StereoSeparation / 10);
} }
@ -335,6 +347,11 @@ namespace BizHawk.Emulation.Cores.Computers.Amiga
[TypeConverter(typeof(ConstrainedIntConverter))] [TypeConverter(typeof(ConstrainedIntConverter))]
public int FloppyDrives { get; set; } public int FloppyDrives { get; set; }
[DisplayName("Video standard")]
[Description("Determines resolution and framerate.")]
[DefaultValue(VideoStandard.PAL)]
public VideoStandard Region { get; set; }
public PUAESyncSettings() public PUAESyncSettings()
=> SettingsUtil.SetDefaultValues(this); => SettingsUtil.SetDefaultValues(this);

View File

@ -313,6 +313,11 @@ namespace BizHawk.Emulation.Cores.Computers.Amiga
return fi; return fi;
} }
protected override void FrameAdvancePost()
{
VsyncNumerator = BufferHeight == LibPUAE.NTSC_HEIGHT ? 60 : 50;
}
protected override void SaveStateBinaryInternal(BinaryWriter writer) protected override void SaveStateBinaryInternal(BinaryWriter writer)
{ {
writer.Write(_ejectPressed); writer.Write(_ejectPressed);

View File

@ -25,8 +25,9 @@ ECL_EXPORT bool Init(int argc, char **argv)
ECL_EXPORT void FrameAdvance(MyFrameInfo* f) ECL_EXPORT void FrameAdvance(MyFrameInfo* f)
{ {
f->base.Width = 720; bool is_ntsc = minfirstline == VBLANK_ENDLINE_NTSC;
f->base.Height = 576; f->base.Width = PUAE_VIDEO_WIDTH;
f->base.Height = is_ntsc ? PUAE_VIDEO_HEIGHT_NTSC : PUAE_VIDEO_HEIGHT_PAL;
sound_buffer = f->base.SoundBuffer; sound_buffer = f->base.SoundBuffer;
thisframe_y_adjust = minfirstline; thisframe_y_adjust = minfirstline;
visible_left_border = retro_max_diwlastword - retrow; visible_left_border = retro_max_diwlastword - retrow;