You are not logged in.
Lost Password?

DirectPad Pro

DirectPad Pro Version 5.0
(c) 1997-9 Earle F. Philhower, III
April 19, 1999

Links: Introduction - License - Requirements - Constrution - Installation - Source Code - User Extensions - Special Thanks - Comments


Do you have a joystick or gamepad that you just love, but isn't available for your PC? Are the awful PC-compatible gamepads making you long for the days of the Atari 2600 and your beloved Wico-stick? Do you miss your "superergo" Jaguar joypad? If so, the DirectPad Pro is for you!

DirectPad Pro is a combination hardware/software interface that allows Windows 95 to utilize Sega, Atari, Jaguar, SNES, and other console joysticks and keypads on their PCs. All of the interfaces require minimal wiring and operate through a free parallel port. Any Windows DirectX compatible game can use these interfaces automatically!


DirectPad Pro is free software, and may be used without payment for any non-commercial purpose. However, both the software and hardware are for USE AT YOUR OWN RISK.

I am not affiliated with any video game related company. Atari, Jaguar, SNES, Sega, Sony, Genesis, and all other company and product names may be (c), (tm), or (r) their respective companies.


Before downloading DirectPad Pro and building your interface adapter, make sure your system meets the following requirements:

· Windows 95 or 98 (NT is unsupported)
· DirectX v5.0 or v6.0
· Printer port
· Any small-signal diodes (eg 1N914) for most interfaces
· Sense of Adventure


DirectPad Pro requires the construction of a parallel port interface to talk to your gamepads. If you are careful and clip component leads you will be able to fit the entire pad interface into a DB-25 shell. If you don't know which end of a soldering iron to hold, please get someone else to build these interfaces for you. All of these images are available in the DPADPR50.ZIP file.

Construction is very straightforward. Print out the schematic image and cross off each connection as it is made. Just make sure to double-check the orientation of any diodes in the circuits. Before plugging in your interface do a final check to make sure that all wires are connected properly, and that no bare leads or wires are touching anything. I recommend using a plastic hood for these interfaces, so there's even less chance of short-circuiting things.

Here's how I have my interface hood set up, using a slightly modified plastic DB-25 hood:

I recommend not cutting up your joystick cables to make these interfaces. Instead, use the appropriate female or male connector so that you can connect any compatible joystick to the one interface.
Here is the VirtualBoy schematic, thanks to Gravis Zero:

Multiple VirtualBoy pads are supported using the same interface as SNESKEY. For pads 2..5 hook them up the same as pad 1, but don't make the DB25-10 connection. Instead, make the connection according to the following table:

   2              12
   3              13
   4              15
   5              11


Once you've got the interface built, it's time to install the drivers so that Windows can communicate with it. Go to the "Control Panels" window, and select the "Game Controllers" icon.

Select the "Add..." button in the Game Controllers window, then select "Add Other..." and "Have Disk..." in the windows that appear. Specify the path into which you've extracted the .ZIP file, and hit OK.

Select "DirectPad Pro Controller" from the list (this version does not have individual drivers for each joystick type). You will then be returned to the "Add Game Controller" dialog. For the second time, select the "DirectPad Pro Controller" and you're almost done.

Finally, double-click on the newly installed joystick. Use the dialogs to configure to the proper interface, parallel port, and controller ID (when using multiple controllers).

If you're using multiple controllers you need to repeat this exercise for as many pads as you have connected.

Laptop Users Only:

DirectPad Pro requires certain files from the standard joystick driver to function properly. To use DirectPad Pro on a laptop without a gameport it is necessary to force Windows to add gameport support. Do this via Start->Control Panels->Add Hardware->Sound, Video, Game Controllers->Microsoft->Gameport Joystick. Then install the DirectPad Pro drivers per the instructions above.

Source Code

The joystick scanning routine source code (see joysrc.txt in the file) is available for all to use and abuse. However, the actual driver code is not public domain, and will not be made available.

User Extensions

Check out Alexander Poplawski's sharware application, Joystick Switcher, for switching between multiple joystick setups. Support for DirectPad Pro has just been added, and many other types of joysticks and game controllers are supported.

If you've written an application that works with DirectPad Pro, drop me a line and I can add a link to it here.

The control panel and VxD commuicate through the Windows registry, and it is possible for user applications to change the configuration without using the DLL. This allows programmers to write mini configuration programs such as:

* Button remappers that change buttons depending upon the current game
* Taskbar joystick selectors

I cannot provide support for writing or using these user programs. If you're unfamiliar with the registry or the DirectX programming you'll have to learn elsewhere.

The keys are stored as strings:


And as DWORDS:


And as a binary array:


Joystick?Config is formatted as a series of four decimal numbers separated by commas but no spaces. (i.e. printf("%d,%d,%d,%d"))

The first digit is the joystick type, from the following enumerated type:

The next digit is the joystick ID, a number from 1 to 5.

The third digit is the parallel port, 1=LPT1: through 4=LPT4:; 5=0x140 (NEC-PC)

The last digit is the power flag, 0=power off between reads, 1=stay powered

Button?Config is a string of 22 capital letters, with the position specifying which cooked button is being configured, and the letter at that position specifying the raw button it will be mapped to, A=1st button, V=22nd button.

For example, Button1Config[4]='C' will set the 5th cooked button (remember C strings start at offset 0) to 'C'-'A'=3rd button on the controller. That is, when the user presses the 3rd button on the controller, the 5th button will read as pressed under Windows. It is legal to have more than one cooked button for any raw button.

*ScanRate is a DWORD (normally 3) that specified how slow to clock the specified controller pad. This shouldn't be changed unless all else fails.

*Rumble is a DWORD that specifies which effects should be mapped to the constant vibration motor on PSX force feedback pads. A value of 2 means no effects will be generated, 1 is the buzzer motor, and 0 is the rumble motor.

Calibrate?Config is a binary value consisting of an array of dwords as follows: {DWORD min[6], mid[6], max[6]} (72 bytes total). Array offsets are as follows: [0]=X, [1]=Y, [2]=Z, [3]=R, [4]=U, [5]=V.

After the registry keys have been modified by your program, a call to joyConfigChanged(0) will notify the driver to read the new values. Without this call the driver will not know to re-read the settings, and any changes will not take effect.

Special Thanks

Thanks in general to all the FAQ keepers for the various arcade systems. Without their work I'd not have been able to design these interfaces.

Simon Nield and Stephan Hans worked many hours to design a working N64 parallel port interface, and writing scanning code to support it.

Dark Fader ( reverse engineered the PSX Dual Shock controller protocol.

Thanks to Benji York, who helped debug the SNES driver amongst other things. He has a similiar program and interface for for DOS, Windows 3.X, and Windows 95, SNESKey. Instead of simulating a joystick, it converts joypad movements into keystrokes.

Thanks to Juan Berrocal for the original PlayStation interface.

Thanks to Sam Hu for the Saturn multi-controller interface, and to Tom Berrodin found the analog controller protocol and provided testing.


If you've had a good or bad experience with DirectPad Pro, I'd like to hear
about it. Mail me at