Skip to content

Latest commit

 

History

History
367 lines (363 loc) · 15.6 KB

File metadata and controls

367 lines (363 loc) · 15.6 KB

CWCheat

Description

CWCheat by weltall was the first universal cheat device for the PSP. Inspired by the PS2 Action Replay code types this cheat device also supports native PS1 Action Replay codes and homebrew software.

Code types

Type Description
Constant RAM Writes
Type 0x00
8-bit
0XXXXXXX YYYYYYYY
Writes byte YY to [XXXXXXX].
Type 0x01
16-bit
1XXXXXXX 0000YYYY
Writes halfword YYYY to [XXXXXXX].
Type 0x02
32-bit
2XXXXXXX 000000YY
Writes word YYYYYYYY to [XXXXXXX].
Increment and Decrement Code Types
Type 0x03
8-bit Increment
301000YY XXXXXXXX
Adds YY to the byte stored at [XXXXXXXX].
Type 0x03
16-bit Increment
3030YYYY XXXXXXXX
Adds YYYY to the halfword stored at [XXXXXXXX].
Type 0x03
32-bit Increment
30500000 XXXXXXXX
YYYYYYYY 000000000
Adds YYYYYYYY to the word stored at [XXXXXXXX].
Type 0x03
8-bit Decrement
302000YY XXXXXXXX
Subtracts YY from the byte stored at [XXXXXXXX].
Type 0x03
16-bit Decrement
3040YYYY XXXXXXXX
Subtracts YYYY from the halfword stored at [XXXXXXXX].
Type 0x03
32-bit Decrement
30600000 XXXXXXXX
YYYYYYYY 000000000
Subtracts YYYYYYYY from the word stored at [XXXXXXXX].
Conditional Code Types
Type 0x0D
8-bit Equal To
DXXXXXXX 200000YY
Checks if YY == (byte at [XXXXXXX]).
If not, the following line is not executed (ie. execution status is set to false for 1 line).
Type 0x0D
8-bit Not Equal To
DXXXXXXX 201000YY
Checks if YY != (byte at [XXXXXXX]).
If not, the following line is not executed (ie. execution status is set to false for 1 line).
Type 0x0D
8-bit Less Than
DXXXXXXX 202000YY
Checks if YY < (byte at [XXXXXXX]).
If not, the following line is not executed (ie. execution status is set to false for 1 line).
Type 0x0D
8-bit Greater Than
DXXXXXXX 203000YY
Checks if YY > (byte at [XXXXXXX]).
If not, the following line is not executed (ie. execution status is set to false for 1 line).
Type 0x0D
16-bit Equal To
DXXXXXXX 0000YYYY
Checks if YYYY == (halfword at [XXXXXXX]).
If not, the following line is not executed (ie. execution status is set to false for 1 line).
Type 0x0D
16-bit Not Equal To
DXXXXXXX 0010YYYY
Checks if YYYY != (halfword at [XXXXXXX]).
If not, the following line is not executed (ie. execution status is set to false for 1 line).
Type 0x0D
16-bit Less Than
DXXXXXXX 0020YYYY
Checks if YYYY < (halfword at [XXXXXXX]).
If not, the following line is not executed (ie. execution status is set to false for 1 line).
Type 0x0D
16-bit Greater Than
DXXXXXXX 0030YYYY
Checks if YYYY > (halfword at [XXXXXXX]).
If not, the following line is not executed (ie. execution status is set to false for 1 line).
Multiple Skip Conditional Code Types
Type 0x0E
8-bit Equal To
E1ZZYYYY 0XXXXXXX
Checks if YY == (byte at [XXXXXXX]).
If not, the next ZZ are not executed (ie. execution status is set to false for ZZ lines).
Type 0x0E
8-bit Not Equal To
E1ZZYYYY 1XXXXXXX
Checks if YY != (byte at [XXXXXXX]).
If not, the next ZZ are not executed (ie. execution status is set to false for ZZ lines).
Type 0x0E
8-bit Less Than
E1ZZYYYY 2XXXXXXX
Checks if YY < (byte at [XXXXXXX]).
If not, the next ZZ are not executed (ie. execution status is set to false for ZZ lines).
Type 0x0E
8-bit Greater Than
E1ZZYYYY 3XXXXXXX
Checks if YY > (byte at [XXXXXXX]).
If not, the next ZZ are not executed (ie. execution status is set to false for ZZ lines).
Type 0x0E
16-bit Equal To
EZZZYYYY 0XXXXXXX
Checks if YYYY == (halfword at [XXXXXXX]).
If not, the next ZZZ are not executed (ie. execution status is set to false for ZZZ lines).
Type 0x0E
16-bit Not Equal To
EZZZYYYY 1XXXXXXX
Checks if YYYY != (halfword at [XXXXXXX]).
If not, the next ZZZ are not executed (ie. execution status is set to false for ZZZ lines).
Type 0x0E
16-bit Less Than
EZZZYYYY 2XXXXXXX
Checks if YYYY < (halfword at [XXXXXXX]).
If not, the next ZZZ are not executed (ie. execution status is set to false for ZZZ lines).
Type 0x0E
16-bit Greater Than
EZZZYYYY 3XXXXXXX
Checks if YYYY > (halfword at [XXXXXXX]).
If not, the next ZZZ are not executed (ie. execution status is set to false for ZZZ lines).
Address Conditional Code Types
Type 0x0D
Address Equal To
DXXXXXXX 4YYYYYYY
ZZZZZZZZ 0000000W
Checks if value at [XXXXXXX] == value at [YYYYYYY].
If not, the next ZZZZZZZZ lines are not executed (ie. execution status is set to false for ZZZ lines).
W = Address type; 0 - 8-bit, 1 - 16-bit, 2 - 32-bit
Type 0x0D
Address Not Equal To
DXXXXXXX 5YYYYYYY
ZZZZZZZZ 0000000W
Checks if value at [XXXXXXX] != value at [YYYYYYY].
If not, the next ZZZZZZZZ lines are not executed (ie. execution status is set to false for ZZZ lines).
W = Address type; 0 - 8-bit, 1 - 16-bit, 2 - 32-bit
Type 0x0D
Address Less Than
DXXXXXXX 6YYYYYYY
ZZZZZZZZ 0000000W
Checks if value at [XXXXXXX] < value at [YYYYYYY].
If not, the next ZZZZZZZZ lines are not executed (ie. execution status is set to false for ZZZ lines).
W = Address type; 0 - 8-bit, 1 - 16-bit, 2 - 32-bit
Type 0x0D
Address Greater Than
DXXXXXXX 7YYYYYYY
ZZZZZZZZ 0000000W
Checks if value at [XXXXXXX] > value at [YYYYYYY].
If not, the next ZZZZZZZZ lines are not executed (ie. execution status is set to false for ZZZ lines).
W = Address type; 0 - 8-bit, 1 - 16-bit, 2 - 32-bit
Boolean Code Types
Type 0x07
8-bit OR
7XXXXXXX 000000YY
Writes byte (byte at [XXXXXXX] OR YY) to [XXXXXXX].
Type 0x07
8-bit AND
7XXXXXXX 000200YY
Writes byte (byte at [XXXXXXX] AND YY) to [XXXXXXX].
Type 0x07
8-bit XOR
7XXXXXXX 000400YY
Writes byte (byte at [XXXXXXX] XOR YY) to [XXXXXXX].
Type 0x07
16-bit OR
7XXXXXXX 000100YY
Writes halfword (halfword at [XXXXXXX] OR YYYY) to [XXXXXXX].
Type 0x07
16-bit AND
7XXXXXXX 000300YY
Writes halfword (halfword at [XXXXXXX] AND YYYY) to [XXXXXXX].
Type 0x07
16-bit XOR
7XXXXXXX 000500YY
Writes halfword (halfword at [XXXXXXX] XOR YYYY) to [XXXXXXX].
Pointer Code Types
Type 0x06
8-bit
...
TODO... well the TODO has been here since at least 2011... I don't know if I'm ever going to do it at this point.
Miscellaneous Code Types
Type 0x0D
Button Press
D00000YY 1XXXXXXX
Checks if ctrl & XXXXXXX == XXXXXXX.
If not, the next YY+1 lines are not executed (ie. execution status is set to false for YY+1 lines). See button activators for possible values.
Type 0x0D
Inverse Button Press
D00000YY 3XXXXXXX
Checks if ctrl & XXXXXXX != XXXXXXX.
If not, the next YY+1 lines are not executed (ie. execution status is set to false for YY+1 lines). See button activators for possible values.
Type 0x05
Copy Bytes
5XXXXXXX ZZZZZZZZ
0YYYYYYY 0000000
Copies ZZZZZZZZ bytes from [XXXXXXX] to [YYYYYYY].
Type 0x04
32-bit Multi Write
4XXXXXXX YYYYZZZZ
VVVVVVVV WWWWWWWW
Starting at address [XXXXXXX], this code will loop YYYY times.
The next address is determined by the incrementing the current address by (ZZZZ * 4).
The value written to the address is specified by VVVVVVVV+(WWWWWWWW * loop count).
Type 0x0B
Pause
B0000000 XXXXXXXX
Delays the code engine for XXXXXXXX cycles. Will delay the application of all following code lines.
Simply performs sceKernelDelayThread(XXXXXXXX), hopefully this is what CWCheat does when this code type is encountered.
Type 0x0C
32-bit Equal To
CXXXXXXX YYYYYYYY
Checks if YYYYYYYY == (word at [XXXXXXX]).
If not, the remainder of the code is not executed (ie. execution status is set to false until the next cheat is reached).