aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-07-18 20:13:40 +0300
committerValentin Popov <valentin@popov.link>2026-07-18 20:13:40 +0300
commit3619f22b42bd9217ab30a26b8287fb50b7398971 (patch)
tree7b0d4b1570eded8729bb9f6615678743dd61632e /docs
parentbd225b318ed0247ceddaa3fddbf19106aca0fde4 (diff)
downloadfparkan-3619f22b42bd9217ab30a26b8287fb50b7398971.tar.xz
fparkan-3619f22b42bd9217ab30a26b8287fb50b7398971.zip
docs(ai): rule out handler two immediate dispatch
Diffstat (limited to 'docs')
-rw-r--r--docs/appendices/script-vm.md7
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`,