Joysynth is a software/hardware solution to control the sound of a C64 using a computer or MIDI device connected via an interface to the joystick port. The idea sprung to my mind when I realized that the joystick port could basically be used as a one-way 5-bit parallell port. This allows for 31 different note values and one note off value to be sent, which I think is sufficient for a simple mono synth.

I picked up the very basics of electronics and 6510 assembler to implement my idea and now I finally have something to show (and for you to download).

The C64 software

The C64-side software allows you to one of ten preset patches and base octave using the computer keyboard. It continuously polls the second joystick port, and upon contact on any of the five joystick buttons, it will change the note accordingly.

The Arduino software

The Arduino side of the project simply waits for a byte on the serial port and sets five of the digital output pins high or low depending on the five least significant bits in the recieved byte.

The PC software

I wrote the PC side of the software using Processing, making it very simple and straight-forward to implement. It opens a MIDI input, waits for notes and sends a byte to the Arduino whenever it does. This way you can control the C64 directly from the PC using a sequener, or with a MIDI keyboard or whatever MIDI device you'd like.

The hardware

The base of the project is the Arduino. It controls two 4066 digitally controlled switches to connect and disconnect the five joystick button lines to the ground line, which is exactly what happens when you push a button on the joystick.

Future developments

My main goal now is to provide a MIDI port directly on the hardware to eliminate the need for a PC. This will also rid the inevitable jitter and delays you get when you run a bunch of programs on a PC (especially when Java is involved somehow!).


Assembling the interface

Right now I can't provide much information on how to assemble the hardware part. As you can see from the pictures above, my own board is a perfect example of how one should NOT do it :). I can however give you some links with information I found useful when I built mine: