aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Tests/Cpu/CpuTest32.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Tests/Cpu/CpuTest32.cs')
-rw-r--r--Ryujinx.Tests/Cpu/CpuTest32.cs50
1 files changed, 27 insertions, 23 deletions
diff --git a/Ryujinx.Tests/Cpu/CpuTest32.cs b/Ryujinx.Tests/Cpu/CpuTest32.cs
index 0cd8f4df..9b8b89a1 100644
--- a/Ryujinx.Tests/Cpu/CpuTest32.cs
+++ b/Ryujinx.Tests/Cpu/CpuTest32.cs
@@ -1,10 +1,12 @@
-using ARMeilleure.Memory;
-using ARMeilleure.State;
-using ARMeilleure.Translation;
+using ARMeilleure.State;
+
using NUnit.Framework;
+using Ryujinx.Cpu;
+using Ryujinx.Memory;
using Ryujinx.Tests.Unicorn;
+
using System;
-using System.Runtime.InteropServices;
+using MemoryPermission = Ryujinx.Tests.Unicorn.MemoryPermission;
namespace Ryujinx.Tests.Cpu
{
@@ -12,17 +14,17 @@ namespace Ryujinx.Tests.Cpu
public class CpuTest32
{
private uint _currAddress;
- private long _size;
+ private ulong _size;
private uint _entryPoint;
- private IntPtr _ramPointer;
+ private MemoryBlock _ram;
private MemoryManager _memory;
private ExecutionContext _context;
- private Translator _translator;
+ private CpuContext _cpuContext;
private static bool _unicornAvailable;
private UnicornAArch32 _unicornEmu;
@@ -47,20 +49,20 @@ namespace Ryujinx.Tests.Cpu
_entryPoint = _currAddress;
- _ramPointer = Marshal.AllocHGlobal(new IntPtr(_size * 2));
- _memory = new MemoryManager(_ramPointer, addressSpaceBits: 16, useFlatPageTable: true);
- _memory.Map((long)_currAddress, 0, _size*2);
+ _ram = new MemoryBlock(_size * 2);
+ _memory = new MemoryManager(_ram, 1UL << 16);
+ _memory.Map(_currAddress, 0, _size * 2);
- _context = new ExecutionContext();
+ _context = CpuContext.CreateExecutionContext();
_context.IsAarch32 = true;
- _translator = new Translator(_memory);
+ _cpuContext = new CpuContext(_memory);
if (_unicornAvailable)
{
_unicornEmu = new UnicornAArch32();
- _unicornEmu.MemoryMap(_currAddress, (ulong)_size, MemoryPermission.READ | MemoryPermission.EXEC);
- _unicornEmu.MemoryMap((ulong)(_currAddress + _size), (ulong)_size, MemoryPermission.READ | MemoryPermission.WRITE);
+ _unicornEmu.MemoryMap(_currAddress, _size, MemoryPermission.READ | MemoryPermission.EXEC);
+ _unicornEmu.MemoryMap(_currAddress + _size, _size, MemoryPermission.READ | MemoryPermission.WRITE);
_unicornEmu.PC = _entryPoint;
}
}
@@ -68,10 +70,12 @@ namespace Ryujinx.Tests.Cpu
[TearDown]
public void Teardown()
{
- Marshal.FreeHGlobal(_ramPointer);
+ _memory.Dispose();
+ _context.Dispose();
+ _ram.Dispose();
_memory = null;
_context = null;
- _translator = null;
+ _cpuContext = null;
_unicornEmu = null;
}
@@ -83,11 +87,11 @@ namespace Ryujinx.Tests.Cpu
protected void Opcode(uint opcode)
{
- _memory.WriteUInt32((long)_currAddress, opcode);
+ _memory.Write(_currAddress, opcode);
if (_unicornAvailable)
{
- _unicornEmu.MemoryWrite32((ulong)_currAddress, opcode);
+ _unicornEmu.MemoryWrite32(_currAddress, opcode);
}
_currAddress += 4;
@@ -166,7 +170,7 @@ namespace Ryujinx.Tests.Cpu
protected void ExecuteOpcodes(bool runUnicorn = true)
{
- _translator.Execute(_context, _entryPoint);
+ _cpuContext.Execute(_context, _entryPoint);
if (_unicornAvailable && runUnicorn)
{
@@ -210,7 +214,7 @@ namespace Ryujinx.Tests.Cpu
protected void SetWorkingMemory(byte[] data)
{
- _memory.WriteBytes(0x2000, data);
+ _memory.Write(0x2000, data);
if (_unicornAvailable)
{
@@ -357,10 +361,10 @@ namespace Ryujinx.Tests.Cpu
if (usingMemory)
{
- byte[] meilleureMem = _memory.ReadBytes((long)(0x2000), _size);
- byte[] unicornMem = _unicornEmu.MemoryRead((ulong)(0x2000), (ulong)_size);
+ ReadOnlySpan<byte> meilleureMem = _memory.GetSpan(0x2000, (int)_size);
+ byte[] unicornMem = _unicornEmu.MemoryRead(0x2000, _size);
- for (int i = 0; i < _size; i++)
+ for (int i = 0; i < (int)_size; i++)
{
Assert.AreEqual(meilleureMem[i], unicornMem[i]);
}