libnds icon indicating copy to clipboard operation
libnds copied to clipboard

Official RumblePak not recognised

Open ssstolk opened this issue 10 months ago • 2 comments

Bug Report

What's the issue you encountered?

My official Rumble Pak is not recognised by libnds' code in rumble.c.

How can the issue be reproduced?

Call rumbleIsInserted() and it returns false, even though my official NintendoDS Rumble Pak (model no. NTR-008, NTR-A-ZV-USA) is inserted. This Rumble Pak came with Metroid Pinball.

Environment?

N/A

Additional context?

I managed to fix the issue, for this particular RumblePak at least, by changing the last line to include a check for the value that my RumblePak provides at the GBA SLOT address:

id = *(vu16*)0x08000000;
return (id == 0xFFFD || id == 0x7E00);

with the variable defined as vu16 id;

For reference, in earlier libnds code for rumble.c, I also had to adjust the libnds code to properly work with my RumblePak. I did that by removing the check on four[0] and four[2].

        rumbleType = RT_OFFICIAL;
        // Now check to see if it's true open bus, or if D1 is pulled low
        four[0] = GBA_BUS[0] & 3; //0xFF;
        four[1] = GBA_BUS[1] & 3; //0xFF;
        four[2] = GBA_BUS[2] & 3; //0xFF;
        four[3] = GBA_BUS[3] & 3; //0xFF;
        return /*(four[0] == 0x00) && (four[2] == 0x00) &&*/ (four[1] == 0x01) && (four[3] == 0x01);

Once detected, rumbling functionality (i.e., setting the rumble position) works as expected.

ssstolk avatar Feb 12 '25 12:02 ssstolk

According to gbatek, the official Rumble Pak (NTR-008, "bundled with Metroid Prime Pinball") reports itself as 0xFFFD, not 0x7E00. Can you provide a picture of the device? Does it actually work with official software that can make use of it?

fincs avatar Feb 12 '25 19:02 fincs

Yes and yes. Tried it with Metroid Pinball, which it was packaged with.

Image

ssstolk avatar Feb 13 '25 12:02 ssstolk