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:
F732holds the current display/page selector.- The high byte of
F732selects a page wrapper through493E. - The low byte is used as a page-local substate/selection, commonly through
F733.
Important dispatcher:
48FAbridges 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'1903selects page0x19, substate0x03,COPY IN PROGRESS.F732=H'1904selects page0x19, substate0x04,COPY COMPLETED.
For OTHERS:
493E[0x01] -> H'631C.- Local table
H'632Eincludes 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:
- If the page changed, clear
F72C/F72Eand cache the new page inF72F. - Walk the page-local handler table from the last entry down.
- For each handler, read descriptor words immediately before the handler.
- Compare the entry state descriptor against
F731. - If the entry has required selector descriptors, test
E400 + selector*2. - If requirements pass, set the entry bit in
F72Cand incrementF72E. - Clamp or reset
F733so it points at a visible entry. - If no entries are visible, set
FB03.7, setFB02=H'14, clearF72F, and returnR4=H'FFFE.
Practical meaning:
- A page can exist in ROM but be invisible/inactive until the CCU seeds the right
E400feature/status selector. - Command 6 writes the
E400-E7FFsecondary 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'6FF0watchesF770.2. - If
F770.2is clear, it only displays the OTHERS/COPY page. - If
F770.2is set andF791.7is set, it enters the local copy-start branch. - If
F770.2is set andF791.7is clear, it diverts toSET RCP/MASTER.
Root OTHERS soft-key bits:
- Root handler
H'6EE4testsE000[0x008F]atH'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-F717and setsF718=H'FF. 5A7AclearsF711.4-F711.7ifF726 == 0.- The FRT timer path decrements
F726; when it expires, it clearsF713.6andF711.4-F711.7. - The OTHERS/COPY branch sets
F711.7andF726=H'64to 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:
- Recover to a live
CONNECT: OKstyle session. - Seed root OTHERS soft-key bits:
00 01 0F 18 00 4C ; E000[0x008F] bits 11+12
- During a live continuation/report window, seed the COPY page visibility bit:
06 00 15 00 01 48 ; E400[0x0015] nonzero
- Still satisfy the
F791.7local 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.