Feedback: Microsoft Force Feedback Pro

Microsoft Force Feedback Pro

Force Feedback Pro
Microsoft SideWinder Force Feedback Pro Joystick From technology acquired from EXOS, Inc, Microsoft then released a force feedback product called the Force Feedback Pro.

Built on the design of the Precision Pro, the Force Feedback Pro differed only in the inclusion of motors for the force feedback effects, and the lack of USB compatibility. (A DIY converter project exists.) Due to the inclusion of the motors, the Force Feedback Pro was significantly larger and heavier than the Precision Pro, making it easy to differentiate between the
Force Feedback Pro
Force Feedback Pro

If I’m not wrong we are talking about years ~’90.
Just +20 year ago when a huge number of “ports” adapter were present … for every “excuse“.
Fortunately today some vendors (such as Apple) use just 1 port for all :-).


Today just 1 ports!
Today just 1 ports!

This joystick has Game Port. In the same period the USB port was replacing the serial port, parallel port, game port,  PS/2 port

Sound Card

Game Port  was available onboard of Sound Card (as Creative SoundBlaster) with of the principle “if you need more than a buzzer then you are a gamer“.
This is the heaviest joystick I ever seen due to inclusion of two motors in order to provide force feedback effects.

Force Feedback Motors
Force Feedback Motors

NJ+ Joystick Vs. Nicolò and NJ+ Brain Code

This is the “Nicolò Brain code” when he plays

(nj+ code)

import all.I.can;
import all.I.cannot --force --ignore_errors;

// the fnc call_this will be used later
fnc call_this(Environment env){ A: if ( env.isNoiseTooLow() ) then { I.makeNoise(); GOTO A; }; }

fnc main(DadCommands[] args, Environment env) {
 if (args[0]=="home_work") {
  exit; // just in case
  Console.say("hum... this line should be not executed");
 args[0]="make"; // Overwrite command that Dad passed me as argument

 // DAD
 Dad dad = Dad.getInstanceOfDad(); //DAD is Singleton
 I.sleep(500); // arg is ms
 I.setIgnore(dad, true);

 // Things 
 Things it = null;
 Things it2 = null;
 ScotchTape tape = null; // Dad explained me to initialize 
 // Initialize
 reset(env.things); // for enumeration
 I.sigmask(0xFF); // I can't be interrupted

 START: // I'm using GOTO since my Dad said me to do not use it.
   it =,env.things.rnd(withValue) ) );
   if ( it.isSparking() || env.things.remain() == 0)  
     then { 
            tape = new ScotchTape();
     else { goto START; }

 if ( dad.did ) then { I.repeatOn(it,dad.better) }
 it2 = env.things.rnd(Dangerous); // ignore if it === it2
 if ( !it.isAttachable(it2) ) then { it=tape.scotch(it,it2); } // will work!



Add Comment

Click here to post a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.