cleanup: genericize hardcoded dev-machine paths in tracked docs/tools

Replace absolute F:/C: paths with repo-relative (../TombaRecomp, bios/, beetle-psx/)
or placeholders (<desktop>/<psxref>/<nesrecomp>/<psxrecomp-v4>) across accuracy docs,
WIDESCREEN/SHADOW/RECURSION_BUG/config_schema/ISSUES/README, and tools/*.py|.ps1.
Removed a personal C:\Users\Matthew\Desktop path (ISSUES.md). Left CLAUDE.md/PLAN.md
sibling-project + version-history paths intact (intentional layout documentation).
This commit is contained in:
Matthew Stanley
2026-07-06 11:51:36 -07:00
parent 9b54441a8a
commit 60801820fd
20 changed files with 35 additions and 35 deletions
+2 -2
View File
@@ -557,8 +557,8 @@ fringe on them.
Tooling: `tools/crop_launcher_assets.ps1` (crop + knockout),
`tools/gen_launcher_assets.ps1` (procedural check/verdict icons),
`tools/shot_launcher.ps1` (screenshot the GL launcher window). Mockup
source: `C:\Users\Matthew\Desktop\ef772e04-a7db-4ecd-98bb-eb75a01de0a6.png`
(1448×1086). Pure-cosmetic; does not block Phase 4/5 wiring.
source: a local mockup PNG (1448×1086). Pure-cosmetic; does not block
Phase 4/5 wiring.
---
+1 -1
View File
@@ -165,7 +165,7 @@ Known follow-up work:
For the current game milestone, build and run the sibling TombaRecomp project:
```sh
cd F:/Projects/TombaRecomp
cd ../TombaRecomp
cmake --build build -j16
./build/psx-runtime.exe --game game.toml
```
+2 -2
View File
@@ -219,12 +219,12 @@ Runtime-only changes (everything except `sprite_tag_funcs` / cull-widen) just
need a rebuild:
```
PATH=/c/msys64/mingw64/bin:$PATH
cmake --build F:/Projects/psxrecomp/TombaRecomp/build-stable --target psx-runtime -j16
cmake --build ../TombaRecomp/build-stable --target psx-runtime -j16
```
Changes that emit into generated C (`sprite_tag_funcs`, future cull-widen) need
a regen first (see `memory/regen_build_recipe.md`):
```
F:/Projects/psxrecomp/psxrecomp/recompiler/build/psxrecomp-game.exe --config game.toml
recompiler/build/psxrecomp-game.exe --config game.toml
```
`build-stable` is RelWithDebInfo + debug tools (TCP port 4470) + launcher ON.
Always `taskkill /F /IM psx-runtime.exe` before relaunching.
+1 -1
View File
@@ -1,7 +1,7 @@
# Axis 5 — MDEC (Motion Decoder / FMV) accuracy cross-reference
Scope: `runtime/src/mdec.c` (our impl) vs the in-tree Beetle/Mednafen oracle
`F:\Projects\psxrecomp\psxrecomp\beetle-psx\mednafen\psx\mdec.cpp`, plus nocash
`beetle-psx/mednafen/psx/mdec.cpp`, plus nocash
psx-spx "Macroblock Decoder (MDEC)". READ-ONLY analysis; no source/build touched.
References below cite `mdec.c:NN` for ours and `mdec.cpp:NN` for Beetle.
+1 -1
View File
@@ -2,7 +2,7 @@
Cross-reference of `runtime/src/sio.c` (+ `main.cpp` pad driver, `memcard.c`)
against the in-tree Beetle/Mednafen oracle
(`F:\Projects\psxrecomp\psxrecomp\beetle-psx\mednafen\psx\`:
(`beetle-psx/mednafen/psx/`:
`frontio.cpp`, `input/dualshock.cpp`, `input/gamepad.cpp`, `input/memcard.cpp`)
and nocash psx-spx "Controllers and Memory Cards".
+1 -1
View File
@@ -5,7 +5,7 @@ oracle and nocash psx-spx.
- **Our impl:** `runtime/src/spu.c` (799 LOC) + `runtime/src/spu_shadow.c` (float
resample shadow, opt-in, verify-only — irrelevant to hardware accuracy).
- **Oracle:** `F:/Projects/psxrecomp/psxrecomp/beetle-psx/mednafen/psx/spu.cpp`
- **Oracle:** `beetle-psx/mednafen/psx/spu.cpp`
(1664 LOC, `PS_SPU`).
- **Spec:** nocash psx-spx "Sound Processing Unit (SPU)".
+2 -2
View File
@@ -196,7 +196,7 @@ No stubs, no HLE, never edit generated C; the fix is in the recompiler/runtime.
## 6. Build & run (this project)
```
cd /f/Projects/psxrecomp/TombaRecomp
cd ../TombaRecomp
export PATH=/c/msys64/mingw64/bin:$PATH TMP=/c/msys64/tmp TEMP=/c/msys64/tmp
# regen tools + BIOS + game (generated/ is gitignored; off master tip):
cmake --build ../psxrecomp/recompiler/build --target psxrecomp-game psxrecomp-bios -j8
@@ -580,7 +580,7 @@ idles indefinitely, **USER-CONFIRMED** — and tips the per-frame loop
SYMPTOM; the time-based divergence is the ROOT. Every soak so far was **us-vs-us**; we
have never diffed against real hardware over the idle window.
**NEXT = the oracle.** psxref (`F:\Projects\psxref`, Beetle PSX, TCP **4380**, shares
**NEXT = the oracle.** psxref (`<psxref>`, Beetle PSX, TCP **4380**, shares
`card1.mcd`; see [[psxref_oracle]] / `memory/psxref_oracle.md`). Run BOTH our recomp
and psxref idle (**turbo** if possible, to reach ~frame 50k in well under 14 min wall
clock) and find the **FIRST** state / control-flow divergence around frame ~50k — that
+3 -3
View File
@@ -2,15 +2,15 @@
Backport of the gbarecomp "verified-enhancement" QoL layer to psxrecomp.
All work lives on the `feat/shadow-enhancements` branch / `_shadow_psxrecomp`
worktree (sibling of the core repo `F:\Projects\psxrecomp\psxrecomp`, branched
worktree (sibling of the core repo `psxrecomp`, branched
off `master`). It does not touch the in-flight `feat/gl-renderer`,
`feat/mmx6-input`, `dev/ape-escape`, or any other branch/worktree.
## Which PSX core / language / build
- **Core chosen:** `F:\Projects\psxrecomp\psxrecomp` — the real git repo
- **Core chosen:** `psxrecomp` — the real git repo
(`origin git@github.com:mstan/psxrecomp.git`, default branch `master`, current
to 2026-06-10). `F:\Projects\psxrecomp-v4` is a stale stub (symlink to
to 2026-06-10). `<psxrecomp-v4>` is a stale stub (symlink to
`psxrecomp/duckstation` + an empty `recompiler/build`), NOT a maintained core.
- **Language:** runtime is **C99** (`spu.c`, `gpu.c`, …) with a little C++17
(`main.cpp`, `gte.cpp`). All shadow code is written in **C** to match the
+1 -1
View File
@@ -8,7 +8,7 @@ Consumed by:
Examples:
- `bios/SCPH1001.toml` — BIOS-only config (no game; psx-runtime targets this)
- `F:/Projects/TombaRecomp/game.toml` — game config (tomba-runtime targets this)
- `../TombaRecomp/game.toml` — game config (tomba-runtime targets this)
## How configs combine
+2 -2
View File
@@ -2,8 +2,8 @@
dispatch_ring entries, last 5 unknown_dispatch entries, last 30
dirty_block_log entries. Highlight the relevant ones for the
0xBFC09790 caller investigation."""
import json
with open(r'F:\Projects\psxrecomp\psx_last_run_report.json') as f:
import sys, json
with open(sys.argv[1] if len(sys.argv) > 1 else 'psx_last_run_report.json') as f:
r = json.load(f)
print(f"reason: {r.get('reason')}")
+1 -1
View File
@@ -1,5 +1,5 @@
import struct, os, sys
p = sys.argv[1] if len(sys.argv) > 1 else 'F:/Projects/TombaRecomp/tomba/SCUS_942.36'
p = sys.argv[1] if len(sys.argv) > 1 else '../TombaRecomp/tomba/SCUS_942.36'
with open(p, 'rb') as f:
h = f.read(0x800)
magic = h[:8]
+3 -3
View File
@@ -11,7 +11,7 @@ with a trailing pad/nop, but we accept either stride.
import struct, sys, os
BIOS_BASE = 0x80010000
PATH = sys.argv[1] if len(sys.argv) > 1 else 'F:/Projects/TombaRecomp/tomba/SCUS_942.36_no_header'
PATH = sys.argv[1] if len(sys.argv) > 1 else '../TombaRecomp/tomba/SCUS_942.36_no_header'
# Standard PSX BIOS function names. Source: docs/psx_bios_disasm.txt + nocash.
A0 = {
@@ -150,12 +150,12 @@ for a0, kind in seen_sc:
print(f" syscall a0=0x{a0:X} {kind:30s} ({cnt} sites)")
# Persist to seeds dir for later use by the audit
out_dir = 'F:/Projects/TombaRecomp/seeds'
out_dir = '../TombaRecomp/seeds'
os.makedirs(out_dir, exist_ok=True)
out = os.path.join(out_dir, 'tomba_bios_thunks.txt')
with open(out, 'w') as f:
f.write(f"# Tomba PSX BIOS thunk inventory\n")
f.write(f"# Source: F:/Projects/TombaRecomp/tomba/SCUS_942.36_no_header\n")
f.write(f"# Source: ../TombaRecomp/tomba/SCUS_942.36_no_header\n")
f.write(f"# Pattern: li t2, 0x{{A0|B0|C0}}; jr t2; li t1, FN (PSY-Q libapi/libetc style)\n")
f.write(f"# Total thunks: {len(results)}\n\n")
for vec in ('A', 'B', 'C'):
+2 -2
View File
@@ -25,9 +25,9 @@ import socket, subprocess, os, sys, time, argparse
# build (e.g. a Tomba regression) without editing this file. Defaults = MMX6.
# COSIM_EXE = path to that game's build-cosim/psx-cosim.exe
# COSIM_GAME = path to that game's game.toml
EXE = os.environ.get("COSIM_EXE", r"F:\Projects\psxrecomp\MegaManX6Recomp\build-cosim\psx-cosim.exe")
EXE = os.environ.get("COSIM_EXE", r"../MegaManX6Recomp\build-cosim\psx-cosim.exe")
CWD = os.environ.get("COSIM_CWD", os.path.dirname(EXE))
GAME = os.environ.get("COSIM_GAME", r"F:\Projects\psxrecomp\MegaManX6Recomp\game.toml")
GAME = os.environ.get("COSIM_GAME", r"../MegaManX6Recomp\game.toml")
LOGDIR = os.path.join(CWD, "cosim-logs")
def tail_file(path, max_bytes=8192):
+2 -2
View File
@@ -6,8 +6,8 @@
# interior dark details (disc PlayStation logo, controller buttons, the centre
# hole) are preserved. Logo: simple global luminance key (thin bright glyphs).
Add-Type -AssemblyName System.Drawing
$src = "C:\Users\Matthew\Desktop\ef772e04-a7db-4ecd-98bb-eb75a01de0a6.png"
$out = "F:\Projects\psxrecomp\psxrecomp\runtime\launcher\assets\img"
$src = "<desktop>/ef772e04-a7db-4ecd-98bb-eb75a01de0a6.png"
$out = "runtime\launcher\assets\img"
$mock = [System.Drawing.Bitmap]::FromFile($src)
function Get-Crop($x,$y,$w,$h) {
+2 -2
View File
@@ -13,7 +13,7 @@ PSXRecomp v4 uses a patched build of [stenzek/duckstation](https://github.com/st
## First-time setup
```bash
cd /f/Projects/psxrecomp-v4
cd <psxrecomp-v4>
bash tools/duckstation/setup.sh # ~5 min: clone submodule + fetch/extract deps + apply patch
bash tools/duckstation/build.sh # ~15-30 min: compile duckstation-qt Release x64
```
@@ -41,7 +41,7 @@ The pinned base SHA lives in one place only: `UPSTREAM_BASE` at the top of `tool
- Keeps the upstream source untracked in v4's git history — no 2.1GB of upstream code in our blame.
- Keeps *our* 1200-line patch reviewable as a single text diff in `tools/duckstation/` — in-tree, versioned, diffable across sessions.
- Matches the nestopia setup in sibling project `F:\Projects\nesrecomp\runner\nestopia_cmake.cmake` + `runner/nestopia_oracle.patch`. Same mental model: submodule upstream, patch on top, auto-apply at setup time.
- Matches the nestopia setup in sibling project `<nesrecomp>/runner\nestopia_cmake.cmake` + `runner/nestopia_oracle.patch`. Same mental model: submodule upstream, patch on top, auto-apply at setup time.
- No private/public GitHub fork to maintain or keep in sync.
## Protocol parity with native runtime
+1 -1
View File
@@ -3,7 +3,7 @@
# logo, verification icons). Swap with real renders later — the <img>/decorator
# pipeline (stb_image PNG loader) is the same either way.
Add-Type -AssemblyName System.Drawing
$out = "F:\Projects\psxrecomp\psxrecomp\runtime\launcher\assets\img"
$out = "runtime\launcher\assets\img"
if (-not (Test-Path $out)) { New-Item -ItemType Directory -Force $out | Out-Null }
function New-Canvas($w, $h) {
+2 -2
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
import sys
rom = open('F:/Projects/psxrecomp/bios/SCPH1001.BIN','rb').read()
rom = open('../bios/SCPH1001.BIN','rb').read()
matches = []
for rt in range(32):
@@ -46,7 +46,7 @@ for addr, rt, op, rs, rt_out, imm, nw, offset in matches:
# Read dispatch.c:
print("\n--- Functions containing 0xF2000003 sites ---")
import re
dispatch = open('F:/Projects/psxrecomp/generated/SCPH1001_dispatch.c').read()
dispatch = open('../generated/SCPH1001_dispatch.c').read()
entries = re.findall(r'\{\s*0x([0-9A-F]+)u,\s*func_([0-9A-F]+)\s*\}', dispatch)
# Only keep those in code range (phys 0x1FC00000+)
fn_list = sorted([(int(a,16), name) for a,name in entries])
+1 -1
View File
@@ -1,4 +1,4 @@
param([string]$Out = "F:\Projects\psxrecomp\TombaRecomp\build-clean\launcher_shot.png")
param([string]$Out = "../TombaRecomp\build-clean\launcher_shot.png")
$p = Get-Process psx-runtime -ErrorAction SilentlyContinue | Where-Object { $_.MainWindowHandle -ne 0 } | Select-Object -First 1
if (-not $p) { Write-Output "no window"; exit 1 }
Write-Output ("hwnd=" + $p.MainWindowHandle + " title=" + $p.MainWindowTitle)
+4 -4
View File
@@ -12,11 +12,11 @@ Usage: python tomba_loadtest.py <exe> <game.toml> [port]
"""
import sys, time, subprocess, socket, json
EXE = sys.argv[1] if len(sys.argv)>1 else r"F:/Projects/psxrecomp/TombaRecomp/build-codex-ape-fw/psx-runtime.exe"
EXE = sys.argv[1] if len(sys.argv)>1 else r"../TombaRecomp/build-codex-ape-fw/psx-runtime.exe"
TOML = sys.argv[2] if len(sys.argv)>2 else "game-loadtest.toml"
PORT = int(sys.argv[3]) if len(sys.argv)>3 else 4470
BIOS = r"F:/Projects/psxrecomp/psxrecomp/bios/SCPH1001.BIN"
CWD = r"F:/Projects/psxrecomp/TombaRecomp"
BIOS = r"bios/SCPH1001.BIN"
CWD = r"../TombaRecomp"
NONE,RIGHT,CROSS,START = 0xFFFF,0xFFDF,0xBFFF,0xFFF7
def q(cmd, **kw):
@@ -70,7 +70,7 @@ def nonblack():
return nz/tot if tot else 0
def shot(name):
b=f"F:/Projects/psxrecomp/_scratch/{name}.bmp"; q("screenshot_file",path=b)
b=f"../_scratch/{name}.bmp"; q("screenshot_file",path=b)
try:
from PIL import Image; Image.open(b).save(b.replace(".bmp",".png"))
except Exception: pass
+1 -1
View File
@@ -64,5 +64,5 @@ def validate(path, expect_remaps):
return cfg
bios = validate(ROOT / "bios" / "SCPH1001.toml", expect_remaps=2)
tomba = validate(Path("F:/Projects/TombaRecomp/game.toml"), expect_remaps=0)
tomba = validate(Path("../TombaRecomp/game.toml"), expect_remaps=0)
print("\nOK: both configs parse and validate.")