I had to look it up because this was written over 7 years ago.
JoyTap's main function is to serve as the base class for 'joystick port extenders', for example NinjaTap. If you plug JoyTap/NinjaTap into a joystick port then dynamically 4 new joystick ports become available (in those new ports you can plug normal mouse, joystick, .. devices). In this sense JoyTap is an internal implementation detail.
The second function of joyTap is as a very simple joystick port extender. It just wires the pins of several joystick connectors together to one MSX joystick connector. This has the effect that the outputs (msx->joystick) are send to all connected joystick devices and the inputs (joystick->msx) are ANDed together and send to the MSX.
Since we already had the JoyTap base class, adding this functionality was less than 10 lines of code extra.
I once built a device with two input- and two output-connectors that allowed me to connect my joystick and mouse to my msx, and by just turning some switches allowed me to connect the mouse/joystick to either msx port A or B. So without physically (un)plugging the joystick devices. (I built this because I already had to re-solder the connectors on the msx-main-board a few times). A side effect of this device was that it also allowed the configuration that both joystick/mouse are connected to the same msx port. I don't know if it was electrically completely safe, but it behaved in the same way as the JoyTap stuff described above.
So in a way JoyTap emulates (part of) my old switch-device. It might be useful if you've connected multiple host joysticks and you want to use them simultaneously to control the same MSX joystick port. Though this is a very limited use case. There almost certainly is no msx software that requires JoyTap.
--
Here's a very_brief overview of the joystick devices that are emulated in openMSX:
JoyMega:
6-button mega-drive joypad. Only available when there is a host joystick connected.
Joystick:
Emulate a normal msx joystick. Only available when there is a host joystick connected.
JoyTap:
See above.
KeyJoystick:
Emulate a normal msx joystick, but this is controlled via host keyboard instead of host joystick.
MagicKey:
A simple dongle that permanently pressed UP and DOWN (not possible with a normal joystick). IIRC some games use this to enable special features (cheats?).
Mouse:
Normal msx mouse.
NinjaTap:
Allows to connect up to 4 normal joysticks to one msx joystick ports. For example used in the game 'Magical Labyrinth'.
SETetrisDongle:
Hardware copy-protection device for the game 'Tetris II Special Edition'.
Trackball:
For example used in the game 'Hole in one'. The exact protocol of this device is unknown, it was mostly reverse engineered by 'n_n'.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Ok, I'll think of the "joytap" as kind of a "homebrew joystick hub" then. It's different from a traditional multi-tap as those act more like a switch. :)
Thanks the info you provided I also could find some more information about the trackball. I'll post it here in case someones searches the Net for help on this topic.
The HAL Laboratory games that support the trackball are listed on the following link. They require the trackball to be connected on joyport2 on boot. It will not work if you plug the device after the game/software is already running. http://www.generation-msx.nl/hardware/hal-laboratory/htc-001/225
OTOH, the trackball protocol seems to be an earlier/rudimentary version of the MSX-mouse protocol. The MSX-BIOS seems to detect and support it alongside with the MSX-mouse. This means that programs that use the GTPAD function to read the mouse will also work with the trackball. I tested it (emulated) with Graph Saurus v2.0 and it seems to work as expected.
The requirement to be connected to joyport2 is exclusive to Hal Labs software. Software that use the BIOS will work fine with the trackball connected to joyport1 too.
About the NinjaTap: Is this the game that supports it? I couldn't make the NinjaTap work. Is any special configuration needed? http://gigamix.jp/download/gigamix/mlr.php
Was this Ninja-Tap a commercially available product? Besides the emulation on openMSX, are there any schematics or info available on its protocol? I would be glad to implement support for this in my library if possible.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
In fact, there are many devices for the joystick port available on openMSX that are not described on the manual.
I had to look it up because this was written over 7 years ago.
JoyTap's main function is to serve as the base class for 'joystick port extenders', for example NinjaTap. If you plug JoyTap/NinjaTap into a joystick port then dynamically 4 new joystick ports become available (in those new ports you can plug normal mouse, joystick, .. devices). In this sense JoyTap is an internal implementation detail.
The second function of joyTap is as a very simple joystick port extender. It just wires the pins of several joystick connectors together to one MSX joystick connector. This has the effect that the outputs (msx->joystick) are send to all connected joystick devices and the inputs (joystick->msx) are ANDed together and send to the MSX.
Since we already had the JoyTap base class, adding this functionality was less than 10 lines of code extra.
I once built a device with two input- and two output-connectors that allowed me to connect my joystick and mouse to my msx, and by just turning some switches allowed me to connect the mouse/joystick to either msx port A or B. So without physically (un)plugging the joystick devices. (I built this because I already had to re-solder the connectors on the msx-main-board a few times). A side effect of this device was that it also allowed the configuration that both joystick/mouse are connected to the same msx port. I don't know if it was electrically completely safe, but it behaved in the same way as the JoyTap stuff described above.
So in a way JoyTap emulates (part of) my old switch-device. It might be useful if you've connected multiple host joysticks and you want to use them simultaneously to control the same MSX joystick port. Though this is a very limited use case. There almost certainly is no msx software that requires JoyTap.
--
Here's a very_brief overview of the joystick devices that are emulated in openMSX:
For use in the game 'Arkanoid' and a few others.
More info: http://www.msx.org/forumtopic7661.html
6-button mega-drive joypad. Only available when there is a host joystick connected.
Emulate a normal msx joystick. Only available when there is a host joystick connected.
See above.
Emulate a normal msx joystick, but this is controlled via host keyboard instead of host joystick.
A simple dongle that permanently pressed UP and DOWN (not possible with a normal joystick). IIRC some games use this to enable special features (cheats?).
Normal msx mouse.
Allows to connect up to 4 normal joysticks to one msx joystick ports. For example used in the game 'Magical Labyrinth'.
Hardware copy-protection device for the game 'Tetris II Special Edition'.
For example used in the game 'Hole in one'. The exact protocol of this device is unknown, it was mostly reverse engineered by 'n_n'.
Ok, I'll think of the "joytap" as kind of a "homebrew joystick hub" then. It's different from a traditional multi-tap as those act more like a switch. :)
Thanks the info you provided I also could find some more information about the trackball. I'll post it here in case someones searches the Net for help on this topic.
The HAL Laboratory games that support the trackball are listed on the following link. They require the trackball to be connected on joyport2 on boot. It will not work if you plug the device after the game/software is already running.
http://www.generation-msx.nl/hardware/hal-laboratory/htc-001/225
OTOH, the trackball protocol seems to be an earlier/rudimentary version of the MSX-mouse protocol. The MSX-BIOS seems to detect and support it alongside with the MSX-mouse. This means that programs that use the GTPAD function to read the mouse will also work with the trackball. I tested it (emulated) with Graph Saurus v2.0 and it seems to work as expected.
The requirement to be connected to joyport2 is exclusive to Hal Labs software. Software that use the BIOS will work fine with the trackball connected to joyport1 too.
About the NinjaTap: Is this the game that supports it? I couldn't make the NinjaTap work. Is any special configuration needed?
http://gigamix.jp/download/gigamix/mlr.php
Was this Ninja-Tap a commercially available product? Besides the emulation on openMSX, are there any schematics or info available on its protocol? I would be glad to implement support for this in my library if possible.