From 35c8a05d296bf7dc2f2861acafb82f055d56d8ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sat, 5 Aug 2017 18:15:01 +0200 Subject: [PATCH] Minor GPU disassembler update --- GPU/GPUCommon.cpp | 2 +- GPU/GeDisasm.cpp | 9 +++++++++ GPU/ge_constants.h | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/GPU/GPUCommon.cpp b/GPU/GPUCommon.cpp index 8dacea143dde..a1a01cf17ded 100644 --- a/GPU/GPUCommon.cpp +++ b/GPU/GPUCommon.cpp @@ -334,7 +334,7 @@ const CommonCommandTableEntry commonCommandTable[] = { { GE_CMD_UNKNOWN_FD, FLAG_EXECUTE, 0, &GPUCommon::Execute_Unknown }, { GE_CMD_UNKNOWN_FE, FLAG_EXECUTE, 0, &GPUCommon::Execute_Unknown }, // Appears to be debugging related or something? Hit a lot in GoW. - { GE_CMD_UNKNOWN_FF, 0 }, + { GE_CMD_NOP_FF, 0 }, }; size_t commonCommandTableSize = ARRAY_SIZE(commonCommandTable); diff --git a/GPU/GeDisasm.cpp b/GPU/GeDisasm.cpp index f996d2c06994..8acb1ed4ea4f 100644 --- a/GPU/GeDisasm.cpp +++ b/GPU/GeDisasm.cpp @@ -102,6 +102,15 @@ void GeDisassembleOp(u32 pc, u32 op, u32 prev, char *buffer, int bufsize) { snprintf(buffer, bufsize, "NOP"); break; + // Pretty sure this is some sort of NOP to eat some pipelining issue, + // often seen after CALL instructions. + case GE_CMD_NOP_FF: + if (data != 0) + snprintf(buffer, bufsize, "NOP_FF: data= %06x", data); + else + snprintf(buffer, bufsize, "NOP_FF"); + break; + case GE_CMD_BASE: snprintf(buffer, bufsize, "BASE: %06x", data); break; diff --git a/GPU/ge_constants.h b/GPU/ge_constants.h index 377f5c913f80..6abea52f0b86 100644 --- a/GPU/ge_constants.h +++ b/GPU/ge_constants.h @@ -273,7 +273,7 @@ enum GECommand { GE_CMD_UNKNOWN_FC = 0xFC, GE_CMD_UNKNOWN_FD = 0xFD, GE_CMD_UNKNOWN_FE = 0xFE, - GE_CMD_UNKNOWN_FF = 0xFF, + GE_CMD_NOP_FF = 0xFF, }; enum GEBufferFormat