Project

General

Profile

Emulator Issues #10927

Games that require proper icache/dcache emulation to work

Added by JMC4789 over 1 year ago. Updated over 1 year ago.

Status:
Accepted
Priority:
Normal
Assignee:
-
% Done:

0%

Operating system:
N/A
Issue type:
Bug
Milestone:
Regression:
No
Relates to usability:
No
Relates to performance:
No
Easy:
No
Relates to maintainability:
No
Regression start:
Fixed in:

Description

One of the features that Dolphin doesn't support well (or support at all, in the case of dcache) is cache emulation. Basically, sometimes when a game writes to memory, it sometimes relies to the fact that those writes/reads go to the cache instead of memory itself. Because Dolphin does not emulate this, it can sometimes get the wrong values. Some games use this for anti-piracy, some games are bugged, and others we simply don't know.

Here are some titles I know about that require dcache/icache emulation. More will be added into comments as we find them.

Casper's Scare School: Spooky Sports Day - RX4E4Z and PAL region as well but I don't have gameID - dcache. Fails a check at boot. Reproduced on console by manually disabling the dcache. Screenshot of the failure on console included.
1080 Snowboarding NAOE01, NAOJ01, NAOP01 - icache due to coding bug? Works on interpreter.
Disney Infinity - Hack included in Dolphin to bypass dcache anti-emulator code.
Disney's Cars 2 - Hack included in Dolphin to bypass dcache anti-emulator code.
Various Homebrew/Hacks, such as Wiimm's Mario Kart Fun Packs - Likely codes that rely on icache/dcache behavior.

amarec20180301-082453.jpg (24.7 KB) amarec20180301-082453.jpg Screenshot of Casper failing on console after skipping dcbi JMC4789, 03/01/2018 01:25 PM
6638

Related issues

Has duplicate Emulator - Emulator Issues #6965: CTGP Revolution (a MKWii mod) requires interp to install, won't run due to whatever breaks Riivolution supportDuplicate

History

#1 Updated by leoetlino over 1 year ago

  • Status changed from New to Accepted

To expand on Casper: the game's DVD read function writes 0x87654321 to the entire read buffer and 0x12345678 to the last 4 bytes. It then calls DVDReadAsync() and without waiting for the read to complete at all, it checks if the last 4 bytes are still 0x12345678. If they are, then the game fails.

The check always passes on console because DVDReadAsync() -> issueCommand() calls DCInvalidateRange() (dcbi) on the read buffer.

#2 Updated by leoetlino over 1 year ago

  • Has duplicate Emulator Issues #6965: CTGP Revolution (a MKWii mod) requires interp to install, won't run due to whatever breaks Riivolution support added

Also available in: Atom PDF