Реестр: P2b закрыт; иерархия референсов и трамплины в цикле
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -304,8 +304,8 @@ BUG-LATTICE-DOORTOP, BUG-SEAM-WEDGE-1) — только отдельным за
|
||||
| P6 | замер `process_trobs` | ✅ замерено 2026-08-19 | 11 058 префетч + ~43 000 цикл |
|
||||
| P1 | чомпер: перерисовка только при фазе < 6 | ✅ **сделано** 2026-08-19 | −110 802 (ждали −160 000) |
|
||||
| P2a | `coll_scan` в 8 бит + снят с IX | ✅ **сделано** 2026-08-19 | −3 486 в коллизиях, −2 892 на кадре |
|
||||
| P2b | гейт луча видимости стража | ⬜ **следующее** | ждём −30 000, риск низкий |
|
||||
| P4 | накладные блита (4 правки) | ⬜ | ждём −28 000 |
|
||||
| P2b | луч видимости: колонки + один банковый вызов | ✅ **сделано** 2026-08-19 | −26 448 (ждали −30 000) |
|
||||
| P4 | накладные блита (4 правки) | ⬜ **следующее** | ждём −28 000 |
|
||||
| P11 | мелочи с известной ценой | ⬜ | ждём −26 000 |
|
||||
| P10 | футпринт персонажа из физики | ⬜ | ждём −23 000 |
|
||||
| P6a/P6b | `trob_modif` из цикла, кэш префетча | ⬜ | ждём −20 000 |
|
||||
@@ -347,7 +347,8 @@ BUG-LATTICE-DOORTOP, BUG-SEAM-WEDGE-1) — только отдельным за
|
||||
| после P5 | 767 928 | 285 864 | 294 384 | 187 764 | 4 растра |
|
||||
| после P1 (медиана) | **657 882** | 286 503 | 183 420 | 187 761 | 4 растра |
|
||||
| после P1 (дорогой кадр, 40 %) | 765 936 | 286 503 | 291 888 | 187 761 | 4 растра |
|
||||
| после P2a (медиана) | **654 990** | 283 215 | 183 798 | 187 812 | 4 растра |
|
||||
| после P2a (медиана) | 654 990 | 283 215 | 183 798 | 187 812 | 4 растра |
|
||||
| после P2b (медиана) | **628 542** | 259 500 | 181 068 | 187 761 | 4 растра |
|
||||
|
||||
Цель — уложить РАБОТУ в 430 000 (тогда период станет 3 растра вместо 4;
|
||||
хвост кадра — три `gfx_wait_vsync`). Осталось снять **228 000** с медианы
|
||||
@@ -401,3 +402,46 @@ BUG-LATTICE-DOORTOP, BUG-SEAM-WEDGE-1) — только отдельным за
|
||||
сцена ушла с 1,86 растрового кадра до ~1,2 — но НЕ хватит, чтобы период
|
||||
кадра упал с 4 растров до 3: для этого работа должна уложиться в 430 000,
|
||||
то есть нужны ещё ~90 000 сверху (P2 или P6).
|
||||
|
||||
---
|
||||
|
||||
## 6. Иерархия референсов (уточнена 2026-08-19)
|
||||
|
||||
Сравнение трёх реализаций луча видимости показало, что источники не
|
||||
равноценны, и это важно для ЛЮБОЙ будущей оптимизации:
|
||||
|
||||
| источник | что берём | чего НЕ берём |
|
||||
|---|---|---|
|
||||
| **Apple II** (`Prince-of-Persia-Apple-II`) | как это делается на 8 битах: таблицы вместо делений, борьба за такты | ничего — но код на 6502, читать сложнее |
|
||||
| **SDLPoP** | эталон ПОВЕДЕНИЯ (декомпиляция DOS-версии) | реализацию: она нарочно «расслаблена» под 32 бита |
|
||||
| **mininim** | разбор краевых случаев, второе мнение о замысле | алгоритмы — переписан с нуля, механика местами своя |
|
||||
|
||||
Доказательство на конкретном месте: `get_tile_div_mod` в SDLPoP содержит
|
||||
комментарий
|
||||
|
||||
```c
|
||||
// DOS PoP does this:
|
||||
// obj_xl = tile_mod_tbl[xpos];
|
||||
// return tile_div_tbl[xpos];
|
||||
```
|
||||
|
||||
а вместо этого делает `x % TILE_SIZEX` и `x / TILE_SIZEX`. Таблицы в файле
|
||||
лежат, но нужны только для эмуляции чтения DOS-версии ЗА ГРАНИЦЕЙ массива.
|
||||
Apple II (`CTRLSUBS.S`, `GETBLOCKX`) читает ровно `BlockTable[x]`.
|
||||
|
||||
**Правило:** сверять поведение по SDLPoP, а реализацию под 8 бит — по
|
||||
Apple II и по комментариям вида «DOS PoP does this» в самом SDLPoP.
|
||||
|
||||
## 7. Повторяющийся источник цены: банковый трамплин в цикле
|
||||
|
||||
Уже трижды крупнейшей статьёй оказывался не алгоритм, а вызов `__banked`-
|
||||
функции ИЗ ЦИКЛА, идущего в другом банке:
|
||||
|
||||
| место | цена | лечение |
|
||||
|---|---:|---|
|
||||
| луч видимости: `pop_tile_at` по колонке (P2b) | 36 786 → 13 002 | один вызов на весь отрезок |
|
||||
| `pop_clip_char_top` — банк 4 → банк 3 ради одной проверки | 8 892 | не сделано (P11) |
|
||||
| `pop_trob_modif(room)` на каждый trob в цикле | не мерено | не сделано (P6a) |
|
||||
|
||||
**Что проверять в первую очередь при новом «дорогом» месте:** не сколько
|
||||
там арифметики, а сколько раз за кадр пересекается граница банка.
|
||||
|
||||
Reference in New Issue
Block a user