메뉴 취소 입력/창 소비자 검토
ESC/X/Num0 입력이 상태창/메뉴 window region으로 이어지는 정적 근거를 분리한다.
요약
grounded stack path; direct normal-field menu-open script still pendingcancel bit0x0200
consumer opcode0x9f @ 0x0040c6cc
region opcode0x45 @ 0x00406528
top regions3, 4, 6
취소 액션 키: ESCAPE, NUMPAD_INSERT, X, state+0x115. script-data region opcode probe: 45 06=0, 45 03=0, 45 04=0.
판정
| 항목 | 상태 | 근거 |
|---|---|---|
| cancel/back action | grounded | primary action 9 maps ESCAPE, NUMPAD_INSERT, X and state offsets to bit 0x0200. |
| cancel/back consumer | grounded | opcode 0x9f handler 0x0040c6cc tests AH bit 0x02 from edge mask 0x0059e312 and mutates menu stack cursor 0x0059e33e. |
| menu stack globals | grounded | 0x4576e8/0x4576e9 hold active menu entry ids; 0x59db30 holds entry pointers; 0x59e33e is the current cursor. Add/remove helpers at 0x00431fe8/0x00432541 update them. |
| top menu window regions | grounded-region / consumer pending | region #6, #3, #4 form the 640x352 top menu candidate layout from window.cns templates, but the exact opener stream was not isolated. |
| raw region command sequence | blocked | direct script-data byte sequences 45 06 / 45 03 / 45 04 were not found; the top menu layout is likely selected through descriptor/object state rather than a simple contiguous region-opener stream. |
VM Opcode
| opcode | handler | 역할 | bytes |
|---|---|---|---|
0x40 | 0x004063fc | bind current action mask as VM input source | 55 8b ec 53 56 57 8b 45 08 c7 80 a8 00 00 00 10 e3 59 00 8b 45 08 83 40 |
0x44 | 0x004064f4 | conditional draw region 0 | 55 8b ec 53 56 57 e8 0a b0 01 00 8b 45 08 8b 40 40 33 c9 8a 48 01 85 c9 |
0x45 | 0x00406528 | draw region id from command byte | 55 8b ec 53 56 57 8b 45 08 8b 40 40 66 0f b6 40 01 50 e8 3a 50 01 00 83 |
0x80 | 0x0040ad5e | bind menu stack slot to entry table row | 55 8b ec 53 56 57 8b 45 08 8b 40 40 33 c9 8a 48 02 8d 04 49 c1 e0 03 8d |
0x88 | 0x0040b13b | direction/list selector movement | 55 8b ec 83 ec 08 53 56 57 8b 45 08 8b 40 40 8b 40 04 89 45 fc 8b 45 08 |
0x99 | 0x0040c2fc | rebuild menu stack from active ids | 55 8b ec 83 ec 04 53 56 57 c7 45 fc 00 00 00 00 e9 03 00 00 00 ff 45 fc |
0x9f | 0x0040c6cc | cancel/back menu stack controller | 55 8b ec 83 ec 10 53 56 57 8b 45 08 8b 40 40 33 c9 8a 48 01 89 4d fc e9 |
Window Regions
top menu 후보 #6/#3/#4 포함| # | rect | resource | template | 해석 | 상태 |
|---|---|---|---|---|---|
| 1 | 0,352 416x128 | 0x00090001 | 1 | normal HUD left panel | grounded |
| 2 | 416,352 224x128 | 0x00090004 | 4 | normal HUD right panel | grounded |
| 3 | 416,0 224x96 | 0x00090002 | 2 | top menu upper-right window candidate | grounded-region / consumer pending |
| 4 | 416,96 224x256 | 0x00090003 | 3 | top menu lower-right window candidate | grounded-region / consumer pending |
| 6 | 0,0 416x352 | 0x00090000 | 0 | top menu large left window candidate | grounded-region / consumer pending |
| 8 | 324,128 80x112 | 0x0009000d | 13 | window.cns template #13 | window-region |
| 9 | 0,0 352x96 | 0x00090006 | 6 | window.cns template #6 | window-region |
| 10 | 0,0 352x112 | 0x00090007 | 7 | window.cns template #7 | window-region |
| 11 | 0,0 352x128 | 0x00090008 | 8 | window.cns template #8 | window-region |
| 12 | 0,0 352x144 | 0x00090009 | 9 | window.cns template #9 | window-region |
| 13 | 0,0 352x160 | 0x0009000a | 10 | window.cns template #10 | window-region |
| 14 | 0,80 304x240 | 0x0009000b | 11 | window.cns template #11 | window-region |
| 15 | 304,80 128x80 | 0x0009000c | 12 | window.cns template #12 | window-region |
| 16 | 304,160 128x80 | 0x0009000c | 12 | window.cns template #12 | window-region |
| 17 | 304,240 128x80 | 0x0009000c | 12 | window.cns template #12 | window-region |
| 39 | 0,64 224x48 | 0x0009000e | 14 | window.cns template #14 | window-region |
| 40 | 0,112 224x48 | 0x0009000f | 15 | window.cns template #15 | window-region |
| 42 | 0,0 176x64 | 0x00090010 | 16 | window.cns template #16 | window-region |
Input/Stack Globals
| global | VA | refs | sample |
|---|---|---|---|
| current action mask | 0x0059e310 | 31 | 0x0040640b near vm-dispatch-loop0x004106a8 near menu/list-template-blitter0x0041d8c5 near choice/list-cancel-handler0x00422d9b input-poll-driver0x00422da1 input-poll-driver0x004232a5 near input-poll-driver0x004232dc near input-poll-driver0x0043038e near field-controller-direction |
| edge/new-press action mask | 0x0059e312 | 33 | 0x004042dd near vm-dispatch-loop0x00404340 near vm-dispatch-loop0x0040b167 opcode-0x88-list-direction0x0040b189 opcode-0x88-list-direction0x0040b1b3 opcode-0x88-list-direction0x0040b1d5 opcode-0x88-list-direction0x0040b1ff opcode-0x88-list-direction0x0040b221 opcode-0x88-list-direction |
| previous action latch | 0x0055b2ac | 3 | 0x00422d83 input-poll-driver0x00422da7 input-poll-driver0x00422db8 input-poll-driver |
| menu stack cursor | 0x0059e33e | 62 | 0x0040b6a2 near opcode-0x88-list-direction0x0040b780 near opcode-0x88-list-direction0x0040b7a1 near opcode-0x88-list-direction0x0040b7e0 near opcode-0x88-list-direction0x0040b802 near opcode-0x88-list-direction0x0040c53b near opcode-0x99-stack-rebuild0x0040c599 near opcode-0x99-stack-rebuild0x0040c6eb opcode-0x9f-cancel-stack |
| menu stack pointer array | 0x0059db30 | 260 | 0x00406479 near vm-dispatch-loop0x00406499 near vm-dispatch-loop0x0040ad8b opcode-0x80-stack-bind0x0040c04b near opcode-0x88-list-direction0x0040c362 opcode-0x99-stack-rebuild0x0040c3df opcode-0x99-stack-rebuild0x0040c542 near opcode-0x99-stack-rebuild0x0040c6f2 opcode-0x9f-cancel-stack |
| active menu entry count | 0x004576e8 | 86 | 0x00406b91 near opcode-0x45-region-id0x00406cce near opcode-0x45-region-id0x00407d24 near opcode-0x45-region-id0x004081de near opcode-0x45-region-id0x00408372 near opcode-0x45-region-id0x0040849d near opcode-0x45-region-id0x00408782 near opcode-0x45-region-id0x00408a1d near opcode-0x45-region-id |
| active menu entry ids | 0x004576e9 | 30 | 0x0040b6aa near opcode-0x88-list-direction0x0040b788 near opcode-0x88-list-direction0x0040b7a9 near opcode-0x88-list-direction0x0040b7e8 near opcode-0x88-list-direction0x0040b80a near opcode-0x88-list-direction0x0040bd4b near opcode-0x88-list-direction0x0040be7e near opcode-0x88-list-direction0x0040bfa7 near opcode-0x88-list-direction |
| menu entry table | 0x00457750 | 39 | 0x00406436 near vm-dispatch-loop0x0040ad79 opcode-0x80-stack-bind0x0040b6b8 near opcode-0x88-list-direction0x0040be8c near opcode-0x88-list-direction0x0040c3d5 opcode-0x99-stack-rebuild0x0040c43b near opcode-0x99-stack-rebuild0x0040c499 near opcode-0x99-stack-rebuild0x0040dec6 near opcode-0x9f-cancel-stack |
Cancel Bit Tests
| test | function | meaning | bytes |
|---|---|---|---|
0x0040c74a | opcode-0x9f-cancel-stack | tests AH bit 0x02, i.e. action bit 0x0200 when AX is the 16-bit input mask | 66 a1 12 e3 59 00 f6 c4 02 0f 84 c6 00 00 00 33 |
0x0041d7b6 | near choice/list-cancel-handler | tests AH bit 0x02, i.e. action bit 0x0200 when AX is the 16-bit input mask | 66 a1 12 e3 59 00 f6 c4 02 0f 84 6b 00 00 00 8b |
Stack Cursor Mutations
| mutation | hits | where |
|---|---|---|
| inc byte ptr [0x0059e33e] | 2 | 0x0040c881 opcode-0x9f-cancel-stack0x0040c8a7 opcode-0x9f-cancel-stack |
| dec byte ptr [0x0059e33e] | 1 | 0x0040c798 opcode-0x9f-cancel-stack |
| mov byte ptr [0x0059e33e], 0 | 1 | 0x0040c89b opcode-0x9f-cancel-stack |
Call Sites
| target | call count | sample call sites |
|---|---|---|
input action packer0x0042f6d2 | 1 | 0x00422d91 input-poll-driver |
region draw function0x0041b579 | 5 | 0x00406514 opcode-0x44-region00x0040653a opcode-0x45-region-id0x00414fc9 near menu/list-template-blitter0x004150d2 near menu/list-template-blitter0x0041bb59 region-object-draw-bridge |
template blit function0x004175d3 | 35 | 0x0040f822 menu/list-template-blitter0x0040f873 menu/list-template-blitter0x0040f8e7 menu/list-template-blitter0x0040f923 menu/list-template-blitter0x0040f9e4 menu/list-template-blitter0x0040fa23 menu/list-template-blitter0x00411a0f near menu/list-template-blitter0x0041b5ff region-draw-function0x0041dbf3 near choice/list-cancel-handler0x0041dd01 near choice/list-cancel-handler0x0041df9b near choice/list-cancel-handler0x0041e004 near choice/list-cancel-handler |
다음 분석 타겟
- Decode menu entry table rows at 0x00457750 so stack id -> text/window/content can be named.
- Trace opcode 0x80/0x99/0x9f roots together with region opcode 0x45 to find the normal-field status-menu opener.
- Use the known UI text strings around 0x004e8128..0x004e8872 as labels once the stack entry content table is isolated.