Play-/tools/VuTest/TriAceTest.cpp

74 lines
2.4 KiB
C++
Raw Normal View History

2015-04-25 22:16:45 -04:00
#include "TriAceTest.h"
#include "VuAssembler.h"
void CTriAceTest::Execute(CTestVm& virtualMachine)
{
virtualMachine.Reset();
auto microMem = reinterpret_cast<uint32*>(virtualMachine.m_microMem);
//From Radiata Stories - Needs accurate floating point handling to work
CVuAssembler assembler(microMem);
assembler.Write(
2018-04-30 21:01:23 +01:00
CVuAssembler::Upper::NOP() | CVuAssembler::Upper::I_BIT,
0x42FECCCD);
2015-04-25 22:16:45 -04:00
//X
assembler.Write(
2018-04-30 21:01:23 +01:00
CVuAssembler::Upper::MULi(CVuAssembler::DEST_X, CVuAssembler::VF2, CVuAssembler::VF1) | CVuAssembler::Upper::I_BIT,
0x42546666);
2015-04-25 22:16:45 -04:00
assembler.Write(
2018-04-30 21:01:23 +01:00
CVuAssembler::Upper::ADDi(CVuAssembler::DEST_X, CVuAssembler::VF3, CVuAssembler::VF2) | CVuAssembler::Upper::I_BIT,
0x43D80D3E);
2015-04-25 22:16:45 -04:00
//Y
assembler.Write(
2018-04-30 21:01:23 +01:00
CVuAssembler::Upper::MULi(CVuAssembler::DEST_Y, CVuAssembler::VF2, CVuAssembler::VF1) | CVuAssembler::Upper::I_BIT,
0xC7F079B3);
2015-04-25 22:16:45 -04:00
assembler.Write(
2018-04-30 21:01:23 +01:00
CVuAssembler::Upper::ADDi(CVuAssembler::DEST_Y, CVuAssembler::VF3, CVuAssembler::VF2) | CVuAssembler::Upper::I_BIT,
0x43A0DA10);
2015-04-25 22:16:45 -04:00
//Z
assembler.Write(
2018-04-30 21:01:23 +01:00
CVuAssembler::Upper::MULi(CVuAssembler::DEST_Z, CVuAssembler::VF2, CVuAssembler::VF1) | CVuAssembler::Upper::I_BIT,
0x43A02666);
2015-04-25 22:16:45 -04:00
assembler.Write(
2018-04-30 21:01:23 +01:00
CVuAssembler::Upper::ADDi(CVuAssembler::DEST_Z, CVuAssembler::VF3, CVuAssembler::VF2) | CVuAssembler::Upper::I_BIT,
0x43546E14);
2015-04-25 22:16:45 -04:00
//W
assembler.Write(
2018-04-30 21:01:23 +01:00
CVuAssembler::Upper::MULi(CVuAssembler::DEST_W, CVuAssembler::VF2, CVuAssembler::VF1) | CVuAssembler::Upper::I_BIT,
0x42F23333);
2015-04-25 22:16:45 -04:00
assembler.Write(
2018-04-30 21:01:23 +01:00
CVuAssembler::Upper::ADDi(CVuAssembler::DEST_W, CVuAssembler::VF3, CVuAssembler::VF2) | CVuAssembler::Upper::I_BIT,
0x3DD3DD98);
2015-04-25 22:16:45 -04:00
assembler.Write(
2018-04-30 21:01:23 +01:00
CVuAssembler::Upper::NOP() | CVuAssembler::Upper::E_BIT,
CVuAssembler::Lower::NOP());
2015-04-25 22:16:45 -04:00
assembler.Write(
2018-04-30 21:01:23 +01:00
CVuAssembler::Upper::NOP(),
CVuAssembler::Lower::NOP());
2015-04-25 22:16:45 -04:00
virtualMachine.m_cpu.m_State.nCOP2[1].nV0 = 0xB063B75B;
virtualMachine.m_cpu.m_State.nCOP2[1].nV1 = 0x8701CE82;
virtualMachine.m_cpu.m_State.nCOP2[1].nV2 = 0x46FCC888;
virtualMachine.m_cpu.m_State.nCOP2[1].nV3 = 0x793CC535;
virtualMachine.ExecuteTest(0);
TEST_VERIFY(virtualMachine.m_cpu.m_State.nCOP2[3].nV0 == 0x42546666);
TEST_VERIFY(virtualMachine.m_cpu.m_State.nCOP2[3].nV1 == 0xC7F079B3);
TEST_VERIFY(virtualMachine.m_cpu.m_State.nCOP2[3].nV2 == 0x4B1ED5E7);
TEST_VERIFY(virtualMachine.m_cpu.m_State.nCOP2[3].nV3 == 0x7D1CA47B);
}