| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- 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;
- }
- }
- }
|