As a follow up, below is the response from Bob Church over at CH-hangar on the subject, I had ask him for an in-depth response and he abliged:
Okay. Here are the basics, it's primarily just the difference in the A/D circuitry as I said. If I've gone incoherent along the line anywhere, let me know and I'll sort it out. Anyway, "Joysticks 101"....
Gameports were essentially a quad RC timer. If you fiddled with the stuff, you've probably run across the old 555 type. The gameport centered around a quad version of the 555, an NE557 if memory serves (but that's questionable) or an equivalent. There was a fixed capacitor (C) in the gameport circuitry, the pot provided the resistance (R), and since the time it took the timer to "time-out" was dependent on the product of the values of R and C, moving the pot resulted in a change in the length of the output pulse. Writing to the port, usually 201, would restart all four of the timers, and then the CPU would just loop until they timed out, counting loops for each axis and noting when it had timed out. The "value" it came up with was proportional to the count and (after calibration) the values were scaled based on the calibration data to produce what DInput always produced.
There were several problems with that configuration, though. It's main advantage was that it was cheap and easy to implement, and when it first appeared back in the early 80s or so, a little spiking on the pot was really one of the lesser problems, framerate was much harder to deal with. Also, it wasn't terribly linear since the RC timer followed an exponential curve, but the killer was really the spiking due to dirt. The pot is just a stripe of resistive ink with a wiper contact (the center terminal) that slides along that resistive track. The two outer terminals connect to the ends of the track. To get the variable resistance, connections were made to one end terminal and to the center terminal, and as you rotated the pot you got the variable resistance that was needed for the timer.
When dirt was present on the resistive stripe, the wiper had to ride up and over that and it showed up a an increase in "contact resistance", the resistance that appears between the wiper and the resistive element and that showed up as a spike in the value of R. As time went along, dust collected in the grease on the element suface and so it just got worse. I think the worst stick I ever saw for that was a Gravis I had back in the '80s, you could let it sit still around here for more than a couple of hours before the dust would accumulate. Usually it was just a matter of running the stick around in circles for a few seconds to wipe a track through the gunk, and it was good to go.
There was another problem with the gameport in that, to get it stable, it had to be able to run without being disturbed for a little over a millisecond. That meant that nothing else on the machine could do anything at all. In the days before Win2K, you could disable the interrupts before you fired the timers. You might recall the "Poll with Interrupts Enabled" box on some of the DX/98 joystick applets. With the interrupts disabled, things were fine with the joystick, but you couldn't move video data, the joystick routine had complete control over the bus. The effect started to become noticeable around the time of the GEForce 2 cards, most noticeably in the calibration screen as little white flashes. They were caused when the video couldn't interrupt and move some data. No data, no picture for a short while and the white flashes would appear.
It was kind of a "rock and a hard place" situation. Turn the interrupts off and the joystick would be unstable, turn them on and the video and other peripherals that moved data over the bus had to put up with not necessarily having the bus access they needed when they needed it. With 2K/XP, MS prohibited disabling the interrupts at all, and as peripherals started to use the bus more and more, the problem got worse. MS supported gameport by running a timing routine based on the system clock, but that wasn't particularly effective, there was always some jitter in the timing.
By then the USB stuff was becoming much more available though. The main problem was with sims that only recognized one controller and the inability do daisy chain USB devices like was done with stick, throttle and pedals under the gameport. That was actually the driving force for the original Control Manager, to be able to combine three controllers for a single-controller game. CH had good, stable, solid, hardware, but there were only about 6 sims that recognized more than a single controller.
As I said though, the main advantage is in the arrangement of the A/D system. With USB, if it's done reasonably well, the pot will make a 3-wire connection rather than just being a variable series resistance. it's set up as a voltage divider, and the A/D converter reads voltage, where the gameport stuff was really current-driven since it depended on the time it took to charge that capacitor in the RC timing circuit.
Dirt still produces fluctuations in contact resistance, but modern A/D converters draw effectively zero current. Ohms law says that the voltage across the resistance is equal to the resistance multiplied by the current passing through it. The current through the contact resistance is the A/D input current, so it hardly matters how much contact resistance there is. I've measure it, seems to me it's runs about 5K ohms on a new pot, dirt would cause upward spikes in that value, but since the A/D converter is pulling no current through that, the voltage doesn't change between the resistive element and the wire to the center terminal, the effective contact resistance just doesn't enter into the equation. So long as the wiper contact is making some contact (most of the pots have 4 fingers on the wiper that runs over the resistive element so it's nearly impossible for that to affect the reading anymore) the controller will be stable.
That's really the main improvement, but that's all that really much matters. Everything else only depends on the mechanics of the controller, does it go back to the same point at center, hold the same endpoints, move smoothly, etc. If the hardware does a good job of positioning the pot, then you can generally get it to hold within 1 count at any particular position. The voltage at the wiper terminall will only be related to the pot position on the resistive element, not on the state of the wiper contact. Put a couple of counts of deadzone around center and it's rock solid (not that it's going to be moving much anyway).
So, I don't know if that answers all your questions or not, but that's where the improvement shows up everything else being equal, and if you're comparing a CH gameport controller to the equivalent CH USB controller, Flight Sim Yoke, CombatStick, FlightStick, ProPedals, etc. everything else is essentially equal.
Anyway, I've rambled enough for now. If I've missed something, let me know.
Best regards,
- Bob
The StickWorks
http://www.stickworks.com