forked from Mirror/Ryujinx
fb1d9493a3
* Rename enum fields
* Naming conventions
* Remove unneeded ".this"
* Remove unneeded semicolons
* Remove unused Usings
* Don't use var
* Remove unneeded enum underlying types
* Explicitly label class visibility
* Remove unneeded @ prefixes
* Remove unneeded commas
* Remove unneeded if expressions
* Method doesn't use unsafe code
* Remove unneeded casts
* Initialized objects don't need an empty constructor
* Remove settings from DotSettings
* Revert "Explicitly label class visibility"
This reverts commit ad5eb5787c
.
* Small changes
* Revert external enum renaming
* Changes from feedback
* Apply previous refactorings to the merged code
71 lines
No EOL
2 KiB
C#
71 lines
No EOL
2 KiB
C#
using ChocolArm64.Memory;
|
|
|
|
namespace Ryujinx.HLE.HOS.Kernel
|
|
{
|
|
static class KernelTransfer
|
|
{
|
|
public static bool UserToKernelInt32(Horizon system, long address, out int value)
|
|
{
|
|
KProcess currentProcess = system.Scheduler.GetCurrentProcess();
|
|
|
|
if (currentProcess.CpuMemory.IsMapped(address) &&
|
|
currentProcess.CpuMemory.IsMapped(address + 3))
|
|
{
|
|
value = currentProcess.CpuMemory.ReadInt32(address);
|
|
|
|
return true;
|
|
}
|
|
|
|
value = 0;
|
|
|
|
return false;
|
|
}
|
|
|
|
public static bool UserToKernelString(Horizon system, long address, int size, out string value)
|
|
{
|
|
KProcess currentProcess = system.Scheduler.GetCurrentProcess();
|
|
|
|
if (currentProcess.CpuMemory.IsMapped(address) &&
|
|
currentProcess.CpuMemory.IsMapped(address + size - 1))
|
|
{
|
|
value = MemoryHelper.ReadAsciiString(currentProcess.CpuMemory, address, size);
|
|
|
|
return true;
|
|
}
|
|
|
|
value = null;
|
|
|
|
return false;
|
|
}
|
|
|
|
public static bool KernelToUserInt32(Horizon system, long address, int value)
|
|
{
|
|
KProcess currentProcess = system.Scheduler.GetCurrentProcess();
|
|
|
|
if (currentProcess.CpuMemory.IsMapped(address) &&
|
|
currentProcess.CpuMemory.IsMapped(address + 3))
|
|
{
|
|
currentProcess.CpuMemory.WriteInt32ToSharedAddr(address, value);
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public static bool KernelToUserInt64(Horizon system, long address, long value)
|
|
{
|
|
KProcess currentProcess = system.Scheduler.GetCurrentProcess();
|
|
|
|
if (currentProcess.CpuMemory.IsMapped(address) &&
|
|
currentProcess.CpuMemory.IsMapped(address + 7))
|
|
{
|
|
currentProcess.CpuMemory.WriteInt64(address, value);
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
} |