Резидент: pop_redraw + холодная половина pop_level в банки (902 -> 3525 Б кучи)
MEM-COLD3, шаг 1-2 из плана разгрузки резидента: * pop_redraw.c целиком -> банк 7 (к pop_room.c: он и есть единственный потребитель разбора пометок). Два модуля в одном банке линкуются в один сегмент — проверено на .map (BANK7 7928 -> 8556). * pop_level.c расколот по частоте вызова: горячая половина (чтение тайлов, связи, дверные таблицы, живые стражи — зовут все банки, местами на каждый тайл) осталась в резиденте, холодная (чтение файла уровня, разбор комнаты, рестарт, потабличные различия) уехала в pop_level_cold.c -> банк 8. Общее состояние объявлено в _pop_level.h: данные банковых модулей всё равно линкуются в общий _DATA, в банк уехал только КОД. Побочно найден баг кодогена SDCC: `return 1;` из ветки не кладёт 1 в A — до __banked он маскировался случайным ненулевым остатком в A. Репро и разбор — docs/bugs/sdcc-z80-ret-const-lost/, стаб t_char починен одним выходом через переменную. Аудит всех .asm roomtest: других мест нет. _CODE 25628 -> 23005, куча 902 -> 3525 Б. tests-host 6/6.
This commit is contained in:
@@ -39,14 +39,14 @@
|
||||
/* Пометить тайл/колонку: kind — вид, pages — на скольких страницах
|
||||
* дабл-буфера перерисовать (1 = только текущая, 2 = обе). Повторная
|
||||
* пометка перекрывает вид и берёт максимум счётчика. */
|
||||
void pop_set_redraw(uint8_t tilepos, uint8_t kind, uint8_t pages);
|
||||
void pop_set_redraw_above(uint8_t col, uint8_t kind, uint8_t pages);
|
||||
void pop_set_redraw(uint8_t tilepos, uint8_t kind, uint8_t pages) __banked;
|
||||
void pop_set_redraw_above(uint8_t col, uint8_t kind, uint8_t pages) __banked;
|
||||
|
||||
/* Разобрать пометки: нарисовать всё помеченное на ТЕКУЩЕЙ (back) странице и
|
||||
* уменьшить счётчики. Звать из главного цикла в слое ФОНА — до персонажей. */
|
||||
void pop_redraw_needed(void);
|
||||
void pop_redraw_needed(void) __banked;
|
||||
|
||||
/* Сбросить все пометки (смена комнаты/уровня). */
|
||||
void pop_redraw_reset(void);
|
||||
void pop_redraw_reset(void) __banked;
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user