Skip to the content
PCBKitNew board
2 layers89.2 × 87.9 mmWheelOfJoy, the printed circuit board in 3D

8-player joystick adapter for the Commodore 16, 116 and Plus/4

Size
89.2 × 87.9 mm
Copper layers
2
Thickness
1.6 mm
Parts
39
Nets
55
Pads
237
Tracks, vias
706, 112
Pours
7
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
31 Aug 2022
Updated
13 Feb 2026

Overview

WheelOfJoy is an open-source printed circuit board by SukkoPera, from the SukkoPera/WheelOfJoy repository on GitHub. It is a 2-layer board of 89.2 × 87.9 mm with 39 parts on 55 nets, routed with 706 tracks and 112 vias.

It is built around the CD4051BE. Its parts include 9 connectors, 6 capacitors and 5 ICs. It belongs with the retro computing and games and keyboards and input boards of this library.

Main components

1

README

README.md

WheelOfJoy

WheelOfJoy is an Open Hardware 8-player joystick adapter for the Commodore 16, 116 and Plus/4.

Board

Summary

The original intent was to figure out how Solder's 3-joystick Adapter worked. It was pretty easy once I realized that the User Port has an output latch, but that also meant that even these 3 extra ports would suffer from the "bouncing ground" effect which prevents using powered controllers.

So I began thinking how to replicate the adapter while avoiding that and suddenly I realized that a very simple solution could be used and that it could easily be extended to support 8 joystick while retaining compatibility with the original adapter.

WheelOfJoy only supports one button per joystick, but it has a smaller brother with only four ports that supports 2 buttons per joystick.

The board plugs into the User Port, which means that in order to use it on a C16 or C116, you will need a User Port card.

Assembly

I recommend soldering all the ports first, then the resistor arrays. Speaking of those, note that while RN1-8 are bussed, RN9 is independent/isolated. You can replace the latter with 5 normal resistors soldered on every two adjacent holes.

The adapter can be connected to the computer through a cable with a User Port connector on one side and a male DB-15 on the other. I did this so that the adapter can be placed more freely on the table so that all players can reach it comfortably. The adapter-end of the cable can also be soldered directly to it, if you prefer. Pin names are noted on the board, but here's a handy table:

DB-15 Pin #SignalUser Port Pin #Notes
1+5V2
2P0B
3P1K
4P24
5P35
6/RESET3Not used by this board
7+9V10Not used by this board
8GND1, 12, A or N
9+5V2
10P46
11P57
12P6J
13P7F
14-9V11Not used by this board
15GND1, 12, A or N

Some pins are not used because I plan to use this same pinout in the future for any other boards I may make requiring one.

This and these will help you make a good-looking job with your cable.

I estimate all the components required to self-build this thing to cost < 10€, probably closer to 5€ if you get them from China.

Supported Games

Of course there isn't much software support for this at the moment but Luca/FIRE was kind enough to make Tron 8 WOJ, an hack of Solder's Tron 6 (which can still be used in order to test the "Solder compatible mode") featuring 8 players that can all be controlled through joysticks connected to a WheelOfJoy. This is probably the first 8-player game for the x264 series ever made!

Haegar was the first developer to make a new game that supports WheelOfJoy natively: it is called Bombtank and it supports up to 12 players!

Now it's up to the developers to write more party games! I'd happily send you some free PCBs if you are interested in making one, just ask!

Programming

The board uses 5 8-to-1 multiplexers, one per direction plus one for the fire button. Channel selection happens in parallel on all multiplexers and is done with the 3 high bits of the User Port:

  1. Write a value N at the User Port register depending on the port you want to read. General formula for port P ∈ [1,8] is the following:

    N = ((P - 1) << 5) | 0x1F

    Or just pick your value from the following table:

    #BinaryHexDecNotes
    1000 111111F31
    2001 111113F63
    3010 111115F95
    4011 111117F127Port 6 in Solder's numbering
    5100 111119F159
    6101 11111BF191Port 5 in Solder's numbering
    7110 11111DF223Port 4 in Solder's numbering
    8111 11111FF255
  2. Read the value of the User Port register, the lower 5 bits will report direction/button status:

    Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0
    XXXFireLeftRightDownUp

    Every bit will be 0 if the corresponding direction/button is pressed, 1 otherwise.

