The current URL is datacrystal.tcrf.net.
CwCheat
cwCheat is a homebrew for PSP.
Like all cheating programs that work locally, it works by modifying memory during run-time, producing in-game effects.
Every few milliseconds, it will "run cheats," modifying system memory according to micro-programs called "cheats."
This program has become more popular since support for this type of cheat in PPSSPP was added.
General
_S ULUS-10551 #Specify the serial number of a game. cwCheat on PSP uses this to know which cheats you have installed apply to the game you're running.
_G YS Seven US #Specify the name of the game. This is for us humans, cwCheat doesn't use it.
_C0 / _C1 #Specify the start of a cheat micro-program. C0 is disable on game load, C1 is enabled on game load.
_L 0xXXXXXXXX 0xXXXXXXXX #This is how you write a line of cheats. If you leave off the _L at the beginning, the line will become a comment, ignored by cwCheat.
Constant Write Codes (0x0, 0x1, 0x2)
The basic code type is constant write. I'm not the author of cwCheat, but I am 100% sure that is where the "cw" in the program's name comes from. The "constant write" cheats are easy to find and it's easy to write the micro-programs for them. 0x0, 0x1 and 0x2 are the constant write code types.
_L 0x0AAAAAAA 0x0000000V | Constant write byte V at address AAAAAAA. For addresses, the value you specify is added to a base of 0x8800000 to form the PSP virtual address. |
_L 0x1AAAAAAA 0x000000VV | Constant write halfword VV |
_L 0x2AAAAAAA 0x0000VVVV | Constant write word VVVV |
Increment / Decrement codes (0x3). I'm not sure how they could be useful.
_L 0x301000VV 0x0AAAAAAA | Continuously add VV to the byte at address AAAAAAA |
_L 0x302000VV 0x0AAAAAAA | Continuously subtract VV from the byte at address AAAAAAA |
_L 0x3030VVVV 0x0AAAAAAA | Continuously add VVVV to the halfword at address AAAAAAA |
_L 0x304000VV 0x0AAAAAAA | Continuously subtract VVVV from the halfword at address AAAAAAA |
_L 0x30500000 0x0AAAAAAA
_L 0xVVVVVVVV 0x00000000 |
Continuously add VVVVVVVV to the word at address AAAAAAA |
_L 0x306000VV 0x0AAAAAAA
_L 0xVVVVVVVV 0x00000000 |
Continuously subtract VVVVVVVV from the word at address AAAAAAA |
Conditionals (0xD, 0xE)
These will execute the code if some condition is true (otherwise it will not be executed). For example, if a flag is set to 1 in battle scenes and 0 otherwise, you can make a code that will affect battle scenes without interfering with other scenes.
_L 0xDAAAAAAA 0x200000VV | EQUAL: Execute the next code if the byte at address AAAAAAA equals VV (otherwise, it is skipped) |
_L 0xDAAAAAAA 0x202000VV | NOT EQUAL: Execute the next code if the byte at address AAAAAAA does not equal VV (otherwise, it is skipped) |
_L 0xDAAAAAAA 0x202000VV | LESS THAN: Execute the next code if the byte at address AAAAAAA is less than VV (otherwise, it is skipped) |
_L 0xDAAAAAAA 0x203000VV | GREATER THAN: Execute the next code if the byte at address AAAAAAA is greater than VV (otherwise, it is skipped) |
_L 0xDAAAAAAA 0x0000VVVV | EQUAL: Execute the next code if the halfword at address AAAAAAA equals VVVV (otherwise, it is skipped) |
_L 0xDAAAAAAA 0x0010VVVV | NOT EQUAL: Execute the next code if the halfword at address AAAAAAA does not equal VVVV (otherwise, it is skipped) |
_L 0xDAAAAAAA 0x0020VVVV | LESS THAN: Execute the next code if the halfword at address AAAAAAA is less than VVVV (otherwise, it is skipped) |
_L 0xDAAAAAAA 0x0030VVVV | GREATER THAN: Execute the next code if the halfword at address AAAAAAA is greater than VVVV (otherwise, it is skipped) |
_L 0xE1NN00VV 0x0AAAAAAA | EQUAL: Execute the next NN lines if the byte at address AAAAAAA equals VV (otherwise, it is skipped) |
_L 0xE1NN00VV 0x1AAAAAAA | NOT EQUAL: Execute the next NN lines if the byte at address AAAAAAA does not equal VV (otherwise, they are skipped) |
_L 0xE1NN00VV 0x2AAAAAAA | LESS THAN: Execute the next NN lines if the byte at address AAAAAAA is less than VV (otherwise, they are skipped) |
_L 0xE1NN00VV 0x3AAAAAAA | GREATER THAN: Execute the next NN lines if the byte at address AAAAAAA is greater than VV (otherwise, they are skipped) |
_L 0xE0NNVVVV 0x0AAAAAAA | EQUAL: Execute the next NN lines if the halfword at address AAAAAAA equals VVVV (otherwise, they are skipped) |
_L 0xE0NNVVVV 0x1AAAAAAA | NOT EQUAL: Execute the next NN lines if the halfword at address AAAAAAA does not equal VVVV (otherwise, they are skipped) |
_L 0xE0NNVVVV 0x2AAAAAAA | LESS THAN: Execute the next NN lines if the halfword at address AAAAAAA is less than VVVV (otherwise, they are skipped) |
_L 0xE0NNVVVV 0x3AAAAAAA | GREATER THAN: Execute the next code if the halfword at address AAAAAAA is greater than VVVV (otherwise, they are skipped) |
_L 0xDAAAAAAA 0x0x4BBBBBBB
_L 0x000000NN 0x0000000Y |
EQUAL: If the values at addresses AAAAAAA and BBBBBBB are equal, execute the next NN lines (otherwise, they are skipped)
Y = 0 for byte comparison, 1 for halfword and 2 for word |
_L 0xDAAAAAAA 0x0x5BBBBBBB
_L 0x000000NN 0x0000000Y |
NOT EQUAL: If the values at addresses AAAAAAA and BBBBBBB are not equal, execute the next NN lines (otherwise, they are skipped) |
_L 0xDAAAAAAA 0x0x6BBBBBBB
_L 0x000000NN 0x0000000Y |
LESS THAN: If the value at address AAAAAAA is less than the value at address BBBBBBB, execute the next NN lines (otherwise, they are skipped) |
_L 0xDAAAAAAA 0x0x7BBBBBBB
_L 0x000000NN 0x0000000Y |
GREATER THAN: If the value at address AAAAAAA is greater than the value at address BBBBBBB, execute the next NN lines (otherwise, they are skipped) |