1 #include "TestVm.h"
2 #include "Ps2Const.h"
3
CTestVm()4 CTestVm::CTestVm()
5 : m_cpu(MEMORYMAP_ENDIAN_LSBF)
6 , m_executor(m_cpu, PS2::MICROMEM1SIZE)
7 , m_vuMem(reinterpret_cast<uint8*>(framework_aligned_alloc(PS2::VUMEM1SIZE, 0x10)))
8 , m_microMem(reinterpret_cast<uint8*>(framework_aligned_alloc(PS2::MICROMEM1SIZE, 0x10)))
9 , m_maVu(PS2::VUMEM1SIZE - 1)
10 {
11 m_cpu.m_pMemoryMap->InsertReadMap(0x00000000, 0x00003FFF, m_vuMem, 0x00);
12 m_cpu.m_pMemoryMap->InsertWriteMap(0x00000000, 0x00003FFF, m_vuMem, 0x00);
13
14 m_cpu.m_pMemoryMap->InsertInstructionMap(0x00000000, 0x00003FFF, m_microMem, 0x01);
15
16 m_cpu.m_pArch = &m_maVu;
17 m_cpu.m_pAddrTranslator = CMIPS::TranslateAddress64;
18
19 m_cpu.m_vuMem = m_vuMem;
20 }
21
~CTestVm()22 CTestVm::~CTestVm()
23 {
24 framework_aligned_free(m_vuMem);
25 framework_aligned_free(m_microMem);
26 }
27
Reset()28 void CTestVm::Reset()
29 {
30 m_cpu.Reset();
31 m_executor.Reset();
32 memset(m_vuMem, 0, PS2::VUMEM1SIZE);
33 memset(m_microMem, 0, PS2::MICROMEM1SIZE);
34 }
35
ExecuteTest(uint32 startAddress)36 void CTestVm::ExecuteTest(uint32 startAddress)
37 {
38 m_cpu.m_State.nPC = startAddress;
39 assert(m_cpu.m_State.nHasException == 0);
40 while(!m_cpu.m_State.nHasException)
41 {
42 m_executor.Execute(100);
43 }
44 m_cpu.m_State.nHasException = 0;
45 }
46