1
0
Files
h8-536-decoder/docs/pt2-panel-atlas.md
2026-05-27 21:37:50 +10:00

14 KiB

PT2 Panel Atlas

This note tracks bench tests that intentionally drive visible panel outputs from PT2/command-0 table writes.

Scenario Files

Current compact atlas scenarios:

scenarios/panel-atlas-operator-lamps-v1.json
scenarios/panel-atlas-readout-status-v1.json
scenarios/panel-atlas-right-stack-isolation-v1.json
scenarios/panel-atlas-right-stack-fresh-latch-v1.json
scenarios/panel-atlas-standard-master-bit-sweep-v1.json
scenarios/panel-atlas-standard-master-neighbor-sweep-v2.json
scenarios/panel-atlas-standard-master-lower-neighbor-sweep-v3.json

Both are designed for webcam capture with the calibrated bench settings:

--parity E --camera-index 4 --snapshot-delays 0.5

Run: 2026-05-27

Logs:

captures/panel-atlas-operator-lamps-v1-webcam.txt
captures/panel-atlas-readout-status-v1-webcam.txt
captures/panel-atlas-right-stack-isolation-v1-webcam.txt
captures/panel-atlas-right-stack-fresh-latch-v1-webcam.txt
captures/panel-atlas-standard-master-bit-sweep-v1-webcam.txt
captures/panel-atlas-standard-master-neighbor-sweep-v2-webcam.txt
captures/panel-atlas-standard-master-lower-neighbor-sweep-v3-webcam.txt

Snapshots:

captures/panel-atlas-operator-lamps-v1-webcam-shots/
captures/panel-atlas-readout-status-v1-webcam-shots/
captures/panel-atlas-right-stack-isolation-v1-webcam-shots/
captures/panel-atlas-right-stack-fresh-latch-v1-webcam-shots/
captures/panel-atlas-standard-master-bit-sweep-v1-webcam-shots/
captures/panel-atlas-standard-master-neighbor-sweep-v2-webcam-shots/
captures/panel-atlas-standard-master-lower-neighbor-sweep-v3-webcam-shots/

Serial health:

Run RX frames TX frames Resync Dropped bytes
operator lamps 82 19 0 0
readout/status 76 16 0 0
right-stack isolation 115 26 0 0
right-stack fresh latch 20 12 0 0
standard/master bit sweep v1 144 34 0 0
standard/master neighbor sweep v2 188 47 0 0
standard/master lower-neighbor sweep v3 188 47 0 0

The compact and isolation runs stayed in the expected table-readback plus 02 00 02 00 00 5A CONNECT-OK response rhythm.

The fresh-latch run ended with one trailing unframed byte after the final send. There were no resync events or dropped bytes; this is consistent with the run ending while the next response frame was just beginning.

Confirmed Visible Effects

Far-Right Stack Reference

The physical far-right stack, top to bottom, is:

TALLY light, with camera number
STANDARD
MASTER
SLAVE
CAM POWER
BARS

Use these names instead of generic "right-side status" labels when reviewing webcam crops.

Readout/status run:

Frame Selector/value Visible effect
00 01 0F 08 00 5C E000[0x008F]=0x0800 SHUTTER display shows EUS/likely EVS; iris AUTO lamp is lit
00 01 0F 10 00 44 E000[0x008F]=0x1000 SHUTTER display shows OFF; iris AUTO lamp remains lit
00 01 13 80 00 C8 E000[0x0093]=0x8000 white-balance / black-flare lamp cluster changes, consistent with prior preset/manual observation
00 01 13 90 20 F8 E000[0x0093]=0x9020 black-flare manual-context candidate remains visible
00 01 13 90 FF 27 E000[0x0093]=0x90FF black-flare auto-context candidate remains visible
00 01 90 80 00 4B E000[0x0110]=0x8000 KNEE AUTO lamp lights

The 0x00B9 gate writes in this compact run did not light KNEE AUTO by themselves at the 0.5 s snapshot point. That matches the ROM model where 0x00B9.13 is more of a report-path gate, while 0x0110.15 is the stronger visible KNEE AUTO source.

Operator-lamp run:

Frame Selector/value Visible effect
00 00 13 80 00 C9 E000[0x0013]=0x8000 far-right SLAVE lamp lights, based on stack order and crop position
00 00 17 80 00 CD E000[0x0017]=0x8000 far-right bottom white BARS lamp lights
00 00 1A 80 00 C0 E000[0x001A]=0x8000 lower right white lamp appeared lit in the compact run, later refined as likely 0x0017 carryover

Right-stack isolation/fresh-latch refinement:

Frame Selector/value Visible effect
00 00 15 80 00 CF E000[0x0015]=0x8000 CALL lamp lights
00 00 15 00 00 4F E000[0x0015]=0x0000 CALL lamp clears
00 00 13 80 00 C9 E000[0x0013]=0x8000 far-right SLAVE lamp lights
00 00 13 00 00 49 E000[0x0013]=0x0000 SLAVE lamp clears
00 00 17 80 00 CD E000[0x0017]=0x8000 far-right bottom white BARS lamp lights
00 00 17 00 00 4D E000[0x0017]=0x0000 lamp remains lit; low write does not clear it
00 00 1A 80 00 C0 E000[0x001A]=0x8000 no independent BARS-lamp effect from fresh boot
00 00 07 80 00 DD / 00 00 07 00 00 5D E000[0x0007] high/low no clear visible delta from CONNECT-OK baseline

So 0x0017 is currently the strongest BARS lamp-on/latch selector. 0x001A should not be labeled as the same lamp source from the prior compact run; that was likely carryover after 0x0017 had latched the white lamp on. 0x0007 is still protocol-relevant because the real panel emits the matching CAM POWER event frame, but the host-write visible lamp mapping is not separated from the CONNECT-OK baseline yet.

ROM trace refinement: selector 0x0013 dispatches to H'2E06, reads current table word E800[0x0013] at H'E826, and maps bit 15 to SLAVE while bit 14 maps to IRIS/M.BLACK LINK. See docs/pt2-iris-mblack-link-rom-trace.md.

STANDARD/MASTER hunt:

Run Tested selector/value pocket Result
panel-atlas-standard-master-bit-sweep-v1 0x0012, 0x0013, 0x0014 with high-bit/high-nibble candidates no clean STANDARD or MASTER lamp trigger; positive SLAVE control worked
panel-atlas-standard-master-neighbor-sweep-v2 0x0010, 0x0011, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A high-nibble candidates no clean STANDARD or MASTER trigger
panel-atlas-standard-master-lower-neighbor-sweep-v3 0x0008 through 0x000F high-nibble candidates no clean STANDARD or MASTER trigger

The v2 sweep did show the far-right bottom BARS lamp/latch from the 0x0017 family when using non-0x8000 high-nibble values. The clearest transition is 00 00 17 40 00 0D (E000[0x0017]=0x4000) lighting the same bottom white BARS lamp that 0x0017=0x8000 can light. The lamp persisted after 0x0017=0x0000, matching the existing BARS latch behavior. Later 0x0018 rows are contaminated by that latch and need a fresh-boot isolation run before labeling 0x0018 as a separate BARS source.

Next Atlas Step

The next useful run is still a clear/ack/state-transition probe for the 0x0017 BARS latch, now including 0x0017=0x4000:

  • test likely sibling selectors around 0x0016, 0x0018, 0x0019, and 0x001A from a fresh boot after 0x0017 has latched on,
  • try command-7 repeat/ack and selector-zero refreshes to see whether the lamp clears through a state-machine transition rather than a simple low write,
  • test 0x0007 with an alternate baseline, because CONNECT OK already lights CAM POWER and masks any host-write lamp delta.
  • do not re-run 0x0008 through 0x0014 high-nibble values for STANDARD/MASTER unless the ROM trace points back there; the webcam sweeps did not show those lamps in that pocket.

ROM-Derived Button Output Sweep

To skip the physical RCP button-press side and directly test likely "on" states from ROM handlers, use:

.\.venv\Scripts\python.exe scripts\build_rom_button_output_sweep.py
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\panel-atlas-rom-button-output-candidates-v1.json --parity E --quiet-console --log captures\panel-atlas-rom-button-output-candidates-v1-webcam.txt --result-json captures\panel-atlas-rom-button-output-candidates-v1-webcam-result.json --snapshot-dir captures\panel-atlas-rom-button-output-candidates-v1-webcam-shots --camera-index 4 --snapshot-delays 0.5

This scenario power-cycles before every candidate, seeds CONNECT: OK, sends one command-0 selector/value from the ROM-derived candidate list, and captures a single webcam image 0.5 s later. It is intentionally slower than a continuous sweep but should avoid most latch/carryover ambiguity.

Broad Visual Sweep Workflow

For exploratory lamp/readout mining, use the generated big sweep rather than hand-writing thousands of frames:

.\.venv\Scripts\python.exe scripts\build_panel_visual_sweep.py scenarios\panel-atlas-big-visual-sweep-0001-017f-highbits.json --start 0x0001 --end 0x017F --values 0x8000,0x4000,0x2000,0x1000,0x0800 --power-cycle-every 32 --ok-every 8 --listen 0.65 --clear-listen 0.15 --ok-listen 0.30

Run the generated scenario with webcam snapshots:

.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\panel-atlas-big-visual-sweep-0001-017f-highbits.json --parity E --quiet-console --log captures\panel-atlas-big-visual-sweep-0001-017f-highbits-webcam.txt --result-json captures\panel-atlas-big-visual-sweep-0001-017f-highbits-webcam-result.json --snapshot-dir captures\panel-atlas-big-visual-sweep-0001-017f-highbits-webcam-shots --camera-index 4 --snapshot-delays 0.5

The generated high-bit sweep covers selectors 0x0001 through 0x017F with five candidate values per selector, for 1,915 candidate snapshots. It power cycles every 32 selectors to reduce latch contamination. Selector zero is omitted because it controls the CONNECT OK baseline.

After the run, create labeled review sheets:

.\.venv\Scripts\python.exe scripts\make_panel_sweep_contact_sheets.py captures\panel-atlas-big-visual-sweep-0001-017f-highbits-webcam-shots --output-dir captures\panel-atlas-big-visual-sweep-0001-017f-highbits-sheets --only-candidates --crop panel --cols 4 --rows 5 --thumb-width 360

If a sheet shows a visible change, the image label has the exact trigger form: candidate_XXXX_YYYY means command-0 wrote E000[0xXXXX]=0xYYYY. Use that selector/value in a smaller fresh-boot isolation scenario.

Broad Sweep Findings

Run:

captures/panel-atlas-big-visual-sweep-0001-017f-highbits-webcam.txt
captures/panel-atlas-big-visual-sweep-0001-017f-highbits-webcam-result.json
captures/panel-atlas-big-visual-sweep-0001-017f-highbits-webcam-shots/

Serial health:

RX frames TX frames Resync Dropped bytes Snapshots
706 2372 0 0 1916

User-reviewed new visible hits from the broad sweep:

Candidate label Frame Selector/value Reported visible effect
candidate_0013_4000 00 00 13 40 00 09 E000[0x0013]=0x4000 IRIS/M.BLACK LINK area/lamp
candidate_0024_8000 00 00 24 80 00 FE E000[0x0024]=0x8000 LCD selector button/lamp
candidate_0082_8000 00 01 02 80 00 D9 E000[0x0082]=0x8000 IRIS readout shows OP
candidate_0082_4000 00 01 02 40 00 19 E000[0x0082]=0x4000 IRIS readout shows 1.4
candidate_0083_8000 00 01 03 80 00 D8 E000[0x0083]=0x8000 MASTER GAIN readout shows -3
candidate_0093_8000 00 01 13 80 00 C8 E000[0x0093]=0x8000 white-balance PRESET lamp
candidate_0093_4000 00 01 13 40 00 08 E000[0x0093]=0x4000 white-balance AUTO lamp
candidate_0093_2000 00 01 13 20 00 68 E000[0x0093]=0x2000 white-balance MANUAL lamp

The serial log shows immediate command-4 table readback frames for these writes, so the RCP accepted the selector updates.

Fresh-boot isolation scenario:

.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\panel-atlas-big-hits-isolation-v1.json --parity E --quiet-console --log captures\panel-atlas-big-hits-isolation-v1-webcam.txt --result-json captures\panel-atlas-big-hits-isolation-v1-webcam-result.json --snapshot-dir captures\panel-atlas-big-hits-isolation-v1-webcam-shots --camera-index 4 --snapshot-delays 0.5

Create review sheets for that isolation run:

.\.venv\Scripts\python.exe scripts\make_panel_sweep_contact_sheets.py captures\panel-atlas-big-hits-isolation-v1-webcam-shots --output-dir captures\panel-atlas-big-hits-isolation-v1-sheets --crop panel --cols 3 --rows 4 --thumb-width 420

Fresh-boot isolation results:

Frame Selector/value Confirmed visible effect
00 00 13 40 00 09 E000[0x0013]=0x4000 IRIS/M.BLACK LINK lamp
00 00 24 80 00 FE E000[0x0024]=0x8000 LCD selector-button lamp
00 00 24 00 00 7E E000[0x0024]=0x0000 same LCD selector-button lamp remained visible at 0.5 s
00 01 02 80 00 D9 E000[0x0082]=0x8000 IRIS readout OP
00 01 02 40 00 19 E000[0x0082]=0x4000 IRIS readout 1.4
00 01 02 00 00 59 E000[0x0082]=0x0000 IRIS readout blank
00 01 03 80 00 D8 E000[0x0083]=0x8000 IRIS AUTO lamp, SHUTTER OFF, MASTER GAIN -3
00 01 03 00 00 58 E000[0x0083]=0x0000 same IRIS AUTO / SHUTTER OFF / MASTER GAIN -3 state remained visible at 0.5 s
00 01 13 80 00 C8 E000[0x0093]=0x8000 BLACK/FLARE MANUAL plus white-balance PRESET
00 01 13 40 00 08 E000[0x0093]=0x4000 BLACK/FLARE MANUAL plus white-balance AUTO
00 01 13 20 00 68 E000[0x0093]=0x2000 BLACK/FLARE MANUAL plus white-balance MANUAL
00 01 13 00 00 48 E000[0x0093]=0x0000 BLACK/FLARE MANUAL plus white-balance MANUAL

Interpretation:

  • 0x0082 is a direct IRIS display/status selector. Clearing it blanks the IRIS readout, so this one behaves like a simple display source.
  • 0x0083=0x8000 drives a combined state: MASTER GAIN -3, SHUTTER OFF, and IRIS AUTO. Clearing the selector did not visibly clear that state in the isolation run, so it may be latched or copied into another display bank.
  • 0x0093 is now a confirmed white-balance mode selector with 0x8000=PRESET, 0x4000=AUTO, and 0x0000/0x2000=MANUAL under this test context. BLACK/FLARE MANUAL was also present for all tested 0x0093 states.
  • 0x0024=0x8000 lights an LCD selector-button lamp, but 0x0024=0x0000 did not clear it in this timing window.