/* * atlas_load — загрузить .atl-файл в свежую EMM-страницу (§3.1/§9в * дизайна, вариант II: файл-офсет == офсет страницы == W0-адрес). * * Порядок: выделить страницу → bank_load_file() → atlas_attach (магия * 'SPA1' + gfx_w0_page_prepare). Никакого пересчёта офсетов: каталог и * ленты уже лежат по своим W0-адресам. * * Кто держит атласы в АРХИВЕ, а не отдельными файлами, повторяет ту же * пару вызовов со своим чтением: mem_alloc_pages + своё чтение в страницу * + atlas_attach. * * Вызывать ВНЕ рендера (W3 на время загрузки занята страницей атласа). * Ошибки: -1 + errno (open/read/alloc; EINVAL — не .atl). */ #include #include #include "../_bgi.h" int atlas_load(atlas_t *a, const char *path) { uint8_t blk, page; int n; blk = mem_alloc_pages(1); if (!blk) return -1; page = mem_get_page(blk, 0); /* Не затирать errno от open/read: вызывающему важно отличить отсутствие * файла или короткое чтение от файла, который действительно не .atl. */ n = bank_load_file(page, 0, path, 16384); return atlas_attach(a, blk, page, n); }