This means that the board works exactly like the one from Solder but the selection value is not restricted to those having exactly one zero. All values will select the corresponding port, software compatible with Solder adapter will select ports 7, 6 and 4 as 4, 5 and 6 respectively (Solder's numbering counts joystick 3 as the one available on SID cards).

The multiplexers used on the board are analog, so the adapter is bidirectional and the ports can also be independently used as 5-bit output ports.

Compatibility

Any Atari-compliant joystick or joypad should work with this board, including Sega MegaDrive/Genesis controllers, as pin 5 is connected to +5V.

The latter also means that you MUST NOT use the adapter with anything that can pull pin 5 straight to ground, such as 3-button Amiga mice (what would be the purpose of that anyway?).

Also keep in mind that the User Port is only guaranteed to provide 100 mA on the +5V pin, even though I don't think there's anything actually limiting that.

Releases

If you want to get this board produced, you are recommended to get the latest release rather than the current git version, as the latter might be under development and is not guaranteed to be working.

Every release is accompanied by its Bill Of Materials (BOM) file and any relevant notes about it, which you are recommended to read carefully.

Enclosure

A 3D-printable enclosure is currently available for this board, it was kindly contributed by Haegar and it is available on Thingiverse.

License

The WheelOfJoy documentation, including the design itself, is copyright © SukkoPera 2022 and is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

This documentation is distributed as is and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES whatsoever with respect to its functionality, operability or use, including, without limitation, any implied warranties OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE or infringement. We expressly disclaim any liability whatsoever for any direct, indirect, consequential, incidental or special damages, including, without limitation, lost revenues, lost profits, losses resulting from business interruption or loss of data, regardless of the form of action or legal theory under which the liability may be asserted, even if advised of the possibility or likelihood of such damages.

Support the Project

If you want to get some boards manufactured, you can get them from PCBWay through this link:

PCB from PCBWay

You get my gratitude and cheap, professionally-made and good quality PCBs, I get some credit that will help with this and other projects. You won't even have to worry about the various PCB options, it's all pre-configured for you!

Also, if you still have to register, you can use this link to get some bonus initial credit (and yield me some more).

You can also buy me a coffee if you want:

Buy Me a Coffee at ko-fi.com

Credits

Parts

39
QtyValueFootprintReferences
84.7kResistor_THT:R_Array_SIP6RN1, RN2, RN3, RN4, RN5, RN6, RN7, RN8
5100nCapacitor_THT:C_Disc_D7.0mm_W2.5mm_P5.00mmC1, C2, C3, C4, C5
5CD4051BPackage_DIP:DIP-16_W7.62mm_Socket_LongPadsU1, U2, U3, U4, U5
1100Resistor_THT:R_Array_SIP10RN9
1100uCapacitor_THT:CP_Radial_D6.3mm_P2.50mmC6
1DB15FConnector_Dsub:DSUB-15_Female_EdgeMount_P2.77mmCN9
1JOY1Connector_Dsub:DSUB-9_Male_EdgeMount_P2.77mmCN1
1JOY2Connector_Dsub:DSUB-9_Male_EdgeMount_P2.77mmCN2
1JOY3Connector_Dsub:DSUB-9_Male_EdgeMount_P2.77mmCN3
1JOY4Connector_Dsub:DSUB-9_Male_EdgeMount_P2.77mmCN4
1JOY5Connector_Dsub:DSUB-9_Male_EdgeMount_P2.77mmCN5
1JOY6Connector_Dsub:DSUB-9_Male_EdgeMount_P2.77mmCN6
1JOY7Connector_Dsub:DSUB-9_Male_EdgeMount_P2.77mmCN7
1JOY8Connector_Dsub:DSUB-9_Male_EdgeMount_P2.77mmCN8
1LOGOWheelOfJoy:logoV0
1OSHW_LOGOWheelOfJoy:cc_by_nc_saV1
1PORT1_NOWheelOfJoy:port1V2
1PORT2_NOWheelOfJoy:port2V3
1PORT3_NOWheelOfJoy:port3V4
1PORT4_NOWheelOfJoy:port4V5
1PORT5_NOWheelOfJoy:port5V6
1PORT6_NOWheelOfJoy:port6V7
1PORT7_NOWheelOfJoy:port7V8
1PORT8_NOWheelOfJoy:port8V9

Questions

How big is the WheelOfJoy PCB?

It measures 89.2 × 87.9 mm and has 2 copper layers, 1.6 mm thick.

What parts does the WheelOfJoy use?

39 parts, built around the CD4051BE. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the WheelOfJoy KiCad files?

From the SukkoPera/WheelOfJoy repository on GitHub, at the commit this page was made from: the board is WheelOfJoy.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the WheelOfJoy design in my own project?

Its repository states no licence, so its author keeps all rights: ask SukkoPera before reusing the design.

Similar boards

  • 2 layers200 × 100 mmPolykit x voice card, the printed circuit board in 3D

    Polykit x voice card

    polykit/polykit-x-voice-card

    Schematics and PCB layout for a voice card with multimode filter for a polyphonic synthesizer

    207 parts58
  • 2 layers124.5 × 77.5 mmAutopatzer, the printed circuit board in 3D

    Autopatzer

    jes/autopatzer

    Automatic chess board

    40 parts30
  • 2 layers285 × 222.5 mmPolykit x mainboard, the printed circuit board in 3D

    Polykit x mainboard

    polykit/polykit-x-mainboard

    Schematics and PCB layout for a mainboard for an 8 voice polyphonic synthesizer

    220 parts22
  • 2 layers66 × 114.3 mmSixnavPrototype, the printed circuit board in 3D

    SixnavPrototype

    GreenCappuccino/SixnavPrototype

    testbed for 6DOF input device development

    38 parts13
  • 4 layers26.4 × 41.7 mmDspod cv1800b, the printed circuit board in 3D

    Dspod cv1800b

    emeb/dspod

    A family of boards for Eurorack DSP audio

    96 parts10MIT
  • 2 layers144.1 × 181.4 mmQuadulator, the printed circuit board in 3D

    Quadulator

    GlobalSequence/quadulator

    Quadulator - A quad LFO/ADSR envelope generator for Eurorack synthesizers

    128 parts6
  • 2 layers27.5 × 28.4 mmTiny power meter, the printed circuit board in 3D

    Tiny power meter

    ezcGman/tiny-power-meter

    A very tiny 3-phase power meter to measure your homes power consumption and report to Home Assistant!

    19 parts5
  • 2 layers213 × 128.5 mmIosefka motherboard, the printed circuit board in 3D

    Iosefka motherboard

    GlobalSequence/iosefka

    hybrid digital analog synthesizer

    124 parts5