diff options
| author | Valentin Popov <valentin@popov.link> | 2026-07-18 20:13:40 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-07-18 20:13:40 +0300 |
| commit | 3619f22b42bd9217ab30a26b8287fb50b7398971 (patch) | |
| tree | 7b0d4b1570eded8729bb9f6615678743dd61632e /docs/appendices | |
| parent | bd225b318ed0247ceddaa3fddbf19106aca0fde4 (diff) | |
| download | fparkan-3619f22b42bd9217ab30a26b8287fb50b7398971.tar.xz fparkan-3619f22b42bd9217ab30a26b8287fb50b7398971.zip | |
docs(ai): rule out handler two immediate dispatch
Diffstat (limited to 'docs/appendices')
| -rw-r--r-- | docs/appendices/script-vm.md | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/docs/appendices/script-vm.md b/docs/appendices/script-vm.md index 51da106..4dbd2f8 100644 --- a/docs/appendices/script-vm.md +++ b/docs/appendices/script-vm.md @@ -101,6 +101,13 @@ internal record. В этой ветке не видно прямого World3D/B открытыми; до dynamic capture Rust возвращает явный unsupported result, а не «примерный» game command. +У этой границы также нет скрытого immediate dispatch: после добавления новой +записи `0x100059f0` вызывает `0x1000f920`, а Ghidra 12.1.2 декомпилирует эту +функцию как пустой `return`. Следовательно, найденные `<base>_Start` и +`<base>_Continue` только кэшируются в scheduler state; их фактический consumer +находится в отдельном позднем update path. Воспроизводимый read-only extractor: +`tools/ghidra/ExportAiVmHandler2Dispatch.java`. + Следующий static pass закрывает equality/update policy. Identity ровно равна `(slot0 word, slot4 IEEE-754 bits, slot5 IEEE-754 bits)`, поэтому `-0.0` и `+0.0` различаются. Новый 100-byte record получает slot1 в поле `+0x14`, |
