diff --git a/ISSUES.md b/ISSUES.md index 3179caa3..5626ded3 100644 --- a/ISSUES.md +++ b/ISSUES.md @@ -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. --- diff --git a/README.md b/README.md index ae73204c..3752f00d 100644 --- a/README.md +++ b/README.md @@ -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 ``` diff --git a/WIDESCREEN.md b/WIDESCREEN.md index f87b9b91..c8eca015 100644 --- a/WIDESCREEN.md +++ b/WIDESCREEN.md @@ -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. diff --git a/accuracy/axis5_mdec.md b/accuracy/axis5_mdec.md index de637551..e7ad4b21 100644 --- a/accuracy/axis5_mdec.md +++ b/accuracy/axis5_mdec.md @@ -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. diff --git a/accuracy/axis5_sio_controller.md b/accuracy/axis5_sio_controller.md index 5372cca4..2263f5f6 100644 --- a/accuracy/axis5_sio_controller.md +++ b/accuracy/axis5_sio_controller.md @@ -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". diff --git a/accuracy/axis5_spu.md b/accuracy/axis5_spu.md index 8cf61db2..9810e140 100644 --- a/accuracy/axis5_spu.md +++ b/accuracy/axis5_spu.md @@ -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)". diff --git a/docs/RECURSION_BUG.md b/docs/RECURSION_BUG.md index 455657fa..a084d4fa 100644 --- a/docs/RECURSION_BUG.md +++ b/docs/RECURSION_BUG.md @@ -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 (``, 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 diff --git a/docs/SHADOW_ENHANCEMENTS.md b/docs/SHADOW_ENHANCEMENTS.md index 2d2c3ae5..7f37272f 100644 --- a/docs/SHADOW_ENHANCEMENTS.md +++ b/docs/SHADOW_ENHANCEMENTS.md @@ -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). `` 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 diff --git a/docs/config_schema.md b/docs/config_schema.md index 0588ee30..22f85529 100644 --- a/docs/config_schema.md +++ b/docs/config_schema.md @@ -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 diff --git a/tools/_parse_crash.py b/tools/_parse_crash.py index e55047d2..32c39964 100644 --- a/tools/_parse_crash.py +++ b/tools/_parse_crash.py @@ -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')}") diff --git a/tools/_psx_header_dump.py b/tools/_psx_header_dump.py index 9edd822a..552a08f5 100644 --- a/tools/_psx_header_dump.py +++ b/tools/_psx_header_dump.py @@ -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] diff --git a/tools/_tomba_bios_thunks.py b/tools/_tomba_bios_thunks.py index 3bbc3d46..af82c627 100644 --- a/tools/_tomba_bios_thunks.py +++ b/tools/_tomba_bios_thunks.py @@ -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'): diff --git a/tools/cosim.py b/tools/cosim.py index e742188b..882e92e5 100644 --- a/tools/cosim.py +++ b/tools/cosim.py @@ -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): diff --git a/tools/crop_launcher_assets.ps1 b/tools/crop_launcher_assets.ps1 index 9f146b06..5ed50c6c 100644 --- a/tools/crop_launcher_assets.ps1 +++ b/tools/crop_launcher_assets.ps1 @@ -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 = "/ef772e04-a7db-4ecd-98bb-eb75a01de0a6.png" +$out = "runtime\launcher\assets\img" $mock = [System.Drawing.Bitmap]::FromFile($src) function Get-Crop($x,$y,$w,$h) { diff --git a/tools/duckstation/README.md b/tools/duckstation/README.md index 23f28abb..697dd041 100644 --- a/tools/duckstation/README.md +++ b/tools/duckstation/README.md @@ -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 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 `/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 diff --git a/tools/gen_launcher_assets.ps1 b/tools/gen_launcher_assets.ps1 index 24030c3b..e6b9d83c 100644 --- a/tools/gen_launcher_assets.ps1 +++ b/tools/gen_launcher_assets.ps1 @@ -3,7 +3,7 @@ # logo, verification icons). Swap with real renders later — the /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) { diff --git a/tools/scan_f2_sites.py b/tools/scan_f2_sites.py index 103a07ea..397aba22 100644 --- a/tools/scan_f2_sites.py +++ b/tools/scan_f2_sites.py @@ -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]) diff --git a/tools/shot_launcher.ps1 b/tools/shot_launcher.ps1 index 3622a8f4..2834f9bd 100644 --- a/tools/shot_launcher.ps1 +++ b/tools/shot_launcher.ps1 @@ -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) diff --git a/tools/tomba_loadtest.py b/tools/tomba_loadtest.py index cd7755ad..2010d41f 100644 --- a/tools/tomba_loadtest.py +++ b/tools/tomba_loadtest.py @@ -12,11 +12,11 @@ Usage: python tomba_loadtest.py [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 diff --git a/tools/verify_audit_schema.py b/tools/verify_audit_schema.py index b64aa18f..1cf8739e 100644 --- a/tools/verify_audit_schema.py +++ b/tools/verify_audit_schema.py @@ -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.")