From b9430cc5a7f523b81bf69d868ff91cde13676c99 Mon Sep 17 00:00:00 2001 From: Joe DiPrima Date: Mon, 3 Aug 2026 19:02:21 -0500 Subject: [PATCH] #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 --- engine/MUNGA_L4/L4PADRIO.cpp | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/engine/MUNGA_L4/L4PADRIO.cpp b/engine/MUNGA_L4/L4PADRIO.cpp index d0df651..3183c2e 100644 --- a/engine/MUNGA_L4/L4PADRIO.cpp +++ b/engine/MUNGA_L4/L4PADRIO.cpp @@ -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;