Реестр: P4 откачен, добавлен P17 (разрядность)
P4 (каталог из W0) отменён по критерию пользователя: 408 тактов не стоят второй публичной функции в libbgi с неявным контрактом «страница уже подключена». Знание сохранено: gfx_w0_map стоит 324, поэтому потолок непробованной части P4 — около 2 600, а не 10 000. P17 — по замечанию пользователя про 16 бит там, где хватает 8: границы экрана беззнаковыми сравнениями (-378) и габариты спрайтов в uint8_t (-276 в статике, -1 134 в циане динамики, плюс 24 байта _DATA). Бюджет: лёгкая 438 324, тяжёлая 603 684. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -337,10 +337,38 @@ heal 141 048 + отрисовка 148 566 = 290 000 тактов (36 % рабо
|
||||
(0,8), где он и стоит. Там фон честно меняется, и оригинал персонажа тоже
|
||||
перерисовывает.
|
||||
|
||||
### P4. Накладные блита — ЧАСТИЧНО, эффект много меньше ожидаемого
|
||||
### P17. 16 бит там, где хватает 8 ✅ 2026-08-19 (замечание пользователя)
|
||||
|
||||
**Сделано 2026-08-19: каталог атласа читается из W0** (`atlas_image_w0` в
|
||||
libbgi) вместо переключения W3 в `atlas_image`. **−408 на кадре.**
|
||||
**1. Границы экрана — беззнаковыми сравнениями.** Проверка «спрайт целиком
|
||||
на экране» стояла как четыре ЗНАКОВЫХ 16-битных сравнения, а знаковое у
|
||||
SDCC z80 разворачивается в `sbc` плюс `jp PO / xor 0x80 / jp P`.
|
||||
Беззнаковая форма делает то же двумя: отрицательная координата становится
|
||||
очень большой и проваливает условие так же, как `>= 0`. **−378.**
|
||||
|
||||
**2. Габариты спрайтов в байтах.** `w`/`h`, `ow`/`oh`, `fpw`/`fph`,
|
||||
`cw`/`ch` в `pop_cdraw_t`, параметры `cd_overlay_add`/`cd_clip_add`, локали
|
||||
в `pop_char_draw`/`cd_splash` и чтение габарита из шапки ленты были
|
||||
`uint16_t`, хотя спрайты атласов не крупнее 64×64 (memory
|
||||
`pop_sprite_size_limits`). **−276 в статике, −1 134 в циане динамики**,
|
||||
плюс 24 байта `_DATA`.
|
||||
|
||||
### P4. Накладные блита — ОТКАЧЕНО
|
||||
|
||||
**Правка сделана и отменена по решению пользователя.** Критерий: если
|
||||
выигрыш получен ценой сильно усложнённого кода — откатывать.
|
||||
|
||||
Что было: `atlas_image_w0` в libbgi читал каталог из уже подключённой в W0
|
||||
страницы. **−408 на кадре** при ожидании −5 400.
|
||||
|
||||
Почему откачено: цена — вторая публичная функция в API libbgi с НЕЯВНЫМ
|
||||
контрактом («страница обязана быть подключена до вызова»), которую легко
|
||||
вызвать неправильно и молча получить мусор, плюс дублирование чтения
|
||||
каталога. 408 тактов — 0,09 % кадра, меньше разброса между прогонами.
|
||||
|
||||
**Что осталось знанием:** сам `gfx_w0_map` стоит всего **324** такта, а 672
|
||||
у `atlas_image` — это почти целиком вызов функции и арифметика `idx * 8`.
|
||||
Значит непробованная часть P4 («один map на группу блитов») имеет потолок
|
||||
~2 600 за кадр, а не 10 000, как считалось.
|
||||
|
||||
Ожидание было −5 400 (672 такта × 8 блитов зелёной фазы), и оно НЕ
|
||||
оправдалось: цена блита 16 107 → 16 005, то есть −102. Причина в том, что
|
||||
@@ -560,8 +588,9 @@ BUG-LATTICE-DOORTOP, BUG-SEAM-WEDGE-1) — только отдельным за
|
||||
| **после P15, лёгкая** | **464 796** | 223 902 | 181 494 | **59 406** | 4 |
|
||||
| после P15, тяжёлая | 617 487 | 245 808 | 181 761 | 192 090 | **4 везде** |
|
||||
| после P16, лёгкая | 438 978 | 218 052 | 181 494 | 39 438 | 4 |
|
||||
| **после P4, лёгкая** | **438 570** | 217 824 | 181 086 | 39 210 | 4 |
|
||||
| **после P4, тяжёлая** | **602 574** | 242 082 | 181 347 | 181 404 | 4 |
|
||||
| ~~после P4~~ | ~~438 570~~ | | | | правка **ОТКАЧЕНА** |
|
||||
| **после P17, лёгкая** | **438 324** | 217 590 | 181 098 | 39 192 | 4 |
|
||||
| **после P17, тяжёлая** | **603 684** | 241 956 | 181 464 | 180 270 | 4 |
|
||||
|
||||
Итог восьми позиций: **801 768 → 464 796 в лёгкой позиции (−42 %)** и
|
||||
**758 358 → 617 487 в тяжёлой (−19 %)**. Отдельно важно: в тяжёлой позиции
|
||||
@@ -572,8 +601,8 @@ BUG-LATTICE-DOORTOP, BUG-SEAM-WEDGE-1) — только отдельным за
|
||||
Цель: работа ≤ 430 000, тогда период станет 3 растра (хвост кадра — три
|
||||
`gfx_wait_vsync`).
|
||||
|
||||
- в ЛЁГКОЙ позиции снять надо **8 570**;
|
||||
- в ТЯЖЁЛОЙ — **172 574**.
|
||||
- в ЛЁГКОЙ позиции снять надо **8 324**;
|
||||
- в ТЯЖЁЛОЙ — **173 684**.
|
||||
|
||||
**Лёгких путей больше не осталось.** За 2026-08-19 отвергнуто ЧЕТЫРЕ
|
||||
правки подряд (три с регрессом, одна почти без эффекта), и все они целили
|
||||
|
||||
Reference in New Issue
Block a user