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, and0x001Afrom a fresh boot after0x0017has 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
0x0007with an alternate baseline, because CONNECT OK already lights CAM POWER and masks any host-write lamp delta. - do not re-run
0x0008through0x0014high-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:
0x001Ais now best labeled as the MONITOR selector cluster:ENC,B,G, andRappeared cleanly from the four packed values.0x006B = 0x8000is the first clean STANDARD lamp trigger.0x0083is a MASTER GAIN/status display word, with values observed forHP,0, and3, while also lighting IRIS AUTO and showing SHUTTER OFF.0x008Fcarries local shutter display/value states beyond the earlier EVS/OFF bits.0x0093now 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:
0x0082is a direct IRIS display/status selector. Clearing it blanks the IRIS readout, so this one behaves like a simple display source.0x0083=0x8000drives a combined state: MASTER GAIN-3, SHUTTEROFF, 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.0x0093is now a confirmed white-balance mode selector with0x8000=PRESET,0x4000=AUTO, and0x0000/0x2000=MANUALunder this test context. BLACK/FLARE MANUAL was also present for all tested0x0093states.0x0024=0x8000lights an LCD selector-button lamp, but0x0024=0x0000did not clear it in this timing window.