forked from Mirror/Ryujinx
[SvcSystem/SvcMemory] Implement SvcGetInfo 16, SvcMapPhysicalMemory & SvcUnmapPhysicalMemory (#126)
* [SvcSystem] Implement SvcGetInfo 16 SvcGetInfo 16 always should be 1(?) * Implement SvcMapPhysicalMemory & SvcUnmapPhysicalMemory * Adjusted to review.
This commit is contained in:
parent
fa4b34bd19
commit
84996ccd36
3 changed files with 28 additions and 0 deletions
|
@ -69,6 +69,8 @@ namespace Ryujinx.Core.OsHle.Kernel
|
||||||
{ 0x26, SvcBreak },
|
{ 0x26, SvcBreak },
|
||||||
{ 0x27, SvcOutputDebugString },
|
{ 0x27, SvcOutputDebugString },
|
||||||
{ 0x29, SvcGetInfo },
|
{ 0x29, SvcGetInfo },
|
||||||
|
{ 0x2c, SvcMapPhysicalMemory },
|
||||||
|
{ 0x2d, SvcUnmapPhysicalMemory },
|
||||||
{ 0x32, SvcSetThreadActivity }
|
{ 0x32, SvcSetThreadActivity }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -250,6 +250,26 @@ namespace Ryujinx.Core.OsHle.Kernel
|
||||||
ThreadState.X1 = Handle;
|
ThreadState.X1 = Handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SvcMapPhysicalMemory(AThreadState ThreadState)
|
||||||
|
{
|
||||||
|
long Position = (long)ThreadState.X0;
|
||||||
|
uint Size = (uint)ThreadState.X1;
|
||||||
|
|
||||||
|
Memory.Manager.Map(Position, Size, (int)MemoryType.Heap, AMemoryPerm.RW);
|
||||||
|
|
||||||
|
ThreadState.X0 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SvcUnmapPhysicalMemory(AThreadState ThreadState)
|
||||||
|
{
|
||||||
|
long Position = (long)ThreadState.X0;
|
||||||
|
uint Size = (uint)ThreadState.X1;
|
||||||
|
|
||||||
|
Memory.Manager.Unmap(Position, Size);
|
||||||
|
|
||||||
|
ThreadState.X0 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
private static bool IsValidPosition(long Position)
|
private static bool IsValidPosition(long Position)
|
||||||
{
|
{
|
||||||
return Position >= MemoryRegions.AddrSpaceStart &&
|
return Position >= MemoryRegions.AddrSpaceStart &&
|
||||||
|
|
|
@ -18,6 +18,8 @@ namespace Ryujinx.Core.OsHle.Kernel
|
||||||
|
|
||||||
private const bool EnableProcessDebugging = false;
|
private const bool EnableProcessDebugging = false;
|
||||||
|
|
||||||
|
private const bool IsVirtualMemoryEnabled = true; //This is always true(?)
|
||||||
|
|
||||||
private void SvcExitProcess(AThreadState ThreadState)
|
private void SvcExitProcess(AThreadState ThreadState)
|
||||||
{
|
{
|
||||||
Ns.Os.ExitProcess(ThreadState.ProcessId);
|
Ns.Os.ExitProcess(ThreadState.ProcessId);
|
||||||
|
@ -351,6 +353,10 @@ namespace Ryujinx.Core.OsHle.Kernel
|
||||||
ThreadState.X1 = MemoryRegions.MapRegionSize;
|
ThreadState.X1 = MemoryRegions.MapRegionSize;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 16:
|
||||||
|
ThreadState.X1 = IsVirtualMemoryEnabled ? 1 : 0;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Process.PrintStackTrace(ThreadState);
|
Process.PrintStackTrace(ThreadState);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue