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:
parent
65c67bb4a5
commit
d5c0de8362
10 changed files with 657 additions and 13 deletions
|
@ -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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue