Download docs/research/QVM_ACCELERATION.md from nmarshall/urt-rs: direct link, hf CLI and curl.
- Browser
- Download file 7.14 kB
-
https://huggingface.co/nmarshall/urt-rs/resolve/main/docs/research/QVM_ACCELERATION.md
- Command line
-
hf download hf://nmarshall/urt-rs/docs/research/QVM_ACCELERATION.md
-
curl -L -o QVM_ACCELERATION.md https://huggingface.co/nmarshall/urt-rs/resolve/main/docs/research/QVM_ACCELERATION.md
Game-QVM command scaling and acceleration
RE-429–431 / F-181–183. qvm-acceleration.json retains complete helper40397/40275 partitions and a selected helper45461 caller slice. Reproduce with python3 scripts/analyze_qvm_acceleration.py; verify with python3 scripts/test_qvm_acceleration.py.
This follows view and mode position tails. All results use bounded synthetic instruction evaluation. No complete QVM, original executable, native callee or collision/physics system executes. Square-root returns are supplied from an ordinary finite math model rather than native trap106. Caller compositions use a supplied identity basis and post-friction velocity, evaluated scaling/acceleration slices and an evaluated position tail. Earlier mode effects remain omitted.
ACCEL-001 — Command-scale helper40397 (RE-429)
The helper reads three signed command bytes at+21/+22/+23 and computes their maximum absolute component. Zero maximum returns a zero float word without requesting a square root. Nonzero input requests encoded target-107 with the binary32 sum of integer component squares. Its return is supplied by the analysis as rounded binary32 square root.
Observed base-speed constants are binary32 words1130102784 (220) and1135214592 (340). The latter is selected only if all predicates hold:
- Command buttons+16 include mask256.
- Signed right byte is zero.
- Signed forward byte is strictly greater than80.
- Player-state+184 is strictly greater than10.
The returned scale is binary32 (speed * maximum_abs) / (supplied_length *127), with operation-level binary32 rounding. The field+184 and button256 meanings remain producer/consumer tasks; boost/sprint terminology is provisional. The helper uses literal speeds rather than reading the candidate speed word at player-state+52 in this partition.
256 probes cover signed endpoints including-128/-127, forward80/81, strafe/vertical combinations, button gating and field values10/11. An independent formula verifies exact float return words and square-root requests, including zero-input bypass. Byte-128 sign-extends to-128 and has magnitude128; normalization uses denominator127. This describes supplied bytes, not verified input-producer limits or legitimate maximum movement speed.
ACCEL-002 — Projection-based helper40275 (RE-430)
Arguments are a wish-direction vector, wish speed and acceleration coefficient, supplied through the QVM frame. The helper reads velocity at player-state+32/+36/+40 and fractional timestep at global35023928. Finite observed operations are:
- Compute the rounded dot product of velocity and wish direction.
- Compute
gap = wish_speed - projection. - Return unchanged if gap <=0.
- Otherwise compute
amount = acceleration * timestep * wish_speed, rounding after each multiply, and cap it downward to gap. - Add
amount * direction[i]to each velocity component, with separate multiply/add rounding.
This is a projection-gap acceleration rule, not a total-speed clamp. A velocity whose projection already meets or exceeds the wish speed is retained. Lateral components are not removed by this helper. Unit-vector quality, coefficient/timestep ranges and surrounding friction/collision/speed policy remain open; negative or exceptional legal domains are not established.
324 fixtures vary initial velocity, three wish directions, speeds0/100/220, coefficients0/10 and timesteps0/0.016/0.1. Independent dot/gap/amount/vector arithmetic predicts every result word and tests both early-return and capped/uncapped updates. The report records amount only when the update branch executes, avoiding assumptions about uninitialized local data.
ACCEL-003 — Partial caller composition through position (RE-431)
The selected helper45461 region45647–45885 requests helper40397 for command scale, builds a wish vector from supplied identity forward/right vectors and signed movement bytes, copies and normalizes it using a supplied square-root return, then multiplies original wish length by the evaluated command scale. It requests helper40275 with normalized direction, wish speed and a supplied coefficient word from global21200.
The analysis evaluates helper40275 in a separate synthetic local frame, applies its velocity stores and resumes the caller's unconditional position-update tail. Scale, acceleration and caller frames are explicitly disjoint; no real QVM CALL frames are created or unwound. The scale helper is evaluated against matching separately supplied command/button/meter data, not an executing address-space bridge.
48 compositions cover zero, axis, diagonal, signed-128, vertical and strafe commands, both button/field gates, and zero or already-high initial velocities. Source basis, post-friction velocity, coefficient10 and timestep0.016 are supplied. Every scale, normalized direction, wish speed, resulting velocity, position and recorded caller request is independently checked. Zero command can still integrate supplied residual velocity because earlier friction is omitted; this is not a complete mode behavior claim.
Actual native square-root implementation/return convention, basis generation, earlier helper45461 friction, other frame fields, collisions, callbacks, complete movement and original-runtime conformance remain open.
Evaluator and validation
The shared evaluator adds finite DIVF with explicit zero-divisor/nonfinite rejection, and a configurable synthetic local-frame base whose default remains unchanged. Tests verify that a child frame does not overwrite caller local words. General stack aliasing, exceptional division, floating-control state and actual QVM frame semantics are not recovered by this model.
Eight tests verify signed command scale and sqrt requests, strict boost boundaries/strafe exclusion, dot/gap/amount/full velocity, unchanged above-target projections, complete partial caller outputs/requests, source partitions, local-frame isolation and finite division failure domains. Prior report regeneration checks protect shared evaluator users.
RE-428 remains open for complete mode/native/runtime work. RE-432 must recover friction and surrounding velocity/speed policy, native sqrt106 ABI/service, field+184/button256 producers and legal movement/coefficient/timestep ranges, real basis/stack/callee/collision effects, complete mode/step composition and gameplay/macOS/Linux validation before Rust/Bevy/Solari compatibility claims. Packet/entity/player/snapshot/rendering milestones remain open.
Follow-up: friction policies recovers shared/mode-specific friction and bridges evaluated velocity into new partial-caller fixtures with source-image coefficient8. This report retains its supplied coefficient10/defaults; live configuration and full mode effects remain open.
Follow-up: resource update recovery identifies helper39595 reset/drain/recovery/counter policy and connects selected outputs to the command-scale resource>10 gate (RE-453–455). Complete mode ordering/state/native effects and resource semantics/legal domains remain open under RE-456.