mgba-emu / mgba

mGBA Game Boy Advance Emulator
https://mgba.io/
Mozilla Public License 2.0
5.7k stars 786 forks source link

Game Boy Player detection does not match GBP Start-up Disc behaviour #1258

Open felixjones opened 5 years ago

felixjones commented 5 years ago

Source of issue is implementation of GBP detection: https://github.com/mgba-emu/mgba/blob/27a58187051352f01b5b7f876ea6d7e6612edb11/src/gba/hardware.c#L507

This works for official GBP enhanced games (Such as Pokemon Pinball: Ruby & Sapphire) but fails for homebrew ROMs that use a different method for displaying the GBP splash.

Goomba Color, for example, displays its splash screen by copying a user-supplied 15bpp bitmap to VRAM in mode 3. As a result, this ROM's Game Boy Player rumble enhancements are not available in mGBA.

The Game Boy Player Start-up Disc behaviour is to check the video capture for the GBP splash screen, rather than the Game Boy Player's memory in hardware.

Game Boy Interface also uses video capture for detection.

felixjones commented 5 years ago

Because example ROMs are difficult to find for this I've created a quick one that reproduces this issue: gbpdetect.zip

Uses mode 3 for displaying the GBP detection splash (will show for roughly 2.5 seconds, unless GBP is quickly detected) and will display "GameBoy Player [ OK ]" with the Game Boy Player Start-up Disc.