summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/CommandProcessor.cpp
diff options
context:
space:
mode:
authorPokechu22 <Pokechu022@gmail.com>2022-02-12 18:29:59 -0800
committerPokechu22 <Pokechu022@gmail.com>2022-02-12 23:38:20 -0800
commit97482a61c66d2a70bf375985ff27ec1780c0f961 (patch)
tree4776fe68795e232608b6844c8c4010e9c466653f /Source/Core/VideoCommon/CommandProcessor.cpp
parent68cdceb4bef1b6923c3d3039b2535209dd58db8b (diff)
CommandProcessor: Ignore unknown opcode for 0x3f
Diffstat (limited to 'Source/Core/VideoCommon/CommandProcessor.cpp')
-rw-r--r--Source/Core/VideoCommon/CommandProcessor.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/Source/Core/VideoCommon/CommandProcessor.cpp b/Source/Core/VideoCommon/CommandProcessor.cpp
index 451cdcce9a..2203e235a7 100644
--- a/Source/Core/VideoCommon/CommandProcessor.cpp
+++ b/Source/Core/VideoCommon/CommandProcessor.cpp
@@ -616,12 +616,19 @@ void SetCpClearRegister()
void HandleUnknownOpcode(u8 cmd_byte, const u8* buffer, bool preprocess)
{
- // Datel software uses 0x01 during startup, and Mario Party 5's Wiggler capsule
- // accidentally uses 0x01-0x03 due to sending 4 more vertices than intended.
- // Hardware testing indicates that 0x01-0x07 do nothing, so to avoid annoying the user with
+ // Datel software uses 0x01 during startup, and Mario Party 5's Wiggler capsule accidentally uses
+ // 0x01-0x03 due to sending 4 more vertices than intended (see https://dolp.in/i8104).
+ // Prince of Persia: Rival Swords sends 0x3f if the home menu is opened during the intro cutscene
+ // due to a game bug resulting in an incorrect vertex desc that results in the float value 1.0,
+ // encoded as 0x3f800000, being parsed as an opcode (see https://dolp.in/i9203).
+ //
+ // Hardware testing indicates that these opcodes do nothing, so to avoid annoying the user with
// spurious popups, we don't create a panic alert in those cases. Other unknown opcodes
- // (such as 0x18) seem to result in hangs.
- if (!s_is_fifo_error_seen && cmd_byte > 0x07)
+ // (such as 0x18) seem to result in actual hangs on real hardware, so the alert still is important
+ // to keep around for unexpected cases.
+ const bool suppress_panic_alert = (cmd_byte <= 0x7) || (cmd_byte == 0x3f);
+
+ if (!s_is_fifo_error_seen && !suppress_panic_alert)
{
s_is_fifo_error_seen = true;