diff --git a/src/Ryujinx.Common/Configuration/Hid/KeyboardHotkeys.cs b/src/Ryujinx.Common/Configuration/Hid/KeyboardHotkeys.cs
index e9c163cf2..8d4dd7518 100644
--- a/src/Ryujinx.Common/Configuration/Hid/KeyboardHotkeys.cs
+++ b/src/Ryujinx.Common/Configuration/Hid/KeyboardHotkeys.cs
@@ -13,5 +13,6 @@ namespace Ryujinx.Common.Configuration.Hid
public Key ResScaleDown { get; set; }
public Key VolumeUp { get; set; }
public Key VolumeDown { get; set; }
+ public Key ToggleTurbo { get; set; }
}
}
diff --git a/src/Ryujinx.Cpu/TickSource.cs b/src/Ryujinx.Cpu/TickSource.cs
index eee83fc62..a23e66496 100644
--- a/src/Ryujinx.Cpu/TickSource.cs
+++ b/src/Ryujinx.Cpu/TickSource.cs
@@ -15,11 +15,25 @@ namespace Ryujinx.Cpu
///
public ulong Counter => (ulong)(ElapsedSeconds * Frequency);
- ///
- public TimeSpan ElapsedTime => _tickCounter.Elapsed;
+ public static long s_tickMultiplier = 100;
+ private static long AcumElapsedTicks = 0;
+ private static long LastElapsedTicks = 0;
+ private long Elapsedticks
+ {
+ get
+ {
+ long ElapsedTicks = _tickCounter.ElapsedTicks;
+ AcumElapsedTicks += (ElapsedTicks - LastElapsedTicks) * s_tickMultiplier / 100;
+ LastElapsedTicks = ElapsedTicks;
+ return AcumElapsedTicks;
+ }
+ }
///
- public double ElapsedSeconds => _tickCounter.ElapsedTicks * _hostTickFreq;
+ public TimeSpan ElapsedTime => Stopwatch.GetElapsedTime(0, Elapsedticks);
+
+ ///
+ public double ElapsedSeconds => Elapsedticks * _hostTickFreq;
public TickSource(ulong frequency)
{
diff --git a/src/Ryujinx.Gtk3/UI/MainWindow.cs b/src/Ryujinx.Gtk3/UI/MainWindow.cs
index d1ca6ce6a..ba0b7397e 100644
--- a/src/Ryujinx.Gtk3/UI/MainWindow.cs
+++ b/src/Ryujinx.Gtk3/UI/MainWindow.cs
@@ -669,7 +669,8 @@ namespace Ryujinx.UI
ConfigurationState.Instance.System.AudioVolume,
ConfigurationState.Instance.System.UseHypervisor,
ConfigurationState.Instance.Multiplayer.LanInterfaceId.Value,
- ConfigurationState.Instance.Multiplayer.Mode);
+ ConfigurationState.Instance.Multiplayer.Mode,
+ ConfigurationState.Instance.System.TurboMultiplier);
_emulationContext = new HLE.Switch(configuration);
}
diff --git a/src/Ryujinx.Gtk3/UI/RendererWidgetBase.cs b/src/Ryujinx.Gtk3/UI/RendererWidgetBase.cs
index 0e636792d..fdb066ef0 100644
--- a/src/Ryujinx.Gtk3/UI/RendererWidgetBase.cs
+++ b/src/Ryujinx.Gtk3/UI/RendererWidgetBase.cs
@@ -497,7 +497,8 @@ namespace Ryujinx.UI
_gpuBackendName,
dockedMode,
ConfigurationState.Instance.Graphics.AspectRatio.Value.ToText(),
- $"Game: {Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)",
+ $"Game: {Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)"
+ + (Device.TurboMode ? $" Turbo ({Device.Configuration.TurboMultiplier}%)" : ""),
$"FIFO: {Device.Statistics.GetFifoPercent():0.00} %",
$"GPU: {_gpuDriverName}"));
diff --git a/src/Ryujinx.HLE/HLEConfiguration.cs b/src/Ryujinx.HLE/HLEConfiguration.cs
index 955fee4b5..73eb2b3e7 100644
--- a/src/Ryujinx.HLE/HLEConfiguration.cs
+++ b/src/Ryujinx.HLE/HLEConfiguration.cs
@@ -83,6 +83,11 @@ namespace Ryujinx.HLE
/// This cannot be changed after instantiation.
internal readonly RegionCode Region;
+ ///
+ /// Turbo mode speed multiplier
+ ///
+ public long TurboMultiplier;
+
///
/// Control the initial state of the vertical sync in the SurfaceFlinger service.
///
@@ -194,7 +199,8 @@ namespace Ryujinx.HLE
float audioVolume,
bool useHypervisor,
string multiplayerLanInterfaceId,
- MultiplayerMode multiplayerMode)
+ MultiplayerMode multiplayerMode,
+ long turboMultiplier)
{
VirtualFileSystem = virtualFileSystem;
LibHacHorizonManager = libHacHorizonManager;
@@ -207,6 +213,7 @@ namespace Ryujinx.HLE
HostUIHandler = hostUIHandler;
SystemLanguage = systemLanguage;
Region = region;
+ TurboMultiplier = turboMultiplier;
EnableVsync = enableVsync;
EnableDockedMode = enableDockedMode;
EnablePtc = enablePtc;
diff --git a/src/Ryujinx.HLE/HOS/Services/SurfaceFlinger/SurfaceFlinger.cs b/src/Ryujinx.HLE/HOS/Services/SurfaceFlinger/SurfaceFlinger.cs
index fd517b1ae..475494c6a 100644
--- a/src/Ryujinx.HLE/HOS/Services/SurfaceFlinger/SurfaceFlinger.cs
+++ b/src/Ryujinx.HLE/HOS/Services/SurfaceFlinger/SurfaceFlinger.cs
@@ -2,6 +2,7 @@ using Ryujinx.Common;
using Ryujinx.Common.Configuration;
using Ryujinx.Common.Logging;
using Ryujinx.Common.PreciseSleep;
+using Ryujinx.Cpu;
using Ryujinx.Graphics.GAL;
using Ryujinx.Graphics.Gpu;
using Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvMap;
@@ -88,7 +89,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
}
else
{
- _ticksPerFrame = Stopwatch.Frequency / TargetFps;
+ _ticksPerFrame = (Stopwatch.Frequency / TargetFps * 100) / TickSource.s_tickMultiplier;
}
}
diff --git a/src/Ryujinx.HLE/Switch.cs b/src/Ryujinx.HLE/Switch.cs
index 81c3ab473..413447533 100644
--- a/src/Ryujinx.HLE/Switch.cs
+++ b/src/Ryujinx.HLE/Switch.cs
@@ -28,6 +28,7 @@ namespace Ryujinx.HLE
public IHostUIHandler UIHandler { get; }
public bool EnableDeviceVsync { get; set; } = true;
+ public bool TurboMode { get; set; } = false;
public bool IsFrameAvailable => Gpu.Window.IsFrameAvailable;
diff --git a/src/Ryujinx.Headless.SDL2/Options.cs b/src/Ryujinx.Headless.SDL2/Options.cs
index ea2063758..190302769 100644
--- a/src/Ryujinx.Headless.SDL2/Options.cs
+++ b/src/Ryujinx.Headless.SDL2/Options.cs
@@ -114,6 +114,9 @@ namespace Ryujinx.Headless.SDL2
[Option("fs-global-access-log-mode", Required = false, Default = 0, HelpText = "Enables FS access log output to the console.")]
public int FsGlobalAccessLogMode { get; set; }
+ [Option("turbo-multiplier", Required = false, Default = 200, HelpText = "The Turbo mode clock speed multiplier.")]
+ public long TurboMultiplier { get; set; }
+
[Option("disable-vsync", Required = false, HelpText = "Disables Vertical Sync.")]
public bool DisableVSync { get; set; }
diff --git a/src/Ryujinx.Headless.SDL2/Program.cs b/src/Ryujinx.Headless.SDL2/Program.cs
index 85aff6712..59a91525b 100644
--- a/src/Ryujinx.Headless.SDL2/Program.cs
+++ b/src/Ryujinx.Headless.SDL2/Program.cs
@@ -571,7 +571,8 @@ namespace Ryujinx.Headless.SDL2
options.AudioVolume,
options.UseHypervisor ?? true,
options.MultiplayerLanInterfaceId,
- Common.Configuration.Multiplayer.MultiplayerMode.Disabled);
+ Common.Configuration.Multiplayer.MultiplayerMode.Disabled,
+ options.TurboMultiplier);
return new Switch(configuration);
}
diff --git a/src/Ryujinx.Headless.SDL2/WindowBase.cs b/src/Ryujinx.Headless.SDL2/WindowBase.cs
index 8768913f5..3d40a0452 100644
--- a/src/Ryujinx.Headless.SDL2/WindowBase.cs
+++ b/src/Ryujinx.Headless.SDL2/WindowBase.cs
@@ -312,7 +312,8 @@ namespace Ryujinx.Headless.SDL2
Device.EnableDeviceVsync,
dockedMode,
Device.Configuration.AspectRatio.ToText(),
- $"Game: {Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)",
+ $"Game: {Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)"
+ + (Device.TurboMode ? $" Turbo ({Device.Configuration.TurboMultiplier}%)" : ""),
$"FIFO: {Device.Statistics.GetFifoPercent():0.00} %",
$"GPU: {_gpuDriverName}"));
diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs
index 0f6c21ef2..7530a2c3b 100644
--- a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs
+++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs
@@ -15,7 +15,7 @@ namespace Ryujinx.UI.Common.Configuration
///
/// The current version of the file format
///
- public const int CurrentVersion = 49;
+ public const int CurrentVersion = 50;
///
/// Version of the configuration file format
@@ -167,6 +167,11 @@ namespace Ryujinx.UI.Common.Configuration
///
public HideCursorMode HideCursor { get; set; }
+ ///
+ /// Clock speed multiplier for Turbo mode
+ ///
+ public long TurboMultiplier { get; set; }
+
///
/// Enables or disables Vertical Sync
///
diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs
index b7f36087c..e2a8b319a 100644
--- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs
+++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs
@@ -365,6 +365,11 @@ namespace Ryujinx.UI.Common.Configuration
///
public ReactiveObject UseHypervisor { get; private set; }
+ ///
+ /// Turbo mode clock speed multiplier
+ ///
+ public ReactiveObject TurboMultiplier { get; private set; }
+
public SystemSection()
{
Language = new ReactiveObject();
@@ -393,6 +398,8 @@ namespace Ryujinx.UI.Common.Configuration
AudioVolume.Event += static (sender, e) => LogValueChange(e, nameof(AudioVolume));
UseHypervisor = new ReactiveObject();
UseHypervisor.Event += static (sender, e) => LogValueChange(e, nameof(UseHypervisor));
+ TurboMultiplier = new ReactiveObject();
+ TurboMultiplier.Event += static (sender, e) => LogValueChange(e, nameof(TurboMultiplier));
}
}
@@ -675,6 +682,7 @@ namespace Ryujinx.UI.Common.Configuration
SystemTimeZone = System.TimeZone,
SystemTimeOffset = System.SystemTimeOffset,
DockedMode = System.EnableDockedMode,
+ TurboMultiplier = System.TurboMultiplier,
EnableDiscordIntegration = EnableDiscordIntegration,
CheckUpdatesOnStart = CheckUpdatesOnStart,
ShowConfirmExit = ShowConfirmExit,
@@ -782,6 +790,7 @@ namespace Ryujinx.UI.Common.Configuration
System.TimeZone.Value = "UTC";
System.SystemTimeOffset.Value = 0;
System.EnableDockedMode.Value = true;
+ System.TurboMultiplier.Value = 200;
EnableDiscordIntegration.Value = true;
CheckUpdatesOnStart.Value = true;
ShowConfirmExit.Value = true;
@@ -854,6 +863,7 @@ namespace Ryujinx.UI.Common.Configuration
ResScaleDown = Key.Unbound,
VolumeUp = Key.Unbound,
VolumeDown = Key.Unbound,
+ ToggleTurbo = Key.F3,
};
Hid.InputConfig.Value = new List
{
@@ -1442,6 +1452,29 @@ namespace Ryujinx.UI.Common.Configuration
configurationFileUpdated = true;
}
+ if (configurationFileFormat.Version < 50)
+ {
+ Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 50.");
+
+ configurationFileFormat.TurboMultiplier = 200;
+
+ configurationFileFormat.Hotkeys = new KeyboardHotkeys
+ {
+ ToggleTurbo = Key.F3,
+ Screenshot = configurationFileFormat.Hotkeys.Screenshot,
+ ShowUI = configurationFileFormat.Hotkeys.ShowUI,
+ Pause = configurationFileFormat.Hotkeys.Pause,
+ ToggleMute = configurationFileFormat.Hotkeys.ToggleMute,
+ ResScaleUp = configurationFileFormat.Hotkeys.ResScaleUp,
+ ResScaleDown = configurationFileFormat.Hotkeys.ResScaleDown,
+ VolumeUp = configurationFileFormat.Hotkeys.VolumeUp,
+ VolumeDown = configurationFileFormat.Hotkeys.VolumeDown,
+ ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync,
+ };
+
+ configurationFileUpdated = true;
+ }
+
Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog;
Graphics.ResScale.Value = configurationFileFormat.ResScale;
Graphics.ResScaleCustom.Value = configurationFileFormat.ResScaleCustom;
@@ -1469,6 +1502,7 @@ namespace Ryujinx.UI.Common.Configuration
System.TimeZone.Value = configurationFileFormat.SystemTimeZone;
System.SystemTimeOffset.Value = configurationFileFormat.SystemTimeOffset;
System.EnableDockedMode.Value = configurationFileFormat.DockedMode;
+ System.TurboMultiplier.Value = configurationFileFormat.TurboMultiplier;
EnableDiscordIntegration.Value = configurationFileFormat.EnableDiscordIntegration;
CheckUpdatesOnStart.Value = configurationFileFormat.CheckUpdatesOnStart;
ShowConfirmExit.Value = configurationFileFormat.ShowConfirmExit;
diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs
index 2620ea68c..57d87ff6e 100644
--- a/src/Ryujinx/AppHost.cs
+++ b/src/Ryujinx/AppHost.cs
@@ -23,6 +23,7 @@ using Ryujinx.Common.Configuration.Multiplayer;
using Ryujinx.Common.Logging;
using Ryujinx.Common.SystemInterop;
using Ryujinx.Common.Utilities;
+using Ryujinx.Cpu;
using Ryujinx.Graphics.GAL;
using Ryujinx.Graphics.GAL.Multithreading;
using Ryujinx.Graphics.Gpu;
@@ -795,7 +796,8 @@ namespace Ryujinx.Ava
ConfigurationState.Instance.System.AudioVolume,
ConfigurationState.Instance.System.UseHypervisor,
ConfigurationState.Instance.Multiplayer.LanInterfaceId.Value,
- ConfigurationState.Instance.Multiplayer.Mode);
+ ConfigurationState.Instance.Multiplayer.Mode,
+ ConfigurationState.Instance.System.TurboMultiplier);
Device = new Switch(configuration);
}
@@ -980,7 +982,8 @@ namespace Ryujinx.Ava
ConfigurationState.Instance.Graphics.GraphicsBackend.Value == GraphicsBackend.Vulkan ? "Vulkan" : "OpenGL",
dockedMode,
ConfigurationState.Instance.Graphics.AspectRatio.Value.ToText(),
- LocaleManager.Instance[LocaleKeys.Game] + $": {Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)",
+ LocaleManager.Instance[LocaleKeys.Game] + $": {Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)"
+ + (Device.TurboMode ? $" Turbo ({Device.Configuration.TurboMultiplier}%)" : ""),
$"FIFO: {Device.Statistics.GetFifoPercent():00.00} %",
$"GPU: {_renderer.GetHardwareInfo().GpuDriver}"));
}
@@ -1065,6 +1068,12 @@ namespace Ryujinx.Ava
if (currentHotkeyState != _prevHotkeyState)
{
+ if (_keyboardInterface.IsPressed((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.ToggleTurbo) != Device.TurboMode)
+ {
+ Device.TurboMode = !Device.TurboMode;
+ long turboMultiplier = Device.TurboMode ? Device.Configuration.TurboMultiplier : 100;
+ TickSource.s_tickMultiplier = turboMultiplier;
+ }
switch (currentHotkeyState)
{
case KeyboardHotkeyState.ToggleVSync:
@@ -1077,6 +1086,8 @@ namespace Ryujinx.Ava
case KeyboardHotkeyState.ShowUI:
_viewModel.ShowMenuAndStatusBar = !_viewModel.ShowMenuAndStatusBar;
break;
+ case KeyboardHotkeyState.ToggleTurbo:
+ break;
case KeyboardHotkeyState.Pause:
if (_viewModel.IsPaused)
{
@@ -1192,6 +1203,10 @@ namespace Ryujinx.Ava
{
state = KeyboardHotkeyState.VolumeDown;
}
+ else if (_keyboardInterface.IsPressed((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.ToggleTurbo))
+ {
+ state = KeyboardHotkeyState.ToggleTurbo;
+ }
return state;
}
diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json
index 3a3cb3017..d5adf474c 100644
--- a/src/Ryujinx/Assets/Locales/en_US.json
+++ b/src/Ryujinx/Assets/Locales/en_US.json
@@ -129,6 +129,9 @@
"SettingsTabSystemSystemLanguageTraditionalChinese": "Traditional Chinese",
"SettingsTabSystemSystemTimeZone": "System TimeZone:",
"SettingsTabSystemSystemTime": "System Time:",
+ "SettingsTabSystemTurboMultiplierValue": "Turbo multiplier:",
+ "SettingsTabSystemTurboMultiplierSliderTooltip": "The Turbo mode multiplier target value.",
+ "SettingsTabSystemTurboMultiplierValueTooltip": "The Turbo mode multiplier, as a percentage of the normal Switch clock speed.",
"SettingsTabSystemEnableVsync": "VSync",
"SettingsTabSystemEnablePptc": "PPTC (Profiled Persistent Translation Cache)",
"SettingsTabSystemEnableFsIntegrityChecks": "FS Integrity Checks",
@@ -627,6 +630,7 @@
"RyujinxUpdaterMessage": "Do you want to update Ryujinx to the latest version?",
"SettingsTabHotkeysVolumeUpHotkey": "Increase Volume:",
"SettingsTabHotkeysVolumeDownHotkey": "Decrease Volume:",
+ "SettingsTabHotkeysToggleTurboHotkey": "Toggle turbo mode",
"SettingsEnableMacroHLE": "Enable Macro HLE",
"SettingsEnableMacroHLETooltip": "High-level emulation of GPU Macro code.\n\nImproves performance, but may cause graphical glitches in some games.\n\nLeave ON if unsure.",
"SettingsEnableColorSpacePassthrough": "Color Space Passthrough",
diff --git a/src/Ryujinx/Common/KeyboardHotkeyState.cs b/src/Ryujinx/Common/KeyboardHotkeyState.cs
index 6e4920988..ea86f6a36 100644
--- a/src/Ryujinx/Common/KeyboardHotkeyState.cs
+++ b/src/Ryujinx/Common/KeyboardHotkeyState.cs
@@ -12,5 +12,6 @@ namespace Ryujinx.Ava.Common
ResScaleDown,
VolumeUp,
VolumeDown,
+ ToggleTurbo,
}
}
diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs
index fde8f74ae..b3e96b930 100644
--- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs
+++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs
@@ -13,6 +13,7 @@ using Ryujinx.Common.Configuration.Hid;
using Ryujinx.Common.Configuration.Multiplayer;
using Ryujinx.Common.GraphicsDriver;
using Ryujinx.Common.Logging;
+using Ryujinx.Cpu;
using Ryujinx.Graphics.Vulkan;
using Ryujinx.HLE.FileSystem;
using Ryujinx.HLE.HOS.Services.Time.TimeZone;
@@ -50,6 +51,7 @@ namespace Ryujinx.Ava.UI.ViewModels
private int _graphicsBackendIndex;
private int _scalingFilter;
private int _scalingFilterLevel;
+ private long _turboModeMultiplier;
public event Action CloseWindow;
public event Action SaveSettingsEvent;
@@ -135,6 +137,26 @@ namespace Ryujinx.Ava.UI.ViewModels
public int HideCursor { get; set; }
public bool EnableDockedMode { get; set; }
public bool EnableKeyboard { get; set; }
+ public long TurboMultiplier
+ {
+ get => _turboModeMultiplier;
+ set
+ {
+ if (_turboModeMultiplier != value)
+ {
+ _turboModeMultiplier = value;
+ OnPropertyChanged();
+ OnPropertyChanged((nameof(TurboMultiplierPercentageText)));
+ }
+ }
+ }
+ public string TurboMultiplierPercentageText
+ {
+ get
+ {
+ return TurboMultiplier.ToString() + "%";
+ }
+ }
public bool EnableMouse { get; set; }
public bool EnableVsync { get; set; }
public bool EnablePptc { get; set; }
@@ -434,6 +456,7 @@ namespace Ryujinx.Ava.UI.ViewModels
EnablePptc = config.System.EnablePtc;
MemoryMode = (int)config.System.MemoryManagerMode.Value;
UseHypervisor = config.System.UseHypervisor;
+ _turboModeMultiplier = config.System.TurboMultiplier;
// Graphics
GraphicsBackendIndex = (int)config.Graphics.GraphicsBackend.Value;
@@ -512,6 +535,7 @@ namespace Ryujinx.Ava.UI.ViewModels
}
config.System.SystemTimeOffset.Value = Convert.ToInt64((CurrentDate.ToUnixTimeSeconds() + CurrentTime.TotalSeconds) - DateTimeOffset.Now.ToUnixTimeSeconds());
+ config.System.TurboMultiplier.Value = TurboMultiplier;
config.Graphics.EnableVsync.Value = EnableVsync;
config.System.EnableFsIntegrityChecks.Value = EnableFsIntegrityChecks;
config.System.ExpandRam.Value = ExpandDramSize;
@@ -578,6 +602,7 @@ namespace Ryujinx.Ava.UI.ViewModels
config.ToFileFormat().SaveConfig(Program.ConfigurationPath);
MainWindow.UpdateGraphicsConfig();
+ MainWindow.UpdateTurboConfig(TurboMultiplier);
SaveSettingsEvent?.Invoke();
diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml
index b4eae01ef..4bdf00651 100644
--- a/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml
+++ b/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml
@@ -1,4 +1,4 @@
-
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml
index e6f7c6e46..96d49b78a 100644
--- a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml
+++ b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml
@@ -1,9 +1,10 @@
-
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs
index 33a9af5b6..ac77f02ef 100644
--- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs
+++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs
@@ -11,6 +11,7 @@ using Ryujinx.Ava.UI.Applet;
using Ryujinx.Ava.UI.Helpers;
using Ryujinx.Ava.UI.ViewModels;
using Ryujinx.Common.Logging;
+using Ryujinx.Cpu;
using Ryujinx.Graphics.Gpu;
using Ryujinx.HLE.FileSystem;
using Ryujinx.HLE.HOS;
@@ -407,6 +408,15 @@ namespace Ryujinx.Ava.UI.Windows
}
}
+ public static void UpdateTurboConfig(long turboMultiplier)
+ {
+ MainWindow.MainWindowViewModel.AppHost.Device.Configuration.TurboMultiplier = turboMultiplier;
+ if (MainWindow.MainWindowViewModel.AppHost.Device.TurboMode)
+ {
+ TickSource.s_tickMultiplier = turboMultiplier;
+ }
+ }
+
public static void UpdateGraphicsConfig()
{
#pragma warning disable IDE0055 // Disable formatting