aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/Switch.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.HLE/Switch.cs')
-rw-r--r--Ryujinx.HLE/Switch.cs93
1 files changed, 93 insertions, 0 deletions
diff --git a/Ryujinx.HLE/Switch.cs b/Ryujinx.HLE/Switch.cs
new file mode 100644
index 00000000..f75b2490
--- /dev/null
+++ b/Ryujinx.HLE/Switch.cs
@@ -0,0 +1,93 @@
+using Ryujinx.Audio;
+using Ryujinx.Graphics.Gal;
+using Ryujinx.HLE.Gpu;
+using Ryujinx.HLE.Input;
+using Ryujinx.HLE.Logging;
+using Ryujinx.HLE.OsHle;
+using Ryujinx.HLE.Settings;
+using System;
+
+namespace Ryujinx.HLE
+{
+ public class Switch : IDisposable
+ {
+ internal IAalOutput AudioOut { get; private set; }
+
+ public Logger Log { get; private set; }
+
+ internal NvGpu Gpu { get; private set; }
+
+ internal VirtualFileSystem VFs { get; private set; }
+
+ public Horizon Os { get; private set; }
+
+ public SystemSettings Settings { get; private set; }
+
+ public PerformanceStatistics Statistics { get; private set; }
+
+ public Hid Hid { get; private set; }
+
+ public event EventHandler Finish;
+
+ public Switch(IGalRenderer Renderer, IAalOutput AudioOut)
+ {
+ if (Renderer == null)
+ {
+ throw new ArgumentNullException(nameof(Renderer));
+ }
+
+ if (AudioOut == null)
+ {
+ throw new ArgumentNullException(nameof(AudioOut));
+ }
+
+ this.AudioOut = AudioOut;
+
+ Log = new Logger();
+
+ Gpu = new NvGpu(Renderer);
+
+ VFs = new VirtualFileSystem();
+
+ Os = new Horizon(this);
+
+ Settings = new SystemSettings();
+
+ Statistics = new PerformanceStatistics();
+
+ Hid = new Hid(Log);
+
+ Os.HidSharedMem.MemoryMapped += Hid.ShMemMap;
+ Os.HidSharedMem.MemoryUnmapped += Hid.ShMemUnmap;
+ }
+
+ public void LoadCart(string ExeFsDir, string RomFsFile = null)
+ {
+ Os.LoadCart(ExeFsDir, RomFsFile);
+ }
+
+ public void LoadProgram(string FileName)
+ {
+ Os.LoadProgram(FileName);
+ }
+
+ internal virtual void OnFinish(EventArgs e)
+ {
+ Finish?.Invoke(this, e);
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ }
+
+ protected virtual void Dispose(bool Disposing)
+ {
+ if (Disposing)
+ {
+ Os.Dispose();
+ VFs.Dispose();
+ }
+ }
+ }
+} \ No newline at end of file