ChonkyStation/tests.h

1058 lines
No EOL
21 KiB
C++

#pragma once
#include "gte.h"
// GTE
class testGTE {
public:
gte GTE;
uint32_t command; // To pass to the GTE
void assignRegisters(uint32_t* cop2c, uint32_t* cop2d) {
for (int i = 0; i < 32; i++) {
GTE.cop2c.raw[i] = cop2c[i];
GTE.cop2d.raw[i] = cop2d[i];
}
}
virtual void checkResult(uint32_t* resCop2c, uint32_t* resCop2d) {
for (int i = 0; i < 32; i++) {
if (GTE.cop2c.raw[i] != resCop2c[i]) {
printf("%s register mismatch: got 0x%08x expected 0x%08x\n", GTE.cop2cNames[i].c_str(), GTE.cop2c.raw[i], resCop2c[i]);
}
}
for (int i = 0; i < 32; i++) {
if (GTE.readCop2d(i) != resCop2d[i]) {
printf("%s register mismatch: got 0x%08x expected 0x%08x\n", GTE.cop2dNames[i].c_str(), GTE.readCop2d(i), resCop2d[i]);
}
}
}
};
class testRTPS : public testGTE {
public:
uint32_t cop2c[32] = {
0x00000ffb,
0xffb7ff44,
0xf9ca0ebc,
0x063700ad,
0x00000eb7,
0x00000000,
0xfffffeac,
0x00001700,
0x00000000,
0x00000fa0,
0x0000f060,
0x0000f060,
0x00000000,
0x00000640,
0x00000640,
0x00000640,
0x0bb80fa0,
0x0fa00fa0,
0x0fa00bb8,
0x0bb80fa0,
0x00000fa0,
0x00000000,
0x00000000,
0x00000000,
0x01400000,
0x00f00000,
0x00000400,
0xfffffec8,
0x01400000,
0x00000155,
0x00000100,
0x00000000,
};
uint32_t cop2d[32] = {
0x00000b50,
0xfffff4b0,
0x00e700d5,
0xfffffe21,
0x00b90119,
0xfffffe65,
0x2094a539,
0x00000000,
0x00001000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000020,
};
uint32_t resCop2c[32] = {
0x00000ffb,
0xffb7ff44,
0xf9ca0ebc,
0x063700ad,
0x00000eb7,
0x00000000,
0xfffffeac,
0x00001700,
0x00000000,
0x00000fa0,
0x0000f060,
0x0000f060,
0x00000000,
0x00000640,
0x00000640,
0x00000640,
0x0bb80fa0,
0x0fa00fa0,
0x0fa00bb8,
0x0bb80fa0,
0x00000fa0,
0x00000000,
0x00000000,
0x00000000,
0x01400000,
0x00f00000,
0x00000400,
0xfffffec8,
0x01400000,
0x00000155,
0x00000100,
0x00000000,
};
uint32_t resCop2d[32] = {
0x00000b50,
0xfffff4b0,
0x00e700d5,
0xfffffe21,
0x00b90119,
0xfffffe65,
0x2094a539,
0x00000000,
0x00000e08,
0x00000bd1,
0x000002dc,
0x00000d12,
0x00000000,
0x00000000,
0x01d003ff,
0x01d003ff,
0x00000000,
0x00000000,
0x00000000,
0x00000d12,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00e08388,
0x00000bd1,
0x000002dc,
0x00000d12,
0x000068b7,
0x000068b7,
0x00000000,
0x00000020,
};
void doTest() {
command = 0x00080001;
printf("testing GTE::RTPS...\n");
assignRegisters(cop2c, cop2d);
GTE.execute(command, nullptr);
checkResult(resCop2c, resCop2d);
}
};
class testRTPT : public testGTE {
public:
uint32_t cop2c[32] = {
0x00000ffb,
0xffb7ff44,
0xf9ca0ebc,
0x063700ad,
0x00000eb7,
0x00000000,
0xfffffeac,
0x00001700,
0x00000000,
0x00000fa0,
0x0000f060,
0x0000f060,
0x00000000,
0x00000640,
0x00000640,
0x00000640,
0x0bb80fa0,
0x0fa00fa0,
0x0fa00bb8,
0x0bb80fa0,
0x00000fa0,
0x00000000,
0x00000000,
0x00000000,
0x01400000,
0x00f00000,
0x00000400,
0xfffffec8,
0x01400000,
0x00000155,
0x00000100,
0x00000000,
};
uint32_t cop2d[32] = {
0x00e70119,
0xfffffe65,
0x00e700d5,
0xfffffe21,
0x00b90119,
0xfffffe65,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000020,
};
uint32_t resCop2c[32] = {
0x00000ffb,
0xffb7ff44,
0xf9ca0ebc,
0x063700ad,
0x00000eb7,
0x00000000,
0xfffffeac,
0x00001700,
0x00000000,
0x00000fa0,
0x0000f060,
0x0000f060,
0x00000000,
0x00000640,
0x00000640,
0x00000640,
0x0bb80fa0,
0x0fa00fa0,
0x0fa00bb8,
0x0bb80fa0,
0x00000fa0,
0x00000000,
0x00000000,
0x00000000,
0x01400000,
0x00f00000,
0x00000400,
0xfffffec8,
0x01400000,
0x00000155,
0x00000100,
0x00000000,
};
uint32_t resCop2d[32] = {
0x00e70119,
0xfffffe65,
0x00e700d5,
0xfffffe21,
0x00b90119,
0xfffffe65,
0x00000000,
0x00000000,
0x00001000,
0x0000012b,
0xfffffff0,
0x000015d9,
0x00f40176,
0x00f9016b,
0x00ed0176,
0x00ed0176,
0x00000000,
0x000015eb,
0x000015aa,
0x000015d9,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x0106e038,
0x0000012b,
0xfffffff0,
0x000015d9,
0x00007c02,
0x00007c02,
0x00000000,
0x00000020,
};
void doTest() {
command = 0x00080030;
printf("testing GTE::RTPT... \n");
assignRegisters(cop2c, cop2d);
GTE.execute(command, nullptr);
checkResult(resCop2c, resCop2d);
printf("Done.\n");
}
};
class testNCDS : public testGTE {
public:
uint32_t cop2c[32] = {
0x00000ffb,
0xffb7ff44,
0xf9ca0ebc,
0x063700ad,
0x00000eb7,
0x00000000,
0xfffffeac,
0x00001700,
0x00000000,
0x00000fa0,
0x0000f060,
0x0000f060,
0x00000000,
0x00000640,
0x00000640,
0x00000640,
0x0bb80fa0,
0x0fa00fa0,
0x0fa00bb8,
0x0bb80fa0,
0x00000fa0,
0x00000000,
0x00000000,
0x00000000,
0x01400000,
0x00f00000,
0x00000400,
0xfffffec8,
0x01400000,
0x00000155,
0x00000100,
0x00000000,
};
uint32_t cop2d[32] = {
0x00000b50,
0xfffff4b0,
0x00e700d5,
0xfffffe21,
0x00b90119,
0xfffffe65,
0x2094a539,
0x00000572,
0x00001000,
0x0000012b,
0xfffffff0,
0x000015d9,
0x00f40176,
0x00f9016b,
0x00ed0176,
0x00ed0176,
0x00000000,
0x000015eb,
0x000015aa,
0x000015d9,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00572786,
0x0000012b,
0xfffffff0,
0x000015d9,
0x00007c02,
0x00007c02,
0x00000000,
0x00000020,
};
uint32_t resCop2c[32] = {
0x00000ffb,
0xffb7ff44,
0xf9ca0ebc,
0x063700ad,
0x00000eb7,
0x00000000,
0xfffffeac,
0x00001700,
0x00000000,
0x00000fa0,
0x0000f060,
0x0000f060,
0x00000000,
0x00000640,
0x00000640,
0x00000640,
0x0bb80fa0,
0x0fa00fa0,
0x0fa00bb8,
0x0bb80fa0,
0x00000fa0,
0x00000000,
0x00000000,
0x00000000,
0x01400000,
0x00f00000,
0x00000400,
0xfffffec8,
0x01400000,
0x00000155,
0x00000100,
0x81f00000,
};
uint32_t resCop2d[32] = {
0x00000b50,
0xfffff4b0,
0x00e700d5,
0xfffffe21,
0x00b90119,
0xfffffe65,
0x2094a539,
0x00000572,
0x00001000,
0x00000000,
0x00000000,
0x00000000,
0x00f40176,
0x00f9016b,
0x00ed0176,
0x00ed0176,
0x00000000,
0x000015eb,
0x000015aa,
0x000015d9,
0x00000000,
0x00000000,
0x20000000,
0x00000000,
0x00572786,
0xffffffff,
0xffffffff,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000020,
};
void doTest() {
command = 0x00080413;
printf("testing GTE::NCDS... \n");
assignRegisters(cop2c, cop2d);
GTE.execute(command, nullptr);
checkResult(resCop2c, resCop2d);
printf("Done.\n");
}
};
class testNCLIP : public testGTE {
public:
uint32_t cop2c[32] = {
0x00000ffb,
0xffb7ff44,
0xf9ca0ebc,
0x063700ad,
0x00000eb7,
0x00000000,
0xfffffeac,
0x00001700,
0x00000000,
0x00000fa0,
0x0000f060,
0x0000f060,
0x00000000,
0x00000640,
0x00000640,
0x00000640,
0x0bb80fa0,
0x0fa00fa0,
0x0fa00bb8,
0x0bb80fa0,
0x00000fa0,
0x00000000,
0x00000000,
0x00000000,
0x01400000,
0x00f00000,
0x00000400,
0xfffffec8,
0x01400000,
0x00000155,
0x00000100,
0x00001000,
};
uint32_t cop2d[32] = {
0x00e70119,
0xfffffe65,
0x00e700d5,
0xfffffe21,
0x00b90119,
0xfffffe65,
0x00000000,
0x00000000,
0x00001000,
0x0000012b,
0xfffffff0,
0x000015d9,
0x00f40176,
0x00f9016b,
0x00ed0176,
0x00ed0176,
0x00000000,
0x000015eb,
0x000015aa,
0x000015d9,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x0106e038,
0x0000012b,
0xfffffff0,
0x000015d9,
0x00007c02,
0x00007c02,
0x00000000,
0x00000020,
};
uint32_t resCop2c[32] = {
0x00000ffb,
0xffb7ff44,
0xf9ca0ebc,
0x063700ad,
0x00000eb7,
0x00000000,
0xfffffeac,
0x00001700,
0x00000000,
0x00000fa0,
0x0000f060,
0x0000f060,
0x00000000,
0x00000640,
0x00000640,
0x00000640,
0x0bb80fa0,
0x0fa00fa0,
0x0fa00bb8,
0x0bb80fa0,
0x00000fa0,
0x00000000,
0x00000000,
0x00000000,
0x01400000,
0x00f00000,
0x00000400,
0xfffffec8,
0x01400000,
0x00000155,
0x00000100,
0x00000000,
};
uint32_t resCop2d[32] = {
0x00e70119,
0xfffffe65,
0x00e700d5,
0xfffffe21,
0x00b90119,
0xfffffe65,
0x00000000,
0x00000000,
0x00001000,
0x0000012b,
0xfffffff0,
0x000015d9,
0x00f40176,
0x00f9016b,
0x00ed0176,
0x00ed0176,
0x00000000,
0x000015eb,
0x000015aa,
0x000015d9,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x0000004d,
0x0000012b,
0xfffffff0,
0x000015d9,
0x00007c02,
0x00007c02,
0x00000000,
0x00000020,
};
void doTest() {
command = 0x00000006;
printf("testing GTE::NCLIP...\n");
assignRegisters(cop2c, cop2d);
GTE.execute(command, nullptr);
checkResult(resCop2c, resCop2d);
printf("Done.\n");
}
};
class testMVMVA : public testGTE {
public:
uint32_t cop2c[32] = {
0xff35cdf4,
0xf8acd6a6,
0x1954aa70,
0xae7b5062,
0x00000c63,
0xcad4cc39,
0xb9c11958,
0xa942b312,
0xaf436779,
0x3c2d507a,
0x95f99741,
0x72413224,
0x0000499d,
0x0a37d280,
0xdbe8feec,
0x2395909a,
0x47364c98,
0x795c2ed7,
0x637e48f4,
0x89557da5,
0xffff997a,
0x690eb551,
0x3dfb368e,
0x2bbe355f,
0xb07c9d22,
0x030c876b,
0x00003b7d,
0x0000765a,
0x228c2901,
0xffffe86f,
0xffffaf93,
0xc741f000,
};
uint32_t cop2d[32] = {
0x91d5c574,
0xffffdf9c,
0xcea213bc,
0x0000143e,
0x2360a947,
0x00003248,
0x1747e72e,
0x0000cc08,
0x0000381d,
0xffffe2ff,
0xffffe0f8,
0xffffe1b6,
0x9da7438d,
0xff60f0ed,
0xbf5961ab,
0xbf5961ab,
0x0000b1c1,
0x0000dda6,
0x0000ce75,
0x0000b2d1,
0xdb01b77a,
0x19cd28cd,
0x1a75d97a,
0xe91dc0ad,
0x764e464f,
0x4aa5a1e5,
0x3b1a1977,
0x39fb3f5f,
0xfe8de0c9,
0x00000007,
};
uint32_t resCop2c[32] = {
0xff35cdf4,
0xf8acd6a6,
0x1954aa70,
0xae7b5062,
0x00000c63,
0xcad4cc39,
0xb9c11958,
0xa942b312,
0xaf436779,
0x3c2d507a,
0x95f99741,
0x72413224,
0x0000499d,
0x0a37d280,
0xdbe8feec,
0x2395909a,
0x47364c98,
0x795c2ed7,
0x637e48f4,
0x89557da5,
0xffff997a,
0x690eb551,
0x3dfb368e,
0x2bbe355f,
0xb07c9d22,
0x030c876b,
0x00003b7d,
0x0000765a,
0x228c2901,
0xffffe86f,
0xffffaf93,
0x81c00000,
};
uint32_t resCop2d[32] = {
0x91d5c574,
0xffffdf9c,
0xcea213bc,
0x0000143e,
0x2360a947,
0x00003248,
0x1747e72e,
0x0000cc08,
0x0000381d,
0xffff8000,
0xffff8000,
0xffff8000,
0x9da7438d,
0xff60f0ed,
0xbf5961ab,
0xbf5961ab,
0x0000b1c1,
0x0000dda6,
0x0000ce75,
0x0000b2d1,
0xdb01b77a,
0x19cd28cd,
0x1a75d97a,
0xe91dc0ad,
0x764e464f,
0xcad5dc86,
0xb9c34e06,
0xa943a529,
0xfe8de0c9,
0x00000007,
};
void doTest() {
command = 0x00080012;
printf("testing GTE::MVMVA... \n");
assignRegisters(cop2c, cop2d);
GTE.execute(command, nullptr);
checkResult(resCop2c, resCop2d);
printf("Done.\n");
}
};
class testDPCS : public testGTE {
public:
uint32_t cop2c[32] = {
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xfffff000,
};
uint32_t cop2d[32] = {
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0x0000ffff,
0xffffffff,
0x00000f80,
0x00000f80,
0x00000f80,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0x0000ffff,
0x0000ffff,
0x0000ffff,
0x0000ffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0x00007fff,
0x00007fff,
0xffffffff,
0x00000020,
};
uint32_t resCop2c[32] = {
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
};
uint32_t resCop2d[32] = {
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0x0000ffff,
0xffffffff,
0x00000ff0,
0x00000ff0,
0x00000ff0,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0x0000ffff,
0x0000ffff,
0x0000ffff,
0x0000ffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0x00000ff0,
0x00000ff0,
0x00000ff0,
0x00007fff,
0x00007fff,
0xffffffff,
0x00000020,
};
void doTest() {
command = 0x00080010;
printf("testing GTE::DPCS... \n");
assignRegisters(cop2c, cop2d);
GTE.execute(command, nullptr);
checkResult(resCop2c, resCop2d);
printf("Done.\n");
}
};
class testNCT : public testGTE {
public:
uint32_t cop2c[32] = {
0xff35cdf4,
0xf8acd6a6,
0x1954aa70,
0xae7b5062,
0x00000c63,
0xcad4cc39,
0xb9c11958,
0xa942b312,
0xaf436779,
0x3c2d507a,
0x95f99741,
0x72413224,
0x0000499d,
0x0a37d280,
0xdbe8feec,
0x2395909a,
0x47364c98,
0x795c2ed7,
0x637e48f4,
0x89557da5,
0xffff997a,
0x690eb551,
0x3dfb368e,
0x2bbe355f,
0x307c9d22,
0x030c876b,
0x00003b7d,
0x0000765a,
0x228c2901,
0xffffe86f,
0xffffaf93,
0xc741f000,
};
uint32_t cop2d[32] = {
0x91d5c574,
0xffffdf9c,
0xcea213bc,
0x0000143e,
0x2360a947,
0x00003248,
0x1747e72e,
0x0000cc08,
0x0000381d,
0xffffe2ff,
0xffffe0f8,
0xffffe1b6,
0x9da7438d,
0xff60f0ed,
0xbf5961ab,
0xbf5961ab,
0x0000b1c1,
0x0000dda6,
0x0000ce75,
0x0000b2d1,
0xdb01b77a,
0x19cd28cd,
0x1a75d97a,
0xe91dc0ad,
0x764e464f,
0x4aa5a1e5,
0x3b1a1977,
0x39fb3f5f,
0x00000000,
0x00000000,
0xfe8de0c9,
0x00000007,
};
uint32_t resCop2c[32] = {
0xff35cdf4,
0xf8acd6a6,
0x1954aa70,
0xae7b5062,
0x00000c63,
0xcad4cc39,
0xb9c11958,
0xa942b312,
0xaf436779,
0x3c2d507a,
0x95f99741,
0x72413224,
0x0000499d,
0x0a37d280,
0xdbe8feec,
0x2395909a,
0x47364c98,
0x795c2ed7,
0x637e48f4,
0x89557da5,
0xffff997a,
0x690eb551,
0x3dfb368e,
0x2bbe355f,
0x307c9d22,
0x030c876b,
0x00003b7d,
0x0000765a,
0x228c2901,
0xffffe86f,
0xffffaf93,
0x81f80000,
};
uint32_t resCop2d[32] = {
0x91d5c574,
0xffffdf9c,
0xcea213bc,
0x0000143e,
0x2360a947,
0x00003248,
0x1747e72e,
0x0000cc08,
0x0000381d,
0x00007fff,
0xffff8000,
0x00007fff,
0x9da7438d,
0xff60f0ed,
0xbf5961ab,
0xbf5961ab,
0x0000b1c1,
0x0000dda6,
0x0000ce75,
0x0000b2d1,
0x17ff00ff,
0x17ff00ff,
0x17ff00ff,
0xe91dc0ad,
0x764e464f,
0x0a34aac5,
0xdbe60855,
0x239224a0,
0x00007c1f,
0x00007c1f,
0xfe8de0c9,
0x00000007,
};
void doTest() {
command = 0x00080020;
printf("testing GTE::NCT... \n");
assignRegisters(cop2c, cop2d);
GTE.execute(command, nullptr);
checkResult(resCop2c, resCop2d);
printf("Done.\n");
}
};