![]() |
N64 and Playstation Controllers for the PC with updated 03/09/99 |
![]() |
03/09/1999 N64 timing bug-fix
A couple of people had some problems with the N64 variant of the interface. I finally managed to reproduce the problem myself, and I think I have fixed it. My thanks to Alan and BSL for their help. Download the bug-fixed code here: wicked3.asm
The psx part of the code has not changed.
_____________________________________________________________
04/07/1999 Pre-programmed chips now available...
You will be pleased to know that pre-programmed chips are now available from FineFaze Multimedia. The chips are programmed with an enhanced version of my code featuring amongst other things better support for multiple interfaces, and a reduced cpu overhead. This chip code requires a special .INF which is available from FineFaze.
If you purchase a pre-programmed chip, all you need do is:
Have fun!
_____________________________________________________________
04/07/1999 Updated PSX schematic.
Minor update to the PSX interface schematic to add a couple of diodes... this means the pad is now powered with 3v3 rather than 5v.
_____________________________________________________________
05/06/1999 Programming the Microcontroller
I have had a number of people ask me if they can program the USB microcontroller without buying the starter kit. I had a hunt around the Cypress web site, and the answer is 'yes'. The chips in question, the CY7C63000A-PC (one time-programmable, 2K ROM) or CY7C63001A-WC (UV erasable & 4K ROM) are supported by a number of third-party programmers. Details of which are available here.
If you don't buy the starter kit, then you will need to download the CYASM assembler, and its accompanying documentation.
The code needs no command line options to compile, you simply put the assembler in the same directory as the source code & type 'cyasm.exe wicked.asm'. I created a shortcut to the assembler with this as its command line so I can double-click to recompile. If you have the starter kit, the next thing you do is fire up the programming software & load the wicked.hex file that has been created, letting the programmer know that this is an 'Intel .Hex' file, then you program & verify. If you don't have the starter kit, then I suggest you read the CYASM documentation & the instructions that came with your programmer.
For a little light-reading, once you have memorised the instruction-set, I suggest you take a look at the 63000 family datasheet. This may lead you to wonder why I saw fit to add external 1k pull-ups to my schematics, as the 6300x has internal pull-ups. The answer is that those pull-ups are too weak to pull the IO lines high fast enough for 'high-speed' comms to the N64 and PSX gamepads. Take a look with a scope & you'll see what I mean.
_____________________________________________________________
01/06/1999 First 'Proper Release'
As promised, I have finally drawn up a couple of circuit diagrams and written some construction notes for the N64 and PSX variants of the USB gamepad interface.
Today also marks the first 'proper release' of my USB microcontroller code - thanks to those of you that sent in your suggestions. From now on the code will be properly version controlled (hopefully !).
Construction Notes:
Downloads & Links:
_____________________________________________________________
27/5/1999 Even better news...
New to this version; N64 pads work too! I'm glad it didn't take me as long as it took Stephan & me to sort out the parallel port N64 interface... now that was tricky. The source-code is reasonably well commented - I've included connection details for the N64 pad, although I actually tied the 1K pull-up to VCC rather than the improvised 3V6 rail, as it was already in place for PSX mode.
pin17 controls the interface operation. If this pin is left floating then the chip is in N64 mode, if the pin is tied to ground then the chip operates in PSX mode. I have organised the data such that were you to own both flavours of pad you could switch between one and the other without having to re-configure any game settings;
| Data | N64 Mode | PSX DualShock Mode |
| 1 (x-axis) | analog stick x-axis | LHS stick x-axis |
| 2 (y-axis) | analog stick y-axis | LHS stick y-axis |
| 3 (z-axis) | analog stick x-axis | RHS stick x-axis |
| 4 (rz-axis) | analog stick y-axis | RHS stick y-axis |
| button1 | A | select |
| button2 | B | LHS stick button |
| button3 | Z | RHS stick button |
| button4 | start | start |
| button5 | dpad up | dpad up |
| button6 | dpad right | dpad right |
| button7 | dpad down | dpad down |
| button8 | dpad left | dpad left |
| button9 | A | L2 |
| button10 | B | R2 |
| button11 | L | L1 |
| button12 | R | R1 |
| button13 | c up | /\ |
| button14 | c right | O |
| button15 | c down | X |
| button16 | c left | [] |
note: Bleem counts the buttons from 0 rather than 1
The new microcontoller source-code is available here.
I have started editing the code using GNU Emacs for Windows - it's quite a lot nicer than Notepad, and is also good training for my dabblings with Linux.
It has been pointed out to me that there is a good chance this interface will work on a USB equipped Mac - I must admit I hadn't thought of that, but I guess it just might. If anyone tries it, then I'd like to hear from them.
It has been suggested to me that the next most popular pad to write support for should probably be the SNES, so that's probably what I'll do.
Finally, a lot of you people have been asking me if I can supply pre-programmed chip or ready-made interfaces. I have decided not to sell chip / interfaces myself, as I only did this for the fun & don't think I can face the hassle of supporting this commercially. Sorry !
However, you may be pleased to hear that I have been contacted by someone who has offered to supply pre-programmed chips (& possibly ready-made interfaces, depending on demand). They are in the process of setting up a web-site, and such, so it will probably be a couple of days before their service is available. I'll let you know when they are ready, and will probably put a link to their site from this page.
_____________________________________________________________
25/5/1999 Some very good news...
I have finished work on a PSX only version of the interface for Windows98, and it works like a dream !
Thanks to Vojtech Pavlik (the guy who is adding joystick support to the most excellent Linux) I realised that I didn't actually need to write a driver... Win98 comes with built in support for HID devices, and 'all' I had to do was make the report from my interface HID compliant.
Turns out it wasn't quite that easy, as Microsoft, bless their hearts, have added some nice restrictions to the axes you can use, and that kind of thing. Anyway, I figured it out in the end, and the fruits of my labours are available below. I was most pleased to be able to play GranTurismo (via Bleem) using my Sony DualShock, in analog mode, via USB! Check this screen shot (627K) showing Bleem, and the joystick config panel (detail-nerds will notice that I messed up one of the Bleem button assignments - oops!).
Follow the instructions below to repeat this experiment:
My next goal is to get N64 controller support going. It would also be really nice if someone out there could look into providing Win95b support, via a driver similar to the Trustmaster one detailed below... If you can help with this, then please mail me.
Once the N64 stuff is going (hope it doesn't prove to be a nightmare!) I will draw a proper circuit diagram for you, and then I will probably go on to add support for Atari, Genesis, Jaguar, Saturn, SNES pads... I'll probably also add 'general purpose analog' support; 4 axes and a few buttons... I'll see how it goes.
_____________________________________________________________
20/5/1999 The plan...
The aim is to get N64 and PSX controllers hooked up to PCs via USB, because;
The plan is to have a single chip that can act as either an N64 or PSX to USB interface, and a Windows driver for that chip that will respond to the two possible device descriptor reports, and the data that follows, appropriately. You build the interface (one IC, four resistors or so and a ceramic resonator), install the driver & then hot-plug whenever you feel like it.
I have almost finished the microcontroller code...
The hardware is no problem for me; about a year ago I built a little circuit using a Cypress Semiconductors USB microcontroller (Based on their joystick app note, and using their $99 USB stater kit) and got this working with a PSX dual-shock pad using USB joystick drivers from Trustmaster & a little reverse-engineering. It should be simple to modify the microcontroller code I wrote to support an N64 gamepad... (I wrote the original low-level code for the N64 gamepad parallel port interface)
But I need some help with the Windows software...
...Unfortunately, the Trustmaster drivers only have support for 2 axes, so what I need is some help with writing USB drivers for Windows. If you can help, then please mail me.
Until then...
Watch this space!
_________________________________________________________________________
This page is written and maintained by Simon Nield