Re: Commodore joystick ports

From: Scott McDonnell (
Date: 2004-10-22 20:44:06


As Hársfalvi mentioned, it is current that needs to be generated, not
voltage. A resistor creates a voltage drop across it, which is a function of
current. (Resistance=Current/Voltage) The voltage is 5V, the resitance is a
range that you know from the potentiometer values, you simply need to create
the corresponding current to emulate the resistance you need.

A transistor in this mode (current source) should be thought of as a valve.
The valve is completely shut off when no voltage is applied to the base.
This allows the SID to discharge the capacitor (when it is shorting for 256
cycles) without drawing in the 5V. By varying the voltage to the base, you
are opening the valve by a varying degree, varying the amount of current
which is allowed to flow.

You are correct in assuming that you will need an analog voltage at the base
(but not to bias it, that is for amplication - to carry an AC signal through
the transistor - you are simply using it like a valve.)  If your micro does
not have a DAC built in, you can build an R-2R ladder DAC, like the one
showing here: or a
Summing DAC like here: (without
the op-amp). Obviously, the values of the resistors in the circuit may need
to be altered a bit to get the range of voltages you desire. This will be
based on some calculations, which are not extremely difficult. Here's a page
you can use for reference: it describes and
explains how a transistor is used to convert voltage to current. If you need
some more help, drop me a line. I would be willing to design the circuit for
you when I have a spare moment, but the true satisfaction comes from
figuring it out yourself, so I won't deprive you of that!

A FET might actually do a better job, but the calculations get a bit more
complex, the cost increases, and is probably not necessary for the type of
resolution you will need. An 8-bit R-2R ladder DAC would give you 256
voltage values to feed into the base of your transistor, which would result
in 256 different currents at each axis input. Probably way more resolution
than a commodore mouse provides.

Scott McDonnell

----- Original Message ----- 
From: "Jim Brain" <>
To: <>
Sent: Thursday, October 21, 2004 5:06 PM
Subject: Re: Commodore joystick ports

> > more, it appears that it bangs the 6 bit position data digitally (why it
> > would do this on the POT port, I don't understand...) Is this what you
> > getting from this?:
> >
> Yes.  It does that to "feed" 1uS chunks of 5V to the capacitor used by SID
> to determine the pot position (using the idea that you can detect voltage
> by charging a cap to that voltage and measuring how long it takes to
> discharge.)  The more 1uS chunks of 5V I feed, the more charge the cap
> has, the higher voltage is recorded.  Primitive, but I was amazed that it
> works pretty well.
> > I would think it would make more sense to simply emulate a paddle. In
> > which
> > case, you could use a transistor to create a current source on each pot
> > port
> > which would emulate a paddle. It is a little early for me this morning
> > think clearly, but I will look at this later tonight and try to help
> > if
> > someone doesn't already answer you.
> Because I loathed this bit-bang the POT line approach, I tried a bunch of
> other ideas first.
> My initial idea was to use PWM through a low pass RC filter to create the
> correct voltage, but that did not work at all.  I'm still not sure why
> this simplistic approach did not work.
> I then thought of using a digital pot, but it looks like the POT lines
> need a 500k pot swing to go from 0 to 255, and I couldn't find a part that
> swung that far.
> I then looked at serial DACs, as Maxim has some low cost dual SPI DAC
> parts, but Could not determine if that would work, so abandoned the idea.
> I did not try a current approach (Analog is my weak subject), but wouldn't
> I need some sort of analog input to the transistor in order to bias it to
> a certain level?
> Jim
>        Message was sent through the cbm-hackers mailing list

       Message was sent through the cbm-hackers mailing list

Archive generated by hypermail pre-2.1.8.