1
0
Files
h8-536-decoder/docs/pt2-menu-state-machine.md
2026-05-26 16:38:32 +10:00

8.1 KiB

PT2 Menu State Machine

This is a focused reference for the ROM menu/display selection machinery that drives LCD pages and panel soft-key activity.

Page Dispatch

Primary display selector:

  • F732 holds the current display/page selector.
  • The high byte of F732 selects a page wrapper through 493E.
  • The low byte is used as a page-local substate/selection, commonly through F733.

Important dispatcher:

  • 48FA bridges table/report state into LCD page dispatch.
  • 493E[page] points at a wrapper.
  • Wrappers pass a local table pointer to 5FD2.

For COPY status:

  • F732=H'1903 selects page 0x19, substate 0x03, COPY IN PROGRESS.
  • F732=H'1904 selects page 0x19, substate 0x04, COPY COMPLETED.

For OTHERS:

  • 493E[0x01] -> H'631C.
  • Local table H'632E includes the OTHERS pages.

Local Entry Selection

loc_5FD2 is the local menu chooser.

Important RAM:

RAM Role
F72C visible/selectable entry bitmask
F72E count of visible/selectable entries
F72F cached page high byte
F733 selected local entry index
FB03.7 no-entry/error/display suppression flag
FB02 display/session timer or message timer

Observed algorithm shape:

  1. If the page changed, clear F72C/F72E and cache the new page in F72F.
  2. Walk the page-local handler table from the last entry down.
  3. For each handler, read descriptor words immediately before the handler.
  4. Compare the entry state descriptor against F731.
  5. If the entry has required selector descriptors, test E400 + selector*2.
  6. If requirements pass, set the entry bit in F72C and increment F72E.
  7. Clamp or reset F733 so it points at a visible entry.
  8. If no entries are visible, set FB03.7, set FB02=H'14, clear F72F, and return R4=H'FFFE.

Practical meaning:

  • A page can exist in ROM but be invisible/inactive until the CCU seeds the right E400 feature/status selector.
  • Command 6 writes the E400-E7FF secondary table, but only on the continuation side of the protocol.

OTHERS / COPY TO SLAVES Gates

OTHERS page map:

Local entry Handler Visible text Required secondary selector
1 H'6FF0 OTHERS / COPY TO SLAVES E400[0x0015] != 0
2 H'70F6 OTHERS / CAM ID SET E400[0x0043] != 0
3 H'7188 OTHERS / CAM ID IND E400[0x0037] != 0
4 H'7258 OTHERS / CAM BARS E400[0x0038] != 0
5-6 H'7328/H'73D8 marker/percentage pages E400[0x0027] != 0

COPY TO SLAVES local action gate:

  • Handler H'6FF0 watches F770.2.
  • If F770.2 is clear, it only displays the OTHERS/COPY page.
  • If F770.2 is set and F791.7 is set, it enters the local copy-start branch.
  • If F770.2 is set and F791.7 is clear, it diverts to SET RCP / MASTER.

Root OTHERS soft-key bits:

  • Root handler H'6EE4 tests E000[0x008F] at H'E11E.
  • Bit 11 sets F711.6.
  • Bit 12 sets F711.4.

These bits are not only OTHERS soft-key enables. Bench tests show E000[0x008F] directly changes the shutter seven-segment display and iris AUTO lamp, so treat it as a packed camera/display status selector that also feeds the OTHERS root handler.

Button / Lamp Masks

Important RAM:

RAM Role
F711-F718 panel output masks used by external panel chips
F711.4-F711.7 soft-key/menu-related bits seen around OTHERS/COPY
F726 countdown that temporarily preserves some soft-key bits
F770 local panel action/change code

Relevant ROM behavior:

  • Init clears F711-F717 and sets F718=H'FF.
  • 5A7A clears F711.4-F711.7 if F726 == 0.
  • The FRT timer path decrements F726; when it expires, it clears F713.6 and F711.4-F711.7.
  • The OTHERS/COPY branch sets F711.7 and F726=H'64 to keep the local key/display state alive briefly.

Bench Implications

To make the local COPY path available from the panel, the fake CCU probably needs to:

  1. Recover to a live CONNECT: OK style session.
  2. Seed root OTHERS soft-key bits:
00 01 0F 18 00 4C  ; E000[0x008F] bits 11+12
  1. During a live continuation/report window, seed the COPY page visibility bit:
06 00 15 00 01 48  ; E400[0x0015] nonzero
  1. Still satisfy the F791.7 local copy-start gate.

