C64/128 Control (joystick) Ports - Diagnostics and Repair 4-13-07.


           C64/128 Control (joystick) Ports - Diagnostics and Repair
                  latest changes or updates 4-13-07


When a mouse or joystick doesn't work, it's not always obvious where the 
problem lies... in the device or the computer. Unless you have several 
input devices to cross-check, it's difficult to determine, but with a 
few simple tests, a small BASIC program and your VOM (volt-ohmmeter), 
you can run diagnostic tests yourself. It's helpful to know how a device 
functions when it's working normally, so that's where I'll begin with 
this article. Later, I'll explain how to test the joystick, proportional 
mouse, graphics tablet, and game paddles. But first, let's examine the 
computers control ports...
     The two control ports on the right side of a C64/C128 are 9 pin male 
D subminature connectors. They contain two separate sets of inputs, five 
digital or switch inputs and two analog or variable voltage inputs. One 
pin is +5 volts from the power supply and one pin is ground. Each device 
uses different input lines. The ports, as viewed facing the computer 
connectors, look like this:

    .---------------.
    \ 1  2  3  4  5 /
     \             /
      \ 6  7  8  9/
       '---------'

 1 joy 0 (UP)
 2 joy 1 (DOWN)
 3 joy 2 (LEFT)
 4 joy 3 (RIGHT)
 5 POT X (proportional mouse or graphics tablet UP-DOWN, paddle input)
 6 joystick fire button, left mouse button or light pen (port 1 only)
 7 +5VDC from computer power supply
 8 ground or negative
 9 POT Y (proportional mouse or graphics tablet LEFT-RIGHT, paddle input)

     Pins 1 through 4 and pin 6 go directly to one of the CIA chips and 
share data lines with the keyboard. Therefore, a problem with one, such 
as a shorted switch or stuck key, can interfere with the other. That 
information is useful when trying to determine if a problem is in the 
computer or not. The keyboard is a matrix (pulses pass through it when a 
key is pressed) and doesn't ground data lines like a joystick does. 
One exception is the RESTORE key on the C64. 
     Signals from the two analog input pins 5 and 9 go through a "switch" 
IC and on to the SID chip POT inputs where they are converted to digital 
signals. The name POT refers to one way those inputs can be used, namely 
with potentiometers (mechanically adjustable resistors) found in game 
paddles. Potentiometers were commonly used for such things as the volume 
control in TV and radio before microprocessor controlled circuits 
eliminated the need for them. 
     Since there are two ports and two analog inputs per port, that's a 
total of four inputs, but there is only one SID chip with its two POT 
lines. To allow for four inputs, the two ports are "time shared" (switched 
back and forth) by the computer via the 4066 analog switch IC, U28 in the 
C64 and U2 in the C128. 
     Pin 6 of control port 1 can also be used as an input for a light pen. 
It is a device with a sensor in its tip that is placed against the TV or 
monitor screen to detect when the electron beam passes under it. With the 
proper software, the pen can be used for computer control using the screen 
as a "touch panel". That obviously requires holding your arm up to the 
screen... perhaps the reason lightpens never really caught on. Some games 
used a "pistol" to capture the light from the TV screen as input. 

CONTROL PORT TEST PROGRAMS
     The following C64 BASIC program can be used to test the joystick 
inputs of the two control ports. It first clears the screen, then 
repeatedly PEEKs two memory locations that represent the two ports 
and prints the results on the screen. The two numbers that appear 
reflect which function is activated by a joystick in both ports. I have 
included the port input pins driven and corresponding keyboard keys 
that should produce the same numbers on the screen. The dual entries 
(example: Commodore key & F3) indicate two simultanious keypresses. 

 10 PRINTCHR$(147)
 20 PRINT"PORT 1:"PEEK(56321),"PORT 2:"PEEK(56320)CHR$(19):GOTO20

 PIN  FUNCTION      CONTROL PORT 1         CONTROL PORT 2

       NONE          255                    127
  1    UP            254 (1)                126 (C= & F3) 
  2    DOWN          253 (LEFT ARROW)       125 (C= & S)
  3    LEFT          251 (CTRL)             123 (C= & F)
  4    RIGHT         247 (2)                119 (C= & H)
  6    FIRE          239 (SPACEBAR)         111 (C= & K)

     A more complex machine language program is needed to check the 
