Oh crap… This blog is getting dusty. Anyway, let’s get started!
I compared the Street Fighter 2 Champion Edition joypad routine with the one from HuDK. One of the most interesting thing is that SF2 performs an extra joyport read after reading the 5 joypad states in order to check if a Multitap (PI-PD003) is there. If the returned value is $F0, we have a Multitap.
Is there a way to detect how many joypads are plugged? What about the other multitaps?
Hopefully a Twin Tap and a Twin Commander magically landed on my desk for some time (thanks Adoru).
Let’s start with the Twin Tap. It’s a 2 ports multitap. Unfortunately there’s no way to detect available joypads or a 2 ports multitap.
Anyway! This multitap has some interesting peculiarity. If you check the you’ll see that there’s not 2 but 3 ports and a 3 positions selector switch. Why is there a third connector and a selector switch? I’m afraid we’ll never know.
The selector switch changes the joypads order. This means that the joypads plugged in the Twin Tap will appeared at a different position in the joypad read routine. Here’s a table with the switch positions and the joypad “positions”.
Switch position | 1 | 2 | 3 |
Joypad #0 | A | C | C |
Joypad #1 | B | C | C |
Joypad #2 | C | A | C |
Joypad #3 | C | B | C |
Joypad #4 | C | C | A |
As the C port is hidden (unless you are a sneaky hacker), the joyport value will always be $FF (no buttons pressed).
Conclusion: At the time of writing this post, only the Multitap (PI-PD003) can be detected and we can’t detect if a joypad is plugged. I don’t have much hope for the Joy Tap 3, the Battle Tap or the X-HE2, but who knows…
Higher resolution images can be found here.