This has always boggled me. Obviously GameShark and Game Genie never got inside access to place their own cheats into every game. I don’t think any developers gave them the source code to pour over for codes. And I don’t think the original development process for these games included placing any of these codes themselves. So, what is a GameShark or Game Genie code, really?
Both of them usually take the form of a relatively short hexadecimal string (or multiple if that is the case) so my intuition tells me they use the same principle. But are they just memory addresses to flip a bit? Or lock it? Or XOR a series of bits with something? What is the code, and what does it do?
How it works
When GameShark (and other game enhancer products/homebrew) gets loaded by the console, the enhancer is what launches the actual game. In doing so, it leaves behind a Code Handler in the system RAM and “hooks” the game’s programming.
Specific locations in a game’s programming that get executed roughly every frame (like reading the controller data) are where “hooks” will be placed. (because SDKs are used, this makes finding hooks that work in all games for a system much easier)
What the hook actually does is redirect the flow of programming to the Code Handler the enhancer left behind. Once the Code Handler is finished executing, it returns the flow of programming back to the point of hijacking.
If you are familiar with GameShark’s “Master Code“, that is what sets the hook.
(other enhancers – like Gecko OS for Wii – don’t need master codes because the enhancer itself has a handful of SDK-based hooks that it can “find” in the game while it loads.)
Structure of codes
Now a code itself is separated into THREE parts:
- The CodeType (this is USUALLY the first byte of the code– the first 2 Hex Characters). CodeTypes are specific to the enhancer.
- The address in ram that the CodeType will use.
- The value the codetype will use at the specified address.
The most common CodeTypes are:
RAM Writes (typical options are 8bit, 16bit, or 32bit)
With RAM Write, the CodeHandler will take the value and place it at the address. (changing whatever was there, like setting your health to 100!)
Conditionals (typical options are >, <, =, !=)
With Conditionals, the CodeHander reads the value at the code’s address and compares it to the value in the code. IF the comparison returns true, then the CodeHander will execute the next line in the code. (how many lines it executes is up to the enhancer and often is an option in the codetype itself!)
There is plenty more info we could dive into, but that should give you a good basis for understanding. =)
Source: Game hacker since 1999, founder of http://GeckoCodes.org