POT inputs, and BASIC is not recommended because it's inaccurate.
However, since we only want to verify whether they work or not, I 
chose BASIC for troubleshooting purposes. The following program tests 
all inputs of the two control ports and prints the results on the 
screen. It works on the C64 and the C128 in 64 mode...

 10 PRINTCHR$(147):REM CTRL PORT TEST PGM
 20 PRINT"JOYSTICK PORT 1:"PEEK(56321)
 30 PRINT"JOYSTICK PORT 2:"PEEK(56320)
 40 PRINT:POKE56333,127:POKE56320,64
 50 PRINT"PORT 1 POT X:"PEEK(54298)
 60 PRINT"PORT 1 POT Y:"PEEK(54297)
 70 POKE56320,128
 80 PRINT"PORT 2 POT X:"PEEK(54298)
 90 PRINT"PORT 2 POT Y:"PEEK(54297)
 100 POKE56333,129:PRINTCHR$(19):GOTO20

     The first line clears the screen. Then, as in the first program, 
two memory locations (joystick) are PEEKed and printed to the screen. 
The keyboard is turned off in line 40 so it doesn't interfere with 
the POT lines, the next poke switches the POT lines to read from 
control port 1, then those memory locations are PEEKed. Line 70 is 
used to switch to control port 2 so those POT lines can be PEEKed.
Line 100 reactivates the keyboard, shifts the cursor back to the
top of the screen, then the program loops and re-reads all the lines.
The screen should look like this with the program running and nothing 
plugged into the ports...

 JOYSTICK PORT 1: 255
 JOYSTICK PORT 2: 127

 PORT 1 POT X: 255
 PORT 1 POT Y: 255
 PORT 2 POT X: 255
 PORT 2 POT Y: 255

     For those wishing to test the 3 voices of the SID chip, I'll
include a BASIC program to do that:

 5 REM C64 SID 3-VOICE TEST PROGRAM
 10 FORL=54272TO54296:POKEL,0:NEXT:POKE54296,15:GOSUB60
 20 POKEW,17:POKEA,9:POKEHF,15:POKELF,35:POKES,128:GOSUB50:GOSUB70
 30 POKEW,17:POKEA,9:POKEHF,20:POKELF,40:POKES,128:GOSUB50:GOSUB80
 40 POKEW,17:POKEA,9:POKEHF,25:POKELF,50:POKES,128:GOSUB50:GOTO10
 50 FORX=1TO2000:NEXTX:RETURN
 60 W=54276:A=54277:HF=54273:LF=54272:S=54278:RETURN
 70 W=54283:A=54284:HF=54280:LF=54279:S=54285:RETURN
 80 W=54290:A=54291:HF=54287:LF=54286:S=54292:RETURN 

     Line 10 resets the SID and POKEs maximum volume to the three voices.
Line 20 POKEs values to voice 1 and plays a note for a few seconds. Line
30 adds voice two and plays a note mixed with voice 1 for a few seconds.
Line 40 adds the third voice to the first two for a few seconds, then the
program loops back to the beginning. The parameters for the three voices
are in the subroutines in lines 60, 70 and 80. The subroutine in line 50
adds a delay so each voice can be monitored as the program advances. If 
any/all of the voices are missing or sound "muddy", suspect a bad SID. 

************************************************************************

JOYSTICK:
     Control port pins 1 through 4 and pin 6 normally measure +5 volts 
all the time unless "pulled low" by an external switch connected to 
ground (pin 8). That's what a simple joystick is doing when you move the 
stick in any direction or press the fire button. With no movement of the 
stick or fire button, all switches are open circuit. Note that those 
switched lines are also used as inputs for the computer keyboard. Note 
also that two switches at once can be activated by diagonal movement of 
the joystick. That provides a total of eight possible combinations not 
including the fire button. The two analog input pins 5 and 9 are not used 
by the joystick nor is the +5V supply line needed because unlike most all 
the other input devices a Commodore computer uses, the joystick is a 
"passive" device. Commodore and Atari used the same pinout for joysticks.

1350 MOUSE:
     Not a true mouse, and sometimes called a "rolling joystick", the 
Commodore 1350 looks just like a 1351 but has no identification number 
on it as the 1351 "proportional" mouse does. This device uses pins 1 
through 4 as inputs by "pulsing" them repeatedly as the mouse is moved. 
For example, if the mouse is moved forward, a negative-going 20 
millisecond pulse (electrically called a "logic low") is generated by 
the mouse which "grounds" pin 1 for that length of time. That's the 
equivalent of tapping a joystick handle forward once. A continuous 
forward movement of the mouse is equivalent to holding the joystick 
handle forward because it keeps the line grounded as long as the mouse 
is moving. Similarly, movement in other directions creates pulses on 
the other joystick lines. Diagonal movement creates a logic low on two 
lines at once, just as a joystick does. 
     The left "fire" button grounds pin 6 and functions the same as on 
