||Peter Liepa & The Blockh...
PC mouse for c64
MODIFICATION OF A PC MOUSE FOR C64/C128
As it is known, our commies does not have wide software and hardware
support. So we are alone with our dreams. This situation forced many of
us to hack our commodores by thyself.
This document describes how to convert a cheap OEM PC mouse to be used
with the joystick ports of commodore 64 & 128. There are other solutions
of course, such as plugging a PC mouse to an ACIA (swiftlink) card, or
building a small interface. But this method has the advantage of simplicity
and viability. The modification costs about $2, and if you add the cost of
a PC mouse you can have a mouse for $6 only.
Let me first explain the mouse type we need, and why this type. This
modification is actually modification of an Amiga mouse. Amiga mice have
the same port output as our commodores. They send two signals for each
axis. Then, the computer extracts the direction information from the phase
difference between the signals. These mice are "opto-mechanical" mouses.
The rolling ball rotates the two cogwheel, which are placed inbetween the
optic elements such that, they permit the light upon the positions of their
teeths. The photocells, used in these mice, have three pins, which two of
them supplies the signals which has the phase difference. The signals named
as 'phase' and 'quadrature' signals which are approximately 90 degrees out
of phase. This difference changes sign due to the direction. Observing the
signals gives something like this:
------ ------ -- ....
I I I I I
phase signal : ------I I------I I------I
I I I I
quadrature signal : --I I------I I---- ...
If you move the mouse to the other direction, you observe:
------ ------ ------
I I I I I I
phase signal : ---I I------I I------I I-- ...
I I I I
quadrature signal : ------I I------I I---- ...
As you see it's possible to find direction information using these signals.
If we think about their binary values we have this :
left or down : 11 - 01 - 00 - 10 - 11 - ... repeats
right or up : 11 - 10 - 00 - 01 - 11 - ...
Thus only thing to do by the software is searching for the above bit
patterns for direction information.
As it might be understood we will tie the output pins of the photocells
to somewhere in the joystick port. But we need to know one more thing.
Because of the open collector nature of the CIA chip, we have to use pull-up
resistors, for making possible the '0' bit state.
Many of the OEM PC mice have the similar chip. This chips read the
phase signals and convert them into three or five bytes of serial data.
The one I examined had 16 pin 83702BP chip. I will describe the wiring
schema with references to pinout of this chip. Do not worry if your mouse's
chip is different. If it is 16 pin, probabably they are same. If there are
18 pins on your chip, the 9th pin is GND. So, if you have a different chip,
simply follow the traces from the photocells and buttons. Then make the
connection by smart guesses.
First, pin-to-pin connections inbetween joystick port and 83702BP chip.
Again note that this modification does not use this chip (you can desolder it
if you want), I'm just making references to its pinouts.
83702BP JoyPort notes
------- ------- ------------------
14 ---------- 1 VP ( vertical pulse )
12 ---------- 2 HP ( horizantal pulse )
15 ---------- 3 VQ ( vertical quadrature )
13 ---------- 4 HQ ( horizantal quadrature )
11 ---------- 6 LB ( left button )
16 ---------- 7 Vcc ( +5 volts )
8 ---------- 8 GND ( ground, connect it to the shield of the cable )
10 ---------- 5 MB ( middle button )
9 ---------- 9 RB ( right button )
In another words, the pins 1 and 3 of the JoyPort will be connected to the
photocell which sends vertical information, probably it's located in the
right of the mouse PCB. The pins 2 and 4 are connected to the other photocell.
Note that the photocell I mentioned is the optical element with three legs,
not the infrared LED. Following the traces on the mouse board find the ground
and Vcc lines, and make sure not to connect the JoyPort pins 1-6 to these
lines. And don't bother confusing about the miswiring of phase and quadrature
lines. You will see whether they are correct or not, with the mice-test
program. If the pointer moves to wrong direction, this is the indication of
mis-wiring. For the buttons, again follow the trace from button to the chip,
hich is the line we need.
Now, we have to solder the pull-up resistances, without them we cannot detect
the zero volt level.
1 ----/\/\/----+ 2.2Kohm
2 ----/\/\/----I 2.2K
3 ----/\/\/----I 2.2K
4 ----/\/\/----I 2.2K
-/\/\/-+ 1K variable
6 ----/\/\/-------I 2.0K (button)
----- GND (pin 8)
optionally you can connect the pins 5 and 9 for middle and right buttons:
5 ----/\/\/----I 2.0K
9 ----/\/\/----I 2.0K
Of course you will solder these resistors inside the PC mouse, not in the
By the way, here is the same connection schema with respect to the chip:
15 ----/\/\/----I 2.2K
14 ----/\/\/----I 2.2K
13 ----/\/\/----I 2.2K
12 ----/\/\/----I 2.2K
-/\/\/-+ 1K variable resistance
11 ----/\/\/-------I 2.0K
----- GND (pin 8)
Optional pins are 9 and 10, connect them with 2.0K to the GND if you want.
The values of the resistances may cause problems with your mouse. We supply
only +5V to the infrared LEDs which are supposed to be something 9-10 volts.
Thus, the output of the photocells cannot be enough to drive the Port with
these resistances. If this is the case try different values by adjusting the
variable resistor. You may desolder some of the components in the mouse
board also, such as the chip and the crystal, but not the capacitors.
In conclusion, simply solder the cable to the female DB-9 connector, close
its cover, unplug the mouse's original cable (if it's soldered to the PCB,
desolder the wires), locate the signal lines, solder the wires of your cable
to them, locate the button outputs, solder the pin6 of your cable to the
left button's output, locate the ground and +5V lines of your mouse PCB (board),
note that pin8 (or pin9 for 18pin chips) is ground and pin16 (or 18) is +5V,
solder the matching wires (pin 8 and 7 from the port) of your cable to these
lines, solder the resistances inbetween signal pins and variable resistor,
solder other pin of the variable to the ground. That's it.
After all, you can execute the port testing program by:
You will see, the bits of the Joystick Port 1 ($dc00) on the top-left of
the screen. If the rightmost four bits are off, or moving the mice does not
make them change, then re-adjust the variable resistor. You have to see
flashing bits while the mouse is moving. And pressing left button, sets the
Try this test with all your C64 and C128 computers. And try to find an
By the way, Port 1 is the joystick port which is close to the power switch.
Then, run the mouse testing program:
If the pointer on the screen moves erratic, for instance you moved the
mouse to the right but the pointer moved to the left..., then open the cover
of the DB-9 connector and resolder the necassary wires. For the above
example exchange the wires on pins 2 and 4 (counting from 1). For vertical
errors exchange pins 1 and 3.
If you cannot move the pointer recheck everything, and if you have a
voltmeter observe the signals, if they are changing with the movement then
it is inferred that everything is allright but the resistors, try different
resistances ( run the porttest program again, and make more adjustments ).
You should be able to make it work.
2mt. 6 lines shielded cable ( 8 lines if you want to use optional buttons)
1 DB-9 female connector and its cover
4 2.2Kohm resistor
1 2.0Kohm resistor ( 3 for the optional buttons )
1 1Kohm variable resistor.
and one PC mouse of course :-)
note: resistance values are important for compatibility.
Interpretation of the Signals:
direction : left right down up
------ ------ ------ ------
first four : 1x1x 1x1x x1x1 x1x1
bits of : 0x1x 1x0x x0x1 x1x0
$dc00 : 0x0x 0x0x x0x0 x0x0
: 1x0x 0x1x x1x0 x0x1
the left button : xxx1xxxx (fourth bit of $dc00)
the middle button: 1xxxxxxx (seventh bit of $d41a)
the right button : 1xxxxxxx (seventh bit of $d419)
That's all for this modification, interpreting the signals is another