Microsoft Sidewinder Gamepad (gameport) Driver for Windows XP

News

May 5, 2006
Sourcecode is now available. Sorry about the popup windows, they come from the "free" Nedstat counter.

March 20, 2005
Splitted version 2 into A/B: each use a different communication method. If previous versions didn't work for U, please try version 2b.

March 19, 2005
New version online, using PPJoy to emulate a virtual joystick. Compatible with all games that allow the use of a joystick.

March 15, 2005
I found exactly what I needed: a driver that emulates a 'virtual' joystick, to which I can send messages. I now have a joystick in my Game Devices list which responds to all the buttons of my Sidewinder. I'll wait to release the next version as soon as I have my second controller back, so I can add support for daisy chaining.

March 14, 2005
Fixed a bug. Default values for all the buttons: Arrow keys and Numlock 0-9 keys.

March 13, 2005
Put this website online. Released first public version. Daisy chaining not yet supported.

Prologue

A while ago, I bought two old sidewinder gamepads, non-USB, using the gameport. These allow daisy-chaining, so I could use both at the same time, with only one gameport. A month later, I "upgraded" my Windows 2000 installation to Windows XP for certain reasons not to be mentioned here. Apparently there are NO drivers whatsoever to make these gamepads work in winxp. The built-in Sidewinder Autodetection thinks it's a Sidewinder 3D Pro joystick. I tried to forcely install the ones from win2k, but msgame.sys decided to bluescreen. I then borrowed a gameport-to-USB cable from my friend, who got it with his Sidewinder Precision Pro Joystick, but Windows XP detected the same Sidewinder 3D Pro device. What to do now? Throw them away and get some new USB pads? I don't think so...

The gamepads work perfectly in Windows 9x/ME and Windows 2000... I truely can't understand why Microsoft doesn't want to support their own hardware, when it's so simple to write a driver for it. They seem to have drivers for (all?) the other Sidewinder products that use the gameport.

Programming

I decided to start looking around for *something* that would give me raw access to the gameport (as Windows NT requires drivers for all hardware access). Seems there are 2 simple drivers available that allow read/write access to hardware ports: DLportIO and Inpout32. Both are freeware and come with sample code to use the driver+dll. Inpout32 even provides full sourcecode for the driver+dll, and the dll installs the driver automatically, so I chose to use that one (their function calls are identical).

Now that I was able to communicate with the gameport (at address 0x201), I needed to know how the sidewinder digitally encodes it's data. Googling around, I found this page that describes exactly how to communicate with the gamepad.

Download + installation instructions

First make sure all gameport joysticks are removed from the Control Panel > Game Devices list, as that might interfere with my program. USB gamedevices should give no problems, although I don't have any to test it out.

Version 1
I recommend version 2, I only leave version 1 here for people who might prefer it's method of sending keys instead of emulating a joystick.
Next to each gamepad button, U can choose a virtual key to be emulated. Mousebuttons are also available (VK_LBUTTON etc.)

Version 2a / 2b   (VB6 sourcecode)
There are 2 communication methods (15 packets with each 1 button state / 5 packets with each 3 button states), U might try both version 2a and 2b if one doesn't work. First download this and run sidewindergamepad.exe. If it doesn't respond to the buttons u press on the gamepad, try pressing the mode button twice (turn off and on the LED), see if it works then. Removing the joystick and plugging it back in the gameport, or rebooting Windows might help too.
If it responds correctly, U can proceed to the next step: installing the virtual joystick(s). If the program works fine on your desktop, but responds slowly or not at all ingame, try setting it's process priority to "High" in the Windows Task Manager.
The sourcecode is also available, the program is written in Visual Basic 6.

Important remarks

U need Administrator privileges the first time u run the program (a small driver has to be installed).

This program is ONLY intended for Windows XP. It will most likely work for all versions and even Windows 2003, but I don't see the need for gamepads on a server version. All previous Windows versions (including Windows 2000) have drivers for this gamepad.

The program itself is NOT a driver. Inpout32.dll will install a 4 kB driver (hwinterface.sys) to allow communication with hardware ports. This means U can not install the joystick in the Game Devices control panel. U need to run this program in the background when playing games.

It was tested and developed on Windows XP Service Pack 1. One gameport (onboard soundcard). I have no idea if it will work on a system with more than one gameport.

When daisy-chaining, it is possible that some buttons wrongly get pressed for a couple milliseconds. I am currently investigating this problem, increasing the sampling rate and filtering out deviating button states might work.

Contact me

Before u do, please note that I CANNOT help you with any other device. Any other Microsoft joystick, steering wheel, or any USB device: no go.

Other (possibly interesting) links