test(runtime): verify native Control budget updates
Docs Deploy / Build and Deploy MkDocs (push) Successful in 36s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 36s
This commit is contained in:
3 files changed
+178
-1
No files matched your search
@@ -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
|
||||
|
||||
Reference in new issue
Block a user