HUD Input Consumer Boundary Review
0x0200 ESC/X edge bit의 주요 소비자는 메뉴 최초 opener가 아니라 active descriptor stack을 되감는 cancel/back 경계다. 0x0040c6cc는 bit clear, active cursor scan, focus in/out 호출만 수행하며 addDescriptor/top-menu sequence 근거가 없다. 0x0041d61b도 이미 열린 메뉴 내부 selector dispatcher로 분류된다.
statusinput-consumers-grounded-opener-still-unproven
input funcs13
cancel handler0x0040c6cc
cancel bit0x0200
open promotedFalse
Key Functions
| function | classification | refs | calls | 0x0200 evidence |
|---|---|---|---|---|
0x0040c6cc0x0200 cancel/back consumer | cancel/back-active-descriptor-unwind Consumes and clears edge input bit 0x0200, rewrites object+0x40 to the stream continuation, decrements/scans active descriptor cursor 0x0059e33e, and calls focus routines 0x00422093/0x004226e9. It has no call to addDescriptor and no top-menu sequence reference. | {"input.edgeActionMask": ["0x0040c746", "0x0040c757", "0x0040c762"], "descriptor.activeCount": ["0x0040c86c", "0x0040c8b8"], "descriptor.activeCursor": ["0x0040c6eb", "0x0040c778", "0x0040c78c", "0x0040c79a", "0x0040c7a1", "0x0040c7c7", "0x0040c7e4", "0x0040c81c", "0x0040c839", "0x0040c875", "0x0040c883", "0x0040c89d", "0x0040c8a9", "0x0040c8b0", "0x0040c8c7", "0x0040c8e4"], "descriptor.slotPointers": ["0x0040c6f2", "0x0040c7a8", "0x0040c7ce", "0x0040c7eb", "0x0040c823", "0x0040c840", "0x0040c8ce", "0x0040c8eb"]} | {"focusOut": ["0x0040c7f3", "0x0040c8f3"], "focusIn": ["0x0040c848"]} | 0x0040c744 clear: 0x0040c755 |
0x0041d61bmenu-internal selector dispatcher | already-open-menu-dispatcher Uses 0x0200 only inside an object payload dispatcher after menu state exists. It calls 0x0042af73, writes 0x0059dd6c, marks object+0xa8[...] = 0xff, clears the bit, and advances object+0xb0. | {"input.edgeActionMask": ["0x0041d6ff", "0x0041d70a", "0x0041d712", "0x0041d71b", "0x0041d723", "0x0041d797", "0x0041d7b2", "0x0041d807", "0x0041d812", "0x0041d82e", "0x0041d851", "0x0041d85c"], "descriptor.tempState": ["0x0041d7e4", "0x0041d849"]} | {"menuResult": ["0x0041d7da", "0x0041d83f"], "menuCursorApply": ["0x0041d7a6"]} | 0x0041d7b0 clear: 0x0041d805 |
0x0040b13bdirection edge selector | direction-navigation-only Consumes direction edge bits 0x1/0x2/0x4/0x8 and calls 0x00410570 with direction indexes. It does not test 0x0200 and does not add descriptors. | {"input.edgeActionMask": ["0x0040b167", "0x0040b189", "0x0040b1b3", "0x0040b1d5", "0x0040b1ff", "0x0040b221", "0x0040b246", "0x0040b26b"]} | {"cursorMove": ["0x0040b17d", "0x0040b1a2", "0x0040b1c9", "0x0040b1ee", "0x0040b215", "0x0040b23a", "0x0040b25f", "0x0040b284"]} | - clear: - |
Input Consumer Inventory
| function | edge refs | current refs | calls addDescriptor | top-menu ref |
|---|---|---|---|---|
0x004042b6input consumer | 0x004042dd, 0x00404340 | - | False | False |
0x004063fcinput consumer | - | 0x0040640b | False | False |
0x0040b13bdirection selector | 0x0040b167, 0x0040b189, 0x0040b1b3, 0x0040b1d5, 0x0040b1ff, 0x0040b221, 0x0040b246, 0x0040b26b | - | False | False |
0x0040c6cccancel/back consumer | 0x0040c746, 0x0040c757, 0x0040c762 | - | False | False |
0x00410570input consumer | - | 0x004106a8 | False | False |
0x0041b82ainput consumer | 0x0041b84c | - | False | False |
0x0041b8eeinput consumer | 0x0041b907, 0x0041b924 | - | False | False |
0x0041d61bmenu-internal dispatcher | 0x0041d6ff, 0x0041d70a, 0x0041d712, 0x0041d71b, 0x0041d723, 0x0041d797, 0x0041d7b2, 0x0041d807, 0x0041d812, 0x0041d82e, 0x0041d851, 0x0041d85c | - | False | False |
0x0041d89dinput consumer | - | 0x0041d8c5 | False | False |
0x0041f073input consumer | 0x0041f092, 0x0041f0c6 | - | False | False |
0x00422d74input poll driver | 0x00422d8b, 0x00422daf, 0x00422dc0 | 0x00422d9b, 0x00422da1 | False | False |
0x00423127input consumer | - | 0x004232a5, 0x004232dc | False | False |
0x0043022dfield movement/collision controller | - | 0x0043038e, 0x0043039e, 0x004303ae, 0x004303b7, 0x004303bf, 0x004303c8, 0x004303d0, 0x004303e0, 0x004303f0, 0x004303f9, 0x00430401, 0x0043040a, 0x00430412, 0x00430429, 0x00430440, 0x00430457, 0x004304df, 0x004304fe, 0x00430660, 0x0043067f, 0x00430806, 0x00430825, 0x004309c8, 0x004309e7 | False | False |
Next Frontier
- ESC/X opener는 0x0200 bit consumer 자체가 아니라 field mode/state transition 또는 descriptor attachment producer에서 찾아야 한다.
- 0x0040c6cc/0x0041d61b는 close/back/internal dispatcher로 고정하고 반복 후보에서 제외한다.
- 다음 증거는 active descriptor stack에 top-menu wrapper/sequence를 attach하는 producer, 또는 normal-field state에서 top-menu wrapper를 호출하는 상위 dispatcher다.