You will find that when you start a game with codes active, the codes themselves do not start to be executed until about 5-10 seconds into the game loading. This is useful for loading games, but you may want to test your codes before this period. A simple way to get the codes executing straight away (as soon as you click "Start game with codes") is to have the code "C1000000 0000" in your code list. For an explanation see the "C1" code definition in this document.
Also, you can tell if codes are actually being executed or if you are in this 5-10 second delay period by pressing the cartridge button and looking at the "in-game-menu". The first option in the "in-game-menu" reads "Codes On." If codes are being executed and "Codes On" if they are not (there is a full stop at the end of the string "Codes On").
If you are distributing codes, please remember that some of the code types below are for version 3 owners only. The first section lists codes which will work on version 2's and above. The version 3 codes are listed in the section following this.
Have a look at the new D4 code type (for newer versions only). This code type allows you to assign codes to joypad presses, e.g. "restore health when SELECT+X are pressed".
Standard Code Types
Code types that now exist in Version 2.00 and above
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.
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
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
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
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
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
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 t 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.
eg. 50000602 0000
is equivalent to
eg. 50000602 0001
is equivalent to
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.
If word value in location supplied is different to the value supplied do the next code
If word value in location supplied is less than the value supplied do the next code
If word value in location supplied is more than the value supplied do the next code
If byte value in location supplied is the same as value supplied do the next code
If byte value in location supplied is different to the value supplied do the next code
If byte value in location supplied is less than the value supplied do the next code
If byte value in location supplied is more than the value supplied do the next code
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).
Joypad D code. if joypad press equals word value do the next code.
Table of JoyPad values
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:
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).
All codes on. If joypad press equals word value, all codes on.
Please re 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).
D6 (No effect on V1.00/V2.00).
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).
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"
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.
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"
C2 (No effect on V1.00/V2.00) Note: This code was requested by Karat
Copy bytes code. This code copy's n bytes from a 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.