In early 2009 I picked up some PIC16F690s, and some PIC16F628s. I bought the former as it is what TwistedSymphony used for his Saturn controller to Xbox 360 adapter, and the latter for some other projects I read on the ‘net.
I flashed TwistedSymphony’s firmware to a PIC, but soon found I needed it to register button presses as active high, as opposed to his code which had button presses as active low.
I installed Microchip’s Assembly IDE, MPLAB, and started reading over the source. As I found I didn’t understand anything I was reading, I decided to learn about PIC ASM. I found great guides from Mike Stacey, and elsewhere and started learning PIC Opcodes. I learned by changing “movf” to “comf” I was able to invert the key presses from the registers called to the w(ork) register, and had what I needed.
Later, I learned that the PIC16F690 chips did not have enough available I/O pins to map out the Saturn’s Start button, so I decided to buy a chip with more I/O ports, a PIC16F737. As I had excess I/O pins with the new chip, I decided to put them to use. I wrote a routine that allowed Start+A+B+C (Saturn’s reset combo) to drive an individual pin high. I mapped this to the guide button on my Xbox 360 Controller version, and to the right trigger button on the original Xbox version. I also wrote a routine that would allow for the back button to be triggered.
I made an SNES adapter with similar functionality, before combing and optimizing the code into a PIC16F747.
( For more info on this project, check out my GameSX Build Log. )
After I was satisfied with the results of the Controller project, I decided I wanted to move onto home automation, so I went on to buy some hardware…