aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/OsHle/Kernel/SvcSystem.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2018-08-15 15:59:51 -0300
committerGitHub <noreply@github.com>2018-08-15 15:59:51 -0300
commitc393cdf8e3775bc95850e4d8c8e4c446b286d3b4 (patch)
tree25035a244741d2daf3f7d6be8b23153ff061ea15 /Ryujinx.HLE/OsHle/Kernel/SvcSystem.cs
parent76d95dee05e3c51c18e1799f54cc407e0f633b4e (diff)
More flexible memory manager (#307)
* Keep track mapped buffers with fixed offsets * Started rewriting the memory manager * Initial support for MapPhysicalMemory and UnmapPhysicalMemory, other tweaks * MapPhysicalMemory/UnmapPhysicalMemory support, other tweaks * Rebased * Optimize the map/unmap physical memory svcs * Integrate shared font support * Fix address space reserve alignment * Some fixes related to gpu memory mapping * Some cleanup * Only try uploading const buffers that are really used * Check if memory region is contiguous * Rebased * Add missing count increment on IsRegionModified * Check for reads/writes outside of the address space, optimize translation with a tail call
Diffstat (limited to 'Ryujinx.HLE/OsHle/Kernel/SvcSystem.cs')
-rw-r--r--Ryujinx.HLE/OsHle/Kernel/SvcSystem.cs41
1 files changed, 23 insertions, 18 deletions
diff --git a/Ryujinx.HLE/OsHle/Kernel/SvcSystem.cs b/Ryujinx.HLE/OsHle/Kernel/SvcSystem.cs
index 08305522..f833745b 100644
--- a/Ryujinx.HLE/OsHle/Kernel/SvcSystem.cs
+++ b/Ryujinx.HLE/OsHle/Kernel/SvcSystem.cs
@@ -18,8 +18,6 @@ namespace Ryujinx.HLE.OsHle.Kernel
private const bool EnableProcessDebugging = false;
- private const bool IsVirtualMemoryEnabled = true; //This is always true(?)
-
private void SvcExitProcess(AThreadState ThreadState)
{
Ns.Os.ExitProcess(ThreadState.ProcessId);
@@ -53,12 +51,11 @@ namespace Ryujinx.HLE.OsHle.Kernel
{
Session.Dispose();
}
- else if (Obj is HTransferMem TMem)
+ else if (Obj is KTransferMemory TransferMemory)
{
- TMem.Memory.Manager.Reprotect(
- TMem.Position,
- TMem.Size,
- TMem.Perm);
+ Process.MemoryManager.ResetTransferMemory(
+ TransferMemory.Position,
+ TransferMemory.Size);
}
ThreadState.X0 = 0;
@@ -306,27 +303,29 @@ namespace Ryujinx.HLE.OsHle.Kernel
break;
case 2:
- ThreadState.X1 = MemoryRegions.MapRegionAddress;
+ ThreadState.X1 = (ulong)Process.MemoryManager.MapRegionStart;
break;
case 3:
- ThreadState.X1 = MemoryRegions.MapRegionSize;
+ ThreadState.X1 = (ulong)Process.MemoryManager.MapRegionEnd -
+ (ulong)Process.MemoryManager.MapRegionStart;
break;
case 4:
- ThreadState.X1 = MemoryRegions.HeapRegionAddress;
+ ThreadState.X1 = (ulong)Process.MemoryManager.HeapRegionStart;
break;
case 5:
- ThreadState.X1 = MemoryRegions.HeapRegionSize;
+ ThreadState.X1 = (ulong)Process.MemoryManager.HeapRegionEnd -
+ (ulong)Process.MemoryManager.HeapRegionStart;
break;
case 6:
- ThreadState.X1 = MemoryRegions.TotalMemoryAvailable;
+ ThreadState.X1 = (ulong)Process.Ns.Memory.Allocator.TotalAvailableSize;
break;
case 7:
- ThreadState.X1 = MemoryRegions.TotalMemoryUsed + CurrentHeapSize;
+ ThreadState.X1 = (ulong)Process.Ns.Memory.Allocator.TotalUsedSize;
break;
case 8:
@@ -338,23 +337,29 @@ namespace Ryujinx.HLE.OsHle.Kernel
break;
case 12:
- ThreadState.X1 = MemoryRegions.AddrSpaceStart;
+ ThreadState.X1 = (ulong)Process.MemoryManager.AddrSpaceStart;
break;
case 13:
- ThreadState.X1 = MemoryRegions.AddrSpaceSize;
+ ThreadState.X1 = (ulong)Process.MemoryManager.AddrSpaceEnd -
+ (ulong)Process.MemoryManager.AddrSpaceStart;
break;
case 14:
- ThreadState.X1 = MemoryRegions.MapRegionAddress;
+ ThreadState.X1 = (ulong)Process.MemoryManager.NewMapRegionStart;
break;
case 15:
- ThreadState.X1 = MemoryRegions.MapRegionSize;
+ ThreadState.X1 = (ulong)Process.MemoryManager.NewMapRegionEnd -
+ (ulong)Process.MemoryManager.NewMapRegionStart;
break;
case 16:
- ThreadState.X1 = IsVirtualMemoryEnabled ? 1 : 0;
+ ThreadState.X1 = (ulong)(Process.MetaData?.SystemResourceSize ?? 0);
+ break;
+
+ case 17:
+ ThreadState.X1 = (ulong)Process.MemoryManager.PersonalMmHeapUsage;
break;
default: