re: the guest presents at 30 fps -- 60 units/s, and the port was right

Answered against the pre-registration committed before the capture.

Units per second was the last open number on the PRESS (A) plate, and both
prior measurements of it were wall-clock readings off an emulator that runs
the guest slow by an unknown factor. They disagreed by 2.9x, because a 30 Hz
guest at full speed and a 60 Hz guest at half speed look identical on a wall
clock.

The ruler here is not a clock. ADV.wmv declares 30.0000 fps in its own ASF
header, so a decoded movie frame is a tick the emulator's speed cannot
stretch. Presented frames per decoded movie frame is guest_fps/30 with no
wall clock in the chain.

  predicted  H_A 30 fps ->  60 units/s -> 1.0
             H_B 60 fps -> 120 units/s -> 2.0
  measured                                1.0000

Both pre-registered guards pass. Guard 2: a perfect repeating 3-buffer
cycle, 52 uses each (exactly 156/3), 2 chroma planes per luma on 156 of 156.
Guard 1: run lengths are 156 runs ALL of length 1 -- no smear, so the
dropped-movie-frame bias that would have pushed the answer toward 120 is
measurably absent rather than argued away.

So H_A. The port keeps its 60 and changes nothing.

REFUTES the live H3 hypothesis that 120 units/s explains the play-test's
late plate. That hypothesis was well-formed and attractive precisely because
it would have explained the complaint, which is why it needed a ruler that
is not a clock.

Which means finding 3 still has no cause. The strongest remaining candidate
is decoded rather than speculative: the plate's declared onset is t=214, not
t=236 -- a 22-unit fade, matching the T=22 the oracle confirmed by measuring
+23 alpha per presented frame on that element.

The pre-registered control could NOT be run: this logger build emits vb=
addresses, not vertex contents, so there was no alpha to check +34 against.
A weaker control is substituted and labelled -- the splash shader/blend
census, which validates the log's structure (what this measurement uses) and
not alpha extraction (which it does not).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jc4pciRArGHfxGGhEbwp5t
This commit is contained in:
sylph-decoder
2026-09-01 18:49:40 +00:00
parent f0185fba52
commit 27f81d6d91
5 changed files with 356 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
# Guest presentation cadence against ADV.wmv's declared 30.000 fps.
# One presented frame = one RESOLVE to dest=0x14570000 (595 of them here,
# against the logger's own FRAMES=600 budget, so the two agree).
presented frames in log : 595
movie luma draws : 156
movie spans frames : 439..594 (156 frames)
presented frames per movie fr: 1.0000
distinct luma bases : 3 ['0x11590000', '0x11720000', '0x118B0000']
uses of each : [('118B0000', 52), ('11720000', 52), ('11590000', 52)]
perfect repeating 3-cycle : True (pattern ['0x118B0000', '0x11720000', '0x11590000'])
chroma planes per luma draw : {2: 156} (YUV420 -> expect 2)
run lengths (frames holding one luma base):
1 frame(s): 156
RATIO = 1.0000 labels per movie frame
H_A 30 fps guest -> 60 units/s predicted 1.0 (band 0.85-1.15)
H_B 60 fps guest -> 120 units/s predicted 2.0 (band 1.70-2.30)
VERDICT: H_A
=> guest presents at 30 x 1.0000 = 30.00 fps ; units/s = 2 x that = 60.00
# CONTROL -- the splash era of this SAME log, frames 4..226.
# The PRE-REGISTERED control was the +34/frame alpha step. It could NOT be
# run: this logger build emits vb= addresses, not vertex contents. A weaker
# control is substituted and labelled as such -- the three splash pixel
# shaders and their blend states must reproduce.
# Committed, splash-draw-pass-census.txt, an INDEPENDENT boot:
# 0xE59B2B3DA4AA9008 blend=0x07010701 the sprite shader
# 0x2E372EA28CC404B7 blend=0x00010001 the clear
# 0x5773DC18083C4C20 blend=0x07010701 the black backdrop
# This capture:
# 0xE59B2B3DA4AA9008 blend=0x07010701 x446
# 0x2E372EA28CC404B7 blend=0x00010001 x223
# 0x5773DC18083C4C20 blend=0x07010701 x223
# Same three, same blends, on an independent boot. This validates the log's
# STRUCTURE -- frame delimitation, shader and blend fields -- which is what
# the cadence measurement uses. It does NOT validate alpha extraction, and
# the cadence measurement does not use alpha.