SNES mouse on a PC

The idea

For those who dont know, Nintendo produced a mouse for the SNES. The mouse was sold with a game called Mario-Paint which was a drawing game (similar to paint brush). I still have a Nintendo mouse but I thought it was sad not to use it anymore so I found a way to use it with my PC.

You may wonder: Why do that? Here are a few good reasons: (at least, those are good reasons for me!)
  • The ability to play Mario-Paint with the real original mouse. (Authenticity)
  • The possibility of using your good old mouse which reminds you a lot of good childhood memoires to do real work. (Nostalgia)
  • Because you can, and it's cool. (Cool factor)

New: I now have an USB version of this project. The mouse is now usable under any operating system supporting standard USB HID mice. SNES/NES gamepad (and mouse) to USB adapter.


Technical details

The SNES mouse communicates with the SNES in the same way controllers do, but the SNES reads 32 bits instead of reading only 16 bits. The 15 first bits are identical to controller bits, the 16th bit is 0 instead of 1 (this makes it possible to detect that a mouse and not a controller is connected) and the 16 additional bits contains information on the direction and amount of movement that has occured since the last read.

Here is table explaining which bit does what. Bit 0 is the first bit to be put on the wire:
0 1 2 3 4 5 6 7 8 9 A B C D E F
00 BYSelectStart UpDownLeftRight AXLR 1 1 1 0
10 Dir Y Y6Y5Y4Y3Y2Y1Y0 Dir X X6X5X4X3X2X1X0

Note: On a real SNES, the last 16 bits are read at a higher speed than the first 16 bits.

For more information on the SNES controllers, I recommend this page:
Super Nintendo Entertainment System: pinouts & protocol
(The SNES mouse information section has been submitted by me)


Schematic

The interface for connecting the mouse to the parallel port is identical to the snes controller interface.:

(source: Direct Pad Pro)


Software

At the moment, the mouse is supported under Linux only. To be able to use it, I wrote a patch for the gamecon.c driver. (This driver already supported SNES, NES, PSX and n64 controllers)

Patching the kernel:

Right now, my patch is in Andre Morton kernel (-mm). If everything goes fine, the patch should eventually be included in the official kernel (probably in 2.6.17 or 2.6.18). Meanwhile, you can apply this patch:
gamecon_snesmouse.diff

To apply the patch, go in your kernel root directory and type (with a coorect patch path of course..):
# patch -p1 < ../gamecon_snesmouse.diff

Inserting the module into the kernel:

# modprobe gamecon map=0,9,0,0,0,0
Here is a small overview of the meaning of the map argument:
Parport id, Type of the first peripheral,, Type of the second peripheral,, Type of the third peripheral,, Type of the fourth peripheral,, Type of the fifth peripheral

For more information, read the file Documentaion/input/joystick-parport.txt that comes with the kernel sources.

Using the mouse in X:

If you want to use the mouse for normal work under the X window system, you may want to adjust acceleration to compensate for the low report rate of this mouse (remember, it was designed for a console with a low display resolution). You can use xset like this:
$ xset m 3/2 2
The parameters above are the one I use, you may want to tweak them. Here is the syntax:
xset m [acc_mult[/acc_div] [thr]]

If you use the mouse with mario paint, you should totally disable acceleration.

Windows version?

Sorry, but I dont have a driver for Windows and I _will not_ create one either. If you create one yourself, I will be glad to add a link to your page or even host the driver files here.


Disclaimer

I cannot be held responsible for any damages that could occur to you or your equipment while following the procedures present on this page. Also, I GIVE ABSOLUTELY NO WARRANTY on the correctness and usability of the informations on this page. Please note, however, that the procedures above have worked in my case without any damages or problems.

Now you cannot say that I did not warn you :)