Friday, February 10, 2012

DOS Games Joysticks & Other Gaming Device Support

1.  Influences

When IBM released the PC in 1981, it offered a joystick add-on card. An unusual choice for a company that was all business, but they were marketing the PC for the home as well as the classroom and the office. Since this was 1981, however, there were few predecessors from which to take inspiration. At that point, only Apple and Atari had computer systems with standard joystick/paddle interfaces. Atari's 400 and 800 had four digital joystick ports, each with one button. Each port could instead support a pair of one-button analog paddles.  The Apple II/II+ had a DIP-16 connector that could support up to four analog axes and three digital switch buttons. The Apple II interface was much simpler to build, so IBM took that as a guide.

2.  IBM Gameport Interface

A standard IBM joystick port uses a DA-15 (female) connector and can support up to four analog axes and four digital switch buttons. The stick connected to a pair of potentiometers, one for each axis, which the stick moved to register movement. This interface could support up to four paddles or two joysticks. I have never seen a paddle controller built for a PC.  Two joysticks can be used with an IBM interface with a Y-adapter or a card with two DA-15 ports.  This interface was known for its finicky nature, so the joystick makers used trimmers to adjust the range in which the potentiometers are moved.  There are two of these, one for each axis.

The IBM joysticks were a simple interface built around a 558 Quad Timer.  They are officially accessed at I/O 201, but since most gameports card do not completely decode the addressing around that address, usually anything from 200H-207H will work.  Each potentiometer is 100kOhms, compared to the 150kOhms of Apple II joysticks or the 1mOhms for the Atari paddle.  Three-terminal potentiometers are usually used, but the IBM interface normally only connects wires to two of them, +5V to one of the outer terminals and the middle terminal where the resistance is output.

When a value is written to the interface, that triggers the interface to convert the resistive load as given from the joystick to a digital pulse that will remain active proportionally to the resistive value.  The length of time measured reflects the position of the joystick.  The button state can also be read at this time. Normally, the button inputs are logically 1s (pulled up to +5V), but when the switch is pressed, the input is driven to ground.

3.  Early Joysticks (Kraft-style)

IBM did not release a joystick for the PC, but third party joystick makers quickly adapted Apple II sticks. The first generation of joysticks are generally these boxy things that have a stick that require a thumb and finger or two to manipulate. There are two buttons, one for the thumb and one for the forefinger. Kraft is the best known brand of this type.  The unique feature about these joysticks is that there are switches on the bottom to change the joystick from self centering mode to free-floating mode.  That is good for paddle games like Breakout and Arkanoid.

4.  IBM PCjr. Joystick

IBM did, however, release a joystick for the PCjr. Functionally it is the same as a regular PC joystick, except for the fact that it uses an 8-pin keyed BERG-style connector. Essentially it is a clone of the Kraft joystick and probably made by Kraft with an IBM label on it.  IBM had two distinct joystick ports of this type on the back of the jr. so there is no need for a Y-adapter.

5.  Tandy 1000 Joystick

Tandy Radio Shack, when it released its TRS-80 Color Computer, decided to use a design almost identical to the IBM standard. The differences are both cosmetic and functional. The Deluxe Joystick is a physical clone of the Kraft stick. It uses a 6-pin DIN connector and early models may not have the trimmer adjustments. When Tandy released the Tandy 1000 computers, they used the CoCo interface as it was fairly close to the IBM standard. The 1000 computers also have two distinct ports. IBM standard joysticks can be used in Tandy 1000 if you can make a pin adapter and connect the unused third terminal of each potentiometer to ground (which also connects the buttons). The (non-Deluxe) Joystick for the CoCo, a black box with one button, does work in these ports but is reported to be quite horrible to use.  Tandy also released a pistol grip joystick for the flight simulator crowd.

