The QuadTari is currently available. It allows for 4-player support for new games, or can be used (with supported games) to allow 2 joysticks to connect to the first port, freeing the 2nd port for an AtariVox or SaveKey.
(contributed by ChampGames)
Q: What is a QuadTari?
A: The QuadTari is a hardware device that allows you to hook up to 4 compatible controllers to an Atari 2600. The QuadTari has 4 input ports for the controllers and 2 outputs that plug into the 2 controller ports on the Atari.
Q: What systems support the QuadTari?
A: The QuadTari was designed for the Atari 2600 and any systems that are hardware compatible, such as the Coleco Gemini and Atari 7800. It should also work with the 5200 and Colecovision adapters, though this has not been tested.
Q: What controllers are compatible with the QuadTari?
A: A rule of thumb is this: if the controller doesn't use the paddle lines (pins 5 and 9), it should be 100% compatible when connected through the QuadTari. Otherwise, it may not work at all or only have some features enabled.
Q: Do I have to have both Atari ports hooked up to the QuadTari?
A: No; the QuadTari is actually 2 independent "duoTaris" that support 2 joysticks for each port. So, if you hook up the QuadTari to the left port, you will have support for 2 joysticks only, but the right Atari port will be open for a Savekey/AtariVox for high score saving/voice. This is the setup supported by Wizard of Wor Arcade, Galagon and Zoo Keeper.
Q: Can I hook a QuadTari up to another QuadTari for 8 player madness?
A: No. The switching only works on the first QuadTari connected; any 'daisy chained' QuadTaris will only read the first joystick port, so they would act as controller extenders, not switchers.
Q: Can I use a joystick/controller connected through the QuadTari for non-Quadtari games?
A: Yes, most of the time. In this case, the QT acts as a joystick extender, so you can hook up a joysticks to port 1 and port 2 on the QuadTari and play most non-QT compatible joystick games with no issues. I've seen issues with a few games (Defender being one of them) that do weird things with the switching mechanism or paddle pins even though they are joystick games.
Also, since the QT does not support paddles or keyboard controllers, paddles and keyboard controllers do not work through the QuadTari with paddle/keyboard games. However, Indy 500 does work with driving controllers hooked up to the QT since driving controllers are supported.
Harmony support: You can use a joystick connected to a QuadTari to navigate the Harmony menu with one caveat; you must use a joystick hooked up to port 3. Once the game starts, you can then use the joystick hooked up to port 1 as normal. The reason is that the Harmony software supports both joysticks and paddles to navigate; it would appear that the reading of the joystick port is being done while DUMPPORTS is enabled (reading the paddles) so the QT activates joystick ports 3 and 4. Perhaps the Harmony team will modify the BIOS at some point to read the joystick ports with DUMPPORTS low which would fix the issue; until then there is a workaround.
The following games have QuadTari support for 4 (or more) players:
The following games have other QuadTari support: (ie 2 joysticks plus an AtariVox, or other configurations)
Upcoming games with planned QuadTari support
The QuadTari adapter lets you multiplex between 2 controllers/devices on the same physical port. Although the entire device maps 4 ports to 2 physical ports, each half of the QuadTari functions completely separately, and can be used independently.
Player 1 and 3 share the first Atari port (QuadTari output A) Player 2 and 4 share the second Atari port (QuadTari output B)
This allows for various configurations of controllers (ie 2 players on the first port, using QuadTari output A, and an AtariVox on the 2nd port, not using the QuadTari)
When using the QuadTari, you generally read the joysticks as usual, but you can select which input joystick to use (1 & 2 or 3 & 4) by setting or clearing bit 7 of VBLANK (ie register $01. By setting bit 7, it drags INPT0-3 to ground). Changing this bit will toggle the inputs for both halves of the QuadTari.
After changing bit 7, the QuadTari will need some time to stabilize with the new input. It is safest to wait at least one scanline (76 cycles) before reading the new joystick ports.
; to acivate ports 1 and 2: lda #$00|$02 ;0 for bit 7, 2 to continue blanking. (ie DISABLE_TIA) sta VBLANK sta WSYNC ;wait a scanline to stabilize (you could do other things here instead) sta WSYNC ;make sure it's a full scanline of wait time ; to activate ports 3 and 4 lda #%10000000|$02 ;set bit 7, continue blanking sta VBLANK sta WSYNC ; sta WSYNC ;wait a full scanline
Your game can detect the presence of the QuadTari at startup by checking bit 7 of INPT0-INPT3 You can test each port (A and B) separately:
port A INPT0 INPT1 0 0 regular joystick connected 0 1 multi-tap connected to port A 1 0 Genesis pad in joystick mode 1 1 Genesis pad (or paddles) connected port B INPT2 INPT3 0 0 regular joystick connected 0 1 multi-tap connected 1 0 Genesis pad in joystick mode 1 1 Genesis pad (or paddles) connected
For Batari Basic users, by default, controllers 1 & 2 will automatically be selected after calling drawscreen. Developers can manually toggle to reading controllers 3 & 4 with something like the following:
asm lda #$80|%10 sta VBLANK sta WSYNC end
See multitap_source.zip for an example program that detects and displays the inputs.
The QuadTari has been tested with standard joysticks, Genesis pads, and the driving controller. Other controllers are untested, but should be compatible if they don't use pins 5 or 9.
The newest versions of Stella have support for the QuadTari, and are recommended for initial development.
We also have a limited number of QuadTari devices reserved to give away to homebrew developers who are developing high-quality compatible games. To apply for this program, please email email@example.com and include details about the game you are making.
Because a significant delay is required before toggling controllers, there are a few options available for handling multiple players and multiple joysticks.
One option is to read one half of the controllers at the end of vblank, and the other half at the beginning of overscan, and save their values. Then player updates can happen during vblank as usual. This works well for a 2-player game that can optionally use the QuadTari to allow for 2 joysticks plus an AtariVox.
For a 4-player game, an option is to have each player effectively run at 30fps, and only update 2 players per frame. Run one frame with one half of the QuadTari, and update 2 players. Then on the next frame, select the other half of the QuadTari, and run the logic for the other 2 players. This method might be slightly unfair in some action games (a missile might hit one player a frame earlier even if both are players are in the exact same spot), but most players will never notice.