From e565dfbbabc78ffbc95e6d2c1a86bd3c0035249b Mon Sep 17 00:00:00 2001 From: prosolis <5590409+prosolis@users.noreply.github.com> Date: Mon, 24 Aug 2026 18:19:54 -0700 Subject: [PATCH] Take the disc mount out of the source, so someone else's copy of the media works Three files hardcoded /media/reala-misaki/BDROM -- extract.py, 07_motion_survey.py and check.sh -- which made the pipeline unrunnable for anyone whose disc mounts anywhere else. DLX_BDROM now overrides it everywhere, defaulting to /media/$USER/BDROM, so this box is unchanged and another one works. Verified by running extract.py against a symlinked mount at a different path. check.sh's failure message names the path it looked at and the variable to set, instead of assuming udisks put it where this machine puts it. README gains a "Reproducing this" section: no media ships here and none of it is redistributable, so it says what you have to bring (the disc) and what is already packaged (vasm is vendored as a binary with its source tarball; the k-means is hand-rolled, so numpy and Pillow are the whole Python dependency). It also names the two gates that SKIP rather than fail -- the px68k second-core pass and the IPL ROM DMAC gate -- because both live outside this repo and a silent skip is worth reading as a skip. One trap called out rather than left to bite: scene selection is a hard-coded stream number, not a search. A different pressing that numbers its .m2ts files differently will extract the wrong footage and the green light will PASS on it. check.sh ALL GREEN. Claude-Session: https://claude.ai/code/session_01194oWYW8DQXK1SZ2DnChW6 --- README.md | 43 ++++++++++++++++++++++++++++++ tools/analysis/07_motion_survey.py | 6 +++-- tools/bench/check.sh | 10 +++++-- tools/encoder/extract.py | 9 +++++-- 4 files changed, 62 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 90e595a..8f14149 100644 --- a/README.md +++ b/README.md @@ -125,6 +125,49 @@ mounted) re-runs both display regression tests, the rate-control drift test, the display-path coherency counterexample and a 120-frame 68000 decode, then prints `ALL GREEN`. +## Reproducing this + +**No media ships in this repo, and none of it is redistributable.** Bring your +own Dragon's Lair Blu-ray. Everything else needed to rebuild every number and +every picture above is here or is packaged. + +You need: + +| | | +|---|---| +| the disc | loop-mounted read-only. `udisksctl loop-setup -r -f DRAGONS_LAIR.iso` — the tree was built against a decrypted UDF 2.x image (7-Zip cannot read UDF 2.x; use the loop mount) | +| `python3` | plus **numpy** and **Pillow**. Nothing else — the k-means is hand-rolled rather than pulling in sklearn | +| `ffmpeg` / `ffprobe` | frame extraction, and the README clips | +| **MAME** | tested on 0.277, with the `x68000` ROM set. The rigs drive it headless via `-autoboot_script` | +| vasm (m68k, Motorola syntax) | **vendored**: `tools/vasm/vasmm68k_mot` is a Linux x86-64 binary, with the source tarball beside it to rebuild elsewhere | + +Then: + +```sh +export DLX_BDROM=/path/to/your/mounted/bluray # if not /media/$USER/BDROM +./tools/bench/check.sh # ~3 min, prints ALL GREEN +``` + +`DLX_BDROM` is honoured by every tool that reads the disc. Two stages are +optional and **skip rather than fail** when their input is absent, because both +live outside this repo: + +- `PX68K=/path/to/px68k` — a px68k checkout, for the second-CPU-core gate. This + is the cheapest strong test in the tree (seconds, no MAME, no ROMs), and it is + what licenses the bus and cycle figures. +- `IPLROM=/path/to/iplrom.dat` — the X68000 IPL ROM, for the DMAC-configuration + gate (FINDINGS 52). Defaults to `~/mame/roms/iplrom.dat`. + +To rebuild the stills and clips in `docs/img/` you also need a paced recording +run — see the header of `tools/media/make_readme_media.py`. + +**Scene selection is a hard-coded stream number**, not a search: the gates use +stream `00020` and `00223` of the disc's 224 `.m2ts` files, which are the ones +FINDINGS §1 and §25 characterise. A different pressing may number them +differently, and if so the green light will extract the wrong footage rather +than fail — check that `tmp/fr_singe/` looks like the Singe encounter (which is +what the directory is named for) before trusting any figure. + ## Read first - **`docs/FINDINGS.md`** — measured hardware facts, content statistics, codec decision, and a section on measurement traps that produced three separate diff --git a/tools/analysis/07_motion_survey.py b/tools/analysis/07_motion_survey.py index 2bd438b..4aba082 100644 --- a/tools/analysis/07_motion_survey.py +++ b/tools/analysis/07_motion_survey.py @@ -13,10 +13,12 @@ window it picks then gets encoded for real. Usage: python3 tools/analysis/07_motion_survey.py 00223 [window_seconds] """ -import subprocess, sys +import subprocess, sys, os, getpass import numpy as np -STREAM_DIR = "/media/reala-misaki/BDROM/BDMV/STREAM" +# See tools/encoder/extract.py: DLX_BDROM overrides where the disc is mounted. +BDROM = os.environ.get("DLX_BDROM") or f"/media/{getpass.getuser()}/BDROM" +STREAM_DIR = f"{BDROM}/BDMV/STREAM" W, H, FPS = 96, 72, 12 def frames(stream): diff --git a/tools/bench/check.sh b/tools/bench/check.sh index da0e73c..0d8cad0 100755 --- a/tools/bench/check.sh +++ b/tools/bench/check.sh @@ -4,8 +4,14 @@ # exit means something drifted. set -e cd "$(dirname "$0")/../.." -[ -d /media/reala-misaki/BDROM ] || { - echo "Blu-ray not mounted. udisksctl loop-setup -r -f DRAGONS_LAIR.iso"; exit 2; } +# No media ships with this repo. Bring your own disc; DLX_BDROM overrides the +# mount point, and every tool that reads the disc honours the same variable. +DLX_BDROM=${DLX_BDROM:-/media/${USER:-$(id -un)}/BDROM} +export DLX_BDROM +[ -d "$DLX_BDROM" ] || { + echo "Blu-ray not mounted at $DLX_BDROM." + echo " udisksctl loop-setup -r -f DRAGONS_LAIR.iso" + echo " or set DLX_BDROM to where yours is mounted."; exit 2; } python3 tools/encoder/extract.py 00020 tmp/fr_00020 12 crop mkdir -p tmp/snap_verify tmp/snap256 diff --git a/tools/encoder/extract.py b/tools/encoder/extract.py index 4ee78ab..43c42a0 100644 --- a/tools/encoder/extract.py +++ b/tools/encoder/extract.py @@ -4,9 +4,14 @@ Source is 1920x1080 (16:9). The arcade original is 4:3, so we CENTER-CROP to 1440x1080 by default -- see docs/STATUS.md open question on framing. """ -import subprocess, sys, os, shutil +import subprocess, sys, os, shutil, getpass -STREAM_DIR = "/media/reala-misaki/BDROM/BDMV/STREAM" +# Where the Dragon's Lair Blu-ray is mounted. Nothing in this repo ships the +# media -- bring your own disc, loop-mount it read-only, and point DLX_BDROM at +# the mount if it is not where udisks puts it: +# udisksctl loop-setup -r -f DRAGONS_LAIR.iso +BDROM = os.environ.get("DLX_BDROM") or f"/media/{getpass.getuser()}/BDROM" +STREAM_DIR = f"{BDROM}/BDMV/STREAM" W, H = 256, 192 def duration(path):