Stephane-D / SGDK

SGDK - A free and open development kit for the Sega Mega Drive
https://www.patreon.com/SGDK
MIT License
1.7k stars 179 forks source link

Wrong JOY_getJoypadType(JOY_2) result #326

Open D0NM opened 2 months ago

D0NM commented 2 months ago

What I have (in BlastEm)

PORT1: PAD6 PORT2: TEAMPLAYER in TEAMPLAYER's PORT1: PAD6 (ofc, I enable TEAMPLAYER support on PORT2 manually)

The data reading for JOY_2 DOES NOT WORK , so JOY_readJoypad(JOY_2) never returns anything. The data reading for JOY_ALL reacts on JOY_2 activity and returns its state. The callbacks WORK FINE for both JOY_1 and JOY_2.

ERROR: JOY_getJoypadType(JOY_2) returns JOY_TYPE_UNKNOWN when it should return JOY_TYPE_PAD6

I suppose it might be a bug for all gamepads connected via TEAMPLAYER or EA 4-WAY PLAYER.

Peace!

UPD: even the sample\joy-test doesn't show the type correctly. i think its .bin file is outdated and uses old SGDK... It shows type "PHASER" for JOY_2

D0NM commented 2 months ago

i checked your code.... maybe it is all hw limitation... or bad emulation.

i just want to count the number of connected gamepads.. and i cannot do it

Stephane-D commented 2 months ago

It would be nice to confirm the issue on real hardware. The code was wrote a long time ago by Chilly Willy and as far i remember he validated against real hardware. Still maybe some devices has not been fully tested.

RealMalachi commented 2 months ago

If it worked before, it could be a regression. If I had to guess, maybe ram isn't being properly allocated, making it bleed into other controller ram data? I own a multitap I can test this with; team player with "ExtrA" mode. Might test SGDKs implementation later, have other controllers I need to test anyway

D0NM commented 2 months ago

Would be cool ti SGDK release had updated sample joy-test rom.bin It shows current gamepad activity and the detected names of the devices on the screen.

At my side... I added a hacky solution - i listen to all JOY inputs and mark those gamepads which use MODE, X, Y or Z buttons at least once. This hacky solution let me use at least 4 inputs