/* * atlas_image_w0 — адрес ленты idx для страницы, УЖЕ ПОДКЛЮЧЁННОЙ В W0. * * Отличие от atlas_image: тот читает каталог через временный мап страницы * в W3 и потому платит двумя переключениями окна. А вызывающий, который * собирается блитить, страницу в W0 мапит всё равно — и каталог там уже * лежит по тому же смещению. Значит переключать W3 незачем. * * КОНТРАКТ: страница a->page обязана быть подключена в W0 (gfx_w0_map) * ДО вызова и оставаться подключённой, пока используется результат. * Возвращает W0-адрес ленты (как atlas_image). * * Замер PoP 2026-08-19: atlas_image в горячем пути блита фона стоил 672 * такта на КАЖДЫЙ блит, а блитов в кадре до двенадцати. */ #include #include #include "../_bgi.h" const void *atlas_image_w0(const atlas_t *a, uint8_t idx) { const uint8_t *e = (const uint8_t *)(_ATL_DIR_OFF + (uint16_t)idx * 8); (void)a; /* страница уже в W0 — сам атлас не нужен */ return (const void *)(e[0] | (uint16_t)(e[1] << 8)); }