a joystick. The right mouse button grounds one analog input pin 9 (reason 
unknown, unless to keep some kind of compatibility with a 1351), same as 
the 1351 in joystick mode. The POT lines are otherwise unused by a 1350.

1351 MOUSE:
     The 1351 has two modes of operation: true proportional mode and 
1350 joystick emulation mode. If a 1351 is connected and the right mouse 
button is held down as the computer is powered up, the mouse switches to 
"joystick" mode and operates exactly as a 1350. This is useful for some 
games that do not work with a proportional mouse or mouse driver software 
is not available. In joystick mode, the left mouse button grounds pin 6 
(FIRE) when pressed. The right button grounds the POT line pin 9. The 
1351 operators manual says this button "shall be ignored". (See 1350)
     If the right mouse button is -not- pressed at computer power up, 
the 1351 defaults to proportional mode. Electrically, a moving mouse 
generates two signals called variable duty cycle square waves as inputs 
to the POT lines. The computer interprets those signals as variable DC 
voltages and uses them as direction control for such things as the 
pointer in GEOS. The voltage variation on pin 5 is used for X axis 
(forward/backward) movement and the variation on pin 9 is for Y axis 
(side to side) movement. Diagonal movement generates signals on both 
POT inputs. A DC voltmeter on those lines (mouse connected, of course) 
will show a small voltage variation when the mouse is moved. The 
computer requires mouse "driver" software to detect and process the 
analog information from the POT lines. A driver is usually embedded in 
programs that use the mouse for direction control. In proportional mode,
the left mouse button grounds pin 6 (equivalent to the "fire" button on 
a joystick) and the right button grounds pin 1 (equivalent to the "UP" 
joystick function)... a bit different than 1350 joystick emulation mode.
     
GAME PADDLES:
     These dual-paddle controllers share some features of both a mouse 
and a joystick. There are two paddles, each with a cable that cross 
connects and terminates in a single female 9 pin D plug. Some games 
utilize two sets of paddles allowing four players at once. Each paddle 
has a control knob which rotates an internal potentiometer or "pot", 
and a single "fire" button. Each pot is wired to access one of the POT 
inputs of the control port. Like a mouse, paddles require a software 
driver to process their varible voltage inputs on the POT lines, but in 
this case, the variation is derived from a simple voltage divider 
comprised of the computers internal circuits and the external 470K 
(K=1000) ohm pot wired as a variable resistor or "rheostat" inside the 
paddle. Electrically, one end of a pot is wired to the +5V source (pin 
7) and the slider contact to one of the two POT inputs (pin 5 or 9). 
Turning the control changes the pot resistance from a maximum of 470K 
ohms (at full counter-clockwise) to zero ohms (full clockwise). The 
voltage on that corresponding POT line goes from about 1 volt DC at 
maximum resistance to +5 volts at minimum resistance of the control. 
The fire button grounds pin 6, the same as a joystick. Commodore and 
Atari apparently used the same pinout for their paddles. I have taken 
both apart and they are identical inside. 

GRAPHICS TABLET:
     One common product is called the Koala Pad. This input device is 
similar to a mouse but uses a matrix of pressure sensitive contacts 
under its surface panel to generate X and Y inputs on the POT lines 
when the tablet surface is pressed with a finger or stylus. Similar to 
a mouse, a Koala pad generates variable duty cycle square waves which 
are interpreted by the computer to tell which part of the tablet has 
been touched. 
     Unlike a mouse or game paddle, the left and right buttons connect 
respectively to pins 3 and 4 of the control port. A Koala tablet 
therefore requires its own software to operate properly. There is both 
a Koala software cartridge and software on floppy disk. Some commercial 
software programs were written specifially to use a Koala and so have 
embedded drivers. 

***********************************************************************

DIAGNOSTICS:
     Now we get down to the "nuts and bolts", how to troubleshoot 