Unlike IBM Joystick potentiometers, Tandy joystick potentiometers connect the third terminal to GND.  The resistive signal is fed into a comparator against a a voltage source which charges at a constant time.  When the  voltages match, the interface informs the programmer, and the time it takes for the match to occur determines the joystick position.  The method is sufficiently different from IBM joysticks that some games may not work with Tandy joysticks.  Buttons are handled in the same way as IBM joysticks.

6.  Amstrad Joystick

Amstad PC clones, the 1512 and 1640 were unique in that it supported a digital joystick.  The interface (also used on the Amstrad CPCs) could use any standard Atari (CX-40) joysticks with a second button (on pin 7) which connected to a DE-9 connector.  The interface used keyboard scancodes, making joysticks function as if the user was using the numberpad.  Some games specifically support this method and more should have had these machines not been from the U.K.  The Amstrad could support more traditional PC joysticks through an add-on card.

7.  Hand-Grip Joysticks

By the late 80s, the boxy Kraft-style of joysticks were falling out of style.  Flight Simulators, such as the series from Microsoft, were becoming increasingly popular.  Joysticks increasingly looked like airplane flight sticks.  These joysticks required the whole hand to manipulate and usually had a trigger button for the crook of the index finger and a second button for the thumb.  They functioned in the same way as the Kraft-style joysticks, although some began to incorporate rapid fire switches for the buttons.  The base of the joystick was typically held down to the desktop with suction cups or a weighted bottom.

There were lots of no-name joysticks, but Advanced Gravis made a good one called the Analog Pro that pushed the limits of the standard interface.  This joystick had five buttons, one trigger, two thumb and two on the base.  Four buttons were independent.  It also had a throttle control which could be disabled.  The throttle uses the third joystick axis on the interface.

8.  Gravis Gamepad

The NES and its competitors in the console realm showed a different style of game controller, with a digital pad and face buttons.  For side scrolling and overhead arcade-style games, a large joystick was thought by many gamers to lack the precision required for tight movements.  Advanced Gravis, who had a reputation for making quality PC joysticks, released the Gravis Gamepad, which looked like a SNES controller with a D-pad on one side and four face buttons on the other.

The digital pad used a digital to analog converter in the pad to report the extreme values to the interface, as if the joystick were being pushed all the way in one direction or another.  For games that did not register movement beyond that from the extreme and neutral position, this was OK.  For games that did take the movement into account, the pad was less than an ideal device, if the game worked with it at all.  A screw hole in the middle of the D-pad allowed for the insertion of a stick for a more joystick-like experience.  Games like Commander Keen came bundled with the pad and considering the tricky controls of that game, nothing else came close to being as good to control it.  

The four buttons were the maximum the base PC interface could support.  There was a switch that could turn two of those buttons into rapid fire versions of the other two buttons.  The gamepad was also ambidextrous at the flick of another switch, so the buttons would get manipulated with the left thumb instead of the right and vice versa for the D-pad.  Additionally, Keen 4-6 had explicit support for the four button layout of the Gravis Gamepad or any joystick with all four buttons on it, so you could jump, use the pogo stick, shoot and check status without having to press two buttons at once.

Later Gravis Gamepads, like the Gravis Gamepad Pro, which looks like a regular Playstation controller and can allow for daisy chaining for up to four controllers, requires specific support with DOS games or a device driver in Windows.  The Microsoft Sidewinder gamepad, which looks like the precursor to the Xbox controller, requires the same.

9.  Speed Adjusting Gameports

As PC speeds began to increase and gamers upgraded their machines, sometimes their old games would not work with their joysticks, even though they worked fine with newer games and the interface was standard.  Gameports could be read by a BIOS call, Int 15H, Function 84H.  This BIOS call was available first on the IBM PC AT and later machines.  It is not available on any IBM PC, IBM PCjr. or an IBM PC XT or Portable with a BIOS dated 11/08/82.  Presumably the routines would be fine tuned to the CPU speed.  Programmers could also poll the Gameport using the system timer as a constant.  These methods are not speed sensitive.

