mirror of
https://github.com/libretro/Play-.git
synced 2025-03-06 02:10:19 +00:00
85 lines
2.3 KiB
C++
85 lines
2.3 KiB
C++
#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(
|
|
CVuAssembler::Upper::NOP() | CVuAssembler::Upper::I_BIT,
|
|
0x42FECCCD
|
|
);
|
|
|
|
//X
|
|
assembler.Write(
|
|
CVuAssembler::Upper::MULi(CVuAssembler::DEST_X, CVuAssembler::VF2, CVuAssembler::VF1) | CVuAssembler::Upper::I_BIT,
|
|
0x42546666
|
|
);
|
|
|
|
assembler.Write(
|
|
CVuAssembler::Upper::ADDi(CVuAssembler::DEST_X, CVuAssembler::VF3, CVuAssembler::VF2) | CVuAssembler::Upper::I_BIT,
|
|
0x43D80D3E
|
|
);
|
|
|
|
//Y
|
|
assembler.Write(
|
|
CVuAssembler::Upper::MULi(CVuAssembler::DEST_Y, CVuAssembler::VF2, CVuAssembler::VF1) | CVuAssembler::Upper::I_BIT,
|
|
0xC7F079B3
|
|
);
|
|
|
|
assembler.Write(
|
|
CVuAssembler::Upper::ADDi(CVuAssembler::DEST_Y, CVuAssembler::VF3, CVuAssembler::VF2) | CVuAssembler::Upper::I_BIT,
|
|
0x43A0DA10
|
|
);
|
|
|
|
//Z
|
|
assembler.Write(
|
|
CVuAssembler::Upper::MULi(CVuAssembler::DEST_Z, CVuAssembler::VF2, CVuAssembler::VF1) | CVuAssembler::Upper::I_BIT,
|
|
0x43A02666
|
|
);
|
|
|
|
assembler.Write(
|
|
CVuAssembler::Upper::ADDi(CVuAssembler::DEST_Z, CVuAssembler::VF3, CVuAssembler::VF2) | CVuAssembler::Upper::I_BIT,
|
|
0x43546E14
|
|
);
|
|
|
|
//W
|
|
assembler.Write(
|
|
CVuAssembler::Upper::MULi(CVuAssembler::DEST_W, CVuAssembler::VF2, CVuAssembler::VF1) | CVuAssembler::Upper::I_BIT,
|
|
0x42F23333
|
|
);
|
|
|
|
assembler.Write(
|
|
CVuAssembler::Upper::ADDi(CVuAssembler::DEST_W, CVuAssembler::VF3, CVuAssembler::VF2) | CVuAssembler::Upper::I_BIT,
|
|
0x3DD3DD98
|
|
);
|
|
|
|
assembler.Write(
|
|
CVuAssembler::Upper::NOP() | CVuAssembler::Upper::E_BIT,
|
|
CVuAssembler::Lower::NOP()
|
|
);
|
|
|
|
assembler.Write(
|
|
CVuAssembler::Upper::NOP(),
|
|
CVuAssembler::Lower::NOP()
|
|
);
|
|
|
|
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);
|
|
}
|