1
0
Files
h8-536-decoder/docs/pt2-panel-atlas.md
2026-05-28 10:12:08 +10:00

17 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.

Run result notes from captures/panel-atlas-rom-button-output-candidates-v1-webcam-shots/:

Case Frame Selector/value Visible result
001 00 00 13 40 00 09 0x0013 = 0x4000 IRIS/M.BLACK LINK
002 00 00 13 80 00 C9 0x0013 = 0x8000 SLAVE
003 00 00 15 80 00 CF 0x0015 = 0x8000 CALL and red tally
004 00 00 17 80 00 CD 0x0017 = 0x8000 BARS
005 00 01 90 80 00 4B 0x0110 = 0x8000 KNEE AUTO
006 00 00 1A 08 08 40 0x001A = 0x0808 MONITOR ENC
007 00 00 1A 20 20 40 0x001A = 0x2020 MONITOR B
008 00 00 1A 40 40 40 0x001A = 0x4040 MONITOR G
009 00 00 1A 80 80 40 0x001A = 0x8080 MONITOR R
010 00 00 6B 80 00 B1 0x006B = 0x8000 STANDARD
011 00 01 03 00 04 5C 0x0083 = 0x0004 IRIS AUTO, SHUTTER OFF, MASTER GAIN HP
012 00 01 03 40 00 18 0x0083 = 0x4000 IRIS AUTO, SHUTTER OFF, MASTER GAIN 0
013 00 01 03 20 00 78 0x0083 = 0x2000 IRIS AUTO, SHUTTER OFF, MASTER GAIN 3
014 00 01 0F 80 00 D4 0x008F = 0x8000 IRIS AUTO, SHUTTER begins with 1...
015 00 01 0F 20 00 74 0x008F = 0x2000 IRIS AUTO, SHUTTER 00.0
016 00 01 0F 08 00 5C 0x008F = 0x0800 IRIS AUTO, SHUTTER EVS
017 00 01 0F 10 00 44 0x008F = 0x1000 IRIS AUTO, SHUTTER OFF
018 00 01 13 10 20 78 0x0093 = 0x1020 BLACK/FLARE MANUAL, white balance MANUAL
019 00 01 13 40 40 48 0x0093 = 0x4040 BLACK/FLARE AUTO, white balance AUTO
020 00 01 13 80 40 88 0x0093 = 0x8040 BLACK/FLARE AUTO, white balance PRESET
021 00 01 13 00 20 68 0x0093 = 0x0020 BLACK/FLARE MANUAL, white balance MANUAL
022 00 01 13 00 40 08 0x0093 = 0x0040 BLACK/FLARE AUTO, white balance MANUAL
023 00 01 1A 08 00 49 0x009A = 0x0800 no panel change observed
024 00 01 37 20 00 4C 0x00B7 = 0x2000 no panel change observed

The run directory contains 28 candidate photos. The user-supplied ordered notes covered the first 24, so cases 025-028 still need visual review before assigning meanings:

Case Frame Selector/value Candidate
025 00 01 39 40 00 22 0x00B9 = 0x4000 F6DC.7 handler value candidate
026 00 01 44 80 00 9F 0x00C4 = 0x8000 F6D4.0 bundle selector candidate
027 00 01 46 80 00 9D 0x00C6 = 0x8000 F6D4.0 bundle selector candidate
028 00 01 78 80 00 A3 0x00F8 = 0x8000 F6D4.1 handler candidate

Key refinements from this run:

  • 0x001A is now best labeled as the MONITOR selector cluster: ENC, B, G, and R appeared cleanly from the four packed values.
  • 0x006B = 0x8000 is the first clean STANDARD lamp trigger.
  • 0x0083 is a MASTER GAIN/status display word, with values observed for HP, 0, and 3, while also lighting IRIS AUTO and showing SHUTTER OFF.
  • 0x008F carries local shutter display/value states beyond the earlier EVS/OFF bits.
  • 0x0093 now has stronger white-balance plus BLACK/FLARE field mapping: high/mid bit combinations select WB AUTO/PRESET/MANUAL and BLACK/FLARE AUTO/MANUAL together.

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.