diff --git a/src/BizHawk.Emulation.Cores/Computers/DOS/DOSBox.cs b/src/BizHawk.Emulation.Cores/Computers/DOS/DOSBox.cs index 7fd0151f23..33a48e4745 100644 --- a/src/BizHawk.Emulation.Cores/Computers/DOS/DOSBox.cs +++ b/src/BizHawk.Emulation.Cores/Computers/DOS/DOSBox.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices; @@ -41,6 +42,11 @@ namespace BizHawk.Emulation.Cores.Computers.DOS private int _floppyDiskCount = 0; private int _currentFloppyDisk = 0; private int _currentCDROM = 0; + + // VGA Refresh rate info + private ulong _VGARefreshRateNumerator = LibDOSBox.VIDEO_NUMERATOR_DOS; + private ulong _VGARefreshRateDenominator = LibDOSBox.VIDEO_DENOMINATOR_DOS; + private string GetFullName(IRomAsset rom) => rom.Game.Name + rom.Extension; public override int VirtualWidth => BufferHeight * 4 / 3; @@ -442,6 +448,21 @@ namespace BizHawk.Emulation.Cores.Computers.DOS protected override void FrameAdvancePost() { DriveLightOn = _libDOSBox.getDriveActivityFlag(); + + // Checking on VGA refresh rate updates + var currentVGARefreshRateNumerator = _VGARefreshRateNumerator; + var currentVGARefreshRateDenominator = _VGARefreshRateDenominator; + + _VGARefreshRateNumerator = _libDOSBox.getVGARefreshRateNumerator(); + _VGARefreshRateDenominator = _libDOSBox.getVGARefreshRateDenominator(); + + // If it changed, notify now + if (currentVGARefreshRateNumerator != _VGARefreshRateNumerator || currentVGARefreshRateDenominator != _VGARefreshRateDenominator) + { + double newVGARefreshRate = (double) _VGARefreshRateNumerator / _VGARefreshRateDenominator; + CoreComm.Notify($"VGA Refresh Rate changed to: {_VGARefreshRateNumerator} / {_VGARefreshRateDenominator} = {newVGARefreshRate} Hz", null); + Console.WriteLine($"VGA Refresh Rate changed to: {_VGARefreshRateNumerator} / {_VGARefreshRateDenominator} = {newVGARefreshRate} Hz", null); + } } protected override void SaveStateBinaryInternal(BinaryWriter writer) diff --git a/src/BizHawk.Emulation.Cores/Computers/DOS/LibDOSBox.cs b/src/BizHawk.Emulation.Cores/Computers/DOS/LibDOSBox.cs index 8345928ccb..ebfa6f6ddc 100644 --- a/src/BizHawk.Emulation.Cores/Computers/DOS/LibDOSBox.cs +++ b/src/BizHawk.Emulation.Cores/Computers/DOS/LibDOSBox.cs @@ -58,6 +58,12 @@ namespace BizHawk.Emulation.Cores.Computers.DOS [BizImport(CC)] public abstract void pushTrackData(int cdIdx, int trackId, CDTrack data); + [BizImport(CC)] + public abstract ulong getVGARefreshRateNumerator(); + + [BizImport(CC)] + public abstract ulong getVGARefreshRateDenominator(); + [StructLayout(LayoutKind.Sequential)] public class InitSettings { @@ -89,6 +95,8 @@ namespace BizHawk.Emulation.Cores.Computers.DOS public JoystickButtons joystick1; public JoystickButtons joystick2; public MouseInput mouse; + public ulong vgaRefreshRateNumerator; + public ulong vgaRefreshRateDenominator; } [StructLayout(LayoutKind.Sequential)]