OpcodeDecoding: Don't raise panic alerts for unknown opcodes 0x01-0x07

A pop-up is no longer generated for the Wiggler capsule in Mario Party 5 (https://bugs.dolphin-emu.org/issues/8104).
This commit is contained in:
Pokechu22 2022-01-22 16:31:33 -08:00
parent 237947e2f1
commit 79b2185117
2 changed files with 11 additions and 10 deletions

View File

@ -193,13 +193,7 @@ public:
}
OPCODE_CALLBACK(void OnUnknown(u8 opcode, const u8* data))
{
if (static_cast<Opcode>(opcode) == Opcode::GX_UNKNOWN_RESET)
{
// Datel software uses this command
m_cycles += 6;
DEBUG_LOG_FMT(VIDEO, "GX Reset?");
}
else if (static_cast<Opcode>(opcode) == Opcode::GX_CMD_UNKNOWN_METRICS)
if (static_cast<Opcode>(opcode) == Opcode::GX_CMD_UNKNOWN_METRICS)
{
// 'Zelda Four Swords' calls it and checks the metrics registers after that
m_cycles += 6;
@ -213,11 +207,19 @@ public:
}
else
{
if (!s_is_fifo_error_seen)
// 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
// 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 && opcode > 0x07)
{
CommandProcessor::HandleUnknownOpcode(opcode, data, is_preprocess);
s_is_fifo_error_seen = true;
}
ERROR_LOG_FMT(VIDEO, "FIFO: Unknown Opcode({:#04x} @ {}, preprocessing = {})", opcode,
fmt::ptr(data), is_preprocess ? "yes" : "no");
s_is_fifo_error_seen = true;
m_cycles += 1;
}
}

View File

@ -24,7 +24,6 @@ extern bool g_record_fifo_data;
enum class Opcode
{
GX_NOP = 0x00,
GX_UNKNOWN_RESET = 0x01,
GX_LOAD_BP_REG = 0x61,
GX_LOAD_CP_REG = 0x08,