diff options
| author | Valentin Popov <valentin@popov.link> | 2026-07-18 19:44:10 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-07-18 19:44:10 +0300 |
| commit | 50a74cc0a64352a50dd1023d48d0f94a4eca9627 (patch) | |
| tree | feb0ca78eb84a3e58515ac3ad043c6ce2a76517a /docs/appendices/script-vm.md | |
| parent | d31d1f8eab7a2c79e349748939de01895af5de7e (diff) | |
| download | fparkan-50a74cc0a64352a50dd1023d48d0f94a4eca9627.tar.xz fparkan-50a74cc0a64352a50dd1023d48d0f94a4eca9627.zip | |
feat(script): classify VM dispatch selectors
Diffstat (limited to 'docs/appendices/script-vm.md')
| -rw-r--r-- | docs/appendices/script-vm.md | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/docs/appendices/script-vm.md b/docs/appendices/script-vm.md index 128acd9..6836f82 100644 --- a/docs/appendices/script-vm.md +++ b/docs/appendices/script-vm.md @@ -53,6 +53,15 @@ cargo run -p fparkan-cli -- script inspect ` records, 20 references и 0 trailing bytes. Это corpus evidence для reader-а, но не разрешение на исполнение неизвестных 73 opcodes. +Теперь установлен selector: loader `0x10001000` создаёт 73 pointers в +фиксированном порядке, а `0x10011e70` копирует их без перестановки в runtime +array. Во всех 58 GOG `.scr` первый header word каждого nested record равен +`0..72` либо `0xffff_ffff`: соответственно 2095 handler selectors и 3992 +sentinel records. Поэтому `ScriptInstruction::dispatch_selector()` возвращает +`Handler(0..72)`, `Sentinel` или сохраняемый `Unknown(u32)`. Первый handler +(`Handler(0)`, VA `0x10008034`) только устанавливает current context и flag +`+0x50 = 1`; это не даёт ему игрового имени и не заменяет runtime trace. + TMA properties остаются four raw `u32` words плюс имя, пока consumer/schema не задаст тип (integer/float bits/ObjectId/enum/fixed-point/index). В том числе сохраняются `NOT USED`; corpus подтверждает `Invulnerability`, life state, |
