So, I made my own SNES to GameCube controller adapter yesterday. It was surprisingly simple, I just made use of a couple of controller extension cables + an arduino microcontroller (Atmel Atmega328P) plus a bit of code from
Raphnet's adapter.
The Raphnet one uses an Atmega8, but all I had on hand were newer Atmega328Ps, so I had to update a bit of the assembly code for the newer AVR assembly for Atmega88
using this very helpful PDF. Thankfully only a few lines and some slight bitwise logic change for the existing code. I would have just bought an Atmega8 (ridiculously cheap on ebay, direct from China oc) but I wanted to have this done soon since I'm in the middle of Harmony of Dissonance and the GC controller was driving me nuts.
Since I had taken the time to set up the avr compiler to get everything working, I also decided to add in my own code to re-arrange the buttons to what is honestly my dream face button layout.
By default the Raphnet code lets you go into "NES mode" on a SNES controller by holding Start when you plug it in. This maps B/Y to A/B, but shuts off A/X/L/R, which is kind of a bummer for GBA on GameCube (my main use for this). I disabled the NES mode checks and had holding Start map to "rotate the face buttons clockwise", so B=A, Y=B, X=Y, A=X. L and R are still enabled. This is totally perfect for GBA, so I should get a lot of use out of this for GameBoy Interface. It also maps fairly nicely to the GC's layout, seeing as B, Y, and X are all in the right place.
What's funny is that one of Nintendo's prototype SNES controllers had my "correct" layout on it before they went with their final layout:
It also seems like Nintendo made the switch kinda late since the arrangement of data on the line has B and Y in place of A and B relative to the very similar data for the NES controller spec.
It was nice to finally have a practical reason to code in assembly, and something useful to do with my spare Atmega328Ps.