Project

General

Profile

Emulator Issues #12017

Maxplay fails to load games

Added by pokechu22 2 months ago.

Status:
New
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

Game Name?

Maxplay (USA release, bundled with Massive Memory and labeled as Wii compatible); I suspect this affects the normal release too.

Game ID?

GNHE5d

MD5 Hash?

8a68e9917d7648674cdb51844a4df3eb (not in redump; I'll submit it soon. I'm fairly sure this is a good dump though.)

What's the problem? Describe what went wrong.

Maxplay fails to load games, resulting in a white screen.

What steps will reproduce the problem?

  1. Make sure DSP LLE is selected and Skip Main Menu is unchecked (#8179), and that dual core is enabled (#8175).
  2. Start Maxplay, ignoring any "FIFO is overflowed" messages.
  3. Select a game, and press A.
  4. Observe that a white screen appears, and the game does not start. However, the game is not frozen, as pressing Z will pause and allow exiting via start.

Is the issue present in the latest development version?

Confirmed in 5.0-11608.

Is the issue present in the latest stable version?

No, it is not present in 5.0.

If the issue isn't present in the latest stable version, which is the first broken version?

5.0-11476 has the issue; 5.0-11458 is fine. This means it was introduced in my DI pull request, and is probably related to stoping the motor.

What are your PC specifications?

  • CPU: AMD A6-340M APU with Radeon(tm) Graphics, 1500 Mhz, 4 Core(s), 4 Logical Processor(s)
  • GPU: AMD Radeon HD 6520G
  • OS: Windows 10 Pro (Insider preview) 10.10.19041.153

Is there anything else that can help developers narrow down the issue?

Tested with Dual core enabled, using OpenGL and D3D, and with IPL and DSP LLE enabled (with dumped DSP roms, not the built-in ones). The ScheduleEvent_Threadsafe hack mentioned in #8175 does not help.

Logs from before the change:

27:09:466 Core\HW\DVD\DVDInterface.cpp:920 I[DVD]: Read DiscID 00000000
27:09:480 Core\HW\DVD\DVDInterface.cpp:1091 I[DVD]: DTK enabled
27:09:482 Core\HW\DVD\DVDInterface.cpp:911 I[DVD]: Read: DVDOffset=00002440, DMABuffer = 0145e640, SrcLength = 00000020, DMALength = 00000020
27:09:483 Core\HW\DVD\DVDInterface.cpp:911 I[DVD]: Read: DVDOffset=00002460, DMABuffer = 01200000, SrcLength = 00001520, DMALength = 00001520
27:09:488 Core\HW\DVD\DVDInterface.cpp:911 I[DVD]: Read: DVDOffset=50000000, DMABuffer = 00003100, SrcLength = 00316000, DMALength = 00316000
27:11:151 Core\HW\DVD\DVDInterface.cpp:911 I[DVD]: Read: DVDOffset=00017000, DMABuffer = 017fe8c0, SrcLength = 00000040, DMALength = 00000040
27:11:376 Core\HW\DVD\DVDInterface.cpp:911 I[DVD]: Read: DVDOffset=00018000, DMABuffer = 00af8440, SrcLength = 00001960, DMALength = 00001960
27:19:003 Core\HW\DVD\DVDInterface.cpp:1062 I[DVD]: DVDLowStopMotor eject kill!
27:25:724 Core\HW\DVD\DVDInterface.cpp:1062 I[DVD]: DVDLowStopMotor  kill!
27:25:729 Core\HW\DVD\DVDInterface.cpp:920 I[DVD]: Read DiscID 00000000
27:25:799 Core\HW\DVD\DVDInterface.cpp:1091 I[DVD]: DTK enabled
27:25:801 Core\HW\DVD\DVDInterface.cpp:911 I[DVD]: Read: DVDOffset=09900000, DMABuffer = 008777e0, SrcLength = 00100000, DMALength = 00100000

And after:

28:24:310 Core\HW\DVD\DVDInterface.cpp:364 I[DVD]: Reset with spinup
28:25:587 Core\HW\DVD\DVDInterface.cpp:364 I[DVD]: Reset without spinup
28:27:402 Core\HW\DVD\DVDInterface.cpp:817 I[DVD]: Read DiscID: buffer 80000000
28:27:416 Core\HW\DVD\DVDInterface.cpp:1184 I[DVD]: DTK enabled: buffer size 10
28:27:420 Core\HW\DVD\DVDInterface.cpp:807 I[DVD]: Read: DVDOffset=00002440, DMABuffer = 8145e640, SrcLength = 00000020, DMALength = 00000020
28:27:422 Core\HW\DVD\DVDInterface.cpp:807 I[DVD]: Read: DVDOffset=00002460, DMABuffer = 81200000, SrcLength = 00001520, DMALength = 00001520
28:27:426 Core\HW\DVD\DVDInterface.cpp:807 I[DVD]: Read: DVDOffset=50000000, DMABuffer = 80003100, SrcLength = 00316000, DMALength = 00316000
28:29:387 Core\HW\DVD\DVDInterface.cpp:807 I[DVD]: Read: DVDOffset=00017000, DMABuffer = 817fe8c0, SrcLength = 00000040, DMALength = 00000040
28:29:626 Core\HW\DVD\DVDInterface.cpp:807 I[DVD]: Read: DVDOffset=00018000, DMABuffer = 80af8440, SrcLength = 00001960, DMALength = 00001960
28:47:709 Core\HW\DVD\DVDInterface.cpp:1065 I[DVD]: DVDLowStopMotor
28:52:532 Core\HW\DVD\DVDInterface.cpp:1065 I[DVD]: DVDLowStopMotor
28:52:538 Core\HW\DVD\DVDInterface.cpp:817 I[DVD]: Read DiscID: buffer 802b99e0
28:52:539 Core\HW\DVD\DVDInterface.cpp:714 E[DVD]: Motor stopped.
28:52:539 Core\HW\DVD\DVDInterface.cpp:940 I[DVD]: Requesting error... (0x04020400)
28:52:542 Core\HW\DVD\DVDInterface.cpp:807 I[DVD]: Read: DVDOffset=09900000, DMABuffer = 808777e0, SrcLength = 00100000, DMALength = 00100000
28:52:542 Core\HW\DVD\DVDInterface.cpp:714 E[DVD]: Motor stopped.

Note that the DVDLowStopMotor eject kill! part is a false positive due to it using the wrong arguments (DICMDBUF[1] and DICMDBUF[2] are ignored, but the IOS version has 2 parameters, and the code used to treat it as if those parameters were in DICMDBUF[1] and DICMDBUF[2]).

Also available in: Atom PDF