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;