| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- using Ryujinx.HLE.HOS.Kernel.Process;
- using ChocolArm64.Memory;
- namespace Ryujinx.HLE.HOS.Kernel.Common
- {
- static class KernelTransfer
- {
- public static bool UserToKernelInt32(Horizon system, ulong address, out int value)
- {
- KProcess currentProcess = system.Scheduler.GetCurrentProcess();
- if (currentProcess.CpuMemory.IsMapped((long)address) &&
- currentProcess.CpuMemory.IsMapped((long)address + 3))
- {
- value = currentProcess.CpuMemory.ReadInt32((long)address);
- return true;
- }
- value = 0;
- return false;
- }
- public static bool UserToKernelString(Horizon system, ulong address, int size, out string value)
- {
- KProcess currentProcess = system.Scheduler.GetCurrentProcess();
- if (currentProcess.CpuMemory.IsMapped((long)address) &&
- currentProcess.CpuMemory.IsMapped((long)address + size - 1))
- {
- value = MemoryHelper.ReadAsciiString(currentProcess.CpuMemory, (long)address, size);
- return true;
- }
- value = null;
- return false;
- }
- public static bool KernelToUserInt32(Horizon system, ulong address, int value)
- {
- KProcess currentProcess = system.Scheduler.GetCurrentProcess();
- if (currentProcess.CpuMemory.IsMapped((long)address) &&
- currentProcess.CpuMemory.IsMapped((long)address + 3))
- {
- currentProcess.CpuMemory.WriteInt32ToSharedAddr((long)address, value);
- return true;
- }
- return false;
- }
- public static bool KernelToUserInt64(Horizon system, ulong address, long value)
- {
- KProcess currentProcess = system.Scheduler.GetCurrentProcess();
- if (currentProcess.CpuMemory.IsMapped((long)address) &&
- currentProcess.CpuMemory.IsMapped((long)address + 7))
- {
- currentProcess.CpuMemory.WriteInt64((long)address, value);
- return true;
- }
- return false;
- }
- }
- }
|