#118: the MFD eject cell ejects -- all pilot-keypad-space keys route while armed

The operator's pod flow ("the engineering panel's bottom-left button flashes
EJECT, you push it") is input #3 of 3. The eng-page eject cell resolves to
MFD side-column addresses 0x0B/0x23/0x03 (kBTEngBankTop - 4 per bank), and
the binary's ONLY armed eject binding is the KeyboardPilot group (0x200000
-> mech msg 0x19; exhaustive 0x200000 scan: no other consumer) -- so on the
pod those keys report through the pilot keypad matrix. Desktop mirror: MFD
key-space presses (0x00-0x2F) and Panic (0x3D) also land as pilot-keypad
keys. Outside panic mode the binding is mode-masked dead -- normal MFD
operation untouched; armed, the flashing cell (or any keypad key -- the pod
semantic) punches out.

Verified through the click seam: gens dead -> armed -> press 0x0B ->
PUNCH-OUT.

All three eject inputs now live: Panic button, Backspace/pad LeftThumb,
and the flashing MFD eject cell.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Joe DiPrima
2026-08-03 19:02:21 -05:00
co-authored by Claude Fable 5
parent 0bd9bb6f51
commit b9430cc5a7
+14 -10
View File
@@ -466,17 +466,21 @@ void
<< (pressed ? "HELD" : "released") << "\n" << std::flush;
}
// PANIC (0x3d): the pod's guarded PANIC key reports through the PILOT
// KEYPAD bank -- the binary's ONLY panic press binding is
// PANIC-ARMED EJECT keys: the binary's ONLY armed press binding is
// keyboardGroup[KeyboardPilot].Add(mode 0x200000, mech, msg 0x19 =
// EjectPilot) in the RIO mapper ctor (FUN_004d266c @004d266c); there is
// NO buttonGroup[0x3d] consumer anywhere (0x3d is the LAMP address, mode-
// linked via MakeLinkedLamp). Mirror that wiring for the desktop click:
// a Panic press ALSO lands as a pilot-keypad key, so the ARMED mode
// binding fires the eject; a healthy press is a mode-masked no-op --
// exactly the pod behaviour.
if (address == 0x3D && pressed)
EmitKeypad(LBE4ControlsManager::KeyboardPilot, 0);
// EjectPilot) in the RIO mapper ctor (FUN_004d266c) -- an E8+data scan
// finds NO other 0x200000 consumer in the image. So on the pod, EVERY
// key that ejects while armed (the guarded PANIC key AND the MFD
// side-column cells the engEject alarm lamp flashes on -- addresses
// 0x0B/0x23/0x03 = kBTEngBankTop-4 per bank) reports through the PILOT
// KEYPAD matrix. Mirror that: desktop presses of the MFD key space
// (0x00-0x2F: keypads + side columns) and the Panic button ALSO land as
// pilot-keypad keys. Outside panic mode the binding is mode-masked dead
// (KeyboardPilot has no other active consumer), so normal MFD operation
// is untouched; while ARMED, hitting the flashing eject cell -- or any
// keypad key, the pod semantic -- punches out.
if (pressed && (address <= 0x2F || address == 0x3D))
EmitKeypad(LBE4ControlsManager::KeyboardPilot, address & 0xF);
RIOEvent event;
event.Type = pressed ? ButtonPressedEvent : ButtonReleasedEvent;