diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/appendices/knowledge-boundaries.md | 6 | ||||
| -rw-r--r-- | docs/appendices/script-vm.md | 31 |
2 files changed, 36 insertions, 1 deletions
diff --git a/docs/appendices/knowledge-boundaries.md b/docs/appendices/knowledge-boundaries.md index da783a4..4890de0 100644 --- a/docs/appendices/knowledge-boundaries.md +++ b/docs/appendices/knowledge-boundaries.md @@ -344,7 +344,11 @@ type-1 provider value (`1.0`); дальнейшее изменение provider реализовано. Native oracle проверил изолированные пути распределения, обновления класса `4`, стадийную арифметику `0x11220`, обход дочерних provider-строк `0x11130` и -visibility transition `0x11920` с исходными AniMesh callbacks. Эти сценарии +visibility transition `0x11920` с исходными AniMesh callbacks. Отдельный +бюджетный вектор исполняет `0x2d340` → `0x2dca0` → tag 15 `0x22bb0` → +`0x10ba0`: подтверждены коэффициенты `0.5` и `1`, точные amount/ratio и +приоритет категории перед порядком устройств. Положительный вклад генератора +в этом векторе подставлен mock-ом; его собственная генерация не проверена. Эти сценарии используют синтетические NDP/Node38-строки; они подтверждают локальные переходы и порядок вызовов, но не полную загрузку или выполнение Control на миссии. Вызовы `0x11220` используют `updateEffects = false`, что исключает ветвь Control FX и diff --git a/docs/appendices/script-vm.md b/docs/appendices/script-vm.md index c4c0255..9ed3e80 100644 --- a/docs/appendices/script-vm.md +++ b/docs/appendices/script-vm.md @@ -644,6 +644,37 @@ oracle вызывает оригинальные `FUN_10010ba0` (RVA `0x10ba0`), входного времени и порядок доставки установлены статически, как описано ниже; Rust продолжает читать начальные provider snapshots и не моделирует эти изменения. +#### Бюджет и обновление устройства tag 15 + +Для той же сборки `Control.dll` oracle исполняет оригинальный диспетчер +RVA `0x2d340`, распределение по категориям RVA `0x2dca0`, конструктор tag 15 +RVA `0x22ae0`, его rate RVA `0x22b20` и update RVA `0x22bb0`. +Категория читается из текущего descriptor через RVA `0x2c3a0`. +Порядок масок категорий — `8`, `1`, `0x24`, `0x10`, `2`. +Поэтому порядок обслуживания может отличаться от порядка устройств в массиве. +Положительные вклады образуют начальный бюджет; потребность выбранных +категорий определяет коэффициент выделения. + +Вектор задаёт provider с максимумом `100`, количеством `40` и долей `0.4`, +интервал `0.5` секунды, коэффициенты tag 15 равные `1` и нулевое поле + descriptor `+0x20`. Исходная rate-функция возвращает `-0.2`. +Генератор с descriptor tag `14` подставлен явно: mock возвращает положительный +вклад `0.1` или `0.5` и записывает аргументы своего update. Функции tag 15, +provider getter и изменение количества не подменены. + +| Бюджет | Коэффициент tag 15 | Amount / processed / total, биты | Доля, биты | +|---|---|---|---| +| `0.1` | `0.5` | `0x42206666` (`40.1`) | `0x3ecd4fdf` | +| `0.5` | `1` | `0x4220cccd` (`40.2`) | `0x3ecdd2f2` | + +Сравнение идёт по битам при x87 control word `0x007f`. Реальный update +вызывает RVA `0x10ba0` и публикует новую долю одним callback selector `0x200`. +Хотя генератор стоит первым в массиве, его update уже видит изменённое +количество: категория tag 15 обслуживается раньше. Проверены также интервал +и коэффициент, переданные mock-генератору. Его собственная генерация, другие +категории, активный clock-путь и выполнение миссии этим не проверены. +Rust пока не переносит этот изменяемый бюджетный цикл. + #### Доставка игровых часов в Control Статическая цепочка относится к GOG-модулям `World3D.dll` (SHA-256 |
