Implement IRoInterface (#445)
* Implement IRoInterface This is required by Super Mario Party. This commit also adds MapProcessCodeMemory and UnmapProcessCodeMemory functions in KMemoryManager. Those two calls might not reflect what the SVC of the same names do. * Fix some code style issues * Use MakeError to clarify error code * Add NRR and NRO constants * Fix some codestyle issues * Fix InvalidMemoryState error code
This commit is contained in:
@ -106,13 +106,37 @@ namespace Ryujinx.HLE.HOS
|
||||
throw new ObjectDisposedException(nameof(Process));
|
||||
}
|
||||
|
||||
Device.Log.PrintInfo(LogClass.Loader, $"Image base at 0x{ImageBase:x16}.");
|
||||
long ImageEnd = LoadProgram(Program, ImageBase);
|
||||
|
||||
Executable Executable = new Executable(Program, MemoryManager, Memory, ImageBase);
|
||||
ImageBase = IntUtils.AlignUp(ImageEnd, KMemoryManager.PageSize);
|
||||
}
|
||||
|
||||
public long LoadProgram(IExecutable Program, long ExecutableBase)
|
||||
{
|
||||
if (Disposed)
|
||||
{
|
||||
throw new ObjectDisposedException(nameof(Process));
|
||||
}
|
||||
|
||||
Device.Log.PrintInfo(LogClass.Loader, $"Image base at 0x{ExecutableBase:x16}.");
|
||||
|
||||
Executable Executable = new Executable(Program, MemoryManager, Memory, ExecutableBase);
|
||||
|
||||
Executables.Add(Executable);
|
||||
|
||||
ImageBase = IntUtils.AlignUp(Executable.ImageEnd, KMemoryManager.PageSize);
|
||||
return Executable.ImageEnd;
|
||||
}
|
||||
|
||||
public void RemoveProgram(long ExecutableBase)
|
||||
{
|
||||
foreach (Executable Executable in Executables)
|
||||
{
|
||||
if (Executable.ImageBase == ExecutableBase)
|
||||
{
|
||||
Executables.Remove(Executable);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SetEmptyArgs()
|
||||
|
Reference in New Issue
Block a user