summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKiritoDv <kiritodev01@gmail.com>2024-06-09 10:25:48 -0600
committerKiritoDv <kiritodev01@gmail.com>2024-06-09 10:25:48 -0600
commit97b2fb2291bc25e79fa92e9242ae2e6be52a50bf (patch)
treefc8ac276cf5da0d2a455e7cf1e9f761c44ed03a5
parent966e5b38d2132bc6057633d7794d817bd0517efe (diff)
Translated branch to dlist + end_dl
-rw-r--r--src/factories/DisplayListFactory.cpp13
-rw-r--r--src/n64/gbi-otr.h5
2 files changed, 16 insertions, 2 deletions
diff --git a/src/factories/DisplayListFactory.cpp b/src/factories/DisplayListFactory.cpp
index 088ff1d..dfc3fb8 100644
--- a/src/factories/DisplayListFactory.cpp
+++ b/src/factories/DisplayListFactory.cpp
@@ -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)) {
diff --git a/src/n64/gbi-otr.h b/src/n64/gbi-otr.h
index 9cc1422..0ee659c 100644
--- a/src/n64/gbi-otr.h
+++ b/src/n64/gbi-otr.h
@@ -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) \
}}