diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2024-06-09 10:25:48 -0600 |
|---|---|---|
| committer | KiritoDv <kiritodev01@gmail.com> | 2024-06-09 10:25:48 -0600 |
| commit | 97b2fb2291bc25e79fa92e9242ae2e6be52a50bf (patch) | |
| tree | fc8ac276cf5da0d2a455e7cf1e9f761c44ed03a5 | |
| parent | 966e5b38d2132bc6057633d7794d817bd0517efe (diff) | |
Translated branch to dlist + end_dl
| -rw-r--r-- | src/factories/DisplayListFactory.cpp | 13 | ||||
| -rw-r--r-- | src/n64/gbi-otr.h | 5 |
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) \ }} |