equipment that's not working properly. A VOM (volt-ohmmeter) will be 
necessary to check for continuity (a closed circuit or zero resistance). 
If you don't already have one, now is the time to purchase a meter. Even 
an inexpensive one is a good investment. It allows you to make passive 
resistance checks of switches and cables, and lets you check AC and DC 
voltage levels. Mechanical faults like bad switches or broken wires 
(inside cables where it doesn't show) account for some failures. If 
"static" (non powered equipment) resistance tests don't reveal any 
problems, you can go on to voltage checks. Be careful when measuring at 
the pins of the computer control ports while it's running. Accidently 
shorting pins together can destroy ICs in the computer, especially the 
CIA chip. Be especially careful of the +5V source at pin 7. Accidently 
grounding that pin can destroy components in the computer. I suggest
wrapping some electrical tape on your meter probes so only the very 
tip is exposed to contact the connector pins. That should help prevent
accidental shorts. Also, some devices like the Commodore 1351 mouse 
have a metal shell on their 9 pin connector. If you attempt to plug 
that in while the computer is running, you could accidently short port 
pins together. I've done it myself in a moment of carelessness. 
     IMPORTANT NOTE: It's easy to get confused about the pinout of that 
9 pin connector. The diagram above shows what it looks like facing the 
computer or the -wire- end of the plug. However, when you're making your 
resistance checks of a device like a joystick, you'll be facing the pins 
of the plug, so you'll be looking at a mirror image of the connector. Be 
careful! I always mark pin 1 with a dab of ink or paint before I begin 
tests to eliminate that confusion.

CONTROL PORT TESTS:
     If you have no mouse or joystick to test the ports, run the BASIC 
test program and use a 100 to 470 ohm resistor to ground each of the 
joystick pins and watch the results on the screen. A resistor is 
used to limit the current just in case you accidently touch the wrong 
pin, so it will not do any damage. Pin 8 is the ground, so one end of 
the resistor should be connected to that pin and the other end touched 
to each of the joystick input pins, one at a time. The numbers on the 
screen should change as indicated above. If more convenient, add a short
length of wire to the resistor and use the metal frame of the computer
at the rear panel as a ground connection. Don't stick it in any of the 
other ports back there... just to the metal.
     Measured with a voltmeter, you should find about +5VDC with respect 
to ground on those five control port connector pins (1 through 4 and pin 
6) when nothing is connected to the control ports. If any of the lines 
measure low or zero, there is a short somewhere inside the computer. 
Unplug the keyboard to eliminate that as a source of the low reading.
If the short clears, troubleshoot the keyboard. If the short remains, 
use your ohmmeter (system unplugged from power) to trace the reason for 
the low resistance reading on that line... bad IC, leaky diode, shorted 
bypass capacitor, etc. 
     The unconnected POT input lines (pins 5 and 9) of the two control
ports will normally measure 0.5VDC to 1VDC. They are "driven" higher by
a mouse, tablet or paddle when one is connected. Use the test resistor
to momemtarily connect pin 5 or 9 to the supply pin 7. The number on 
the screen for that port input should change (to a lower number if 
the test resistor is 470 ohms or lower in value). If one or both ports 
don't respond, the switch IC and SID are suspect. 

JOYSTICK:
     A bad joystick is pretty easy to diagnose. It's just five switches 
that are normally open circuit. To test, first unplug it and see if all
the keyboard keys work properly. If so, see the above pinout diagram 
of the control ports and prepare to use your ohmmeter to do some 
resistance checks of the joystick itself (unplugged from the computer, 
of course). If you push the joystick handle forward (the UP function), 
it should press on one of the internal switches and close the contacts 
which connects pin 1 (UP) to pin 8 (ground). For the rest of the switches, 
connect your meter to the appropriate pins of the plug, move the joystick 
and note if the meter shows continuity. 
     It's important you don't damage those plug contacts by forcing 
anything. The correct size wire should slide in easily. Two small metal 
paper clips are just the right size and work well to attach your meter 
after reshaping the clips to hold the meter probes. Note that you may 
have to wiggle the paper clips gently in the holes to make good contact, 
so don't mistake a poor connection here for a bad switch or cable. 
     If one switch doesn't work and the switch doesn't feel or sound the 
same as the others, that switch may be bad. The joystick will have to be 
opened up for a visual inspection and tests of the switches. Depending on 
the type of switch used, it may be repairable. If not, replace it. A 
broken wire inside the cable is a possiblility, especially if the device 
is used a lot. Wires usually break near the body of the joystick because 
it's stressed the most there. Connect one probe of your meter to the 
internal wire of the switch that doesn't work (don't forget to check the 
ground wire if no switches work) and the other meter probe to the 
appropriate plug contact. If you find one line open (or intermittant when 
the cable is moved), the cable will have to be repaired. That's pretty 
easy if the wire break is near the joystick. Just cut the cable, strip 
the ends, route it into the joystick and splice the wires back to the 
connections inside. Your cable will be a bit shorter, but it should work 
fine once again. 
     If you have a bad (intermittant) connection at the plug end of the 