Other games used timing loops dependent on the processor's speed to poll the gameport interface.  They would do this to achieve finer movement detection and possibly faster code.  However, as they rely on the processor's speed, this can be a problem when the processor is running too fast for the game to catch up.  So companies began to release gameport interfaces with a dial sticking out the back with multiple settings to have the interface match the speed of the processor.  I doubt that this always worked correctly.  One popular card was the Advanced Gravis Eliminator.

By the early 90s, gameports were increasingly seen on sound cards like the Sound Blaster, Adlib Gold and Pro Audio Spectrum.  Gamers could be disappointed because these cards implemented a straight gameport without any speed adjustment possible.  Also, the Sound Blaster combined midi in and out functions on the gameport, using one line for midi out and one line for midi in which had been previously connected to GND and +5V, respectively.  Do not connect a gameport to midi adapter to a straight gameport!  (Also, you cannot connect such a device to a Roland LAPC-I, which uses a DA-15 female as an MCB-1 substitute unless you rearrange pins in the adapter.  The LAPC-I does not support joysticks either).

Later gameport adapters, such as those found on the Sound Blaster 16, may allow gameport joysticks to work in faster computers like a 486DX2/66.  Earlier gameport adapters, like those that do not have any speed adjustment method or are found on 8-bit Sound Cards (including the Sound Blaster Pro) may fail to respond.

10.  Luxury Joysticks

In the 1990s, two companies were especially well known for making high end PC joysticks.  The first was CH Products Flightstick Pro, a high quality stick with four buttons, a 4-position hat switch and a throttle wheel.  The throttle used an extra axis, but the hat really added four extra buttons.  It required specific game support for the CH method, encoding the state of the eight buttons using a 4-bit binary code.  The downside to the CH method is that only one button or hat switch press could register at a time.  The method was compatible with games that did not support the encoding, as a button press would look identical to a standard stick.  To maintain compatibility, only 12 of the combinations are available.  The Flightstick Pro uses 4 combinations.  A later stick from CH had more buttons and hats and used most of the remaining 8.  They also made a flight yoke device called the Virtual Pilot, which had a special throttle control.  It was one way DOS games could get to having a proper wheel for STUNTS and Test Drive 3.  CH Products also released a standalone Pro Throttle which was programmable and could take over the third axis from the stick.

For the true sim fanatic, Thrustmaster came out with a three piece system that was made of real high quality materials and had the price to match :

FCS - Flight Control System, a standardish joystick with hat switch.  The basic stick was known under several names, including the P(ro)FCS, Mk I, Mk II, and Top Gun, etc.  Later versions include the F22 Pro and the F16 FLCS.  The later sticks were fully programmable directly because they had an AT keyboard connector in addition to the Gameport connector.

WCS Mk II- Weapons Control System, a throttle controller with six buttons and a three position switch, a later version with more buttons is the called the F16 TQS (Thottle Quadrant System).  There was an earlier version that looks virtually identical called the Mk I, but it is not programmable, only has preset keyboard combinations and does not use the gameport for the throttle action.  They connect to the system with a Gameport and AT keyboard connector.

RCS - Rudder Control System, a pair of floor pedals, a later version is called the Elite Rudders.  Although they may look like car pedals, they actually are pushed forward and pulled back with the heel, reportedly as an in airplane.

The combination of the first two is called HOTAS, hands on throttle and stick.  The buttons and hats on the FCS (except possibly the trigger) and WCS are programmable in software.  The programmable buttons and hats then acted like keyboard keys, and both devices could plug into the keyboard port for that purpose.  The keyboard would plug into a port on either device.

Connecting all this was a bit of an experience.  The Rudders had a joystick port which connected to the stick or the throttle.  The stick's joystick port connected to the throttle with a Y-adapter, and the throttle's joystick connector connected to the gameport.  The keyboard's connector was inserted into the stick, than a keyboard cable went from the stick to the system.  The gameport interface used two axes for the joystick, one for the throttle (a one axis device) and one for the rudders.  (I assume the rudders began at one extreme and pushing each to the limit would shift the direction by half).   Thrustmaster also made a true wheel called the Grand Prix 1 and a dual port gameport called the ACM Game Card with a speed dial and a second joystick interface at a default I/O 209H.

