Hacking the Guitar Hero SG Controller

Part 1: Introduction
Guitar Hero, created by Harmonix and published by Red Octane, was a breakout hit in late 2005. Though it was not the first music simulation released in the US, it had by far the most widespread popular appeal. The game required a guitar controller which came as part of the package.
Guitar Hero was not the first music game released in the US that required a specialty controller, and taking into account Japanese games it was just one in a long line of music games with custom controllers. It wasn't even the first guitar simulation game with a guitar controller; that title belongs to Guitar Freaks, published by Konami as one of the games in their Bemani line. Thus, a fan of music games might find himself in posession of both Konami guitar controllers and Red Octane guitar controllers. Wouldn't it be great if he could consolidate this collection and use one controller for both purposes?
Part 2: Genesis
In March 2006, Konami released Guitar Freaks & Drummania V for the Playstation 2. Being a fan of both of these titles in the arcade, I picked up the game upon its release. I anxiously awaited playing when I received it in the mail.
However, there was a problem. I only owned a cheap knock-off of the Konami guitar controller, and it didn't perform particularly well. The picking lever was quite poor; playing any Guitar Freaks song which had passages with fast picking meant certain death. It seemed I was doomed to buy yet another custom controller. However, I had purchased Guitar Hero and two SG controllers a few months earlier. Wouldn't it be great, I thought, to use my GHSG controllers for Guitar Freaks? It had a solid picking lever and buttons, so it seemed like the ideal solution. Or, so I thought. It turned out that although the two controllers were similar in appearance, they were dissimilar in operation.
Part 3: Exploration
The first thing I tried was the most obvious - to simply plug in the GHSG controller and try to play Guitar Freaks V. This method did not work as well I had expected. Upon going to the options screen, the cursor started cycling wildly as if someone were holding down a direction on the D-Pad of a controller plugged into the PS2.
It turns out that was exactly what was was happening. Guitar Hero "auto-detects" when a GHSG controller is plugged in. But how does the game know what kind of controller is plugged in? You might think that the controller sends the PS2 a special ID or something like that. The answer is actually much more simple. It turns out that GHSG controllers are internally wired such that the Left button is always in a down state. Guitar Hero simply checks if Left is depressed on a controller to determine whether it's an GHSG controller or a pad. A quick check of the GF controller revealed that Konami used a similar auto-detect trick, except the GF controller was wired with both the Left and the Right buttons in the down state.
So, I figured that if the buttons on the GHSG were similar to a control configuration available in Guitar Freaks, I could use the GHSG controller after all. It would just require modifying the controller such that the Right button was always in the down state, or better yet, require adding a switch that could toggle that button off and on. That way the controller could be toggled between GH and GF modes.
Part 4: External Configuration


Upon inspection, the two controllers turned out to be close but not quite the same. No biggie, I thought, since rewring buttons is pretty straightforward, and rewiring buttons such that two configurations can be toggled by a switch is only slightly less straightforward. So, I took the next logical step and cracked the GHSG controller open.
Part 4: Internal Configuration

If you look at the above picture of the GHSG circuit board and compare it to a standard Dual Shock 2 controller, you may notice a slight peculiarity. Ignoring the analog sticks and the L3 / R3 buttons, a Dual Shock 2 controller has buttons for fourteen distinct functions: Square, Triangle, Circle, X, L1, L2, R1, R2, Select, Start, Up, Down, Left, and Right. The GHSG circuit board has connections for only thirteen buttons: Square, Triangle, Circle, X, L1, L2, R1, R2, Select, Start, Up, Down and Left. Those of you who are paying attention will notice that the button missing from the GHSG controller is the Right button. You might also recall that a GF controller must have its Left and Right buttons in the down state in order to be auto-detected. Putting these two observations together yields the following result: it is impossible to use a GHSG controller with GF by modifying the button mappings of the GHSG controller. This is because one of the two buttons required for auto-detection by GF is not even available on the GHSG controller! Coincidence? That seems quite unlikely to me. It seems more likely that Red Octane and/or Harmonix decided to omit the Right button from the GHSG controller to prevent people from converting it to GF controller. As for why, I have no idea. Either way it's the sale of a controller, right?
I guess that's why I'm an engineer and not a businessman.
Part 5: Contingency Plans
Since remapping the buttons GHSG controller to be auto-detected by GF was out of the question, I saw two remaining options:
1. Forget about auto-detection and remap the buttons such that they match a GF controller configuration option, or
2. Modify the output of the GHSG controller such that the PS2 thinks Left and Right are depressed on the controller.
Armed with a PICF1684A microcontroller and a detailed description of how a Dual Shock 2 controller operates, I first explored option number two. The basic idea was to feed the output of the GHSG controller into the the microcontroller, then have the microcontroller filter that input and send it out to the PS2. A Dual Shock 2 and a PS2 communicate via serial transmissions, so making a PS2 think that Left and Right are depressed would just be a matter of flipping one of the bits in the stream of serial data. I first got the microcontroller to simply output the original input without any modifications. The next step was to flip the requisite bits of the serial data stream. Unfortunately, the PSCF1684A turned out to be simply too slow to perform this operation in real time. I am certain that a faster microprocessor could do the job, but rather than invest more money in experiments I chose to explore option number one.
The first thing to do was to check out how the controller could be configured in Guitar Freaks V. The following three options were available:
Type-A |
R |
L2 |
G |
L1 |
| B |
R |
| Wailing |
R1/R2 |
| Picking |
Circle/Right Analog |
Type-B |
R |
L1/L2/L |
G |
D |
| B |
R |
| Wailing |
R1/R2 |
| Picking |
Circle/Right Analog |
Type-C |
R |
Circle |
G |
X |
| B |
Square |
| Wailing |
L1/L2 |
| Picking |
Down/Left Analog |
It appeared that Type-C would be the easiest to implement, since it required remapping only two buttons. Yellow would become Circle, and pick up would become Down. In addition, Left would have to be disabled since by default it's stuck in the on position. Using a quad bilateral switch like the NTE4016B would allow this remapping to happen at the flick of a mechanical switch. So, that's exactly what I did:

However, Guitar Freaks V only allows you to scroll through the song list with Left and Right. Since neither of those buttons are available in the above configuration, the only way to scroll through songs is to flip the switch to GH mode which turns on Left and automatically scrolls through the song list. So clearly this is not an ideal solution either.
Part 6: Conclusion
So, that is where I remain. I have not had time to explore the above option two with a faster microcontroller. Nonetheless, I am certain the conversion is possible.
Thus ends my journey into the GHSG controller. Hopefully the information I gathered along the way is useful to another enterprising tinkerer. I have condensed the above information into a technical summary for the lazier readers out there.
Happy hacking!
|