Резидент W1/W2: данные pop_room и pop_trob — в свои банки (−2546 Б)
sprinter-cc: новый повторяемый --bank-data=SRC — писучие данные ОДНОГО банкового модуля в его же страницу. Прежний --bank-data был всё-или-ничего и потому неприменим: у большинства банковых модулей часть глобалов читают соседние банки и резидент (hitp_*, pop_upside, pop_loose_modif, pop_cd), и такие данные обязаны остаться замапленными всегда. Кандидаты отобраны по объектным файлам, а не на глаз: символ должен быть Def только в своём .rel и нигде не Ref. Прошли ровно двое — pop_room (_mobs не читает никто) и pop_trob (экспортируемых данных нет вовсе). При любом --bank-data sprinter-cc сам добавляет mkexe -p 0: crt0 зануляет только резидентный _DATA, а mkexe по умолчанию бьёт пустоты 0xFF — иначе вся банковая статика поднялась бы мусором. Итог: данные в W2 6774 -> 4228, свободно до стека 129 -> 2675 Б. BANK7 87 %, BANK6 31 %. Проверено в MAME: уровень 1, комнаты 1-2, фон, факелы, решётки, проваливающиеся полы, переход между комнатами. Метод замера и оставшиеся кандидаты — docs/resident_budget.md. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -35,7 +35,16 @@ MEMORY ?= huge # small-раскладка + банки кода в W
|
||||
# ВАЖНО: любое сравнение занятости банков имеет смысл только при ОДНОМ и том
|
||||
# же ALLOCS — иначе сравниваются не правки, а уровни оптимизации.
|
||||
ALLOCS ?= 3000
|
||||
EXTRA_FLAGS ?= --gfx 256 -I $(CURDIR)/../poc/res/bg --max-allocs $(ALLOCS) --bank 2=pop_bg.c --bank 7=pop_room.c --bank 4=pop_cdraw.c --bank 4=pop_kdraw.c --bank 3=pop_map.c --bank 1=guards.c --bank 5=pop_ctrl.c --bank 6=pop_trob.c --bank 7=pop_redraw.c --bank 8=roomtest_cold.c --bank 8=pop_level_cold.c --bank 8=pop_kboot.c --bank 8=pop_guard_cold.c --bank 8=pop_shadow.c --bank 8=pop_sfx_cold.c $(PROF_FLAGS)
|
||||
# Писучие данные ЭТИХ банковых модулей живут в их же странице, а не в
|
||||
# резиденте W1/W2 — это 2549 Б, которые иначе съедала бы база. Список
|
||||
# короткий не по лени: у остальных банковых модулей часть глобалов читают
|
||||
# соседние банки и резидент (hitp_*, pop_upside, pop_loose_modif, pop_cd),
|
||||
# и такие данные ОБЯЗАНЫ остаться замапленными всегда. Проверять новичка в
|
||||
# списке — по объектным файлам: символ должен быть Def только в своём .rel и
|
||||
# нигде не Ref (см. ../docs/resident_budget.md).
|
||||
BANK_DATA := --bank-data=pop_room.c --bank-data=pop_trob.c
|
||||
|
||||
EXTRA_FLAGS ?= --gfx 256 -I $(CURDIR)/../poc/res/bg --max-allocs $(ALLOCS) --bank 2=pop_bg.c --bank 7=pop_room.c --bank 4=pop_cdraw.c --bank 4=pop_kdraw.c --bank 3=pop_map.c --bank 1=guards.c --bank 5=pop_ctrl.c --bank 6=pop_trob.c --bank 7=pop_redraw.c --bank 8=roomtest_cold.c --bank 8=pop_level_cold.c --bank 8=pop_kboot.c --bank 8=pop_guard_cold.c --bank 8=pop_shadow.c --bank 8=pop_sfx_cold.c $(BANK_DATA) $(PROF_FLAGS)
|
||||
# Профилирование полосами бордюра (см. PROF() в roomtest.c) — ВКЛЮЧЕНО по
|
||||
# умолчанию, пока идёт работа с производительностью; make PROF=0 выключает.
|
||||
# Каждая фаза кадра красит бордюр в свой цвет, высота полосы на скриншоте
|
||||
|
||||
Reference in New Issue
Block a user