diff options
| author | Pokechu22 <Pokechu022@gmail.com> | 2022-02-12 18:29:59 -0800 |
|---|---|---|
| committer | Pokechu22 <Pokechu022@gmail.com> | 2022-02-12 23:38:20 -0800 |
| commit | 97482a61c66d2a70bf375985ff27ec1780c0f961 (patch) | |
| tree | 4776fe68795e232608b6844c8c4010e9c466653f /Source/Core/VideoCommon/CommandProcessor.cpp | |
| parent | 68cdceb4bef1b6923c3d3039b2535209dd58db8b (diff) | |
CommandProcessor: Ignore unknown opcode for 0x3f
Diffstat (limited to 'Source/Core/VideoCommon/CommandProcessor.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/CommandProcessor.cpp | 17 |
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; |
