Skip to main content

ppsspp-cwcheat-clippy

GitHub PyPI Version License

buymeacoffee

cwCheat address rewriter for PSP/PPSSPP memory patch lines.

Clippy watches your clipboard for PSP virtual addresses such as 08801234, converts them to cwCheat’s 28-bit offset, rewrites a cwCheat line template, prints the result, and copies it back to your clipboard.

Table of contents

What this does

Use this when you are finding addresses in PPSSPP or on hardware and want to keep reusing the same cwCheat template.

  • Accepts a full cwCheat line or a single opcode nibble at startup.
  • Watches for clipboard values like 08801234 or 0x08801234.
  • Rewrites only the detected 28-bit address field.
  • Preserves the opcode nibble, the other word, and any // comment.
  • Copies the rewritten _L ... line back to the clipboard.

Installation

Install from PyPI:

pip install ppsspp-cwcheat-clippy

Clippy uses pyperclip, which is installed with the package. On Linux, you may also need a clipboard backend:

  • Wayland: wl-clipboard
  • X11: xclip or xsel

Windows and macOS usually need no extra clipboard utility.

Quick start

ppsspp-cwcheat-clippy

Clippy prints the app version, accepted address range, active template, and a preview. With no argument, it uses a constant 32-bit write (0x2) with the address in the first word.

Copy 08801234; Clippy prints and copies:

_L 0x20001234 0x01234567 // clippy-automated: set address to 0x01234567

Stop with Ctrl+C.

Templates and input formats

You may pass one template argument.

Full cwCheat line

_L 0x20000000 0x01234567 // set HP
20000000 01234567        // also OK

Rules:

  • Two 32-bit hex words, with or without 0x.
  • Optional _L prefix.
  • Optional // comment, preserved in output.

Opcode nibble only

2
E // skip if ==
0xD // single-line conditional

A single hex nibble chooses the code family. The second word starts as 0x01234567; for 0xE, the address goes in the second word, otherwise in the first.

If no argument is provided, or an unrecognised argument is provided, Clippy uses the default 0x2 template. A recognised line with no replaceable address field exits with an error.

Address math & valid range

cwCheat uses a 28-bit address window into PSP user memory:

offset = PSP - 0x08800000
valid PSP range = 0x08800000 .. 0x187FFFFF (inclusive)

Clipboard input must contain a 7-8 digit hex address, optionally prefixed with 0x and padded with leading zeroes. Invalid addresses are reported, and the watcher keeps running.

Template detection

Clippy uses heuristics to decide where to place the 28-bit address field (AAAAAAA):

Opcode top nibble Meaning Address goes to
0x0 Constant write (8-bit) w1
0x1 Constant write (16-bit) w1
0x2 Constant write (32-bit) w1
0x3 Increment/Decrement w1
0x4 Multi-write (word) w1
0x6 Pointer write w1
0x7 Boolean op w1
0x8 Multi-write (byte/halfword) w1
0xD Conditional (single-line) w1
0xE Conditional (multi-skip) w2 (top nibble typically 0..3)
other Misc/other best effort

For full-line templates, Clippy preserves the opcode, parameters, values, and // comment, and replaces only the detected address field. For 0xD, it rewrites the first-word address only.

Examples

Default template

ppsspp-cwcheat-clippy

Clipboard: 08801234

_L 0x20001234 0x01234567 // clippy-automated: set address to 0x01234567

Full cwCheat line as template

ppsspp-cwcheat-clippy "_L 0x2003AD01 0x77777777 // speed hack 1"

Clipboard: 0x08804567

_L 0x20004567 0x77777777 // speed hack 1

Opcode-only template for 0xE

ppsspp-cwcheat-clippy "E // skip if =="

Clipboard: 08801234

_L 0xE0000000 0x00001234 // skip if ==

Invalid address

Clipboard: 0x087FFFFF

*Invalid PSP address: 0x087FFFFF (PSP address below base)

Troubleshooting

  • Nothing happens when I copy an address: use 088xxxxx ... 187xxxxx or 0x..., and copy it again if the clipboard did not change.
  • Linux clipboard errors: install wl-clipboard for Wayland, or xclip/xsel for X11.
  • Clipboard content gets overwritten: expected; Clippy copies the generated cheat line for quick pasting.

Credits

  • Author: Tim Abdiukov
  • Thanks to the PPSSPP and cwCheat communities for documentation and examples.

Release files for ppsspp-cwcheat-clippy 0.6.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ppsspp-cwcheat-clippy 0.6.1
File Size Uploaded
ppsspp_cwcheat_clippy-0.6.1.tar.gz 13.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ppsspp-cwcheat-clippy 0.6.1
File Interpreter ABI Platform
ppsspp_cwcheat_clippy-0.6.1-py3-none-any.whl Python 3 none any Details

Total release size: 26.6 kB

Release files / ppsspp_cwcheat_clippy-0.6.1.tar.gz

Download URL ppsspp_cwcheat_clippy-0.6.1.tar.gz
Size 13.3 kB
Tags Source
SHA-256 checksum
How to use checksums
f6cdf017013b8656e14ca8215eda04d5a0d1ee538e9a4a4e6cd4708bba323bc6
BLAKE2b-256 checksum
How to use checksums
54ce23681b358ffc8baa0a96d2b9b4417e946ea9287be90e74c08e5089ac7884
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release files / ppsspp_cwcheat_clippy-0.6.1-py3-none-any.whl

Download URL ppsspp_cwcheat_clippy-0.6.1-py3-none-any.whl
Size 13.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c64d151fff58009b011cb0b64dea8921760aa9eb9c29a36228cf295a2a171ffe
BLAKE2b-256 checksum
How to use checksums
883a324d130a3632dbc30ce83809faba0ea58148a790b735f3da07ff279c1caf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release history Release notifications | RSS feed

This release

0.6.1 This release

2 release files

0.6.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page