Skip to content

Latest commit

 

History

History
288 lines (284 loc) · 12.6 KB

File metadata and controls

288 lines (284 loc) · 12.6 KB

PSP Action Replay (PSPAR)

Description

PSP Action Replay is the first commercial cheat device for the PSP. The first PSPAR (released October 2008) used the Pandora exploit to launch the software on PSP-1000 and early PSP-2000 consoles. A newer version released in December 2009 used a signed binary installed in the UPDATE folder and launched directly from the XMB.

Code types

Type Description
Constant RAM Writes
Type 0x00
32-bit
0XXXXXXX YYYYYYYY
Writes word YYYYYYYY to [XXXXXXX+offset].
Type 0x01
16-bit
1XXXXXXX 0000YYYY
Writes halfword YYYY to [XXXXXXX+offset].
Type 0x02
8-bit
2XXXXXXX 000000YY
Writes byte YY to [XXXXXXX+offset].
Conditional 32-bit Code Types
Type 0x03
Greater Than
3XXXXXXX YYYYYYYY
Checks if YYYYYYYY > (word at [XXXXXXX] or [offset] if [XXXXXXX] is 0)
If not, the code(s) following this one are not executed (ie. execution status is set to false) until a code type D0 or D2 is encountered, or until the end of thecode list is reached.
Type 0x04
Less Than
4XXXXXXX YYYYYYYY
Checks if YYYYYYYY < (word at [XXXXXXX] or [offset] if [XXXXXXX] is 0)
If not, the code(s) following this one are not executed (ie. execution status is set to false) until a code type D0 or D2 is encountered, or until the end of thecode list is reached.
Type 0x05
Equal To
5XXXXXXX YYYYYYYY
Checks if YYYYYYYY == (word at [XXXXXXX] or [offset] if [XXXXXXX] is 0)
If not, the code(s) following this one are not executed (ie. execution status is set to false) until a code type D0 or D2 is encountered, or until the end of thecode list is reached.
Type 0x06
Not Equal To
6XXXXXXX YYYYYYYY
Checks if YYYYYYYY != (word at [XXXXXXX] or [offset] if [XXXXXXX] is 0)
If not, the code(s) following this one are not executed (ie. execution status is set to false) until a code type D0 or D2 is encountered, or until the end of thecode list is reached.
Conditional 16-bit + Masking Code Types
Type 0x07
Greater Than
7XXXXXXX ZZZZYYYY
Checks if YYYY > (not ZZZZ < halfword at [XXXXXXX] or [offset] if [XXXXXXX] is 0).
If not, the code(s) following this one are not executed (ie. execution status is set to false) until a code type D0 or D2 is encountered, or until the end of the code list is reached.
Type 0x08
Less Than
8XXXXXXX ZZZZYYYY
Checks if YYYY < (not ZZZZ < halfword at [XXXXXXX] or [offset] if [XXXXXXX] is 0).
If not, the code(s) following this one are not executed (ie. execution status is set to false) until a code type D0 or D2 is encountered, or until the end of the code list is reached.
Type 0x09
Equal To
9XXXXXXX ZZZZYYYY
Checks if YYYY == (not ZZZZ < halfword at [XXXXXXX] or [offset] if [XXXXXXX] is 0).
If not, the code(s) following this one are not executed (ie. execution status is set to false) until a code type D0 or D2 is encountered, or until the end of the code list is reached.
Type 0x0A
Not Equal To
AXXXXXXX ZZZZYYYY
Checks if YYYY != (not ZZZZ < halfword at [XXXXXXX] or [offset] if [XXXXXXX] is 0).
If not, the code(s) following this one are not executed (ie. execution status is set to false) until a code type D0 or D2 is encountered, or until the end of the code list is reached.
Offset Codes
Type 0x0B
Load Offset
BXXXXXXX 00000000
Loads the 32-bit value into the 'offset'.
Offset = word at [XXXXXXX+offset].
Type 0xC4
Safe Data Store
C4000000 XXXXXXXX
Sets the offset value to point to the first word of this code. Storing data at offset+0x4 will save over the top of XXXXXXXX.
Type 0xC6
Write Offset
C6000000 XXXXXXXX
Writes the offset value to [XXXXXXXX].
Type 0xD3
Set Offset
D3000000 XXXXXXXX
Sets the offset value to XXXXXXXX.
Type 0xDC
Add Offset
DC000000 XXXXXXXX
Adds XXXXXXXX to the current offset (Dual Offset).
Loop Codes
Type 0x0C
C0000000 YYYYYYYY
This sets the 'Dx repeat value' to YYYYYYYY and saves the 'Dx nextcode to be executed' and the 'Dx execution status'. Repeat will be executed when a D1/D2 code is encountered.
When repeat is executed, the AR reloads the 'next code to be executed' and the 'execution status' from the Dx registers.
Terminator Codes
Type 0xD0
Terminator
D0000000 00000000
Loads the previous execution status. If none exists, the execution status stays at 'execute codes'.
Type 0xD1
Loop Execute Variant
D1000000 00000000
Executes the next block of codes 'n' times (specified by the 0x0C codetype), but doesn't clear the Dx register upon completion.
Type 0xD2
Loop Execute Variant / Full Terminator
D2000000 00000000
Executes the next block of codes 'n' times (specified by the 0x0C codetype), and clears all temporary data. (i.e. execution status, offsets, code C settings, etc.)
This code can also be used as a full terminator, giving the same effects to any block of code.
Data Register Codes
Type 0xD4
Add Value
D4000000 XXXXXXXX
Adds XXXXXXXX to the 'Dx data register'.
Type 0xD5
Set Value
D5000000 XXXXXXXX
Set XXXXXXXX to the 'Dx data register'.
Type 0xD6
32-bit Incrementive Write
D6000000 XXXXXXXX
Writes the 'Dx data register' word to [XXXXXXXX+offset], and increments the offset by 4.
Type 0xD7
16-bit Incrementive Write
D7000000 XXXXXXXX
Writes the 'Dx data register' halfword to [XXXXXXXX+offset], and increments the offset by 2.
Type 0xD8
8-bit Incrementive Write
D8000000 XXXXXXXX
Writes the 'Dx data register' byte to [XXXXXXXX+offset], and increments the offset by 1.
Type 0xD9
32-bit Load
D9000000 XXXXXXXX
Loads the word at [XXXXXXXX+offset] and stores it in the'Dx data register'.
Type 0xDA
16-bit Load
DA000000 XXXXXXXX
Loads the halfword at [XXXXXXXX+offset] and stores it in the'Dx data register'.
Type 0xDB
8-bit Load
DB000000 XXXXXXXX
Loads the byte at [XXXXXXXX+offset] and stores it in the'Dx data register'.
Miscellaneous Codes
Type 0x0E
Patch Code
EXXXXXXX YYYYYYYY
Copies YYYYYYYY bytes from directly after the 0xE code line to [XXXXXXXX+offset].
Type 0x0F
Memory Copy Code
FXXXXXXX YYYYYYYY
Copy YYYYYYYY bytes from offset to XXXXXXX (XXXXXXX is fixed, no offsets are added to it).
Folder/Comment Codes
Type 0xCF
Single Select Folder
CF000000 XXXXXXXX
Sets the cheat as a single select folder and the next XXXXXXXX items (codes, folders and comments) will be subitems of the current item.
Type 0xCF
Comment
CF000001 XXXXXXXX
Sets the cheat as a comment and the next XXXXXXXX items will also be treated as comments.
Type 0xCF
Multi Select Folder
CF000002 XXXXXXXX
Sets the cheat as a folder and the next XXXXXXXX items (codes, folders and comments) will be subitems of the current item.