ppsspp_watch_value
Watch a memory address for value changes by polling every N frames without pausing the CPU, recording old/new values and timestamps; a zero-pause alternative for hot-address debugging.
Instructions
PURPOSE: Value-change watch on an address — zero-pause alternative to a read watchpoint.
USAGE: session_id + address + mode + interval. Polls the value every interval_frames and records changes (old/new/frame/time). Pure reads: the CPU is never paused, so hot addresses are safe (storm-free).
BEHAVIOR: READ-ONLY. Polling loop; never mutates state; blocks ~duration_frames/60 seconds (cap 18000 frames).
RETURNS: {address, size, mode, samples, first_value, last_value, changes: [{frame, t_s, old, new}], change_count}.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Read width for change detection: 'u8', 'u16' or 'u32' (default u32). Must match how the watched value is meant to be read. | u32 |
| address | Yes | Address to watch, hex string (e.g. '0x08A0D000'). | |
| session_id | Yes | Active session ID. | |
| duration_frames | No | Total watch window in frames (cap 18000 ~ 5 min at 60fps). A-19: holds the per-session lock for the WHOLE window — concurrent tool calls on this session get SESSION_BUSY after ~5s; use short windows or poll repeatedly instead. | |
| interval_frames | No | Poll cadence in frames (60 = 1s wall clock). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| size | Yes | ||
| address | Yes | ||
| changes | Yes | ||
| samples | Yes | ||
| last_value | Yes | ||
| first_value | Yes | ||
| change_count | Yes |