Dual Atari joystick adapter

UPDATE 26.7.2014: New version 2.1 with cheaper HW and more features. Click HERE.

Dual Atari joystick
      USB adapter with a Tac II

This adapter allows connecting two Atari-style joysticks to USB. Why yet another such adapter, there are already several options available? (see below for list) Well, mainly because I wanted to create my own.

Features

(*) Seems to depend on OS. Windows 2000 polls at 1000 Hz, Linux and OSX poll at 500 Hz.

Hardware

The adapter hardware is based on PIC18F14K50, fairly cheap PIC with integrated full-speed USB. The circuit is kept as simple as possible, while trying to provide optimum performance. The schematic is available in PDF below.
Schematic diagram v1.0

The PIC has integrated pull-up resistors at ports A and B. Port C requires external pull-ups. The external pull-ups are chosen to match real C64 joystick ports. External pull-ups are used on pin 6 (the fire button) on both ports. This ensures that auto-fire works correctly on all joysticks. Some auto-fire circuits are powered from the port pull-up, and not from the +5V line.

The reason that only port 1 supports paddles or Sega controllers is because I ran out of PIC pins. I have recently found PIC16F145X series which does not need a crystal for USB. This would allow two more I/O pins, which should allow using a Megadrive controller also on port 2. Maybe I'll give a shoot for this PIC some time in future.

Another option to save pins would be to use multiplexing to read joysticks. If multiplexing is realized by toggling GND pin of joystick, there might be problems with some joysticks using +5V supply for e.g. autofire. Solution would be to use e.g. 74HC157 for joystick pins 1...4.

I have aimed to use full speed USB which generally requires hardware USB support from µC. There are SW USB implementations for Atmel µC's that don't have any USB HW. I find these implementations quite impressive. These are however currenlty limited to low speed USB. Low speed USB supports maximum update rate of 100 Hz. In practice that would perhaps not matter much, most HID devices are low speed. And the games usually read the joystick input at 25 Hz or slower. But I wanted to get the lowest possible lag.

Layout

The PCB for adapter is designed with Eagle. It is designed to fit to Hammond 1551R enclosure. It is available in different colors, e.g. 1551RBK for black.

Eagle 3D render of
        the board

The PCB uses mostly SMD components. It is designed using Eagle. The schematic and board files are available below:

Dual Atari vertical 1.0 Eagle .sch and .brd

I've created an Eagle 3D animation of the board, see here. I also tested to use Eagle'up, the result can be seen here.

Firmware

The FW source needs some cleanup before release, but I'll upload it in the future. Meanwhile the compiled .HEX is available below:

dual_atari_v05.hex.zip (January 1,2013)

Other joystick adapters

Here are some other similar projects or products. A short summary of supported controllers, update rate, used HW etc. is provided. I do not guarantee that all information provided here is correct.

Stelladaptor

10ms polling, 1 joystick, paddles

2600-daptor
1ms polling, 1 joystick, paddles
http://home.comcast.net/~tjhafner/2600-daptor.jpg
http://www.atariage.com/forums/topic/181321-announcing-new-2600-controller-usb-adaptor/

Retrousb Atari retro port
1 joystick, no paddles

Retrousb Genesis retro port
1 Megadrive 3 or 6 button pad

Raphnet
1 joystick, SMS, Megadrive 3 and 6 button, multitap, 10 ms polling (atmega8)

Hexagons/Retro-Donald USB Joystick adapter
2 joystick, 10 ms polling (Atmel ATtiny 2313)

Simon Inns Atari joystick USB adapter
2 joysticks, no paddles. 1 ms polling, PIC2550

Simon Inns C64 Vice front-end
2 joysticks, paddles, keyboard, 1ms polling, PIC4550

Retro Adapter
Supports a huge range of different controllers with adapters. 10 ms polling (atmega168)

Retronic Design USB Joystick adapter

Supports 1 joystick, SMS controller, CD32 gamepad and Amiga mouse. 10 ms polling (atmega-8).

last updated 19.1.2014 webmaster@kair.us