PCSX2 / pcsx2

PCSX2 - The Playstation 2 Emulator
https://pcsx2.net
GNU General Public License v3.0
11.6k stars 1.6k forks source link

[BUG]: Jak and Daxter: VIF unknown CMD issue when collecting orbs. #4759

Open ghost opened 3 years ago

ghost commented 3 years ago

Describe the Bug

The game "Jak and Daxter" can trigger some VIF errors when picking some precise precursor orbs in some specific places.

Those errors doesn't crash the game if you don't use the full fpu mode but those are still pretty bad regardless.

Reproduction Steps

Load the savestate with the blockdump and observe the problem.

Expected Behavior

The console shouldn't spam any VIF errors when collecting orbs.

PCSX2 Revision

dev-1705-g18311d6a4-windows-x86

Operating System

Windows 10 (64bit)

If Linux - Specify Distro

No response

CPU

I9 9900k

GPU

RTX 3070

GS Settings

No response

Emulation Settings

VU kickstart for SPS problems.

GS Window Screenshots

The bug in action:

Capture

Logs & Dumps

Blockdump + savestate: https://drive.google.com/file/d/1XDV_XvFsYiGr47Cd-C_5QZTn5CB3aG8Y/view?usp=sharing

refractionpcsx2 commented 3 years ago

Does the EE timing hack do anything?

ghost commented 3 years ago

Nope, no existing hacks or settings can fix the problem.

refractionpcsx2 commented 3 years ago

The blockdump is non-functional, it's missing blocks to boot the game.

ghost commented 3 years ago

This one should work : https://drive.google.com/file/d/1dYZPoCRvFvKCnFX8QJknK6HplE1UHs0u/view?usp=sharing

refractionpcsx2 commented 3 years ago

looks like bad data in the VIF DMA tags

VIF (0072fa78 a71bdb64): VIF1 Tag 002cd580_20000000 size=0, id=2, madr=2cd580, tadr=2cd570 VIF (0072fa78 a71bdb64): VIF1 SrcChain TTE=1, data = 0x00000000.00000000 VIF (0072fa78 a71bdb64): New VifCMD 0 tagsize 0 irq 0 VIF (0072fa78 a71bdb64): vifCode_Nop VIF (0072fa78 a71bdb64): New VifCMD 0 tagsize 0 irq 0 VIF (0072fa78 a71bdb64): vifCode_Nop VIF (0072fa88 a71bdb69): vif1Interrupt: a71bdb69 chcr 20000145, done 0, qwc 0 VIF (0072fa88 a71bdb69): VIF1 Tag 002cd7c0_20000000 size=0, id=2, madr=2cd7c0, tadr=2cd580 VIF (0072fa88 a71bdb69): VIF1 SrcChain TTE=1, data = 0x40000000.3f0c04e7 VIF (0072fa88 a71bdb69): New VifCMD 3f tagsize 0 irq 0 VIF (0072fa88 a71bdb69): vifCode_Null > Vif1: Unknown VifCmd! [3f] VIF (0072fa90 a71bdb6c): vif1Interrupt: a71bdb6c chcr 20000145, done 0, qwc 0 VIF (0072fa90 a71bdb6c): VIF1 Tag 002cd7c0_20000000 size=0, id=2, madr=2cd7c0, tadr=2cd580 VIF (0072fa90 a71bdb6c): VIF1 SrcChain TTE=1, data = 0x40000000.3f0c04e7 VIF (0072fa90 a71bdb6c): New VifCMD 40 tagsize 0 irq 0 VIF (0072fa90 a71bdb6c): vifCode_Null > Vif1: Unknown VifCmd! [40] VIF (0072fab0 a71bdb74): vif1Interrupt: a71bdb74 chcr 20000145, done 0, qwc 0 VIF (0072fab0 a71bdb74): VIF1 Tag 002cd910_20000000 size=0, id=2, madr=2cd910, tadr=2cd7c0 VIF (0072fab0 a71bdb74): VIF1 SrcChain TTE=1, data = 0x00000000.00000000 VIF (0072fab0 a71bdb74): New VifCMD 0 tagsize 0 irq 0 VIF (0072fab0 a71bdb74): vifCode_Nop VIF (0072fab0 a71bdb74): New VifCMD 0 tagsize 0 irq 0 VIF (0072fab0 a71bdb74): vifCode_Nop

It can probably be safely ignored (rest of the tag seems to make sense), not sure why it's in there in the first place. But the game seems to be set to ignore bad VIF commands, maybe for this reason, but of course we still print it.

Seems the data is stored in RAM in the "tag storage" section, best guess is the upper 64bits were used for another command and not cleared before saving, so it ended up in the tag. The problem is we will never know if this happens on the console.

TheTechnician27 commented 3 months ago

Tested v1.7.5943 and confirmed it's still an issue after collecting a few orbs near the start of Sentinel Beach while channeling blue eco. Collecting an orb generates:


[  378.5294] Vif1: Unknown VifCmd! [40]
[  378.5458] Vif1: Unknown VifCmd! [3f]
[  378.5460] Vif1: Unknown VifCmd! [40]
[  378.5624] Vif1: Unknown VifCmd! [3f]
[  378.5625] Vif1: Unknown VifCmd! [40]
[  378.5790] Vif1: Unknown VifCmd! [3f]
[  378.5791] Vif1: Unknown VifCmd! [40]
[  378.5959] Vif1: Unknown VifCmd! [3f]
[  378.5960] Vif1: Unknown VifCmd! [40]
[  378.6125] Vif1: Unknown VifCmd! [3f]
[  378.6126] Vif1: Unknown VifCmd! [40]
[  378.6293] Vif1: Unknown VifCmd! [3f]
[  378.6295] Vif1: Unknown VifCmd! [40]
[  378.6458] Vif1: Unknown VifCmd! [3f]
[  378.6459] Vif1: Unknown VifCmd! [40]
[  378.6624] Vif1: Unknown VifCmd! [3f]
[  378.6626] Vif1: Unknown VifCmd! [40]
[  378.6792] Vif1: Unknown VifCmd! [3f]
[  378.6794] Vif1: Unknown VifCmd! [40]
[  378.6960] Vif1: Unknown VifCmd! [3f]
[  378.6962] Vif1: Unknown VifCmd! [40]
[  378.7125] Vif1: Unknown VifCmd! [3f]
[  378.7126] Vif1: Unknown VifCmd! [40]
[  378.7292] Vif1: Unknown VifCmd! [3f]
[  378.7293] Vif1: Unknown VifCmd! [40]
[  378.7459] Vif1: Unknown VifCmd! [3f]
[  378.7460] Vif1: Unknown VifCmd! [40]
[  378.7626] Vif1: Unknown VifCmd! [3f]
[  378.7627] Vif1: Unknown VifCmd! [40]
[  378.7793] Vif1: Unknown VifCmd! [3f]
[  378.7794] Vif1: Unknown VifCmd! [40]```