I will happily accept pull requests and such for anyone who gets it working, but my Windows machine finally died, so I have no reason to work on it anymore. This coincides with my discovery that Mechwarrior 5 runs perfectly on my ARM Mac under CrossOver.
I might try to do something similar over there, as WINE is so good it duplicates Windows perfectly and the joystick exhibits the exact same problem. (lol)
But WINE is a heck of a lot easier to hack on. So we'll see.
Connect a Microsoft Sidewinder Force Feedback 2 joystick to Windows 11 as if it were a modern device — including full force-feedback support — without any mapping files or middleware.
This is a from-scratch virtual joystick driver for Windows 11. It reads the
physical Sidewinder FFB2 via its original USB HID protocol, translates the
input to a standard virtual joystick that every game can see in Game Controllers
(joy.cpl), and routes force-feedback output from the game back to the physical
stick's motor.
- Windows 11 (test-signing mode must be enabled — see installation below)
- Microsoft Sidewinder Force Feedback 2 joystick (USB)
- PowerShell 5+ (comes with Windows)
- No other joystick mapping software required
The UMDF2 driver is currently test-signed. Open PowerShell as Administrator and run:
bcdedit /set testsigning onRestart Windows.
Why? The driver is not yet submitted to Microsoft for WHQL certification. Test-signing mode allows unsigned drivers to load. This is safe as long as you trust the driver binary.
After restarting, open PowerShell as Administrator in the repo directory and run:
.\scripts\install.ps1Restart Windows again to load the driver.
Connect the Sidewinder FFB2 to any USB port. Windows should recognise it automatically as an HID device.
Run sideblinder-app.exe (or use the start menu shortcut if you created one).
A tray icon appears in the system tray indicating connection status:
| Icon state | Meaning |
|---|---|
| Connected | Joystick found, virtual device active |
| Disconnected | Joystick not found — waiting for reconnect |
- Open Game Controllers: press Win + R, type
joy.cpl, press Enter. - You should see a "Sidewinder FFB2 Virtual" device listed.
- Select it and click Properties to see live axis and button input.
- Move the stick — the axes should respond in real time.
For best accuracy, run the calibration wizard once after installation:
sideblinder-diag calibrateFollow the on-screen instructions to move the stick to its limits. Calibration values are saved to the config file automatically.
You can also calibrate from the GUI: Settings → Calibrate (once the GUI is available in a future release).
The app reads a TOML config file. To generate a documented copy with all defaults:
sideblinder-app config --generateThe config file is at %APPDATA%\Sideblinder\config.toml. Changes take effect
immediately after saving — no restart needed.
For the full reference of every setting, see docs/config.md.
Diagnostics: If something isn't working, run:
sideblinder-diag diagnoseThis produces a full report of device state, driver state, and active config.
Troubleshooting guide: See docs/troubleshooting.md for solutions to common problems.
Bug reports: Open an issue
and include the output of sideblinder-diag diagnose.
docs/hw-spec.md documents the empirically verified USB HID
wire format of the Sidewinder FF2, derived from the original Microsoft driver CD:
- USB identity: VID
0x045E, PID0x001B - Input report byte layout (axes, buttons, POV hat)
- FFB output report format and supported effects
- Driver architecture notes
The spec was extracted by decompiling GcKernel_win2k.sys (the original Microsoft
kernel filter driver from the 2002 SideWinder Force Feedback 2 CD) using Ghidra.
To regenerate the decompilation for your own reference:
# Requires Ghidra 12+ and Java 21+
JAVA_HOME=/opt/homebrew/opt/openjdk@21 \
/path/to/ghidra/support/analyzeHeadless \
/tmp/ghidra_project MyProject \
-import /path/to/GcKernel_win2k.sys \
-postScript ExportC /tmp/gckernel_decompiled.c \
-deleteProjectThe decompiled C is not included in this repository as it is a derivative of Microsoft's copyrighted code.