Native test harness

The supplied licensed English1.2 runtime is required separately; it is
not redistributed here. The main measurements used a fresh copy for
each variant and exactly the same DOSBox/video/handle settings.

The tools directory contains the read-only sampler and UI drivers.
Within the original source workspace, compile the host sampler with:
  gcc -shared -fPIC -pthread slim-native-test/tools/native_probe.c -ldl -o slim-native-test/tools/native_probe-v5.so
The workspace launcher expects this at slim-native-test/tools.
Prepare a new target with tools/prepare.py NAME --geo FILE --ram 16.
It checks binary/build-metadata hash consistency and snapshots the
layout offsets. run_x11.py starts only the disposable target and an
owned Xvfb display, with the original SDL input helper.

For matched measurements use launch.py TARGET --perf, then
benchmark.py TARGET --repeats 3 --x 32 --y 20. These control coordinates
apply to a Perf-first native application window. finish_perf.py captures
the loaded Perf meter and closes Perf, then stops observer and emulator.
The after-perf-close snapshot is not a Chess memory-release claim.

Without Perf, use benchmark.py TARGET --repeats 1 --x 0 --y 0 and
lifecycle.py TARGET for ordinary Chess close/reopen checks.
All option names and numeric values require a separating space.

Before any emulator shutdown, touch TARGET/probe.csv.stop, wait for
the read-only observer to stop, then queue quit through control.py.
The launcher finally block terminates its own Xvfb.

The sampled BUSY interval excludes input-injection delays and final
board repaint. Sampler scheduling is nominal 2ms, not a hard precision
bound. Native Perf raw heap counters exclude its constant kernel bias;
loaded-minus-before fixed deltas cancel the bias. The retained compact
instruction proof documents those actual 1.2 offsets.
