docs(PoP): план v2 — результат пробника банка (модель подтверждена)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -20,7 +20,7 @@
|
|||||||
| 3. `pop_map` без вызовов графики | **сделан** (фазы 1a/1b) | через пометки перерисовки, см. ниже |
|
| 3. `pop_map` без вызовов графики | **сделан** (фазы 1a/1b) | через пометки перерисовки, см. ниже |
|
||||||
| 4. Разгрузка/перебалансировка W3 | **сделан** | в резиденте остался ТОЛЬКО `pop_bg`; W3 14 376 → 11 632 (свободно 4 752 Б) |
|
| 4. Разгрузка/перебалансировка W3 | **сделан** | в резиденте остался ТОЛЬКО `pop_bg`; W3 14 376 → 11 632 (свободно 4 752 Б) |
|
||||||
| 5. Данные (`room_modif`, `dl1/dl2`, `_kbdraw_down`) | не начат | потенциал ~1.5 КБ |
|
| 5. Данные (`room_modif`, `dl1/dl2`, `_kbdraw_down`) | не начат | потенциал ~1.5 КБ |
|
||||||
| 6. Контракт банка стражей + пробник | **в работе** | пробник `tests/w3bankgfx` |
|
| 6. Контракт банка стражей + пробник | **пробник сделан** | `tests/w3bankgfx` — модель подтверждена в MAME, см. ниже |
|
||||||
| 7. Дедуп семейства `draw_tile` | отложен по решению пользователя | «мороки много, выгода не так велика» |
|
| 7. Дедуп семейства `draw_tile` | отложен по решению пользователя | «мороки много, выгода не так велика» |
|
||||||
|
|
||||||
**Замер сейчас против замера §1:** `_CODE` 24 881 → 24 421, куча W2 2 076 → 2 592 Б,
|
**Замер сейчас против замера §1:** `_CODE` 24 881 → 24 421, куча W2 2 076 → 2 592 Б,
|
||||||
@@ -44,6 +44,28 @@ W3-резидент 14 376 → 11 632 (свободно 2 008 → 4 752 Б). С
|
|||||||
отдельная подсистема (`mobs` + `draw_moving`), разделение на логику и
|
отдельная подсистема (`mobs` + `draw_moving`), разделение на логику и
|
||||||
отрисовку — задел следующей фазы.
|
отрисовку — задел следующей фазы.
|
||||||
|
|
||||||
|
### Пробник банка (2026-07-29): модель ПОДТВЕРЖДЕНА
|
||||||
|
|
||||||
|
`tests/w3bankgfx` (huge + `--w3 res.c` + `--bank 1=bank1.c`, графика 256):
|
||||||
|
|
||||||
|
- банк рисует примитивом libbgi НАПРЯМУЮ — работает; страница W3 внутри
|
||||||
|
банка до блита, после блита и после возврата из вызванной им W1/W2-функции
|
||||||
|
одна и та же (0xF0), резидент — 0xF3. То есть `_bgi_begin`/`_bgi_end`
|
||||||
|
корректно возвращают ИМЕННО банковую страницу (правило R4);
|
||||||
|
- вызов W1/W2-функции из банка работает, и она тоже может рисовать;
|
||||||
|
- резидент W3 жив и вызывается после возврата из банка (R3).
|
||||||
|
|
||||||
|
**Дополнительно выяснено (важно для стражей):** писучие статики
|
||||||
|
`__banked`-модуля линкуются В СТРАНИЦУ БАНКА (0x1C000+) — снаружи их не
|
||||||
|
прочитать, из W1/W2 по 0xC000 видна резидентная страница. Значит всё
|
||||||
|
состояние банкованного кода (позиции стражей, таймеры боя) обязано жить в
|
||||||
|
W1/W2 как обычные глобалы, а банк — только код.
|
||||||
|
|
||||||
|
Ещё одна мина, найденная там же: инлайновый `in a,(#0xE2)` посреди тела
|
||||||
|
функции затирает A, куда SDCC уже положил параметр (у нас из-за этого цвет
|
||||||
|
заливки стал номером страницы, и «резидент не рисовал»). Читать порт
|
||||||
|
отдельной `__naked`-функцией.
|
||||||
|
|
||||||
### Найденная по дороге ловушка компилятора
|
### Найденная по дороге ловушка компилятора
|
||||||
|
|
||||||
`(const T *)КОНСТАНТА + var*K` SDCC 4.5 может собрать неверно: умножение
|
`(const T *)КОНСТАНТА + var*K` SDCC 4.5 может собрать неверно: умножение
|
||||||
|
|||||||
Reference in New Issue
Block a user