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 |
B | Y | Select | Start |
Up | Down | Left | Right |
A | X | L | R |
1 |
1 |
1 |
0 |
10 |
Dir Y |
Y6 | Y5 | Y4 | Y3 | Y2 | Y1 | Y0 |
Dir X |
X6 | X5 | X4 | X3 | X2 | X1 | X0 |
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 :)