Translated branch to dlist + end_dl

This commit is contained in:
KiritoDv
2024-06-09 10:25:48 -06:00
parent 966e5b38d2
commit 97b2fb2291
2 changed files with 16 additions and 2 deletions
+12 -1
View File
@@ -291,10 +291,12 @@ ExportResult DListBinaryExporter::Export(std::ostream &write, std::shared_ptr<IP
}
if(opcode == GBI(G_DL)) {
Gfx value;
auto ptr = w1;
auto dec = Companion::Instance->GetNodeByAddr(ptr);
auto branch = (w0 >> 16) & G_DL_NO_PUSH;
Gfx value = gsSPDisplayListOTRHash(ptr);
value = gsSPDisplayListOTRHash(ptr);
w0 = value.words.w0;
w1 = value.words.w1;
@@ -309,6 +311,15 @@ ExportResult DListBinaryExporter::Export(std::ostream &write, std::shared_ptr<IP
} else {
SPDLOG_WARN("Could not find display list at 0x{:X}", ptr);
}
if(branch){
writer.Write(w0);
writer.Write(w1);
value = gsSPRawOpcode(GBI(G_ENDDL));
w0 = value.words.w0;
w1 = value.words.w1;
}
}
if(opcode == GBI(G_MOVEMEM)) {
+4 -1
View File
@@ -131,6 +131,9 @@ _DW({
#define gsSPVertexOTR(v, n, v0) \
{ (_SHIFTL(G_VTX_OTR_HASH, 24, 8) | _SHIFTL((n), 12, 8) | _SHIFTL((v0) + (n), 1, 7)), (uintptr_t)(v) }
#define gsSPRawOpcode(opcode) \
{ _SHIFTL(opcode, 24, 8), 0 }
#define gsDPSetTextureOTRImage(fmt, siz, width, i) \
{{ \
_SHIFTL(G_SETTIMG_OTR_HASH, 24, 8) | _SHIFTL(fmt, 21, 3) | \
@@ -141,7 +144,7 @@ _DW({
#define gsSPBranchListOTRHash(dl) \
{{ \
(_SHIFTL((G_DL_OTR_HASH), 24, 8) | _SHIFTL((0x01), 16, 8) | \
_SHIFTL((0), 0, 16)), \
_SHIFTL((0), 1, 16)), \
(uintptr_t)(dl) \
}}