ProjectArcade
28 строк · 1.3 Кб
1# RX4PMT - Casper's Scare School: Spooky Sports Day
2
3[OnFrame]
4# Work around a dcache issue by preventing the game from doing something pointless.
5#
6# The game's DVD read function writes 0x87654321 to the entire read buffer and 0x12345678 to the
7# last 4 bytes. It then calls DVDReadAsync() and without waiting for the read to complete at all,
8# it checks if the last 4 bytes are still 0x12345678. If they are, then the game fails.
9#
10# The check always passes on console because DVDReadAsync() -> issueCommand() calls
11# DCInvalidateRange() (dcbi) on the read buffer.
12#
13# Dolphin cannot emulate this without an extremely significant performance hit.
14#
15# .text:80164B8C lis r7, game_dvd_read_callback@ha
16# .text:80164B90 stw r0, 0(r17) # write 0x12345678 to the end of the buffer
17# .text:80164B94 mr r5, read_length # length
18# .text:80164B98 mr r6, read_offset # offset
19# .text:80164B9C addi r3, this, file.file_info # file_info
20# .text:80164BA0 subi r4, r4, dvd_read_buf@l # addr
21# .text:80164BA4 addi r7, r7, game_dvd_read_callback@l # callback
22# .text:80164BA8 li r8, 2 # unknown
23# .text:80164BAC bl DVDReadAsync
24#
25$Fix file reads (dcache bypass)
260x80164b90:dword:0x60000000
27[OnFrame_Enabled]
28$Fix file reads (dcache bypass)
29