This is a simple explanation of the codes and what they do. To start of I will explain the code itself.
THE CODE
The code is borke down into a few sections. The first 2 digits of each code are called the GS digits. These digits will tell your GameShark what kind of code is being used. The next 6 digits in the code is the location in the games memory that you will be altering. The last four digits in the code are the quantity digits. These digits will actually alter the code to do want you want it to do.
CODE BREAKDOWN
Here is a sample code: 80016589 0000
This is the breakdown of that code. The first two digits "80" tell the GS that this is a normal 16 bit code. The next 6 digits "016589" tell the GS which memory location that will be altered. The last four digits "0000" are the quantity digits. These are the digits that make the code what it is.
There are two types of codes that you will be learning about. 8 bit and 16 bit codes. The quantity digits of a code are broken into two sections. The first two and the second two. The difference between an 8 bit code and a 16 bit code is this:
The 16 bit codes will use both sets of digits in the quantity digits. The 8 bit codes will use only one set. Each set is called a byte. When you make a 16 bit code the code repeatedly writes those digits to two locations in memory.
In this case if the code is 80085636 FFFF then that means that the quantity digits FFFF are being written to 80085636 because it is a 16 bit code. 16 bit codes cover two locations, one odd and one even. In the case of an 8 bit code you can individually write that byte to one location or the other.
HERE ARE THE CODE TYPESp>
This text is taken from the PSX Hacking Utils download. It has been modified for easier understanding.
Standard Code Types
Code types that now exist in Version 2.00 and above
80
This is the most common code. It simply writes the given 16 bit value to the given memory location.
Example: The word value 2067 is repeatedly written to memory location 80100204.
80100204 2067
This is easy enough to understand.
30
Byte code. Same as 80 code but only affects the byte at the given address (odd or even address).
Example: The byte value 67 is repeatedly written to the memory location 80100205
30100205 0067
This means that you can write the value 67 to either 80100205 or 80100204. Whichever location you choose.
10
Increment word code (add 1 to), only use with a D/E code, increments the current word in location supplied by value supplied.
Example: Add 5 to the location 80001230 when the location 80001230 is equal to 0001
D0001230 0001
10001230 0005
This means that you can set this code to add an amount to the quantity digits when the digits reach a certain amount set by you. The D code is the code that tells the GS at what point the amount should be added to that location. In this case when the amount reaches 1 as in the first code, then the GS will add 5 more to that as in the second code. This would come in handy if you wanted to be able to lose life but not die.
11
Decrement word code (subtract 1 from), only use with a D/E code, decrements the current word in location supplied by value supplied.
Example: Subtract 5 to the location 80001230 when the location 80001230 is equal to 0006
D0001230 0006
11001230 0005
This code is the same as the last except the exact opposite. This code would be used to keep a code from getting too high in the quantity digits.
20
Increment byte code, only use with a D/E code, increments the current byte in location supplied by value supplied.
Example: Add 5 to the byte location 80001230 when the location 80001230 is equal to 0001
D0001230 0001
20001230 0005
This is the same as the 10 code except it adds to an 8 bit location instead of 16 bit.
21
Decrement byte code, only use with a D/E code, decrements the current byte in location supplied by value supplied.
Example: Subtract 5 to the byte location 80001230 when the location 80001230 is equal to 0006
D0001230 0006
21001230 0005
This is the same as the 11 code except this is for 8 bit codes.
50 Patch Code
Serial code use with 80/30 codes. Saves using 2 or more codes to update consecutive memory locations.
The code starts with the 50 code. This contains the number of repeats and the size of the code to write (1 for byte, 2 for words). You can also specify a value to increase by on each repeat.
5000RR00 0000 ;RR is the number of repeats
5000000S 0000 ;S is the size. 2 for words, 1 for bytes (use 2 with 80 codes and 1 with 30 codes). This value is added to the code address each repeat. So if the code after the 5 code was an 80000000 and this value was 2 - each loop the address would be 80000000, then 80000002, then 80000004, etc. If this S value was 4 the addresses would be 80000000, then 80000004, then 80000008, etc. Note that with 80000000 codes this S value must be even (2,4,6,8,A,C), with 30000000 codes which work on bytes this S value can be any number from 1 to F.
50000000 IIII ; IIII is the value to increase the written value by (optional). If this value is say 4, and the code is 80000000 0000 - the first write will be 80000000 0000, the second 80000002 0004, the third 80000004 0008, etc.
50000602 0000
80123456 00ff
is equivilent to
80123456 00ff
80123458 00ff
8012345a 00ff
8012345c 00ff
8012345e 00ff
80123460 00ff
50000602 0001
80123456 0000
is equivilent to
80123456 0000
80123458 0001
8012345a 0002
8012345c 0003
8012345e 0004
80123460 0005
In other words this code takes a string of codes and compacts them down to 2 lines. This kind of code is gone into more detail in another FAQ on this site. Here is the explanation: 5000RRSS IIII. The 50 tells the GS that you are using the patch code. The RR is the amount of codes that you are going to be compacting. The SS is the difference in the location of the codes such as: If you start with 80123456 0000 and your next code is 80123458 0000 then you would put 02 in place of SS because the location went up by two. From 123456 to 123458. If it went from 123456 to 123457 then you would make it 01 in place of SS. That is used for 8 bit or bytes.
D0
If word value in location supplied is the same as value supplied do the next code.
This code is useful if you only want to execute certain codes at certain points in the game (like on certain levels, or only when the game has fully loaded).
Example: If the memory location 8008030C holds the value 01FE then do the code 80100204 0067, otherwise do nothing.
D008030C 01FE
80100204 0067
This code is better known as a joker/activator command. These codes can be set to locations in memory or to different buttons so that when you press that button the code will be activated as long as you are holding the button. This subject is gone into more detail in another FAQ on this site.
D1
If word value in location supplied is different to the value supplied do the next code
The same as above except the code activates as long as the value in the location of memory on the first code is not what you have it set to. In other words:
D1061589 0000
80097862 FFFF
As long as the location 061589 in the first code does not reach 0000 then the code will be activated. If it does reach 0000 then the code will be deactivated.
D2
If word value in location supplied is less than the value supplied do the next code
The same as above except the amount has to be less than the amount you set.
D3
If word value in location supplied is more than the value supplied do the next code
The same as above except the amount has to be more than the amount you set.
E0
If byte value in location supplied is the same as value supplied do the next code
This is the exact same as the D0 code except for 8 bit codes instead of 16 bit.
E1
If byte value in location supplied is different to the value supplied do the next code.
The same as the D1 code except for 8 bit codes instead of 16 bit.
E2
If byte value in location supplied is less than the value supplied do the next code
The same as the D2 code except for 8 bit codes instead of 16 bit.
E3
If byte value in location supplied is more than the value supplied do the next code
The same as the D3 code except for 8 bit codes instead of 16 bit.
New Code Types
The following codes are new to all versions 3.x. Also available in newer version 2 software (US 2.41+, UK 2.8+, JAP 2.5+).
Must Be On / Master Codes
If a code name starts with the text "(M)" or "(m)" then that code is always on.
The user cannot switch it off. See the codes for "Gran Turismo" for an example. This has a Must Be On code that disables the JoyPad toggle feature. If the JoyPad toggle is not disabled for this game - it won't load (note that this is so far the only game that requires this).
D4 (No effect on V1.00/V2.00).
This is the universal joker command for GS Pro's
This code is gone into more detail in another FAQ on this site. Joypad D code. if joypad press equals word value do the next code.
Table of JoyPad values
Up (1000)
Right (2000)
Down (4000)
Left (8000)
Triangle (0010)
O (0020)
X (0040)
Square (0080)
Select (0100)
Start (0800)
L1 (0004)
R1 (0008)
L2 (0001)
R2 (0002)
Add combinations. E.g. Select+L1 ==
0100+0004 == 0104
For example, the code "80000000 1234" will be on when the user presses
Select and X at the same time:
D4000000 0140
80000000 1234
Also note: To combine different button presses, simply add the button values together. The value for O and X buttons would be 0020 added with 0040, hence 0060. And remember these are in Hex, so Square and X would be 0080+0040 = 00C0.
D5 (No effect on V1.00/V2.00).
This is the "toggle on" code
All codes on. If joypad press equals word value, all codes on.
Please read the subject “Joypad Toggle” on turning codes on and off for more information.
This “turn codes on/off” feature is permanently available in all games and defaults to “SELECT+L1+R1” for on and “SELECT+L2+R2” for off. The D5 and D6 codes are available if you need to change the buttons used or disable them.
If the value given if zero (D5000000 0000 or D6000000 0000) then joypad functions are disabled (same as "joypad toggle disabled" in the options screen). I've allowed you to disable this as we found the game "Gran Turismo" failed to load when this function was active. Just in case there is another game that does this, this code is available.
Example: To make codes turn on when you press START and O together. The following code should be used: (Start = 0800 and O = 0020, 0800+0020=0820).
D5000000 0820
This code is just like the joker command except it will completely turn all of the codes you slected on. You do not have to hold the button down to keep the codes on.
D6 (No effect on V1.00/V2.00).
This is the "toggle off" code
All codes off. if joypad press equals word value, all codes off.
See the description for D5 codes.
Example: To make codes turn off when you press START and X together. The following code should be used: (Start = 0800 and X = 0040, 0800+0040=0840).
D5000000 0840
This is just like the D5 code except it turns the codes completely off.
C0 (No effect on V1.00/V2.00).
If word value in location supplied is the same as value, do ALL codes, otherwise don't do any.
A C0 code if the same as a D0 code except it acts on ALL codes. Useful for games that don’t load when codes are on. This code should be put in a "Must Be On" "(M)" so people can't turn it off.
For example: If you had a game for which you don’t want any codes on until the memory location 801AAAAA contains the value 1234 you could have the following code:
“(M) Must be on”
C01AAAAA 1234
Having the text “(M)” at the start of the name of the code makes the code default to ON and the user cannot turn it off in the code list.
This is a code that may not be used that often but it basically turns all of the selected codes on like the D5 code except it does it when the locations quantity digits reach a certain point. This could be used to make some odd codes.
C1 (No effect on V1.00/V2.00).
Code on delay time. Delay codes being turned on for a period of time specified by the value part of this code. By default this value is set to 1388 hex (5000 decimal) which waits about 10 seconds before activating the cheats. This can be a useful alternative to a D code for keeping codes off whilst a game loads.
Example: To delay all codes from being turned on for about 30 seconds in most games use the code C1000000 4000. The vaule you use depends on the game you are playing, the value 4000 might be 30 seconds on one game, but may only be 10 seconds on another. The only way is to know for sure is to experiment. You can tell if codes are on or off when by going in to the “In Game Menu” and looking at the text “Codes are ON”. If it says “Codes are ON” then codes are on, if it says “Codes are ON.” (with a ‘.’ at the end of the string) then codes are actually off until this timer runs out.
Also, it is a good idea to put this code in a code that can’t be turned off (i.e. use the text “(M)” in the name). The example code then becomes:
“(M) Must be on”
C1000000 4000
This code basically delays the codes from being turned on right when the game boots up. The time it takes depends on the quantity digits. The quantity digits will vary times from one game to the next. You will have to use trial and error to find out how long it takes.
C2 (No effect on V1.00/V2.00)
Copy bytes code. This code copy’s bytes from one memory location to another.
The code must be used in pairs of two codes. The first code is the source address, the second is the destination address. The value part of the first code is the number of bytes to copy. The value part of the second code is not used.
Example: Copy 6 bytes from memory location 80010000 to 80010010.
C2010000 0006
80010010 0000
This code is pretty pointless to me. But it basically just takes bytes from one location that you set and copies those bytes to another location that you set. Tell me if you find a valid use for this code.