Sunday, January 30, 2011

SNES to USB controller with internal flash memory mod

I've been toying around with the idea of an SNES controller USB mod for awhile now, but I finally broke down and decided to get my hands dirty and actually make one.  I found this awesome site with all sorts of neat controller mods and decided to go with his SNES/NES gamepad (and mouse) to USB adapter guide for my build.  After looking into the necessary parts for building the adapter, I decided it would just be simpler (and actually cheaper too) to buy a pre-assembled and pre-programmed circuit board.  Once I had the adapter circuit, I decided to take things one step further and combine this mod with a mod one of the guys in my hall had done with an NES controller in which he converted a nonfunctional NES controller into a USB flash drive.

The first step was finding an appropriate USB hub for this mod.  I settled for this IOGear hub:

 

I would guess any hub with this sort of design where there is a recess in the case for the cable would work well, because all of the circuitry gets shoved over to the other side of the board to make room for the recess, leaving the two ports next to the recess as just long traces on the board without any circuitry, which is perfect later on when I cut the hub's board in half to fit it into the controller shell.

I had also considered this Targus hub because it was cheap and it was the only one at Wal-Mart, but decided against it because of the circuitboard design.  Because of the shell design (without any recess for cable storage), the circuitry is laid throughout the length of the entire board, making it impossible to remove the two unneeded USB ports.


Here's the internals of the hub I used:

 

You can see from the picture above how the two rightmost ports have no vital circuitry anywhere near them.  This became important later on.  The first thing I did was to desolder and remove one of the USB ports.  (I practiced this on one of the two ports I later cut off of the hub's board entirely.  I then soldered wires in place of the port (26 gauge ended up being just about perfect.  To be honest, cleanly removing the USB port from the hub board was the hardest part of the entire mod.  I first removed as much solder as I could from all 4 through-board leads and the through-board anchor tabs, then I used a pair of needle-nosed pliers to break the leads in the rear of the port, then finally used the pliers to break the port off of the board by bending back and forth until the anchor tabs broke.  This then left me with leads and anchors poking through the board still anchored with solder.  I intentionally left enough of each lead intact poking out from the board so I could grip each lead with the needle-nosed pliers, then I picked up the entire board by the pliers and carefully applied the soldering iron to the opposite side of the board and let gravity pull the board off of the lead when the solder softened.
 
I then soldered wires through the lead holes and attached them to the adapter circuit according to the instructions in the conveniently provided owner's manual (you have to get it from the site, it doesn't come with a hardcopy when you order it).  Once I had tested that the hub still functioned and that the controller adapter was properly detected (even without soldering the adapter to the controller itself, the chip itself will be detected so you can test your soldering at this point before you continue).  Once it was tested, I sawed off the extra two ports, just to the right of the LED (since I didn't know if the LED was required or not, and it didn't take up that much extra space anyway...).


Next, I picked up this flash drive for my internal memory (shop around, the OIT bookstore had these for half the price they're asking for on Amazon).  Here's another even smaller drive, if you're interested.
 

Here's the complete package:


Next, I had to Dremel out the back side of the controller case in order to accommodate for this extra circuitry.


After I finished adding extra real estate inside the controller shell, all I had left to do was wire the adapter into the controller itself.  I decided to leave the original cable connector intact and instead soldered wires onto the backside of the cable connector.  I also had to resolder the chip to the hub using longer wires, since I ended up changing the arrangement of the chips from my original plan after everything started coming together.  At this point, I tested it and after an initial mishap with two wires being accidentally switched, it worked, so I closed up the case.  The only thing left to do is replace the USB cable with a full-length one, but that will have to wait until the order comes in from NewEgg sometime next week.  For now, I have a 6' USB extension cable that works just fine.


The final result (sans full-length cable): 


Screenshots of the controller in action:



Update:

I've begun the process of loading up all of the software I plan to use on my newly converted controller.  To start off with, I'm using the latest beta of the PortableApps.com Menu, along with a fixed version of ZSNES Portable.  I also decided to load up FCEUX as well so I can play NES games as well as SNES.  I'm also including a few utilities, such as Nach's SNES ROM Tool, GoodTools, JoyToKey and Xpadder.  I may also install WinAmp Portable along with the ChipAmp plugin pack for chiptune playback, we'll see (I have 4GB to work with, so I have way more than I'll be taking up with ROMs and saves...).