From aa377662dd0ccf7fc9bca7f05d8b87af6fddb998 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 11 Sep 2022 10:57:04 -0700 Subject: [PATCH] GE Debugger: Provide addrs in breakpoint conds. Easier to just refer to the full address. --- GPU/Common/GPUDebugInterface.cpp | 46 ++++++++++++++++++++++++++++++-- GPU/Debugger/GECommandTable.cpp | 22 +++++++-------- 2 files changed, 55 insertions(+), 13 deletions(-) diff --git a/GPU/Common/GPUDebugInterface.cpp b/GPU/Common/GPUDebugInterface.cpp index d5d9c564db..a058d6cbf6 100644 --- a/GPU/Common/GPUDebugInterface.cpp +++ b/GPU/Common/GPUDebugInterface.cpp @@ -31,6 +31,18 @@ enum class GEReferenceIndex : uint32_t { BFLAG, OP, DATA, + CLUTADDR, + TRANSFERSRC, + TRANSFERDST, + + TEXADDR0, + TEXADDR1, + TEXADDR2, + TEXADDR3, + TEXADDR4, + TEXADDR5, + TEXADDR6, + TEXADDR7, BONE_MATRIX = 0x200, WORLD_MATRIX = 0x260, @@ -56,6 +68,17 @@ static constexpr ReferenceName referenceNames[] = { { GEReferenceIndex::BFLAG, "boundflag" }, { GEReferenceIndex::OP, "op" }, { GEReferenceIndex::DATA, "data" }, + { GEReferenceIndex::CLUTADDR, "clutaddr" }, + { GEReferenceIndex::TRANSFERSRC, "transfersrc" }, + { GEReferenceIndex::TRANSFERDST, "transferdst" }, + { GEReferenceIndex::TEXADDR0, "texaddr0" }, + { GEReferenceIndex::TEXADDR1, "texaddr1" }, + { GEReferenceIndex::TEXADDR2, "texaddr2" }, + { GEReferenceIndex::TEXADDR3, "texaddr3" }, + { GEReferenceIndex::TEXADDR4, "texaddr4" }, + { GEReferenceIndex::TEXADDR5, "texaddr5" }, + { GEReferenceIndex::TEXADDR6, "texaddr6" }, + { GEReferenceIndex::TEXADDR7, "texaddr7" }, }; class GEExpressionFunctions : public IExpressionFunctions { @@ -133,15 +156,15 @@ bool GEExpressionFunctions::parseSymbol(char *str, uint32_t &symbolValue) { } uint32_t GEExpressionFunctions::getReferenceValue(uint32_t referenceIndex) { + GPUgstate state = gpu_->GetGState(); if (referenceIndex < 0x100) { - uint32_t value = gpu_->GetGState().cmdmem[referenceIndex]; + uint32_t value = state.cmdmem[referenceIndex]; // TODO: Later, support float values and similar. return value & 0x00FFFFFF; } // We return the matrix value as float bits, which gets interpreted correctly in the parser. if (referenceIndex >= (uint32_t)GEReferenceIndex::BONE_MATRIX && referenceIndex < (uint32_t)GEReferenceIndex::MATRIX_END) { - GPUgstate state = gpu_->GetGState(); float value; if (referenceIndex >= (uint32_t)GEReferenceIndex::TGEN_MATRIX) { value = state.tgenMatrix[referenceIndex - (uint32_t)GEReferenceIndex::TGEN_MATRIX]; @@ -197,6 +220,25 @@ uint32_t GEExpressionFunctions::getReferenceValue(uint32_t referenceIndex) { } return 0; + case GEReferenceIndex::CLUTADDR: + return state.getClutAddress(); + + case GEReferenceIndex::TRANSFERSRC: + return state.getTransferSrcAddress(); + + case GEReferenceIndex::TRANSFERDST: + return state.getTransferDstAddress(); + + case GEReferenceIndex::TEXADDR0: + case GEReferenceIndex::TEXADDR1: + case GEReferenceIndex::TEXADDR2: + case GEReferenceIndex::TEXADDR3: + case GEReferenceIndex::TEXADDR4: + case GEReferenceIndex::TEXADDR5: + case GEReferenceIndex::TEXADDR6: + case GEReferenceIndex::TEXADDR7: + return state.getTextureAddress((int)ref - (int)GEReferenceIndex::TEXADDR0); + case GEReferenceIndex::BONE_MATRIX: case GEReferenceIndex::WORLD_MATRIX: case GEReferenceIndex::VIEW_MATRIX: diff --git a/GPU/Debugger/GECommandTable.cpp b/GPU/Debugger/GECommandTable.cpp index 16304b9d75..e0e9573211 100644 --- a/GPU/Debugger/GECommandTable.cpp +++ b/GPU/Debugger/GECommandTable.cpp @@ -188,14 +188,14 @@ static constexpr GECmdInfo geCmdInfo[] = { { GE_CMD_FRAMEBUFWIDTH, "fbstride", GECmdFormat::STRIDE }, { GE_CMD_ZBUFPTR, "zbptr", GECmdFormat::LOW_ADDR_ONLY }, { GE_CMD_ZBUFWIDTH, "zbstride", GECmdFormat::STRIDE }, - { GE_CMD_TEXADDR0, "texaddr0", GECmdFormat::LOW_ADDR }, - { GE_CMD_TEXADDR1, "texaddr1", GECmdFormat::LOW_ADDR }, - { GE_CMD_TEXADDR2, "texaddr2", GECmdFormat::LOW_ADDR }, - { GE_CMD_TEXADDR3, "texaddr3", GECmdFormat::LOW_ADDR }, - { GE_CMD_TEXADDR4, "texaddr4", GECmdFormat::LOW_ADDR }, - { GE_CMD_TEXADDR5, "texaddr5", GECmdFormat::LOW_ADDR }, - { GE_CMD_TEXADDR6, "texaddr6", GECmdFormat::LOW_ADDR }, - { GE_CMD_TEXADDR7, "texaddr7", GECmdFormat::LOW_ADDR }, + { GE_CMD_TEXADDR0, "texaddr0low", GECmdFormat::LOW_ADDR }, + { GE_CMD_TEXADDR1, "texaddr1low", GECmdFormat::LOW_ADDR }, + { GE_CMD_TEXADDR2, "texaddr2low", GECmdFormat::LOW_ADDR }, + { GE_CMD_TEXADDR3, "texaddr3low", GECmdFormat::LOW_ADDR }, + { GE_CMD_TEXADDR4, "texaddr4low", GECmdFormat::LOW_ADDR }, + { GE_CMD_TEXADDR5, "texaddr5low", GECmdFormat::LOW_ADDR }, + { GE_CMD_TEXADDR6, "texaddr6low", GECmdFormat::LOW_ADDR }, + { GE_CMD_TEXADDR7, "texaddr7low", GECmdFormat::LOW_ADDR }, { GE_CMD_TEXBUFWIDTH0, "texbufw0", GECmdFormat::STRIDE_HIGH_ADDR }, { GE_CMD_TEXBUFWIDTH1, "texbufw1", GECmdFormat::STRIDE_HIGH_ADDR }, { GE_CMD_TEXBUFWIDTH2, "texbufw2", GECmdFormat::STRIDE_HIGH_ADDR }, @@ -204,11 +204,11 @@ static constexpr GECmdInfo geCmdInfo[] = { { GE_CMD_TEXBUFWIDTH5, "texbufw5", GECmdFormat::STRIDE_HIGH_ADDR }, { GE_CMD_TEXBUFWIDTH6, "texbufw6", GECmdFormat::STRIDE_HIGH_ADDR }, { GE_CMD_TEXBUFWIDTH7, "texbufw7", GECmdFormat::STRIDE_HIGH_ADDR }, - { GE_CMD_CLUTADDR, "clutaddr", GECmdFormat::LOW_ADDR }, + { GE_CMD_CLUTADDR, "clutaddrlow", GECmdFormat::LOW_ADDR }, { GE_CMD_CLUTADDRUPPER, "clutaddrhigh", GECmdFormat::HIGH_ADDR }, - { GE_CMD_TRANSFERSRC, "transfersrc", GECmdFormat::LOW_ADDR }, + { GE_CMD_TRANSFERSRC, "transfersrclow", GECmdFormat::LOW_ADDR }, { GE_CMD_TRANSFERSRCW, "transfersrcstride", GECmdFormat::STRIDE_HIGH_ADDR }, - { GE_CMD_TRANSFERDST, "transferdst", GECmdFormat::LOW_ADDR }, + { GE_CMD_TRANSFERDST, "transferdstlow", GECmdFormat::LOW_ADDR }, { GE_CMD_TRANSFERDSTW, "transferdststride", GECmdFormat::STRIDE_HIGH_ADDR }, { GE_CMD_UNKNOWN_B6, "unknownb6", GECmdFormat::NONE }, { GE_CMD_UNKNOWN_B7, "unknownb7", GECmdFormat::NONE },