____ ______ ______ THE ______ ______ ____ / \ | ___| | | _____ | ___| |_ _| / \ | |__| | |__ | |__| | \ | |__ | | | |__| \ \ | __| | | | | | | __| | | \ \ _\ \ | | | |__ | / | | | | _\ \ | | | | |___ | | | | | \ | |___ | | | | | \____/ |______| |______| |___|__\ |______| |__| \____/ Of Professional Gameshark(tm) Hacking _____ 0001110101001110010110100011 ..~` a`~~.. 110100000100001000100000101000001 ..~` }100000111000110001110001100011111110 -----` /\/\/\/10100011100110000111001100001110011000 `. \\\ | 00010001001111110010011111100100111111100 ; \/\/\100100111001100001110011000011101100010 .` ___/01000111000110001110001100011100110010 ; ..~~~~```` 11011000100100100101010100100110101001 .` ..`` ; ..`` ; .` .-` .` .-` ,` "The most elaborate, in-depth hacking guide / .. . for Game Cheat Devices, ANYWHERE!" |.-`` `. \ `.| [Originally By: Kong K Rool* and Macrox] with additions by [Tolos, DGenerateKane, HyperHacker, Viper187, and Kenobi] ----------------------------------------------- Table Of Contents ----------------------------------------------- Section 1 : ForewordIX. How-to Guide - Getting StartedI This Version II What's New III Coming Soon IV Dedication V Preface VI Acknowledgments Section 2 : Hacking VII Introduction VIII Hacking Basics - Theory
Constantly writes the value specified by YY to address XXXXXX. This and its 16-Bit counterpart below are the most used code types on N64. You'll probably be making most of your new codes with them. | GS/XP64 | ||
Constantly writes the 16-Bit value specified by YYYY to address XXXXXX. | GS/XP64 | ||
Constantly writes the value specified by YY to the uncached address XXXXXX. | GS/XP64 | ||
Constantly writes the 16-Bit value specified by YYYY to the uncached address XXXXXX. | GS/XP64 | ||
Writes the value YY to address XXXXXX ONLY when the GS Button is pressed. | GS/XP64 | ||
16bit version of the above. Writes the value YYYY to address XXXXXX ONLY when the GS Button is pressed. | GS/XP64 | ||
Execute the following code (ZZZZZZZZ ZZZZ) ONLY when the value stored in address XXXXXX is equal to YY. | GS/XP64 | ||
ZZZZZZZZ ZZZZ | |||
Same as above, only it reads a 16bit value. GS Pro 3.0+ ONLY! | GS/XP64 | ||
ZZZZZZZZ ZZZZ | |||
Execute the following code (ZZZZZZZZ ZZZZ) ONLY when the value stored in address XXXXXX is NOT equal to YY. | GS 3.0+ | ||
ZZZZZZZZ ZZZZ | |||
Same as above, only it reads a 16bit value. | GS 3.0+ | ||
ZZZZZZZZ ZZZZ | |||
Keeps the game from using the expansion pack if it is present. Also used on some older non-expansion pack games to increase compatibility with the code generator. | GS Pro 3.2+ | ||
Disabled the expansion pack (if present) using a secondary method. | GS Pro 3.2+ | ||
Disabled the expansion pack (if present) using a 3rd method. | GS Pro 3.2+ | ||
Tells the GameShark where the value "3C0880" is in the RAM. This type of code does not write a value to the given address. It sets the entry point which the GS will use to start the game. Games which require that code have a specific protection chip which will set the entry point upon booting the N64. | GS 1.08+ | ||
Tells the GameShark what address is causing malfunction with it, and writes the supplied value to that address. Writes the value YY to the address XXXXXX once on boot. F0\F1 codes write to RAM before starting the game. This way, the codes take effect before the code handler is executed. | GS Pro 3.0+ / XP64 | ||
16-Bit version of the above. | GS Pro 3.0+ / XP64 | ||
Sets the location in RAM where active codes are stored. Usually only used on games that utilize the expansion pack. | GS Pro 3.3+ | ||
The same as an F1 enabler on GS Pro. | XP64 | ||
The exact use of this code type is unknown as of now. | XP64 | ||
Patch codes, aka Serial Repeaters, are used to make a code string shorter. EG, You have five codes put together to give you "all weapons." Use the patch to shorten it to two codes. XX is the number of addresses to write; YY is the amount (offset) to add to each address; ZZ is the amount to add to each value. | GS Pro 3.3+ | ||
TTTTTTTT VVVV |
GameShark | |||
Constantly writes the value specified by YY to address XXXXXX. This and its 16-bit counterpart below are the most used code types on PSX. You'll probably be making most of your new codes with them. | GS x.x | ||
Constantly writes the value specified by YY to address XXXXXX. This and its 16-bit counterpart below are the most used code types on PSX. You'll probably be making most of your new codes with them. | GS x.x | ||
When the value for the given address is equal to the supplied value, activate the following code. | GS 2.2+ | ||
When the value for the given address is different to the supplied value, activate the following code. | GS 2.2+ | ||
When the value for the given address is less than the supplied value, activate the following code. | GS 2.2+ | ||
When the value for the given address is greater than the supplied value, activate the following code. | GS 2.2+ | ||
When the value for the given address is equal to the supplied value, activate the following code. | GS x.x | ||
When the value for the given address is different to the supplied value, activate the following code. | GS 2.2+ | ||
When the value for the given address is less than the supplied value, activate the following code. | GS 2.2+ | ||
When the value for the given address is greater than the supplied value, activate the following code. | GS 2.2+ | ||
Same as D0 except not RAM dependent. More easily used as a button activator. | GS 2.41+ | ||
When buttons pressed equal YYYY then activate all codes. | GS 2.41+ | ||
When buttons pressed equal YYYY then de-activate all codes. | GS 2.41+ | ||
Add value(16-bit) code. Use with D/E activators. Example - (adds value "1007" to address "001221" when address "110012" equals value "5") D0110012 0005 10001221 1007 | GS 2.2+ | ||
Subtract value(16-bit) code. Use only with D/E activators. Example - (subtracts value "102" from address "001221" when address "110012" equals value "6") D0110012 0006 11001221 0102 | GS 2.2+ | ||
Add value(8-bit) code. Use with D/E activators. Example - (adds value "7" to address "001221" when address "110012" equals value "5") D0110012 0005 20001221 0007 | GS 2.2+ | ||
Subtract value(8-bit) code. Use only with D/E activators. Example - (subtracts value "2" from address "001221" when address "110012" equals value "6") D0110012 0006 21001221 0002 | GS 2.2+ | ||
Patch codes, aka Serial Repeaters, are used to make a code string shorter. EG, You have five codes put together to give you "all weapons." Use the patch to shorten it to two codes. XX is the number of addresses to write; YY is the amount (offset) to add to each address; ZZ is the amount to add to each value. | GS 2.41+ | ||
TTTTTTTT VVVV | |||
Works like the D0/E0 code type, but affects ALL codes. Use as an (M) Must Be On if the game won't load with codes turned on. | GS 2.2+ | ||
Works like the D0/E0 code type, but affects ALL codes. This is like a timer. A value of around 4000 or 5000 will usually give you a good 20-30 second delay before codes are activated. Use as an (M) Must Be On if the game won't load with codes turned on. | GS 2.41+ | ||
Copy's YYYY bytes from location XXXXXX to location ZZZZZZ. Example use would be: C2040450 0008 80040680 0000 That would copy 8 bytes from 40450 to 40680. | GS 2.41+ | ||
80ZZZZZZ 0000 |
|||
Xplorer/Xploder -- see explorer FAQ for more info | |||
Writes value YY to address XXXXXX. | Xplorer | ||
Writes value YYYY to address XXXXXX. | Xplorer | ||
Delays CPU by X per cycle. Best used with activator. | Xplorer | ||
Writes any number of bytes ZZ to address XXXXXX. YYYY is the number of bytes to write. | Xplorer | ||
ZZZZ ZZZZ ZZZZ ZZZZ ZZ.. .... | |||
CPU breaks at address AAAAAAAA; YYYY is number of bytes used (XX's); FFFFFFFF is the break point mask; CCCC is the type of break point, which can be E180 (instruction gotton by CPU but not yet implemented), EE80 (data to be read or written), E680 (data to be read), EA80 (data to be wrtten) or EF80 (instruction). | Xplorer | ||
AAAA AAAA CCCC FFFF FFFF XXXX XXXX XXXX XXXX | |||
If address XXXXXX is equal to value YYYY execute following code. | Xplorer | ||
If address XXXXXX is not equal to value YYYY execute following code. | Xplorer | ||
nn is the number of repetitions (plus one); AAAA is the size of the address step; BBBB is the increase in the data value per step; XXXXXX is the initial address; YYYY is the inital value. | Xplorer | ||
10XX XXXX YYYY | |||
Same as 7-code, but only functions from 0010 0000 to 01FF FFFF. | Xplorer | ||
Same as 7-code. but only functions from 0000 0000 to 000F FFFF. | Xplorer | ||
Automatically activates other selected codes if address XXXXXX is equal to YYYY. | Xplorer | ||
32-bit constant write to XXXXXX address (0000YYYY) | Xplorer | ||
Note that all the code types below are in RAW form. RAW codes must be encrypted to work on the Gameshark™ for Playstation 2. | ||
This command will constantly write the value specified by dd to the address specified by aaaaaaa. | ||
This command will constantly write the value specified by dddd to the address specified by aaaaaaa. | ||
This command will constantly write the value specified by dddddddd to the address specified by aaaaaaa. | ||
Increment/Decrement Commands | ||
This command adds the value specified by nn to the value stored at the address aaaaaaaa. | ||
This command subtracts the value specified by nn to the value stored at the address aaaaaaaa. | ||
This command adds the value specified by nnnn to the value stored at the address aaaaaaaa. | ||
This command subtracts the value specified by nnnn to the value stored at the address aaaaaaaa. | ||
This command adds the value specified by nnnnnnnn to the value stored at the address aaaaaaaa. | ||
nnnnnnnn 00000000 | ||
This command subtracts the value specified by nnnnnnnn to the value stored at the address aaaaaaaa. | ||
nnnnnnnn 00000000 | ||
Test Commands | ||
Only when the value at the address specified by aaaaaaa is equal to the value specified by dddd will the next line of code be executed. | ||
Only when the value at the address specified by aaaaaaa is not equal to the value specified by dddd will the next line of code be executed. | ||
Only when the value at the address specified by aaaaaaa is less than the value specified by dddd will the next line of code be executed. | ||
Only when the value at the address specified by aaaaaaa is greater than the value specified by dddd will the next line of code be executed. | ||
Only when the value at the address specified by aaaaaaa is equal to the value specified by dddd will the next nnn lines of code be executed. Otherwise, they will be skipped. | ||
Only when the value at the address specified by aaaaaaa is not equal to the value specified by dddd will the next nnn lines of code be executed. Otherwise, they will be skipped. | ||
Only when the value at the address specified by aaaaaaa is less than the value specified by dddd will the next nnn lines of code be executed. Otherwise, they will be skipped. | ||
Only when the value at the address specified by aaaaaaa is greater than the value specified by dddd will the next nnn lines of code be executed. Otherwise, they will be skipped. | ||
Miscellaneous Commands | ||
a = Address to copy from b = Address to copy to n = Number of bytes to copy | ||
bbbbbbbb 00000000 | ||
Starting with the address specified by aaaaaaa, this code will write to xxxx addresses. The next address is determined by incrementing the current address by (yyyy * 4). The value specified by dddddddd is written to each calculated address. Also known as a "Patch Code." | ||
dddddddd 00000000 | ||
Untested Commands | ||
3000nnnn dddddddd aaaaaaaax(n-1) | 32-bit Multiple Address Write? | |
8aaaaaaa bbbbbbbb cccccccc 00000000 | Master Command | |
Aaaaaaaa dddddddd | 32-bit Write Once? | |
B0000000 nnnnnnnn | Timer Command | |
Caaaaaaa dddddddd | 32-bit Equal? | |
Faaaaaaa bbbbbbbb | Master Command | |
DEADFACE xxxxxxxx | "DEADFACE" Master Command - changes encryption seeds |
The following are what decrypted or raw code types look like. Xploder and Codebreaker use this format. Gameshark uses an encrypted format for the first line of the code (the address) while all use the second line as is (offset or quantifier). Dreamcast has 32 bit codes. These codes will require 8 digits for the offset and 8 digits for the quantifier, 2^32= FFFFFFFF in hex. Example, XXYYYYYY ZZZZZZZZ. Note: It is not unusual for manufacturers of cheating devices to encrypt their codes. Fire International (Blaze USA) has encrypted codes in both its N64 and Game Boy Xploder/Xplorer, while Interact has employed encryption in its DC Shark, GameBoy Advance Shark, and Playstation 2 Shark. If the code begins with a '0', then it is in decrypted format. As in any encryption there always is a crack to defeat it. Codebreaker and Xploder both have the built in ability to accept DC gameshark codes in decipher them. It is left to the reader to explore the decryption further. | ||
Code Value | Description | |
00xxxxxx 000000vv | Write 8bit (byte) value "vv" to memory address 8cxxxxxx. That is, 8 bit constant write. | |
01xxxxxx 0000vvvv | Write 16bit (2byte) value "vvvv" to memory address 8cxxxxxx. That is, 16 bit constant write. | |
02xxxxxx vvvvvvvv | Write 32bit (4byte) value "vvvvvvvv" to memory address 8cxxxxxx. That is, 32 bit constant write. | |
0300nnnn aaaaaaaa | Group write code. nn specifies how many 32 bit values follow. aaaaaaaa is the addrsss to write to. The values following this code are written to address aaaaaaaa. E.g: 03000004 8c012000 11111111 22222222 33333333 44444444 The effect is as follows: With a count of 00000004 codes, to address 8c012000: 8c012000 = 11111111 8c012004 = 22222222 8c012008 = 33333333 8c01200c = 44444444 | |
030100vv aaaaaaaa | Increment code. Add the 8bit value vv to the value at address aaaaaaaa | |
030200vv aaaaaaaa | Decrement code. Subtract the 8bit value vv from the value at address aaaaaaaa | |
0303vvvv aaaaaaaa | Increment code. Add the 16bit value vvvv to the value at address aaaaaaaa | |
0304vvvv aaaaaaaa | Decrement code. Subtract the 16bit value vvvv from the value at address aaaaaaaa | |
03050000 aaaaaaaa vvvvvvvv | Increment code. Add the 32bit value vvvvvvvv to the value at address aaaaaaaa Note that this code is 3 lines long and so will require an 0exxxxxx condition (not a 0dxxxxxx) if you're using it with a condition code. | |
03060000 aaaaaaaa vvvvvvvv | Decrement code. Subtract the 32bit value vvvvvvvv from the value at address aaaaaaaa Note that this code is 3 lines long and so will require an 0exxxxxx condition (not a 0dxxxxxx) if you're using it with a condition code. | |
04xxxxxx rrrrssss vvvvvvvv | Repeat/Filler code. Writes to address 8Cxxxxxx. Writes the 32bit value vvvvvvvv. Repeats this rrrr time, each time increasing the address by ssss (actually ssss x 4). That is, 32-Bit Constant Serial Write E.g: 04007a30 00030001 12345678 Effect: 8c007a30 = 12345678 8c007a34 = 12345678 8c007a38 = 12345678 | |
05xxxxxx dddddddd nnnnnnnn | Copy bytes code. Copy nnnnnnnn bytes from the address 8cxxxxxx to the address dddddddd. That is, constant copy bytes | |
071000XX | Change Decryption Type | |
0b0xxxxx |
Delay putting on codes for xxxxx cycles. Default 1000 (0x3e7) | |
0cxxxxxx vvvvvvvv | If the value at address 8Cxxxxxx is equal to vvvvvvvv, execute ALL codes; otherwise no codes are executed. Useful for waiting until game has loaded. | |
0dxxxxxx 0000vvvv |
If the value at address 8Cxxxxxx is equal to vvvv, execute the following code. Can be used with code types 00, 01 and 02 only. To use this type of control with other codes use an 0e code. | |
0dxxxxxx 0001vvvv |
If the value at address 8Cxxxxxx is different to vvvv, execute the following code. Can be used with code types 00, 01 and 02 only. To use this type of control with other codes use an 0e code. | |
0dxxxxxx 0002vvvv | If the value at address 8Cxxxxxx is less than vvvv (unsigned), execute the following code. Can be used with code types 00, 01 and 02 only. To use this type of control with other codes use an 0e code. | |
0dxxxxxx 0003vvvv |
If the value at address 8Cxxxxxx is greater than vvvv (unsigned), execute the following code. Can be used with code types 00, 01 and 02 only. To use this type of control with other codes use an 0e code. | |
0ennvvvv 00aaaaaa |
If the value at address 8caaaaaa is equal to vvvv, execute the following nnnn lines of codes. E.g: 0e04abcd 00012000 02300040 ffffffff 02300050 eeeeeeee if address 8c012000==abcd, execute the 04 lines of codes following. The 4 lines of codes being two "02xxxxxx" codes "02300040=ffffffff" and "02300050=eeeeeeee". | |
0ennvvvv 01aaaaaa |
If the value at address 8caaaaaa is different to vvvv, execute the following nnnn lines of codes. | |
0ennvvvv 02aaaaaa |
If the value at address 8caaaaaa is less than vvvv (unsigned), execute the following nnnn lines of codes. | |
0ennvvvv 03aaaaaa |
If the value at address 8caaaaaa is greater than vvvv (unsigned), execute the following nnnn lines of codes. | |
0F-XXXXXX 0000YYYY | 16-Bit Write Once Immediately. (Activator code) |
Just what it implies. Continuously writes YYYY value to XXXXXXX address. | ||
Continuous write of YY value to address XXXXXXX. | ||
Writes YYYY value to XXXXXXX address once on boot up. Same as F0/F1 on N64 | ||
Activates the code on the line directly beneath it ONLY when XXXXXXX address is YYYY value. | ||
Enable Code | ||
The most common GS code prefix for Gameboy is "01". This means the code resides in the first bank of the address line. Codebreaker users will find that 00 and 01 are equally used code types. The "00" simply means the code resides in the zero bank and "01" as above, the first bank. There are no known other code types for gameboy as there are for N64, Playstation and Dreamcast. Z is the data bank; XXXX is the address; YY is the value. | ||
- by Parasyte (Additions by DGenerateKane) | ||
Note that all the code types below are in RAW form. RAW codes must be encrypted to work on the Gameshark for Gameboy Advance. | ||
Continuously writes the value xx to the RAM address aaaaaaa. | ||
Continuously writes the 16-Bit value xxxx to the RAM address aaaaaaa. Address must be aligned to 2 (must end with one of the following digits - 0,2,4,6,8,A,C,E). | ||
Continuously writes the 32-Bit value xxxxxxxx to the RAM address aaaaaaa. Address must be aligned to 4 (must end with one of the following digits - 0,4,8,C). | ||
Writes data to the following "count" (cccc) addresses. (xxxxxxxx value is also concidered an address, not really a problem, just a very stupid bug -- thanks Datel!!) Many addresses can follow. Example: 30000004 01010101 03001FF0 03001FF4 03001FF8 00000000 (write 01010101 to 3 addresses - 01010101, 03001FF0, 03001FF4, and 03001FF8. '00000000' is used for padding, to ensure the last code encrypts correctly) | ||
This type allows GSA to intercept ROM reads and returns the value xxxx. The address is shifted to the right by 1 (divided by 2). You can either manually shift the address left by 1, or multiply by 2 to get the real address. GSAcrypt (Win32 version) has an option to automatically shift the address for you. Note: V1\V2 hardware can only have up to 1 user-defined rom patch max. V3 can have up to 4. some enable code types can shorten the amount of user-defined rom patches available. | ||
Similar to first ROM patch code, except patch is enabled before the game starts, instead of waiting for the code handler to enable the patch. (address >> 1) | ||
16-bit ROM Patch ? (address >> 1) | ||
8-Bit RAM write only when the GS Button is pressed. | ||
16-Bit RAM write only when the GS Button is pressed. | ||
Slow down on GS Button. This type will put the GBA into a loop for "xxxx" number of times, each time the code handler is run. This slows the game down. | ||
Activate the code on the next line ONLY when the value of address 'aaaaaaa' is Equal To xxxx. | ||
16-Bit activate the multi lines if-true. If the value at address is equal to xxxx, execute following 'zz' lines. | ||
Used to insert the GS code handler routine where it will be executed at least 20 times per second. Without this code, GSA can not write to RAM. xxxx: 0001 - Executes code handler without backing up the $lr register. Must turn GSA off before loading game. 0002 - Executes code handler and backs up the $lr register. Must turn GSA off before loading game. 0003 - Replaces a 32-bit pointer used for long-branches. Must turn GSA off before loading game. 0101 - Executes code handler without backing up the $lr register. 0102 - Executes code handler and backs up the $lr register. 0103 - Replaces a 32-bit pointer used for long-branches. | ||
Used by GSA only for auto-detecting the inserted game. | ||
"Deadface" is used to change the encryption seeds. It's original intent was probably to re- encrypt codes if someone figured out the normal encryption. (Very similiar to the CBA's '9' code type.) | ||
- by Parasyte (Additions by DGenerateKane) | ||
Note that all the code types below are in RAW form. RAW codes must be encrypted to work on the Codebreaker for Gameboy Advance. | ||
xxxx is the CRC value (the "Game ID" converted to hex) Flags ("yyyy"): 0008 - CRC Exists (CRC is used to autodetect the inserted game) 0002 - Disable Interupts | ||
'y' is the CBA Code Handler Store Address (0-7) [address = ((d << 0x16) + 0x08000100)] 1000 - 32-bit Long-Branch Type (Thumb) 2000 - 32-bit Long-Branch Type (ARM) 3000 - 8-bit(?) Long-Branch Type (Thumb) 4000 - 8-bit(?) Long-Branch Type (ARM) 0020 - Unknown (Odd Effect) | ||
Continuosly writes the 8-Bit value specified by 'yy' to address aaaaaaa. | ||
This is one of those two-line codes. The "yyyy" set is the data to store at the address (aaaaaaa), with xxxxxxxx being the number of addresses to store to, and iiii being the value to increment the addresses by. The codetype is usually use to fill memory with a certain value. | ||
xxxxxxxx iiii | ||
Performs the AND function on the address provided with the value provided. I'm not going to explain what AND does, so if you'd like to know I suggest you see the instruction manual for a graphing calculator. This is another advanced code type you'll probably never need to use. | ||
If the value at the specified RAM address (aaaaaaa) is equal to yyyy value, active the code on the next line. | ||
Continuosly writes yyyy values to the specified RAM address (aaaaaaa). | ||
(When 1st Code Only!) | Works like the DEADFACE on GSA. Changes the encryption seeds used for the rest of the codes. | |
Basicly the opposite of an 'If Equal To' Activator. Activates the code on the next line if address xxxxxxx is NOT equal to yyyy | ||
No Description available at this time. | ||
AR V3 Codes Types | |
About the Code Types Numbers | |
Let's take for exemple : Type E3 3.0.3.1.x : 00XXXXXX : (00000130 -> C7000130) ZZZZZZZZ : Write the Word ZZZZZZZZ to the address $4XXXXXX 3.0.3.1.x : 1st number = 3 = Data size (0 to 3) 2nd number = 0 = Code Type (0 to 7) 3rd number = 3 = Cude subtype (0 to 3) 4th number = 1 = Special bit (0 to 1) 5th number : x = Unused bit (0 to 3) 3.0.3.1.0 gives these (bit speaking) = 11.000.11.1.00 reverse it : 00.1.11.000.11 = 0011100011 = E3 = The code type. I choose to take this numbering to make it that the Ram 8bits write (Type 0), Ram 16bits write Type 1 andRam 32bits write (Type 2) have the same type number than for AR/GS V1/2. Moreover, If I didn't "reverse" the numbers, we've gotten almost only even code type number, which, IMHO, sounds really strange... | |
1) Normal RAM Write Codes | |
Type 00 0.0.0.x.x |
(02024EA4 -> 00224EA4) Fill area (XXXXXXXX) to (XXXXXXXX+YYYYYY) with Byte ZZ. |
XXXXXXXX YYYYYYZZ | |
Type 01 1.0.0.x.x |
(02024EA4 -> 02224EA4) Fill area (XXXXXXXX) to (XXXXXXXX+YYYY*2) with Halfword ZZZZ. |
XXXXXXXX YYYYZZZZ | |
Type 02 2.0.0.x.x |
(02024EA4 -> 04224EA4) Write the Word ZZZZZZZZ to address XXXXXXXX. |
XXXXXXXX ZZZZZZZZ | |
2) Pointer RAM Write Codes | |
Type 20 0.0.1.x.x |
(02024EA4 -> 40224EA4) Writes Byte ZZ to ([the address kept in XXXXXXXX]+[YYYYYY]). |
XXXXXXXX YYYYYYZZ | |
Type 21 1.0.1.x.x |
(02024EA4 -> 4224EA4) Writes Halfword ZZZZ ([the address kept in XXXXXXXX]+[YYYY*2]). |
XXXXXXXX YYYYZZZZ | |
Type 22 2.0.1.x.x |
(02024EA4 -> 4424EA4) Writes the Word ZZZZZZZZ to [the address kept in XXXXXXXX]. |
XXXXXXXX ZZZZZZZZ | |
3) Add Codes | |
Type 40 0.0.2.x.x |
(02024EA4 -> 80224EA4) Add the Byte ZZ to the Byte stored in XXXXXXXX. |
XXXXXXXX 000000ZZ | |
Type 41 1.0.2.x.x |
(02024EA4 -> 82224EA4) Add the Halfword ZZZZ to the Halfword stored in XXXXXXXX. |
XXXXXXXX 0000ZZZZ | |
Type 42 2.0.2.x.x |
(02024EA4 -> 84224EA4) Add the Word ZZZZ to the Halfword stored in XXXXXXXX. |
XXXXXXXX ZZZZZZZZ | |
4) Write to $4000000 (IO Registers!) | |
Type 63 3.0.3.0.x |
(00000130 -> C6000130) Write the Halfword ZZZZ to the address $4XXXXXX |
00XXXXXX 0000ZZZZ | |
Type E3 3.0.3.1.x |
(00000130 -> C7000130) Write the Word ZZZZZZZZ to the address $4XXXXXX |
00XXXXXX ZZZZZZZZ | |
5) If Equal Code (= Joker Code) | |
Type 04 0.1.0.x.x |
(02024EA4 -> 08224EA4) If Byte at XXXXXXXX = ZZ then execute next code. |
XXXXXXXX 000000ZZ | |
Type 24 0.1.1.x.x |
(02024EA4 -> 48224EA4) If Byte at XXXXXXXX = ZZ then execute next 2 codes. |
XXXXXXXX 000000ZZ | |
Type 44 0.1.2.x.x |
(02024EA4 -> 88224EA4) If Byte at XXXXXXXX = ZZ execute all the codes below this one in the same row (else execute none of the codes below). |
XXXXXXXX 000000ZZ | |
Type 64 0.1.3.x.x |
(02024EA4 -> C8224EA4) While Byte at XXXXXXXX <> ZZ turn off all codes. |
XXXXXXXX 000000ZZ | |
Type 05 1.1.0.x.x |
(02024EA4 -> 0A224EA4) If Halfword at XXXXXXXX = ZZZZ then execute next code. |
XXXXXXXX 0000ZZZZ | |
Type 05 1.1.0.x.x |
(02024EA4 -> 0A224EA4) If Halfword at XXXXXXXX = ZZZZ then execute next code. |
XXXXXXXX 0000ZZZZ | |
Type 25 1.1.1.x.x |
(02024EA4 -> 4A224EA4) If Halfword at XXXXXXXX = ZZZZ then execute next 2 codes. |
XXXXXXXX 0000ZZZZ | |
Type 45 1.1.2.x.x |
(02024EA4 -> 8A224EA4) If Halfword at XXXXXXXX = ZZZZ execute all the codes below this one in the same row (else execute none of the codes below). |
XXXXXXXX 0000ZZZZ | |
Type 65 1.1.3.x.x |
(02024EA4 -> CA224EA4) While Halfword at XXXXXXXX <> ZZZZ turn off all codes. |
XXXXXXXX 0000ZZZZ | |
Type 06 2.1.0.x.x |
(02024EA4 -> 0C224EA4) If Word at XXXXXXXX = ZZZZZZZZ then execute next code. |
XXXXXXXX ZZZZZZZZ | |
Type 26 2.1.1.x.x |
(02024EA4 -> 4C224EA4) If Word at XXXXXXXX = ZZZZZZZZ then execute next 2 codes. |
XXXXXXXX ZZZZZZZZ | |
Type 46 2.1.2.x.x |
(02024EA4 -> 8C224EA4) If Word at XXXXXXXX = ZZZZZZZZ execute all the codes below this one in the same row (else execute none of the codes below). |
XXXXXXXX ZZZZZZZZ | |
Type 66 2.1.3.x.x |
(02024EA4 -> CC224EA4) While Word at XXXXXXXX <> ZZZZZZZZ turn off all codes. |
XXXXXXXX ZZZZZZZZ | |
6) If Different Code | |
Type 08 0.2.0.x.x |
(02024EA4 -> 10224EA4) If Byte at XXXXXXXX <> ZZ then execute next code. |
XXXXXXXX 000000ZZ | |
Type 28 0.2.1.x.x |
(02024EA4 -> 50224EA4) If Byte at XXXXXXXX <> ZZ then execute next 2 codes. |
XXXXXXXX 000000ZZ | |
Type 48 0.2.2.x.x |
(02024EA4 -> 90224EA4) If Byte at XXXXXXXX <> ZZ execute all the codes below this one in the same row (else execute none of the codes below). |
XXXXXXXX 000000ZZ | |
Type 68 0.2.3.x.x |
(02024EA4 -> D0224EA4) While Byte at XXXXXXXX = ZZ turn off all codes. |
XXXXXXXX 000000ZZ | |
Type 09 1.2.0.x.x |
(02024EA4 -> 12224EA4) If Halfword at XXXXXXXX <> ZZZZ then execute next code. |
XXXXXXXX 0000ZZZZ | |
Type 29 1.2.1.x.x |
(02024EA4 -> 52224EA4) If Halfword at XXXXXXXX <> ZZZZ then execute next 2 codes. |
XXXXXXXX 0000ZZZZ | |
Type 49 1.2.2.x.x |
(02024EA4 -> 92224EA4) If Halfword at XXXXXXXX <> ZZZZ disable all the codes below this one. |
XXXXXXXX 0000ZZZZ | |
Type 69 1.2.3.x.x |
(02024EA4 -> D2224EA4) While Halfword at XXXXXXXX = ZZZZ turn off all codes. |
XXXXXXXX 0000ZZZZ | |
Type 0A 2.2.0.x.x |
(02024EA4 -> 14224EA4) If Word at XXXXXXXX <> ZZZZZZZZ then execute next code. |
XXXXXXXX ZZZZZZZZ | |
Type 2A 2.2.1.x.x |
(02024EA4 -> 54224EA4) If Word at XXXXXXXX <> ZZZZZZZZ then execute next 2 codes. |
XXXXXXXX ZZZZZZZZ | |
Type 4A 2.2.2.x.x |
(02024EA4 -> 94224EA4) If Word at XXXXXXXX <> ZZZZZZZZ disable all the codes below this one. |
XXXXXXXX ZZZZZZZZ | |
Type 6A 2.2.3.x.x |
(02024EA4 -> D4224EA4) While Word at XXXXXXXX = ZZZZZZZZ turn off all codes. |
XXXXXXXX ZZZZZZZZ | |
7) [If Byte at address XXXXXXXX is lower than ZZ] (signed) Code | |
Signed means : For bytes : values go from -128 to +127. For Halfword : values go from -32768/+32767. For Words : values go from -2147483648 to 2147483647. For exemple, for the Byte comparison, 7F (127) will be > to FF (-1). | |
Type 0C 0.3.0.x.x |
(02024EA4 -> 18224EA4 or 28224EA4) If ZZ > Byte at XXXXXXXX then execute next code. |
XXXXXXXX 000000ZZ | |
Type 2C 0.3.1.x.x |
(02024EA4 -> 58224EA4 or 68224EA4) If ZZ > Byte at XXXXXXXX then execute next 2 codes. |
XXXXXXXX 000000ZZ | |
Type 4C 0.3.2.x.x |
(02024EA4 -> 98224EA4 or A8224EA4) If ZZ > Byte at XXXXXXXX then execute all following codes in the same row (else execute none of the codes below). |
XXXXXXXX 000000ZZ | |
Type 6C 0.3.3.x.x |
(02024EA4 -> D8224EA4 or E8224EA4) While ZZ <= Byte at XXXXXXXX turn off all codes. |
XXXXXXXX 000000ZZ | |
Type 0D 1.3.0.x.x |
(02024EA4 -> 1A224EA4 or 2A224EA4) If ZZZZ > Halfword at XXXXXXXX then execute next line. |
XXXXXXXX 0000ZZZZ | |
Type 2D 1.3.1.x.x |
(02024EA4 -> 5A224EA4) If ZZZZ > Halfword at XXXXXXXX then execute next 2 lines. |
XXXXXXXX 0000ZZZZ | |
Type 4D 1.3.2.x.x |
(02024EA4 -> 9A224EA4) If ZZZZ > Halfword at XXXXXXXX then execute all following codes in the same row (else execute none of the codes below). |
XXXXXXXX 0000ZZZZ | |
Type 6D 1.3.3.x.x |
(02024EA4 -> DA224EA4) While ZZZZ <= Halfword at XXXXXXXX turn off all codes. |
XXXXXXXX 0000ZZZZ | |
Type 0E 2.3.0.x.x |
(02024EA4 -> 1C224EA4) If ZZZZZZZZ > Word at XXXXXXXX then execute next line. |
XXXXXXXX ZZZZZZZZ | |
Type 2E 2.3.1.x.x |
(02024EA4 -> 5C224EA4) If ZZZZZZZZ > Word at XXXXXXXX then execute next 2 lines. |
XXXXXXXX ZZZZZZZZ | |
Type 4E 2.3.2.x.x |
(02024EA4 -> 9C224EA4) If ZZZZZZZZ > HWord at XXXXXXXX then execute all following codes in the same row (else execute none of the codes below). |
XXXXXXXX ZZZZZZZZ | |
Type 6E 2.3.3.x.x |
(02024EA4 -> DC224EA4) While ZZZZZZZZ <= Word at XXXXXXXX turn off all codes. |
XXXXXXXX ZZZZZZZZ | |
8) [If Byte at address XXXXXXXX is higher than ZZ] (signed) Code | |
Signed means : For bytes : values go from -128 to +127. For Halfword : values go from -32768/+32767. For Words : values go from -2147483648 to 2147483647. For exemple, for the Byte comparison, 7F (127) will be > to FF (-1). | |
Type 10 0.4.0.x.x , 0.6.0.x.x |
(02024EA4 -> 20224EA4 or 30224EA4) If ZZ < Byte at XXXXXXXX then execute next code. |
XXXXXXXX 000000ZZ | |
Type 30 0.4.1.x.x |
(02024EA4 -> 60224EA4 or 70224EA4) If ZZ < Byte at XXXXXXXX then execute next 2 codes. |
XXXXXXXX 000000ZZ | |
Type 50 0.4.2.x.x , 0.6.2.x.x |
(02024EA4 -> A0224EA4 or B0224EA4) If ZZ < Byte at XXXXXXXX then execute all following codes in the same row (else execute none of the codes below). |
XXXXXXXX 000000ZZ | |
Type 70 0.4.3.x.x |
(02024EA4 -> E0224EA4 or F0224EA4) While ZZ => Byte at XXXXXXXX turn off all codes. |
XXXXXXXX 000000ZZ | |
Type 11 1.4.0.x.x, 1.6.0.x.x |
(02024EA4 -> 22224EA4 or 32224EA4) If ZZZZ < Halfword at XXXXXXXX then execute next line. |
XXXXXXXX 0000ZZZZ | |
Type 31 1.4.1.x.x |
(02024EA4 -> 62224EA4) If ZZZZ < Halfword at XXXXXXXX then execute next 2 lines. |
XXXXXXXX 0000ZZZZ | |
Type 51 1.4.2.x.x, 1.6.2.x.x |
(02024EA4 -> A2224EA4 or B2224EA4) If ZZZZ < Halfword at XXXXXXXX then execute all following codes in the same row (else execute none of the codes below). |
XXXXXXXX 0000ZZZZ | |
Type 71 1.4.3.x.x | (02024EA4 -> E2224EA4) While ZZZZ => Halfword at XXXXXXXX turn off all codes. |
XXXXXXXX 0000ZZZZ | |
Type 12 2.4.0.x.x, 2.6.0.x.x | (02024EA4 -> 24224EA4 or 34224EA4) If ZZZZ < Halfword at XXXXXXXX then execute next line. |
XXXXXXXX 0000ZZZZ | |
Type 32 2.4.1.x.x | (02024EA4 -> 64224EA4) If ZZZZ < Halfword at XXXXXXXX then execute next 2 lines. |
XXXXXXXX 0000ZZZZ | |
Type 52 2.4.2.x.x,2.6.2.x.x | (02024EA4 -> A4224EA4 or B4224EA4) If ZZZZ < Halfword at XXXXXXXX then execute all following codes in the same row (else execute none of the codes below). |
XXXXXXXX 0000ZZZZ | |
Type 72 2.4.3.x.x | (02024EA4 -> E4224EA4) While ZZZZ => Halfword at XXXXXXXX turn off all codes. |
XXXXXXXX 0000ZZZZ | |
9) [If Value at adress XXXXXXXX is lower than...] (unsigned) Code | |
Unsigned means : For bytes : values go from 0 to +255. For Halfword : values go from 0 to +65535. For Words : values go from 0 to 4294967295. For exemple, for the Byte comparison, 7F (127) will be < to FF (255). | |
Type 14 0.5.0.x.x | (02024EA4 -> 28224EA4) If ZZZZZZZZ > Byte at XXXXXXXX then execute next line. |
XXXXXXXX ZZZZZZZZ | |
Type 34 0.5.1.x.x | (02024EA4 -> 68224EA4) If ZZZZZZZZ > Byte at XXXXXXXX then execute next 2 lines. |
XXXXXXXX ZZZZZZZZ | |
Type 54 0.5.2.x.x | (02024EA4 -> A8224EA4) If ZZZZZZZZ > Byte at XXXXXXXX then execute all following codes in the same row (else execute none of the codes below). |
XXXXXXXX ZZZZZZZZ | |
Type 74 0.5.3.x.x | (02024EA4 -> E8224EA4) While ZZ <= Byte at XXXXXXXX turn off all codes. |
XXXXXXXX ZZZZZZZZ | |
Type 15 1.5.0.x.x | (02024EA4 -> 2A224EA4) If ZZZZZZZZ > Halfword at XXXXXXXX then execute next line. |
XXXXXXXX ZZZZZZZZ | |
Type 35 1.5.1.x.x | (02024EA4 -> 6A224EA4) If ZZZZZZZZ > Halfword at XXXXXXXX then execute next 2 lines. |
XXXXXXXX ZZZZZZZZ | |
Type 55 1.5.2.x.x | (02024EA4 -> AA224EA4) If ZZZZZZZZ > Halfword at XXXXXXXX then execute all following codes in the same row (else execute none of the codes below). |
XXXXXXXX ZZZZZZZZ | |
Type 75 1.5.3.x.x | (02024EA4 -> EA224EA4) While ZZZZZZZZ <= Halfword at XXXXXXXX turn off all codes. |
XXXXXXXX ZZZZZZZZ | |
Type 16 2.5.0.x.x | (02024EA4 -> 2C224EA4) If ZZZZZZZZ > Word at XXXXXXXX then execute next line. |
XXXXXXXX ZZZZZZZZ | |
Type 36 2.5.1.x.x | (02024EA4 -> 6C224EA4) If ZZZZZZZZ > Word at XXXXXXXX then execute next 2 lines. |
XXXXXXXX ZZZZZZZZ | |
Type 56 2.5.2.x.x | (02024EA4 -> AC224EA4) If ZZZZZZZZ > Word at XXXXXXXX then execute all following codes in the same row (else execute none of the codes below). |
XXXXXXXX ZZZZZZZZ | |
Type 76 2.5.3.x.x | (02024EA4 -> EC224EA4) While ZZZZZZZZ <= Word at XXXXXXXX turn off all codes. |
XXXXXXXX ZZZZZZZZ | |
10) [If Value at adress XXXXXXXX is higher than...] (unsigned) Code | |
Unsigned means For bytes : values go from 0 to +255. For Halfword : values go from 0 to +65535. For Words : values go from 0 to 4294967295. For exemple, for the Byte comparison, 7F (127) will be < to FF (255). | |
Type 18 0.6.0.x.x | (02024EA4 -> 30224EA4) If ZZZZZZZZ < Byte at XXXXXXXX then execute next line.. |
XXXXXXXX ZZZZZZZZ | |
Type 38 0.6.1.x.x | (02024EA4 -> 70224EA4) If ZZZZZZZZ < Byte at XXXXXXXX then execute next 2 lines. |
XXXXXXXX ZZZZZZZZ | |
Type 58 0.6.2.x.x | (02024EA4 -> B0224EA4) If ZZZZZZZZ < Byte at XXXXXXXX then execute all following codes in the same row (else execute none of the codes below). |
XXXXXXXX ZZZZZZZZ | |
Type 78 0.6.3.x.x | (02024EA4 -> F0224EA4) While ZZZZZZZZ => Byte at XXXXXXXX turn off all codes. |
XXXXXXXX ZZZZZZZZ | |
Type 19 1.6.0.x.x | (02024EA4 -> 32224EA4) If ZZZZZZZZ < Halfword at XXXXXXXX then execute next line. |
XXXXXXXX ZZZZZZZZ | |
Type 39 1.6.1.x.x | (02024EA4 -> 72224EA4) If ZZZZZZZZ < Halfword at XXXXXXXX then execute next 2 lines. |
XXXXXXXX ZZZZZZZZ | |
Type 59 1.6.2.x.x | (02024EA4 -> B2224EA4) If ZZZZZZZZ < Halfword at XXXXXXXX then execute all following codes in the same row (else execute none of the codes below). |
XXXXXXXX ZZZZZZZZ | |
Type 79 1.6.3.x.x | (02024EA4 -> F2224EA4) While ZZZZZZZZ => Halfword at XXXXXXXX turn off all codes. |
XXXXXXXX ZZZZZZZZ | |
Type 1A 2.6.0.x.x | (02024EA4 -> 34224EA4) If ZZZZZZZZ < Halfword at XXXXXXXX then execute next line. |
XXXXXXXX ZZZZZZZZ | |
Type 3A 2.6.1.x.x | (02024EA4 -> 74224EA4) If ZZZZZZZZ < Halfword at XXXXXXXX then execute next 2 lines. |
XXXXXXXX ZZZZZZZZ | |
Type 5A 2.6.2.x.x | (02024EA4 -> B4224EA4) If ZZZZZZZZ < Halfword at XXXXXXXX then execute all following codes in the same row (else execute none of the codes below). |
XXXXXXXX ZZZZZZZZ | |
Type 7A 2.6.3.x.x | (02024EA4 -> F4224EA4) While ZZZZZZZZ => Halfword at XXXXXXXX turn off all codes. |
XXXXXXXX ZZZZZZZZ | |
11) If AND Code | |
Type 1C 0.7.0.x.x |
(02024EA4 -> 38224EA4) If ZZ AND Byte at XXXXXXXX <> 0 (= True) then execute next code. |
XXXXXXXX 000000ZZ | |
Type 3C 0.7.1.x.x |
(02024EA4 -> 78224EA4) If ZZ AND Byte at XXXXXXXX <> 0 (= True) then execute next 2 codes. |
XXXXXXXX 000000ZZ | |
Type 5C 0.7.2.x.x |
(02024EA4 -> B8224EA4) If ZZ AND Byte at XXXXXXXX <> 0 (= True) then execute all following codes in the same row (else execute none of the codes below). |
XXXXXXXX 000000ZZ | |
Type 7C 0.7.3.x.x |
(02024EA4 -> F8224EA4) While ZZ AND Byte at XXXXXXXX = 0 (= False) then turn off all codes. |
XXXXXXXX 000000ZZ | |
Type 1D 1.7.0.x.x |
(02024EA4 -> 3A224EA4) If ZZZZ AND Halfword at XXXXXXXX <> 0 (= True) then execute next code. |
XXXXXXXX 0000ZZZZ | |
Type 3D 1.7.1.x.x |
(02024EA4 -> 7A224EA4) If ZZZZ AND Halfword at XXXXXXXX <> 0 (= True) then execute next 2 codes. |
XXXXXXXX 0000ZZZZ | |
Type 5D 1.7.2.x.x |
(02024EA4 -> BA224EA4) If ZZZZ AND Halfword at XXXXXXXX <> 0 (= True) then execute all following codes in the same row (else execute none of the codes below). |
XXXXXXXX 0000ZZZZ | |
Type 7D 1.7.3.x.x |
(02024EA4 -> FA224EA4) While ZZZZ AND Halfword at XXXXXXXX = 0 (= False) then turn off all codes. |
XXXXXXXX 0000ZZZZ | |
Type 1E 2.7.0.x.x |
(02024EA4 -> 3C224EA4) If ZZZZZZZZ AND Word at XXXXXXXX <> 0 (= True) then execute next code. |
XXXXXXXX ZZZZZZZZ | |
Type 3E 2.7.1.x.x |
(02024EA4 -> 7C224EA4) If ZZZZZZZZ AND Word at XXXXXXXX <> 0 (= True) then execute next 2 codes. |
XXXXXXXX ZZZZZZZZ | |
Type 5E 2.7.2.x.x |
(02024EA4 -> BC224EA4) If ZZZZZZZZ AND Word at XXXXXXXX <> 0 (= True) then execute all following codes in the same row (else execute none of the codes below). |
XXXXXXXX ZZZZZZZZ | |
Type 7E 2.7.3.x.x |
(02024EA4 -> FC224EA4) While ZZZZZZZZ AND Word at XXXXXXXX = 0 (= False) then turn off all codes. |
XXXXXXXX ZZZZZZZZ | |
12) "Always..." Codes | |
For the "Always..." codes: -XXXXXXXX can be any authorised address BUT 00000000 (use 02000000 if you don't know what to choose). -ZZZZZZZZ can be anything. -The "y" in the code data must be in the [1-7] range (which means not 0). | |
Type 07 3.y.0.x.x | (02024EA4 -> 0E224EA4) Always skip next line. |
XXXXXXXX ZZZZZZZZ | |
Type 27 3.y.1.x.x | (02024EA4 -> 4E24EA4) Always skip next 2 lines. |
XXXXXXXX ZZZZZZZZ | |
Type 47 3.y.2.x.x | (02024EA4 -> 8E224EA4) Always Stops executing all the codes below. |
XXXXXXXX ZZZZZZZZ | |
Type 67 3.y.3.x.x | (02024EA4 -> CE224EA4) Always turn off all codes. |
XXXXXXXX ZZZZZZZZ | |
13) 1 Line Special Codes (= starting with "00000000") | |
Type z00 0.0.0.0.0 | End of the code list (even if you put values in the 2nd line). |
00000000 | |
Type z04 x.1.0.x.x | AR Slowdown : loops the AR XX times |
0800XX00 | |
14) 2 Lines Special Codes (= starting with '00000000' and padded (if needed) with "00000000") | |
Note: You have to add the 0es manually, after clicking the "create" button. | |
Type z08 0.2.0.x.x |
(02024EA4 -> 10224EA4) Writes Byte ZZ to address XXXXXXXX when AR button is pushed. |
XXXXXXXX 000000ZZ | |
Type z09 1.2.0.x.x |
(02024EA4 -> 12224EA4) Writes Halfword ZZZZ to address XXXXXXXX. |
XXXXXXXX 0000ZZZZ | |
Type z0A 2.2.0.x.x |
(02024EA4 -> 14224EA4) Writes Word ZZZZZZZZ to address XXXXXXXX. |
XXXXXXXX ZZZZZZZZ | |
Type z0C 0.3.0.x.x |
(02024EA4 -> 18224EA4) Patches ROM address (XXXXXXXX << 1) with Halfword ZZZZ. |
XXXXXXXX 0000ZZZZ | |
Type z0D 1.3.0.x.x |
(02024EA4 -> 1A224EA4) Patches ROM address (XXXXXXXX << 1) with Halfword ZZZZ. Does not work on V1/2 upgraded to V3. Only for a real V3 Hardware? |
XXXXXXXX 0000ZZZZ | |
Type z0E 2.3.0.x.x |
(02024EA4 -> 1C224EA4) Patches ROM address (XXXXXXXX << 1) with Halfword ZZZZ. Does not work on V1/2 upgraded to V3. Only for a real V3 Hardware? |
XXXXXXXX 0000ZZZZ | |
Type z0F 3.3.0.x.x |
(02024EA4 -> 1E224EA4) Patches ROM address (XXXXXXXX << 1) with Halfword ZZZZ. Does not work on V1/2 upgraded to V3. Only for a real V3 Hardware? |
XXXXXXXX 0000ZZZZ | |
Type z20 x.0.1.x.x |
(00000000 -> 40000000) (SP = 0) (means : stops the "then execute all following codes in the same row" and stops the "else execute none of the codes below)". |
00000000 00000000 | |
Type z30 x.4.1.x.x |
(00000000 -> 60000000) (If SP <> 2 -> SP = 1) (means : start to execute all codes until end of codes or SP = 0). (bypass the number of codes to executes set by the master code). |
00000000 00000000 | |
Type z40 0.0.2.x.x |
(02024EA4 -> 80224EA4) Writes Byte YY at address XXXXXXXX. Then makes YY = YY + Z1, XXXXXXXX = XXXXXXXX + Z3Z3, Z2 = Z2 - 1, and repeats until Z2 < 0. |
XXXXXXXX 000000YY Z1Z2Z3Z3 | |
Type z41 1.0.2.x.x |
(02024EA4 -> 82224EA4) Writes Halfword YYYY at address XXXXXXXX. Then makes YYYY = YYYY + Z1, XXXXXXXX = XXXXXXXX + Z3Z3*2, |
XXXXXXXX 0000YYYY Z1Z2Z3Z3 | |
Type z42 2.0.2.x.x |
(02024EA4 -> 84224EA4) Writes Word YYYYYYYY at address XXXXXXXX. Then makes YYYYYYYY = YYYYYYYY + Z1, XXXXXXXX = XXXXXXXX + Z3Z3*4, Z2 = Z2 - 1, and repeats until Z2<0. |
XXXXXXXX YYYYYYYY Z1Z2Z3Z3 | |
WARNING: There is a BUG on the REAL AR (v2 upgraded to v3, and maybe on real v3) with the 32Bits Increment Slide code. You HAVE to add a code (best choice is 80000000 00000000 : add 0 to value at address 0) right after it, else the AR will erase the 2 last 8 digits lines of the 32 Bits Inc. Slide code when you enter it !!! | |
15) Special Codes | |
-Master Code- Type 62 2.0.3.x.x |
(address to patch -> address to patch AND $1FFFFFE) Master Code settings. |
XXXXXXXX 0000YYYY | |
-ID Code- Type 62 2.0.3.x.x |
word at address 080000AC Must always be 001DC0DE |
XXXXXXXX 001DC0DE | |
-DEADFACE- |
Must always be DEADFACE New Encryption seed. |
DEADFACE 0000XXXX | |
Final Notes | |
SP = 0 : normal (execute n codes before giving back the hand to the game). SP = 1 : execute all codes until SP <>1 (or end of codes). SP = 2 : don't execute anymore codes. Each time the GSA starts to execute codes (= each time "it has the hand"), SP = 0. The 'execute all the codes below this one in the same row' makes SP = 1. The '(else execute none of the codes below)' makes SP = 2. The 'turn off all codes' makes an infinite loop (that can't be broken, unless the condition becomes True). |
Encryption | Decryption |
A0A1A2A3 D0D1 | a0a1a2a3 d0d1 |
A0 = (a0 XOR $06) on PSX A0 = (a0 XOR $68) on N64 A1 = (a1 XOR $81) - $2B A2 = (a2 XOR $82) - $2B A3 = (a3 XOR $83) - $2B D0 = (d0 XOR $84) - $2B D1 = (d1 XOR $85) - $2B Alternate: A0 = (a0 XOR $06) on PSX A0 = (a0 XOR $68) on N64 A1 = (a1 XOR $01) - $AB A2 = (a2 XOR $02) - $AB A3 = (a3 XOR $03) - $AB D0 = (d0 XOR $04) - $AB D1 = (d1 XOR $05) - $AB |
a0 = (A0 XOR $06) on PSX a0 = (A0 XOR $68) on N64 a1 = (A1 + $2B) XOR $81 a2 = (A2 + $2B) XOR $82 a3 = (A3 + $2B) XOR $83 d0 = (D0 + $2B) XOR $84 d1 = (D1 + $2B) XOR $85 Alternate: a0 = (A0 XOR $06) on PSX a0 = (A0 XOR $68) on N64 a1 = (A1 + $AB) XOR $01 a2 = (A2 + $AB) XOR $02 a3 = (A3 + $AB) XOR $03 d0 = (D0 + $AB) XOR $04 d1 = (D1 + $AB) XOR $05 |
Newer PSX 7K Encryption (PSX Only) | |
A0A1A2A3 D0D1 | |
A0 = (a0 XOR $07) A1 = (a1 - (a2 AND $73)) + ((a3 XOR $90) - $F5) - d0 - d1 A2 = (a2 - (a3 AND $73)) + ((d0 XOR $90) - $16) - d1 A3 = (a3 - (d0 AND $73)) + ((d1 XOR $90) - $5A) D0 = (d0 - (d1 AND $73)) + $35 D1 = (d1 + $35) | |
Newer PSX 7K Decryption (PSX Only) | |
a0a1a2a3 d0d1 | |
d1 = (D1 - $35) d0 = (D0 + (D1 AND $73)) - $35 a3 = (A3 + (D0 AND $73)) - ((D1 XOR $90) - $5A) a2 = (A2 + (A3 AND $73)) - ((D0 XOR $90) - $16) + D1 a1 = (A1 + (A2 AND $73)) - ((A3 XOR $90) - $F5) + D0 + D1 a0 = (A0 XOR $07) |
lui | $v1,802F | |
lw | $v1,CE20($v1) | |
lhu | $v0,0656($v1) | |
addiu | $v0,$v0,FFE0 | |
sh | $v0,0656($v1) |
lui $v1,802F | LUI - Load Upper Immediate: This puts the hex value (immediate) into the left (upper) half of the reg specified. Meaning $v1 now equals 802F0000. |
lw $v1,CE20($v1) | LW - Load Word: This loads the word (32-bit) value of the reg in () + the hex offset into the reg on the left. The hex offset is signed though; the means if the offset is higher than 7FFF, the upper 16 bits are made FFFF. So, CE20 is actually FFFFCE20. The 32-bit value at 802ECE20 is "800EFBC0", so $v1 is 800EFBC0 now. Anyone familar with pointers? This is what they're for. hehe |
lhu $v0,0656($v1) | LHU - Load Halfword Unsigned: This loads the halfword (16-bit) value from $v1 + 0656 hex (signed offset) into $v0. Now $v0 is the amount of Ice you currently have. |
addiu $v0,$v0,FFE0 | ADDIU - Add Immediate Unsigned Word: This adds the 2nd reg listed + the hex value and puts that value into the 1st reg, so $v0 = $v0 + FFE0. Now you're gonna say, "how does that decrease my ice?" Well, let's say your Ice, $v0, is 00000080. Now add FFE0 to it and you get 00010060. |
sh $v0,0656($v1) | Store Halfword: Same as when you loaded this halfword value 2 opcodes above. Now you're just storing it. So how does it decrease your ice? It's only storing the halfword value in $v0 to the RAM. That means it's only storing the 16 bits (4 digits) on the right, so it's storing 0060. Now your ice was decreased by 20 (hex). |
Disclaimer: Very few SLUS files have the proper labels for this kind of code. Don't be disappointed when this strategy doesn't work for most other games. Open the GTA3 SLUS in the DIS. Today, we're going to be looking at a couple of simple variable-setting codes. The first thing we need to do is open the Label Listing (Ctrl+G) and see if we can find anything interesting. Now, there are lots and lots of labels in the GTA3 SLUS, and most of them just aren't helpful at all. It takes a lot of patience to look through them to find the ones that are useful. To save you some time and to facilitate the learning process, I'll go ahead and point out a couple of them for you. Example #1 With the Label Listing open, type Lives in the text box at the top. The selection will automatically move to the first label that starts with what you typed. If you press Enter, the DIS cursor will move to the line of code that has the selected label. You should now have selected the address for "LivesSavedWithAmbulance__6CStats". As you can probably guess from the label, this stores the number of people you have saved in the Paramedic Missions. Now that we have an address (00416EE8), we need to figure out what value we want to use. Remember that this value needs to be in hexadecimal form. Let's say we want to have 1000 people saved. Converting 1000 to hexadecimal gives us 3E8. (Windows Calculator in Scientific Mode converts between decimal and hexadecimal easily) With an address and value in hand, we need to figure out what GameShark command we want to use. Since 3E8 is larger than 8 bits (2 hex digits), we can't use the 8-bit Write. 3E8 is smaller than 16 bits (4 hex digits), so we can use the 16-bit Write. The format for that is 1aaaaaaa 0000dddd, where a is the address and d is the value. Putting it all together, we have: 10416EE8 000003E8 (dropping the first zero from the address to make it 7 digits, and adding a zero to the value to make it 4 digits). Last, you need to encrypt the code. The encryption you use depends on the game you are hacking. GTA3 GameShark codes use the 1456E7A5 encryption, so we will use that as well. Using the converter to encrypt the code gives us: 1000 People Saved Example #2 Open the Label Listing again and type Respray in the text box. It should bring you to the label "RespraysAreFree__8CGarages". Press Enter to go to that address. The name of this variable implies that this is a yes or no question. Are resprays free or not? In programming, this is known as a Boolean variable (stores True or False). True is normally represented by a 1, and False is represented by 0. Taking this into account, it would make sense that if we set this variable to 1, then resprays would be free. So, we take the address (00416F90) and the value (1, 1 converted to hexadecimal is still 1) and figure out what command we need to use. Since 1 is less than 8 bits, we can use the 8-bit Write. The format for that is 0aaaaaaa 000000dd. Filling in the address and value, we have: 00416F90 00000001 (again, dropping the zero off the address and adding a zero to the value to make it two digits). Encrypting with the 1456E7A5 encryption gives us: Free Resprays |
Name | Description | Author |
GSCC2k2 | Game Software Code Creator 2002 supports both N64 and PSX Gameshark Pro, older PSX GS versions, and Caetla. Has tons of options including Breakpoints (N64). | CodeMaster |
Float Convert | Used for converting 32-Bit hex values to IEEE-754 Floating Point and vice versa. | ??? |
Patch Code Unpatcher v1.1 | Expands N64/PSX Patch ('50') codes. | Viper187 |
Gameboy/Gameboy Advance Utilities | ||
ARCrypt Final 2_2 | Gameboy Advance Gameshark & AR code encryptor/decryptor | Kenobi & Parasyte |
CBA Crypt | Gameboy Advance Codebreaker code encryptor/decryptor | Parasyte |
Gamecube Utilities | ||
GCN Crypt v1.2 | Encrypt/Decrypt Gamecube Action Replay Codes! | Parasyte |
GCN AR Code Type Helper | Puts codes into proper decrypted AR format for you. | Parasyte |
Playstation 2 Utilities | ||
PS2DIS 0.99 | PS2 Disassembler, used for finding codes via SLUS files | Hanimar |
PS2 Code Decoder - Beta 2 | Code Encryptor/Decryptor | iN tHE mIND |
MAXcrypt v1.0 | Encrypts/decrypts Action Replay MAX codes | Parasyte |
N64 Utilities | ||
Official N64 Hack Utilities 3.2 | The official PC tools for GS Pro 3.2 | Datel |
Official N64 Hack Utilities 3.3 | The official PC tools for GS Pro 3.3 | Datel |
N64 Utils Patch | N64 Utils patch that allows dumping ROM. | ??? |
RAM Compare v1.2 | DOS app for comparing RAM dumps that you can get from certain N64 emulators. | The Phantom |
Byteswap v1.0 | Can convert Project64 save state files to regular RAM dumps. They must be .pj (uncompressed) save states! | The Phantom |
VTR Compare 0.99 Beta | Viper's Text Ram Comparer uses text format RAM dumps from Nemu64 for searching comparisons. This baby has options even GSCC2k2 doesn't :) | Viper187 |
RAM 2 Text v1.0 | Converts normal RAM dumps to text format for use with VTR Compare. | Viper187 |
Cheater64 v2.1 | This is about the best comparer for hacking N64 with emulators thus far. It supports RAM dumps and PJ64 save states. | Viper187 |
Niew | Assembler/Disassembler (DOS) typicly used for ASM hacking - COP1 instructions aren't supported. | Titanik |
LemAsm | Assembler/Disassembler - Windows - supports COP1 Instructions | Lemmy |
R3400i Documentation | Wanna learn N64 Assembly language? | N/A |
Xploder64 | Official upgrade/codelist Utils for Xploder64 | Fire International |
GSProN64Crypt | A program that can decompress the .enc (GS ROM) file included with the official utils. | CodeMaster |
Goldeneye 007 Target Time Calc v1.0 | Use to calculate values for Wreck7's 'target time modifiers' on Goldeneye. | Viper187 |
Nemu | Nintendo 64 emulator | nemu |
Nemu INI (Alternate) | Unofficial INI file for Nemu | ??? |
PJ64 | Nintendo 64 emulator | PJ64 |
PSX Utilities | ||
Official PSX GS Pro Hack Utilities v3.20 | The official utils from Datel for use with GS Pro v3.20 or upgrading from 3.0 | Datel |
Official PSX CDX Hack Utilities v3.20 | The official utils from Datel for use with GS CDX | Datel |
Xplorer Button Value Calculator v1.3 | Calculates button values for Xplorer Joker Codes | ??? |
Caetla | An unofficial cheat rom for flashing to older cheat device hardware. PC Comms Link required. | ??? |
Undatel 3 | A program that can decompress the .enc (GS ROM) file included with the official utils. | ??? |
Sega Dreamcast Utilities | ||
DCCrypt | Encrypt/Decrypt Dreamcast GS codes | Parasyte |
KeyCodes: |