cable, you can try squeezing the plug with a pair of pliers to tighten the 
contacts inside. If that doesn't work, you may have to replace the female 
9 pin plug... if you can find one. Joystick connectors are usually molded 
plugs that don't come apart. Each wire inside will be a different color, 
so installing another plug requires matching all the pins correctly. Since 
there are many different manufacturers, it's impossible to list the wiring 
color code for all of them. However, with the pinout as a guide, plug 
wiring can be determined by which switch is activated in normal operation.
     OK, lets say you have tested all the joystick switches and they seem 
fine but the computer doesn't respond to one or more joystick functions. 
Examine the joystick port connectors on the computer to see if any of the 
pins are bent, missing or pushed back and not making contact. If that's OK, 
the next step is to check all the keyboard keys for normal function. Some 
keys like the function keys will not produce a character on the screen but 
you can tell a key has been pressed by carefully observing the flashing 
cursor of the opening screen... it "flickers" slightly when those keys
are pressed. 

1350 MOUSE:
     Since this is an "active" device, unlike a joystick, it requires +5 
Volts DC from the computer to produce direction control pulses. Therefore, 
static tests with an ohmmeter are limited to the left button switch. You 
should measure continuity (zero ohms) between pins 6 and 8 of the connector 
when the button is pressed. Use the BASIC test program to check the other 
joystick emulated functions.

1351 MOUSE:
     This mouse needs a +5 volt source from the computer to generate 
signals to the POT lines because it is an "active" device. Static tests 
are limited to checking the left (connects pins 6 and 8 when pressed) and 
right (connects pins 1 and 8 when pressed) mouse buttons. Test the mouse 
in joystick mode by holding down the right mouse button for computer 
powerup, then use the BASIC test program and observe the readings when 
the mouse is moved and buttons pressed. Try the mouse again in 
proportional mode... 

     Problems with the 1351 include loss of direction control in one axis, 
jittery or stuck GEOS pointer, or totally "dead" mouse. Mechanical problems 
that make a mouse intermittant can be caused by dirt on the rollers that 
the ball rotates when the mouse is moved, or by a broken wire inside the 
cable. 
     To clean the mouse, remove the cover over the ball and let the ball 
fall out onto your hand. Observe the rollers inside. They could be snarled 
with hair, dirt or debris which must be cleaned to allow them to rotate 
freely. Use tweezers to remove hair and a Q-tip (cotton tipped swab) 
moistened with alcohol to clean the rollers. The ball can be washed with 
soap and warm water, then dried and reinstalled. 
     A dead/intermittant mouse can also be caused by a broken wire inside 
the mouse cable. That usually happens near the body of the mouse where 
the stresses of repeated movement are greatest. If wiggling the cable 
causes the pointer on the screen to jump, the cable is likely broken inside 
and will need to be repaired. The cable can be cut off at the break and the 
wires spliced back into the mouse using the wire colors as a guide. 
     If the rollers are turning and one axis doesn't work, there may be a
bad sensor inside the mouse. It's usually the IR emitter that fails. As 
with most electronic gadgets nowadays, exact replacement parts are hard
to find. Your best bet for spare parts might be another duff mouse that
has a different problem. 

GAME PADDLES:
     Although paddles require +5V from the computer to work, they are 
essentially a passive device as there are no ICs or transistors inside. 
Therefore, all the internals can be static-tested with an ohmmeter. The 
control pots inside are 470K (K=1000) variable resistors. One paddle 
control connects from pin 7 (the +5V source) to pin 5 (X POT input). The 
other paddle control connects from pin 7 (+5V source) to pin 9 (Y POT 
input). The fire button on one paddle connect pins 4 and 8 (ground), and 
on the other paddle connect pins 3 and 8 (ground).
     The most common problems with paddles are noisy controls and broken
cable wires. A shot of spray control cleaner should fix the jitter caused 
by the noisy control. For repair of broken cables, see the above info on
repairing joysticks.

GRAPHICS TABLET (KOALA):
     As with the proportional mouse, this is an active device that 
requires +5V from the computer in order to generate signals on the POT 
lines. Static tests of the left and right buttons can be done with an 
ohmmeter. The left button connects pins 3 and 8, and the right button 
connects pins 4 and 8. 
     Typical problems range from broken cables to unrepairable failure
of the tablet if someone used too much force and damaged the surface. 

Ray Carlsen CET
Carlsen Electronics... a leader in trailing-edge technology.

Email me if you find any mistakes here or have questions. I appreciate
feedback of any kind.