MiSTer-devel / PSX_MiSTer

PSX for MiSTer
GNU General Public License v2.0
211 stars 51 forks source link

Tsuridou - Keiryuu Mizuumi-hen (Japan) #209

Open RacingWingman opened 1 year ago

RacingWingman commented 1 year ago

Issue The game only displays a black screen when going to the options menu. It doesn't hang though since you can get back to the main menu by using the X-button.

Reproduce Select options (the one with green text) from the main menu.

Workaround Don't go to the options menu. The game itself works fine.

BIOS 5000

CD Image Redump .chd

Core Version PSX_DualSDRAM20221130

RobertPeip commented 1 year ago

This same problem is also on the list of games not working on all ps2 models: https://en.wikipedia.org/wiki/List_of_PlayStation_games_incompatible_with_PlayStation_2

Works with PCSX redux and DuckStation, not with Mednafen.

Very likely CD related, somehow.

It's reported sometimes it does load correct and then works.

In error case, the whole VRAM for textures and palettes seems to be ok, but the rendering command (rectangle draw) is never executed.

RobertPeip commented 1 year ago

The game is overwriting the linked list DMA data with a OTC DMA while the linked list processes empty elements. Unclear if that is timing or if the OTC DMA should not run at all under these circumstances, even though they have the same priority, so the OTC DMA should win.

Interesting side note: the game waits for the OTC DMA to end, which usually makes no sense, as OTC DMAs should be instant and take over the bus from CPU, effectivly stalling the CPU until it's done. Could be just useless, but maybe it was done on purpose to circumvent the problem that would occur if the linked list DMA had indeed priority?

Another possible issue: the CPU is doing a lot of memory transfers while the empty linked list entries run. Could be that the priority between HW and core is different in that regard, as the core will give the already started memory actions priority, even if there are several, e.g. with write fifo filled. This is extremely difficult to test unfortunatly.

(if anyone is wondering why it works in some emulators: if the CPU running in parallel with a DMA is not emulated, which is of course wrong, then this bug cannot trigger)