From ab67374c8a308b708e0d2b7ac0d7fafc9864a881 Mon Sep 17 00:00:00 2001 From: zilmar Date: Thu, 7 Sep 2023 11:19:44 +0930 Subject: [PATCH] RSP: Update the display of RSP opcodes in debugger --- Source/Project64-rsp-core/cpu/RSPOpcode.h | 19 ++++ .../cpu/RSPiInstruction.cpp | 92 ++++++++++++++++++- 2 files changed, 107 insertions(+), 4 deletions(-) diff --git a/Source/Project64-rsp-core/cpu/RSPOpcode.h b/Source/Project64-rsp-core/cpu/RSPOpcode.h index 514746789..5c7697c46 100644 --- a/Source/Project64-rsp-core/cpu/RSPOpcode.h +++ b/Source/Project64-rsp-core/cpu/RSPOpcode.h @@ -171,7 +171,16 @@ enum RSPVectorOpCodes RSP_VECTOR_VABS = 19, RSP_VECTOR_VADDC = 20, RSP_VECTOR_VSUBC = 21, + RSP_VECTOR_VADDB = 22, + RSP_VECTOR_VSUBB = 23, + RSP_VECTOR_VACCB = 24, + RSP_VECTOR_VSUCB = 25, + RSP_VECTOR_VSAD = 26, + RSP_VECTOR_VSAC = 27, + RSP_VECTOR_VSUM = 28, RSP_VECTOR_VSAW = 29, + RSP_VECTOR_VACC = 30, + RSP_VECTOR_VSUC = 31, RSP_VECTOR_VLT = 32, RSP_VECTOR_VEQ = 33, RSP_VECTOR_VNE = 34, @@ -186,6 +195,8 @@ enum RSPVectorOpCodes RSP_VECTOR_VNOR = 43, RSP_VECTOR_VXOR = 44, RSP_VECTOR_VNXOR = 45, + RSP_VECTOR_V056 = 46, + RSP_VECTOR_V057 = 47, RSP_VECTOR_VRCP = 48, RSP_VECTOR_VRCPL = 49, RSP_VECTOR_VRCPH = 50, @@ -194,6 +205,14 @@ enum RSPVectorOpCodes RSP_VECTOR_VRSQL = 53, RSP_VECTOR_VRSQH = 54, RSP_VECTOR_VNOP = 55, + RSP_VECTOR_VEXTT = 56, + RSP_VECTOR_VEXTQ = 57, + RSP_VECTOR_VEXTN = 58, + RSP_VECTOR_V073 = 59, + RSP_VECTOR_VINST = 60, + RSP_VECTOR_VINSQ = 61, + RSP_VECTOR_VINSN = 62, + RSP_VECTOR_VNULL = 63, }; enum RSPLSC2OpCodes diff --git a/Source/Project64-rsp-core/cpu/RSPiInstruction.cpp b/Source/Project64-rsp-core/cpu/RSPiInstruction.cpp index 7c82b699d..e9907ecd1 100644 --- a/Source/Project64-rsp-core/cpu/RSPiInstruction.cpp +++ b/Source/Project64-rsp-core/cpu/RSPiInstruction.cpp @@ -363,6 +363,14 @@ void RSPInstruction::DecodeCop2Name(void) break; case RSP_VECTOR_VMULU: strcpy(m_Name, "VMULU"); + sprintf(m_Param, "$v%d, %d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); + break; + case RSP_VECTOR_VRNDP: + strcpy(m_Name, "VRNDP"); + sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, (m_Instruction.vs & 1), m_Instruction.vt, ElementSpecifier(m_Instruction.e)); + break; + case RSP_VECTOR_VMULQ: + strcpy(m_Name, "VMULQ"); sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); break; case RSP_VECTOR_VMUDL: @@ -389,6 +397,10 @@ void RSPInstruction::DecodeCop2Name(void) strcpy(m_Name, "VMACU"); sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); break; + case RSP_VECTOR_VRNDN: + strcpy(m_Name, "VRNDN"); + sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, (m_Instruction.vs & 1), m_Instruction.vt, ElementSpecifier(m_Instruction.e)); + break; case RSP_VECTOR_VMACQ: strcpy(m_Name, "VMACQ"); sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); @@ -417,14 +429,14 @@ void RSPInstruction::DecodeCop2Name(void) strcpy(m_Name, "VSUB"); sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); break; + case RSP_VECTOR_VSUT: + strcpy(m_Name, "Reserved (VSUT)"); + strcpy(m_Param, ""); + break; case RSP_VECTOR_VABS: strcpy(m_Name, "VABS"); sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); break; - case RSP_VECTOR_VSUT: - strcpy(m_Name, "VSUT"); - strcpy(m_Param, ""); - break; case RSP_VECTOR_VADDC: strcpy(m_Name, "VADDC"); sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); @@ -433,10 +445,46 @@ void RSPInstruction::DecodeCop2Name(void) strcpy(m_Name, "VSUBC"); sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); break; + case RSP_VECTOR_VADDB: + strcpy(m_Name, "Reserved (VADDB)"); + sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); + break; + case RSP_VECTOR_VSUBB: + strcpy(m_Name, "Reserved (VSUBB)"); + sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); + break; + case RSP_VECTOR_VACCB: + strcpy(m_Name, "Reserved (VACCB)"); + sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); + break; + case RSP_VECTOR_VSUCB: + strcpy(m_Name, "Reserved (VSUCB)"); + sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); + break; + case RSP_VECTOR_VSAD: + strcpy(m_Name, "Reserved (VSAD)"); + sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); + break; + case RSP_VECTOR_VSAC: + strcpy(m_Name, "Reserved (VSAC)"); + sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); + break; + case RSP_VECTOR_VSUM: + strcpy(m_Name, "Reserved (VSUM)"); + sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); + break; case RSP_VECTOR_VSAW: strcpy(m_Name, "VSAW"); sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); break; + case RSP_VECTOR_VACC: + strcpy(m_Name, "Reserved (VACC)"); + sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); + break; + case RSP_VECTOR_VSUC: + strcpy(m_Name, "Reserved (VSUC)"); + sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); + break; case RSP_VECTOR_VLT: strcpy(m_Name, "VLT"); sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); @@ -493,6 +541,14 @@ void RSPInstruction::DecodeCop2Name(void) strcpy(m_Name, "VNXOR"); sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); break; + case RSP_VECTOR_V056: + strcpy(m_Name, "Reserved (V056)"); + sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); + break; + case RSP_VECTOR_V057: + strcpy(m_Name, "Reserved (V057)"); + sprintf(m_Param, "$v%d, $v%d, $v%d%s", m_Instruction.vd, m_Instruction.vs, m_Instruction.vt, ElementSpecifier(m_Instruction.e)); + break; case RSP_VECTOR_VRCP: strcpy(m_Name, "VRCP"); sprintf(m_Param, "$v%d[%d], $v%d%s", m_Instruction.sa, m_Instruction.rd & 0x7, m_Instruction.rt, ElementSpecifier(m_Instruction.e)); @@ -524,6 +580,34 @@ void RSPInstruction::DecodeCop2Name(void) strcpy(m_Name, "VNOP"); strcpy(m_Param, ""); break; + case RSP_VECTOR_VEXTT: + strcpy(m_Name, "Reserved (VEXTT)"); + strcpy(m_Param, ""); + break; + case RSP_VECTOR_VEXTQ: + strcpy(m_Name, "Reserved (VEXTQ)"); + strcpy(m_Param, ""); + break; + case RSP_VECTOR_VEXTN: + strcpy(m_Name, "Reserved (VEXTN)"); + strcpy(m_Param, ""); + break; + case RSP_VECTOR_V073: + strcpy(m_Name, "Reserved (V073)"); + strcpy(m_Param, ""); + break; + case RSP_VECTOR_VINST: + strcpy(m_Name, "Reserved (VINST)"); + strcpy(m_Param, ""); + break; + case RSP_VECTOR_VINSQ: + strcpy(m_Name, "Reserved (VINSQ)"); + strcpy(m_Param, ""); + break; + case RSP_VECTOR_VINSN: + strcpy(m_Name, "Reserved (VINSN)"); + strcpy(m_Param, ""); + break; default: strcpy(m_Name, "UNKNOWN"); sprintf(m_Param, "0x%08X", m_Instruction.Value);