The hat switch on the standalone joystick works differently than on the CH Products sticks.  Each position on the hat is encoded to a discrete resistance value, which is then read on the third axis.  Five positions (up, down, left, right and center) equal five values.  A game had to have specific support for this method.  When the stick was plugged into a programmable throttle, the throttle would take over the axis and the hat buttons should be fully programmable.

11.  Notebook Options

In the DOS days, notebooks were very expensive business tools.  I cannot think of any notebooks offhand that came with a Gameport built in.  Many did have serial and parallel ports, and there were dongles that allowed you to connect a gameport joystick to a serial or parallel port.  Unfortunately, unless there was specific support for this hardware in a game, these dongles had to rely on drivers and TSRs to emulate the gameport.  Your mileage did vary in terms of compatibility.

There were PCMCIA gameport adapters.  I have one called the EXP Game Traveler.  There is another called the EXP Midi Traveler, which adds midi support to the gameport connector.  Both devices require drivers to load, but I did not have a problem with them.  Not common cards to find, for sure.  Look here for more info :

12.  Mice and Six Degrees of Freedom Controllers

PC Games had been supporting mice since Microsoft Flight Simulator 2.0 in 1984.  The first mice used serial ports or proprietary interfaces to transmit data.  Mice and trackballs used a pair of rotary encoders to indicate movement on the x and y axes.  A standard Microsoft Mouse (including compatible mice made by third parties) supports two buttons.  Logitech mice often extended the protocol to enable support for a third button.  The Mouse Systems protocol always supported a third button, as did the PS/2 mouse protocol.  Tandy even made a mouse for its CoCo that could work in its Tandy 1000 machines, since it used 6-pin gameports with a special driver.

In DOS, a driver is required to enable mouse support.  The Cutemouse driver supports virtually any mouse ever made that can run in DOS.  Most people use it today because it takes up so little free RAM and is quite compatible.  A game does not have to have specific support for the mouse protocols because a driver will translate them into standard Int calls that are readily documented.  Sierra's SCI1 games supported the third mouse button for those games' point and click interface.  In those games, hitting the middle button will switch the icon from whatever it may be (eye, hand, item) to the walk icon.  PC Booter titles, which do not run on DOS, should only work with serial mice supporting the Microsoft Mouse protocol.

In 1996, Microsoft released its first Intellimouse, which popularized the scroll wheel.  A scroll wheel acts like a z-axis and third button.  It was released in serial and PS/2 versions.  I do not know that any DOS games that support a scroll wheel, which was mainly popular in Windows 95 programs.  However, there were at least two controllers that functioned like a mouse with support for a z-axis, the Logitech Cyberman and the Space Orb 360.

The SpaceTec SpaceOrb 360 (f/k/a Spaceball Avenger) looks like a gamepad with a trackball stuck on it.  It was great for Descent 2 and usable in Quake and Quake II.  The trackball can be pushed, pulled or twisted as well as rolled.  It has six programmable buttons.  The weirdness of the ball movement prevented it from achieving true popularity.

The first Cyberman was a mouse mounted on a pedestal, yet offered six degrees of freedom (6DOF).  It was supported in DOOM, System Shock and the floppy version of Quest for Glory IV.  It has three buttons.  You could move the mouse left and right (x-axis), forward and back (y-axis) and push and pull it up and down (x-axis).  You could also push forward/pull back the mouse relative to its base (pitch), twist it to the left or right relative to the x-axis (yaw) or the y-axis (roll).  It also has force feedback.  Unfortunately its poor ergonomics and limited ability to use it as a standard mouse made it unpopular.  Cyberman 2 was a Windows only device.