Rebased, change code region base address for 39-bits address space, print stack trace on break and undefined instructions too

This commit is contained in:
gdkchan 2018-10-17 13:24:22 -03:00
parent d6fa0e1771
commit c38f4df521
3 changed files with 20 additions and 4 deletions

View file

@ -91,7 +91,7 @@ namespace Ryujinx.HLE.HOS.Kernel
break;
case AddressSpaceType.Addr39Bits:
CodeRegionStart = 0;
CodeRegionStart = 0x8000000;
CodeRegionSize = 0x80000000;
MapRegionSize = 0x1000000000;
HeapRegionSize = 0x180000000;

View file

@ -98,7 +98,7 @@ namespace Ryujinx.HLE.HOS
Executables = new List<Executable>();
ImageBase = 0x8000000;
ImageBase = MemoryManager.CodeRegionStart;
}
public void LoadProgram(IExecutable Program)
@ -285,11 +285,15 @@ namespace Ryujinx.HLE.HOS
private void BreakHandler(object sender, AInstExceptionEventArgs e)
{
PrintStackTraceForCurrentThread();
throw new GuestBrokeExecutionException();
}
private void UndefinedHandler(object sender, AInstUndefinedEventArgs e)
{
PrintStackTraceForCurrentThread();
throw new UndefinedInstructionException(e.Position, e.RawOpCode);
}
@ -337,12 +341,17 @@ namespace Ryujinx.HLE.HOS
}
private void CpuInvalidAccessHandler(object sender, AInvalidAccessEventArgs e)
{
PrintStackTraceForCurrentThread();
}
private void PrintStackTraceForCurrentThread()
{
foreach (KThread Thread in Threads.Values)
{
if (Thread.Thread.IsCurrentThread())
if (Thread.Context.IsCurrentThread())
{
PrintStackTrace(Thread.Thread.ThreadState);
PrintStackTrace(Thread.Context.ThreadState);
break;
}

View file

@ -125,6 +125,13 @@ namespace Ryujinx.HLE.HOS.Services.Aud.AudioRenderer
//As of now, it assumes that HostChannelsCount == 2.
WaveBuffer Wb = WaveBuffers[BufferIndex];
if (Wb.Position == 0)
{
Samples = new int[0];
return;
}
if (SampleFormat == SampleFormat.PcmInt16)
{
int SamplesCount = (int)(Wb.Size / (sizeof(short) * ChannelsCount));