The current hardest unknown is step 4: the ROM uses F791.7 in several places, but the source that sets it has not yet been identified.

Bench Observation: OTHERS Gate Probe

Run:

00 00 00 80 00 DA  ; recover/seed CONNECT OK
00 01 0F 18 00 4C  ; E000[0x008F] = 0x1800
06 00 15 00 01 48  ; E400[0x0015] = 0x0001, sent in active window

Observed on the real panel without touching the controls:

  • LCD stayed at CONNECT: OK.
  • SHUTTER seven-segment display changed to something like EUS; manuals make this likely EVS rendered on a seven-segment display.
  • Iris AUTO lamp illuminated.
  • OTHERS menu did not appear by itself.

Interpretation:

  • The sequence reached real UI state, not only serial parser state.
  • E000[0x008F]=0x1800 is now a candidate shutter/mode-status value as well as an OTHERS soft-key source. Treat the earlier "soft-key bits" interpretation as incomplete.
  • E400[0x0015]=0x0001 may be the OTHERS/COPY visibility bit, but it may also affect an iris/auto feature path. Isolate before assigning a final meaning.

Recommended isolation probes:

00 01 0F 08 00 5C  ; E000[0x008F] bit 11 only
00 01 0F 10 00 44  ; E000[0x008F] bit 12 only
00 01 0F 18 00 4C  ; E000[0x008F] bits 11+12
06 00 15 00 00 49  ; E400[0x0015] clear/zero
06 00 15 00 01 48  ; E400[0x0015] low nonzero
06 00 15 80 00 C9  ; E400[0x0015] high nonzero

Scenario files:

  • scenarios/others-isolate-008f-bit11.json
  • scenarios/others-isolate-008f-bit12.json
  • scenarios/others-isolate-008f-bits11-12.json
  • scenarios/others-isolate-e400-0015-low.json
  • scenarios/others-isolate-e400-0015-high.json
  • scenarios/others-isolate-008f-then-e400-clear.json

Isolation results:

Scenario Visible panel result Serial result
others-isolate-008f-bit11 Iris AUTO lamp on, SHUTTER seven-segment shows observed EUS, likely manual EVS 04 01 0F 08 00 58, then repeated 02 00 02 00 00 5A
others-isolate-008f-bit12 Iris AUTO lamp on, SHUTTER seven-segment shows literal letters OFF 04 01 0F 10 00 40, then repeated 02 00 02 00 00 5A
others-isolate-008f-bits11-12 Iris AUTO lamp on, SHUTTER seven-segment shows observed EUS, likely manual EVS 04 01 0F 18 00 48, then repeated 02 00 02 00 00 5A
others-isolate-e400-0015-low LCD stays CONNECT: OK only repeated 01 00 02 00 00 59 after command 6
others-isolate-e400-0015-high LCD stays CONNECT: OK only repeated 01 00 02 00 00 59 after command 6
others-isolate-008f-then-e400-clear Iris AUTO lamp on, SHUTTER seven-segment shows observed EUS, likely manual EVS repeated 01 00 02 00 00 59 after command 6

Updated interpretation:

  • E000[0x008F] directly affects visible shutter/iris UI state.
  • Bit 11 selects the observed EUS shutter display, probably manual EVS; bit 12 selects literal shutter-display text OFF; when both are present, the likely EVS display appears to win.
  • The iris AUTO lamp turns on for either bit 11 or bit 12, so it may be tied to the same status selector or to the resulting display mode.
  • E400[0x0015] does not visibly change the panel by itself, even though command 6 does alter the report stream from 02 00 02 00 00 5A to 01 00 02 00 00 59.
  • Keep E400[0x0015] as a probable OTHERS/COPY visibility/report-gate candidate, but do not assign the shutter/iris effect to it.

Manual correlation:

  • The RCP-TX7 operating instructions list OTHERS (1/6: SHUTTER) with an EVS button, and say to use the shutter block C.SCAN or SHUTTER ON/OFF buttons when not using EVS.
  • The same RCP-TX7 manual lists EVS/ECS under OTHERS for DXC-D30/D30P normal settings.
  • A later CCU/RCP manual states that when EVS is on, EVS is displayed; when the shutter switch is off, OFF is displayed.
  • Therefore E000[0x008F].11 is best labeled shutter_evs_display_or_mode, and E000[0x008F].12 is best labeled shutter_off_display_or_mode until ROM traces split display-only status from actual camera setting.