aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2018-02-25 22:44:30 -0300
committergdkchan <gab.dark.100@gmail.com>2018-02-25 22:44:30 -0300
commit13214ffa43f65686a9a5a99ca1c78b6c405a34db (patch)
tree586abccc81798622fc8d2410d87157d9fc71df86
parent950011c90fe28fe9edd8ebe0d0a771f6adcff7a1 (diff)
Fix regression introduced on last commit with wrong ImageEnd
-rw-r--r--Ryujinx.Core/Loaders/Executable.cs2
-rw-r--r--Ryujinx.Core/OsHle/Homebrew.cs21
-rw-r--r--Ryujinx.Core/OsHle/Process.cs12
3 files changed, 21 insertions, 14 deletions
diff --git a/Ryujinx.Core/Loaders/Executable.cs b/Ryujinx.Core/Loaders/Executable.cs
index c6770c7b..95cb7d6f 100644
--- a/Ryujinx.Core/Loaders/Executable.cs
+++ b/Ryujinx.Core/Loaders/Executable.cs
@@ -56,7 +56,7 @@ namespace Ryujinx.Core.Loaders
MapBss(BssStartOffset, BssEndOffset - BssStartOffset);
- ImageEnd = ImageBase + BssEndOffset;
+ ImageEnd = BssEndOffset;
while (true)
{
diff --git a/Ryujinx.Core/OsHle/Homebrew.cs b/Ryujinx.Core/OsHle/Homebrew.cs
index b69b31c9..f177b37e 100644
--- a/Ryujinx.Core/OsHle/Homebrew.cs
+++ b/Ryujinx.Core/OsHle/Homebrew.cs
@@ -2,26 +2,33 @@
namespace Ryujinx.Core.OsHle
{
- public class Homebrew
+ static class Homebrew
{
//http://switchbrew.org/index.php?title=Homebrew_ABI
- public Homebrew(AMemory Memory, long Position, long MainThreadHandle)
+ public static void WriteHbAbiData(AMemory Memory, long Position, int MainThreadHandle)
{
- //(NbrKeys * LoaderConfigEntrySize) + 2 buffers for Key2
- long Size = (4 * 0x18) + 0x1000;
- Memory.Manager.MapPhys(Position, Size, (int)MemoryType.Normal, AMemoryPerm.RW);
+ Memory.Manager.MapPhys(Position, AMemoryMgr.PageSize, (int)MemoryType.Normal, AMemoryPerm.RW);
//MainThreadHandle
WriteConfigEntry(Memory, ref Position, 1, 0, MainThreadHandle);
+
//NextLoadPath
- WriteConfigEntry(Memory, ref Position, 2, 0, Position + Size, Position + Size + 0x200);
+ WriteConfigEntry(Memory, ref Position, 2, 0, Position + 0x200, Position + 0x400);
+
//AppletType
WriteConfigEntry(Memory, ref Position, 7);
+
//EndOfList
WriteConfigEntry(Memory, ref Position, 0);
}
- private void WriteConfigEntry(AMemory Memory, ref long Position, int Key, int Flags = 0, long Value0 = 0L, long Value1 = 0L)
+ private static void WriteConfigEntry(
+ AMemory Memory,
+ ref long Position,
+ int Key,
+ int Flags = 0,
+ long Value0 = 0,
+ long Value1 = 0)
{
Memory.WriteInt32(Position + 0x00, Key);
Memory.WriteInt32(Position + 0x04, Flags);
diff --git a/Ryujinx.Core/OsHle/Process.cs b/Ryujinx.Core/OsHle/Process.cs
index 60e71ee9..9ca9a2bd 100644
--- a/Ryujinx.Core/OsHle/Process.cs
+++ b/Ryujinx.Core/OsHle/Process.cs
@@ -113,9 +113,11 @@ namespace Ryujinx.Core.OsHle
if (UseHbAbi)
{
- Homebrew Homebrew_ABI = new Homebrew(Memory, Executables[0].ImageEnd, (long)Handle);
+ long HbAbiDataPosition = (Executables[0].ImageEnd + 0xfff) & ~0xfff;
- MainThread.Thread.ThreadState.X0 = (ulong)Executables[0].ImageEnd;
+ Homebrew.WriteHbAbiData(Memory, HbAbiDataPosition, Handle);
+
+ MainThread.Thread.ThreadState.X0 = (ulong)HbAbiDataPosition;
MainThread.Thread.ThreadState.X1 = ulong.MaxValue;
}
@@ -223,14 +225,12 @@ namespace Ryujinx.Core.OsHle
{
foreach (KeyValuePair<long, string> KV in Exe.SymbolTable)
{
- SymbolTable.Add(Exe.ImageBase + KV.Key, KV.Value);
+ SymbolTable.TryAdd(Exe.ImageBase + KV.Key, KV.Value);
}
}
Translator = new ATranslator(SymbolTable);
-
-
Translator.CpuTrace += CpuTraceHandler;
}
@@ -239,7 +239,7 @@ namespace Ryujinx.Core.OsHle
private void CpuTraceHandler(object sender, ACpuTraceEventArgs e)
{
- Logging.Info($"Executing at 0x{e.Position:x16} {e.SubName}");
+ Logging.Trace($"Executing at 0x{e.Position:x16} {e.SubName}");
}
private int GetFreeTlsSlot(AThread Thread)