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

4.3 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 look like CCU-provided OTHERS soft-key enable bits. If they are absent, some OTHERS controls can appear inactive even when the page table entry exists.

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.