diff --git a/applications/PoP/roomtest/Makefile b/applications/PoP/roomtest/Makefile index e55d788..79a45f5 100644 --- a/applications/PoP/roomtest/Makefile +++ b/applications/PoP/roomtest/Makefile @@ -14,7 +14,7 @@ MEMORY ?= huge # small-раскладка + банки кода в W # банк1→банк2→банк1 в MAME 2026-07-30). Теперь в банки можно уводить и # логику, которая рисует. См. docs/layout_plan_v2.md §2, memory # sdcc_banked_call_rules. -EXTRA_FLAGS ?= --gfx 256 --bank 2=pop_bg.c --bank 2=pop_gdraw.c --bank 3=pop_map.c --bank 1=guards.c $(PROF_FLAGS) +EXTRA_FLAGS ?= --gfx 256 --bank 2=pop_bg.c --bank 4=pop_gdraw.c --bank 3=pop_map.c --bank 1=guards.c $(PROF_FLAGS) # Профилирование полосами бордюра (см. PROF() в roomtest.c) — ВКЛЮЧЕНО по # умолчанию, пока идёт работа с производительностью; make PROF=0 выключает. # Каждая фаза кадра красит бордюр в свой цвет, высота полосы на скриншоте diff --git a/applications/PoP/roomtest/pop_bg.c b/applications/PoP/roomtest/pop_bg.c index 6db81b5..3b94a3a 100644 --- a/applications/PoP/roomtest/pop_bg.c +++ b/applications/PoP/roomtest/pop_bg.c @@ -1592,7 +1592,7 @@ void pop_fore_over_kid(int obj_x, int obj_y, uint16_t w, uint16_t h, * (seq_77..seq_84). Появятся падающие/висящие стражи — тогда и общий * порт redraw_at_char2, а не догадки сейчас. */ void pop_fore_over_char(int obj_x, int obj_y, uint16_t w, uint16_t h, - int8_t dir) + int8_t dir) __banked { int8_t r, c; fclip_on = 1; /* окно = прямоугольник спрайта */ diff --git a/applications/PoP/roomtest/pop_bg.h b/applications/PoP/roomtest/pop_bg.h index 87c73a2..05e72ca 100644 --- a/applications/PoP/roomtest/pop_bg.h +++ b/applications/PoP/roomtest/pop_bg.h @@ -82,8 +82,11 @@ void pop_fore_set_clip(int x, int y, int w, int h) __banked; /* То же для НЕ-Kid персонажа (страж): только слой fore + полоса потолка, * без оверлеев поз виса/полёта/подъёма. obj_x — ЛОГИЧЕСКАЯ координата * (до ×8/7), как у kid_fp_obj_x(). */ +/* __banked: отрисовка стража уехала в СВОЙ банк (pop_gdraw.c), поэтому + * вызов стал кроссбанковым и обязан идти через трамплин. Зовётся раз в + * кадр, других вызывающих нет — цена одного трамплина здесь не видна. */ void pop_fore_over_char(int obj_x, int obj_y, uint16_t w, uint16_t h, - int8_t dir); + int8_t dir) __banked; /* Восстановить фон там, где в прошлых кадрах рисовался ОВЕРЛЕЙ * (draw_other_overlay/floor_overlay/полоса потолка): он выходит за diff --git a/applications/PoP/roomtest/roomtest.c b/applications/PoP/roomtest/roomtest.c index 07bc737..ac3edbf 100644 --- a/applications/PoP/roomtest/roomtest.c +++ b/applications/PoP/roomtest/roomtest.c @@ -46,8 +46,13 @@ __sfr __at (0xFE) io_border; #define PROF(n) ((void)0) #endif -/* Сколько банков грузит crt0_banked (читает его стартовый код). */ -const uint8_t n_banks = 3; +/* Сколько банков грузит crt0_banked (читает его стартовый код). + * 1 = guards (ИИ/боёвка), 2 = pop_bg (фон, fore, loose), 3 = pop_map + * (коллизия/физика), 4 = pop_gdraw (отрисовка стража + полоса HP). + * Отрисовка стража вынесена из банка 2 отдельно: тот подошёл к 16 КБ + * вплотную (16 021 из 16 384), а расти ему ещё есть куда — тайлы поздних + * уровней, чомперы, зеркало. */ +const uint8_t n_banks = 4; /* Режим читов (pop_cheat.h): на время разработки включаем в main. */ uint8_t pop_cheats;