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