mirror of
https://github.com/open-goal/jak-project
synced 2026-09-05 10:57:28 -04:00
6c719ae000
All VU programs are unchanged except: - `ocean-near-vu1` DIFFERENT - `sparks-vu1` NEW - `sprite-glow-vu1` DIFFERENT - `tnear-vu1` DIFFERENT And `hfrag`, `ocean` and `ocean-texture` have been removed. A full breakdown: ``` ================================================================================ Checking: background-vu0.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: bones-vu0.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: collide-vu0.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: emerc-vu1.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: etie-vu1.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: etn-vu1.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: foreground-vu0.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: generic-vu0.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: generic-vu1.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: merc-vu1.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: mercneric-vu0.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: ocean-mid-vu1.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: ocean-near-vu1.txt ================================================================================ !!! DIFFERENT !!! --- ocean-near-vu1.txt +++ ../jak3/ocean-near-vu1.txt @@ -78,10 +78,20 @@ .word 0x2ff .word 0x800206bc .word 0x2ff +.word 0x903100a +.word 0x2ff +.word 0x884100a +.word 0x2ff .word 0x80050032 .word 0x2ff .word 0x800701f2 .word 0x2ff +.word 0x1fc1820 +.word 0x2ff +.word 0x1fd1821 +.word 0x2ff +.word 0x1fe2020 +.word 0x2ff .word 0x1f82922 .word 0x2ff .word 0x1f92925 @@ -91,23 +101,23 @@ .word 0x1fb292b .word 0x2ff .word 0x1ec292e -.word 0x800601 +.word 0x9c0600 .word 0x1ed2931 -.word 0x800641 +.word 0x9c0641 .word 0x1ee2934 -.word 0x800681 +.word 0x9c0682 .word 0x1ef2937 -.word 0x8006c1 +.word 0x9c06c3 .word 0x1e8293a -.word 0x800301 +.word 0x9d0300 .word 0x3e5c122 -.word 0x800341 +.word 0x9d0341 .word 0x3e5c925 -.word 0x800381 +.word 0x9d0382 .word 0x3e5d128 -.word 0x8003c1 +.word 0x9d03c3 .word 0x3e5d92b -.word 0x800201 +.word 0x9e0200 .word 0x3e5612e .word 0x2ff .word 0x3e56931 @@ -118,12 +128,26 @@ .word 0x2ff .word 0x3e5413a .word 0x2ff +.word 0x80031a32 +.word 0x2ff +.word 0x80042232 +.word 0x2ff .word 0x1005281b .word 0x2ff -.word 0x5a003fec +.word 0x5a003fe7 .word 0x2ff .word 0x80073ff2 .word 0x2ff +.word 0x843100a +.word 0x2ff +.word 0x824100a +.word 0x2ff +.word 0x1fc1820 +.word 0x2ff +.word 0x1fd1821 +.word 0x2ff +.word 0x1fe2020 +.word 0x2ff .word 0x1f82922 .word 0x2ff .word 0x1f92925 @@ -133,23 +157,23 @@ .word 0x1fb292b .word 0x2ff .word 0x1ec292e -.word 0x800601 +.word 0x9c0600 .word 0x1ed2931 -.word 0x800641 +.word 0x9c0641 .word 0x1ee2934 -.word 0x800681 +.word 0x9c0682 .word 0x1ef2937 -.word 0x8006c1 +.word 0x9c06c3 .word 0x1e8293a -.word 0x800301 +.word 0x9d0300 .word 0x3e5c122 -.word 0x800341 +.word 0x9d0341 .word 0x3e5c925 -.word 0x800381 +.word 0x9d0382 .word 0x3e5d128 -.word 0x8003c1 +.word 0x9d03c3 .word 0x3e5d92b -.word 0x800201 +.word 0x9e0200 .word 0x3e5612e .word 0x2ff .word 0x3e56931 ================================================================================ Checking: shadow-vu0.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: shadow-vu1.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: shrub-vu1.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: sparks-vu1.txt ================================================================================ !!! MISSING: ../jak3/sparks-vu1.txt !!! MISSING: sparks-vu1.txt does not exist in ../jak3 ================================================================================ Checking: sprite-distort-vu1.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: sprite-glow-vu1.txt ================================================================================ !!! DIFFERENT !!! --- sprite-glow-vu1.txt +++ ../jak3/sprite-glow-vu1.txt @@ -1,4 +1,4 @@ -.word 0x1005031e +.word 0x10050320 .word 0x2ff .word 0x1f903dc .word 0x2ff @@ -66,17 +66,17 @@ .word 0x2ff .word 0x1ed2004 .word 0x1042101 -.word 0x3e54845 +.word 0x3e54844 .word 0x5b1159 .word 0x8025033c .word 0x410083 -.word 0x3e55046 +.word 0x3e55045 .word 0x20025c -.word 0x3e55847 -.word 0x2ff -.word 0x3e56048 +.word 0x3e55846 +.word 0x2ff +.word 0x3e56047 .word 0x1002117 -.word 0x3e56849 +.word 0x3e56848 .word 0x2ff .word 0x80000030 .word 0x290247 @@ -178,7 +178,7 @@ .word 0x18aa52f .word 0x80000030 .word 0x1e5f1bf -.word 0x3e5184c +.word 0x3e5184b .word 0x1e5fc0a .word 0x3c5580b .word 0x191a46c @@ -230,33 +230,33 @@ .word 0x1ed697d .word 0x80000030 .word 0x1ee717d -.word 0x385583e +.word 0x385583d .word 0x1f1897d -.word 0x385603f +.word 0x385603e .word 0x1f2917d -.word 0x3856840 +.word 0x385683f .word 0x1f3997d -.word 0x3857041 +.word 0x3857040 .word 0x1f4a17d -.word 0x3858819 -.word 0x2ff -.word 0x385901b +.word 0x3858818 +.word 0x2ff +.word 0x385901a .word 0x2ff .word 0x3859808 .word 0x2ff .word 0x385a009 .word 0x2ff -.word 0x385584e -.word 0x2ff -.word 0x3856050 -.word 0x2ff -.word 0x3856852 -.word 0x2ff -.word 0x3857054 +.word 0x385584d +.word 0x2ff +.word 0x385604f +.word 0x2ff +.word 0x3856851 +.word 0x2ff +.word 0x3857053 .word 0x2ff .word 0x80002efc .word 0x2ff -.word 0x10010691 +.word 0x10010694 .word 0x2ff .word 0x52001f8c .word 0x2ff ================================================================================ Checking: sprite-vu1.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: tfrag-vu1.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: tie-near-vu1.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: tie-vu1.txt ================================================================================ OK: Files are the same. ================================================================================ Checking: tnear-vu1.txt ================================================================================ !!! DIFFERENT !!! --- tnear-vu1.txt +++ ../jak3/tnear-vu1.txt @@ -1421,9 +1421,9 @@ .word 0x1916800 .word 0x400403 .word 0x40000008 +.word 0x2ff +.word 0x1927000 .word 0x400443 -.word 0x1927000 -.word 0x2ff .word 0x3eb802d .word 0x2ff .word 0x3eb882e @@ -1435,39 +1435,39 @@ .word 0x1916948 .word 0x400403 .word 0x40000001 +.word 0x2ff +.word 0x1927148 .word 0x400443 -.word 0x1927148 -.word 0x2ff .word 0x3eba02a .word 0x400483 .word 0x3eba82b +.word 0x2ff +.word 0x3ebb02c +.word 0x2ff +.word 0x1f4581d .word 0x1998407 -.word 0x3ebb02c +.word 0x1f55820 .word 0x1998c47 -.word 0x1f4581d -.word 0x1f6e93c -.word 0x1f55820 +.word 0x3eb6027 .word 0x1999487 -.word 0x3eb6027 -.word 0x191876f .word 0x3eb6828 -.word 0x19187ab +.word 0x2ff .word 0x3eb801e .word 0x1f4a13c .word 0x3eb8821 .word 0x1f5a93c .word 0x3eb9024 -.word 0x192ef6f +.word 0x1f6e93c .word 0x3eb7029 -.word 0x192f7ab +.word 0x2ff +.word 0x3eba01d +.word 0x2ff +.word 0x3eba820 +.word 0x2ff .word 0x3ebb023 .word 0x2ff .word 0x800e5872 .word 0x2ff -.word 0x3eba01d -.word 0x2ff -.word 0x3eba820 -.word 0x19de97c .word 0x1ff0297 .word 0x2ff .word 0xb0f03fe @@ -1475,7 +1475,7 @@ .word 0x80040032 .word 0x2ff .word 0x420f0007 -.word 0x19de93c +.word 0x2ff .word 0x1006581c .word 0x2ff .word 0x420f0005 @@ -1541,20 +1541,20 @@ .word 0x2c010002 .word 0x2ff .word 0x2c0d0002 -.word 0x2ff +.word 0x3eef87 .word 0x5200080c .word 0x2ff .word 0x1f13002 .word 0x2ff .word 0x52006803 .word 0x2ff -.word 0x80000030 +.word 0x81feebbc .word 0x2ff .word 0x400007e3 .word 0x2ff .word 0x800841f2 .word 0x2ff -.word 0x420a0082 +.word 0x420a0077 .word 0x2ff .word 0x80064072 .word 0x2ff @@ -1570,7 +1570,7 @@ .word 0x2ff .word 0x5200681c .word 0x2ff -.word 0x80000030 +.word 0x81feebbc .word 0x2ff .word 0x420a006e .word 0x2ff @@ -1594,16 +1594,16 @@ .word 0x2ff .word 0x80064772 .word 0x2ff +.word 0x1ec3000 +.word 0x2ff +.word 0x1f43001 +.word 0x2ff .word 0x1f03002 .word 0x2ff -.word 0x1ec3000 -.word 0x2ff -.word 0x1f43001 -.word 0x2ff .word 0x80042072 .word 0x2ff .word 0x80000030 -.word 0x19d842c +.word 0x2ff .word 0x81ec03bc .word 0x1ff632a .word 0x80000030 @@ -1671,14 +1671,14 @@ .word 0x2c010002 .word 0x2ff .word 0x2c0d0002 -.word 0x2ff +.word 0x3eef87 .word 0x500d0818 .word 0x2ff .word 0x1f13802 .word 0x2ff .word 0x5000080c .word 0x2ff -.word 0x80000030 +.word 0x81feebbc .word 0x2ff .word 0x420a0038 .word 0x2ff @@ -1702,7 +1702,7 @@ .word 0x2ff .word 0x80006235 .word 0x2ff -.word 0x420a0038 +.word 0x420a002d .word 0x2ff .word 0x80000030 .word 0x2ff @@ -1795,10 +1795,6 @@ .word 0x80000030 .word 0x2d6f86 .word 0x80000030 -.word 0x3eef87 -.word 0x81feebbc -.word 0x2ff -.word 0x80000030 .word 0x1ec6bac .word 0x80000030 .word 0x1f4adac @@ -1816,25 +1812,3 @@ .word 0x1f6a5a8 .word 0x80000030 .word 0x1f284a8 -.word 0x80000030 -.word 0x3eef47 -.word 0x81fdf3bc -.word 0x2ff -.word 0x80000030 -.word 0x1ed63ac -.word 0x80000030 -.word 0x1f5a5ac -.word 0x80000030 -.word 0x1f184ac -.word 0x800003bf -.word 0x1e0739c -.word 0x80000030 -.word 0x1e0b59c -.word 0x80000030 -.word 0x1e0949c -.word 0x80000030 -.word 0x1ee6bac -.word 0x48005000 -.word 0x1f6adac -.word 0x80000030 -.word 0x1f28cac ```
760 lines
31 KiB
C++
760 lines
31 KiB
C++
|
|
#include "common/util/FileUtil.h"
|
|
#include "common/util/string_util.h"
|
|
|
|
#include "decompiler/VuDisasm/VuDisassembler.h"
|
|
#include "decompiler/util/DataParser.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
#include "fmt/format.h"
|
|
|
|
using namespace decompiler;
|
|
|
|
namespace {
|
|
std::vector<u32> get_test_data(const std::string& name) {
|
|
auto text = file_util::read_text_file(
|
|
file_util::get_file_path({fmt::format("test/decompiler/vu_reference/{}.txt", name)}));
|
|
|
|
auto parsed = parse_data(text);
|
|
|
|
std::vector<u32> data;
|
|
for (auto& w : parsed.words) {
|
|
EXPECT_EQ(w.kind(), LinkedWord::Kind::PLAIN_DATA);
|
|
data.push_back(w.data);
|
|
}
|
|
return data;
|
|
}
|
|
|
|
std::string get_expected(const std::string& name) {
|
|
return str_util::trim(file_util::read_text_file(
|
|
file_util::get_file_path({fmt::format("test/decompiler/vu_reference/{}-result.txt", name)})));
|
|
}
|
|
} // namespace
|
|
|
|
// TEST(VuDisasm, DumpResults_JakX_Draft) {
|
|
// struct VuData {
|
|
// std::string name;
|
|
// std::vector<u32> data;
|
|
// VuDisassembler::VuKind kind;
|
|
// std::string disasm;
|
|
|
|
// VuData(const std::string& name, VuDisassembler::VuKind kind)
|
|
// : name(name), data(get_test_data("jakx/" + name)), kind(kind) {
|
|
// VuDisassembler vu_disasm(kind);
|
|
// disasm = vu_disasm.to_string(vu_disasm.disassemble(data.data(), data.size() * 4, false));
|
|
// }
|
|
// };
|
|
// auto path = file_util::get_file_path({"test/decompiler/vu_reference/jakx"});
|
|
// for (const auto& entry : fs::directory_iterator(path)) {
|
|
// if (entry.is_regular_file() &&
|
|
// entry.path().filename().string().find("result") == std::string::npos) {
|
|
// auto name = entry.path().filename().stem().string();
|
|
// auto kind = name.find("vu0") != std::string::npos ? VuDisassembler::VuKind::VU0
|
|
// : VuDisassembler::VuKind::VU1;
|
|
// VuData prog(name, kind);
|
|
// file_util::write_text_file(path + "/" + prog.name + "-result.txt", prog.disasm);
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
TEST(VuDisasm, ShadowVu0_JakX) {
|
|
auto data = get_test_data("jakx/shadow-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/shadow-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, ShadowVu1_JakX) {
|
|
auto data = get_test_data("jakx/shadow-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/shadow-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, OceanMid_JakX) {
|
|
auto data = get_test_data("jakx/ocean-mid-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/ocean-mid-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, OceanNear_JakX) {
|
|
auto data = get_test_data("jakx/ocean-near-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/ocean-near-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, MercnericVu0_JakX) {
|
|
auto data = get_test_data("jakx/mercneric-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/mercneric-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, GenericVu0_JakX) {
|
|
auto data = get_test_data("jakx/generic-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/generic-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, GenericVu1_JakX) {
|
|
auto data = get_test_data("jakx/generic-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/generic-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Merc_JakX) {
|
|
auto data = get_test_data("jakx/merc-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/merc-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Emerc_JakX) {
|
|
auto data = get_test_data("jakx/emerc-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/emerc-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, ShrubVu1_JakX) {
|
|
auto data = get_test_data("jakx/shrub-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/shrub-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Sprite_JakX) {
|
|
auto data = get_test_data("jakx/sprite-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/sprite-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, SpriteDistort_JakX) {
|
|
auto data = get_test_data("jakx/sprite-distort-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/sprite-distort-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, SpriteGlow_JakX) {
|
|
auto data = get_test_data("jakx/sprite-glow-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/sprite-glow-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Sparks_JakX) {
|
|
auto data = get_test_data("jakx/sparks-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/sparks-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Tfrag_JakX) {
|
|
auto data = get_test_data("jakx/tfrag-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/tfrag-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, TfragNear_JakX) {
|
|
auto data = get_test_data("jakx/tnear-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/tnear-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Tie_JakX) {
|
|
auto data = get_test_data("jakx/tie-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/tie-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, TieNear_JakX) {
|
|
auto data = get_test_data("jakx/tie-near-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/tie-near-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Etie_JakX) {
|
|
auto data = get_test_data("jakx/etie-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/etie-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, EtieNear_JakX) {
|
|
auto data = get_test_data("jakx/etn-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/etn-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, BackgroundVu0_JakX) {
|
|
auto data = get_test_data("jakx/background-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/background-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, CollideVu0_JakX) {
|
|
auto data = get_test_data("jakx/collide-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/collide-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, BonesVu0_JakX) {
|
|
auto data = get_test_data("jakx/bones-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/bones-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, ForegroundVu0_JakX) {
|
|
auto data = get_test_data("jakx/foreground-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jakx/foreground-vu0"));
|
|
}
|
|
|
|
// TEST(VuDisasm, DumpResults_Jak3_Draft) {
|
|
// struct VuData {
|
|
// std::string name;
|
|
// std::vector<u32> data;
|
|
// VuDisassembler::VuKind kind;
|
|
// std::string disasm;
|
|
|
|
// VuData(const std::string& name, VuDisassembler::VuKind kind)
|
|
// : name(name), data(get_test_data("jak3/" + name)), kind(kind) {
|
|
// VuDisassembler vu_disasm(kind);
|
|
// disasm = vu_disasm.to_string(vu_disasm.disassemble(data.data(), data.size() * 4, false));
|
|
// }
|
|
// };
|
|
// auto path = file_util::get_file_path({"test/decompiler/vu_reference/jak3"});
|
|
// for (const auto& entry : fs::directory_iterator(path)) {
|
|
// if (entry.is_regular_file() &&
|
|
// entry.path().filename().string().find("result") == std::string::npos) {
|
|
// auto name = entry.path().filename().stem().string();
|
|
// auto kind = name.find("vu0") != std::string::npos ? VuDisassembler::VuKind::VU0
|
|
// : VuDisassembler::VuKind::VU1;
|
|
// VuData prog(name, kind);
|
|
// file_util::write_text_file(path + "/" + prog.name + "-result.txt", prog.disasm);
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
TEST(VuDisasm, ShadowVu0_Jak3) {
|
|
auto data = get_test_data("jak3/shadow-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/shadow-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, ShadowVu1_Jak3) {
|
|
auto data = get_test_data("jak3/shadow-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/shadow-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, OceanTexture_Jak3) {
|
|
auto data = get_test_data("jak3/ocean-texture-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/ocean-texture-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, OceanMid_Jak3) {
|
|
auto data = get_test_data("jak3/ocean-mid-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/ocean-mid-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, OceanNear_Jak3) {
|
|
auto data = get_test_data("jak3/ocean-near-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/ocean-near-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, OceanVu0_Jak3) {
|
|
auto data = get_test_data("jak3/ocean-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/ocean-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, MercnericVu0_Jak3) {
|
|
auto data = get_test_data("jak3/mercneric-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/mercneric-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, GenericVu0_Jak3) {
|
|
auto data = get_test_data("jak3/generic-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/generic-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, GenericVu1_Jak3) {
|
|
auto data = get_test_data("jak3/generic-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/generic-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Merc_Jak3) {
|
|
auto data = get_test_data("jak3/merc-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/merc-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Emerc_Jak3) {
|
|
auto data = get_test_data("jak3/emerc-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/emerc-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, ShrubVu1_Jak3) {
|
|
auto data = get_test_data("jak3/shrub-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/shrub-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Sprite_Jak3) {
|
|
auto data = get_test_data("jak3/sprite-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/sprite-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, SpriteDistort_Jak3) {
|
|
auto data = get_test_data("jak3/sprite-distort-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/sprite-distort-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, SpriteGlow_Jak3) {
|
|
auto data = get_test_data("jak3/sprite-glow-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/sprite-glow-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Hfrag_Jak3) {
|
|
auto data = get_test_data("jak3/hfrag-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/hfrag-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Tfrag_Jak3) {
|
|
auto data = get_test_data("jak3/tfrag-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/tfrag-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, TfragNear_Jak3) {
|
|
auto data = get_test_data("jak3/tnear-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/tnear-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Tie_Jak3) {
|
|
auto data = get_test_data("jak3/tie-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/tie-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, TieNear_Jak3) {
|
|
auto data = get_test_data("jak3/tie-near-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/tie-near-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Etie_Jak3) {
|
|
auto data = get_test_data("jak3/etie-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/etie-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, EtieNear_Jak3) {
|
|
auto data = get_test_data("jak3/etn-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/etn-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, BackgroundVu0_Jak3) {
|
|
auto data = get_test_data("jak3/background-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/background-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, CollideVu0_Jak3) {
|
|
auto data = get_test_data("jak3/collide-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/collide-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, BonesVu0_Jak3) {
|
|
auto data = get_test_data("jak3/bones-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/bones-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, ForegroundVu0_Jak3) {
|
|
auto data = get_test_data("jak3/foreground-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak3/foreground-vu0"));
|
|
}
|
|
|
|
// TEST(VuDisasm, DumpResults_Jak2) {
|
|
// struct VuData {
|
|
// std::string name;
|
|
// std::vector<u32> data;
|
|
// VuDisassembler::VuKind kind;
|
|
// std::string disasm;
|
|
//
|
|
// VuData(const std::string& name, VuDisassembler::VuKind kind)
|
|
// : name(name), data(get_test_data("jak2/" + name)), kind(kind) {
|
|
// VuDisassembler vu_disasm(kind);
|
|
// disasm = vu_disasm.to_string(vu_disasm.disassemble(data.data(), data.size() * 4, false));
|
|
// }
|
|
// };
|
|
// auto path = file_util::get_file_path({"test/decompiler/vu_reference/jak2"});
|
|
// for (const auto& entry : fs::directory_iterator(path)) {
|
|
// if (entry.is_regular_file() &&
|
|
// entry.path().filename().string().find("result") == std::string::npos) {
|
|
// auto name = entry.path().filename().stem().string();
|
|
// auto kind = name.find("vu0") != std::string::npos ? VuDisassembler::VuKind::VU0
|
|
// : VuDisassembler::VuKind::VU1;
|
|
// VuData prog(name, kind);
|
|
// file_util::write_text_file(path + "/" + prog.name + "-result.txt", prog.disasm);
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
TEST(VuDisasm, ShadowVu0_Jak2) {
|
|
auto data = get_test_data("jak2/shadow-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak2/shadow-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, ShadowVu1_Jak2) {
|
|
auto data = get_test_data("jak2/shadow-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak2/shadow-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, OceanTexture_Jak2) {
|
|
auto data = get_test_data("jak2/ocean-texture-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak2/ocean-texture-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, OceanMid_Jak2) {
|
|
auto data = get_test_data("jak2/ocean-mid-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak2/ocean-mid-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, OceanNear_Jak2) {
|
|
auto data = get_test_data("jak2/ocean-near-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak2/ocean-near-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, OceanVu0_Jak2) {
|
|
auto data = get_test_data("jak2/ocean-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak2/ocean-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, Merc_Jak2) {
|
|
auto data = get_test_data("jak2/merc-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak2/merc-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Emerc) {
|
|
auto data = get_test_data("jak2/emerc-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak2/emerc-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Shrub_Jak2) {
|
|
auto data = get_test_data("jak2/shrub-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak2/shrub-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Sprite_Jak2) {
|
|
auto data = get_test_data("jak2/sprite-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak2/sprite-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, SpriteDistort_Jak2) {
|
|
auto data = get_test_data("jak2/sprite-distort-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak2/sprite-distort-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, SpriteGlow_Jak2) {
|
|
auto data = get_test_data("jak2/sprite-glow-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak2/sprite-glow-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, Tie_Jak2) {
|
|
auto data = get_test_data("jak2/tie-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak2/tie-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, etie_Jak2) {
|
|
auto data = get_test_data("jak2/etie-vu1");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak2/etie-vu1"));
|
|
}
|
|
|
|
TEST(VuDisasm, SpriteDistort) {
|
|
auto data = get_test_data("jak1/sprite-distort");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/sprite-distort"));
|
|
}
|
|
|
|
TEST(VuDisasm, BackgroundVu0) {
|
|
auto data = get_test_data("jak1/background-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/background-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, CollideVu0) {
|
|
auto data = get_test_data("jak1/collide-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/collide-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, BonesVu0) {
|
|
auto data = get_test_data("jak1/bones-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/bones-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, BonesVu0_Jak2) {
|
|
auto data = get_test_data("jak2/bones-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak2/bones-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, ForegroundVu0_Jak2) {
|
|
auto data = get_test_data("jak2/foreground-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak2/foreground-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, ShadowVu0) {
|
|
auto data = get_test_data("jak1/shadow-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/shadow-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, OceanVu0) {
|
|
auto data = get_test_data("jak1/ocean-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/ocean-vu0"));
|
|
}
|
|
|
|
TEST(VuDisasm, GenericVu0) {
|
|
auto data = get_test_data("jak1/generic-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
// disasm.add_label_with_name(48, "JUMP_48");
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/generic-vu0"));
|
|
// fmt::print("{}\n", disasm.to_string_with_cpp(prog, true));
|
|
}
|
|
|
|
TEST(VuDisasm, MercnericVu0) {
|
|
auto data = get_test_data("jak1/mercneric-vu0");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU0);
|
|
// disasm.add_label_with_name(314 - 280, "JUMP_314");
|
|
// disasm.add_label_with_name(326 - 280, "JUMP_326");
|
|
// disasm.add_label_with_name(353 - 280, "JUMP_353");
|
|
// disasm.add_label_with_name(386 - 280, "JUMP_386");
|
|
// disasm.add_label_with_name(427 - 280, "JUMP_427");
|
|
// disasm.add_label_with_name(438 - 280, "JUMP_438");
|
|
// disasm.add_label_with_name(454 - 280, "JUMP_454");
|
|
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/mercneric-vu0"));
|
|
// disasm.add_label_with_name(0, "vcallms_280");
|
|
// disasm.add_label_with_name(303 - 280, "vcallms_303");
|
|
|
|
// fmt::print("{}\n", disasm.to_string_with_cpp(prog, true));
|
|
}
|
|
|
|
TEST(VuDisasm, OceanTexture) {
|
|
auto data = get_test_data("jak1/ocean-texture");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/ocean-texture"));
|
|
}
|
|
|
|
TEST(VuDisasm, OceanMid) {
|
|
auto data = get_test_data("jak1/ocean-mid");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
/*
|
|
disasm.add_label_with_name(41, "JUMP_41");
|
|
disasm.add_label_with_name(43, "JUMP_43");
|
|
disasm.add_label_with_name(46, "JUMP_46");
|
|
disasm.add_label_with_name(73, "JUMP_73");
|
|
disasm.add_label_with_name(107, "JUMP_107");
|
|
disasm.add_label_with_name(275, "JUMP_275");
|
|
*/
|
|
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/ocean-mid"));
|
|
}
|
|
|
|
TEST(VuDisasm, OceanNear) {
|
|
auto data = get_test_data("jak1/ocean-near");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
// disasm.add_label_with_name(39, "JUMP_39");
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
// fmt::print("{}\n", disasm.to_string_with_cpp(prog, false));
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/ocean-near"));
|
|
}
|
|
|
|
TEST(VuDisasm, Sky) {
|
|
auto data = get_test_data("jak1/sky");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/sky"));
|
|
}
|
|
|
|
TEST(VuDisasm, Shrub) {
|
|
auto data = get_test_data("jak1/shrub");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/shrub"));
|
|
}
|
|
|
|
TEST(VuDisasm, Shadow) {
|
|
auto data = get_test_data("jak1/shadow");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/shadow"));
|
|
}
|
|
|
|
TEST(VuDisasm, TNear) {
|
|
auto data = get_test_data("jak1/tnear");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/tnear"));
|
|
}
|
|
|
|
TEST(VuDisasm, Sprite) {
|
|
auto data = get_test_data("jak1/sprite");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/sprite"));
|
|
}
|
|
|
|
TEST(VuDisasm, Tie) {
|
|
auto data = get_test_data("jak1/tie");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/tie"));
|
|
}
|
|
|
|
TEST(VuDisasm, Generic) {
|
|
auto data = get_test_data("jak1/generic");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/generic"));
|
|
// fmt::print("{}\n", disasm.to_string_with_cpp(prog, false));
|
|
}
|
|
|
|
TEST(VuDisasm, TieNear) {
|
|
auto data = get_test_data("jak1/tie-near");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/tie-near"));
|
|
}
|
|
|
|
TEST(VuDisasm, Tfrag) {
|
|
auto data = get_test_data("jak1/tfrag");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/tfrag"));
|
|
}
|
|
|
|
TEST(VuDisasm, Merc) {
|
|
auto data = get_test_data("jak1/merc");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
EXPECT_EQ(str_util::trim(disasm.to_string(prog)), get_expected("jak1/merc"));
|
|
}
|
|
|
|
TEST(VuDisasm, MercToC) {
|
|
auto data = get_test_data("jak1/merc");
|
|
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
|
disasm.add_label_with_name(0x1a1, "JUMP_1A1");
|
|
disasm.add_label_with_name(0x48e, "JUMP_48E");
|
|
disasm.add_label_with_name(0x539, "JUMP_539");
|
|
disasm.add_label_with_name(0x243, "JUMP_243");
|
|
disasm.add_label_with_name(20, "ENTER_20");
|
|
disasm.add_label_with_name(35, "ENTER_35");
|
|
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
|
// fmt::print("{}\n", disasm.to_string_with_cpp(prog));
|
|
// EXPECT_EQ(disasm.to_string_with_cpp(prog), get_expected("merc"));
|
|
}
|