/* * Сериализация уровня для QuickSave (банк 8). * * Код выполняется только по F6/F9 и вынесен из горячего резидентного * pop_level.c. Данные уровня и снимка используют одно окно W0, поэтому * foretable переносится небольшими блоками через стековый буфер W2. */ #include #include "pop_level.h" #include "_pop_level.h" void pop_level_qsave(pop_qs_io_t *io) { uint8_t tmp[30]; uint16_t off; pop_qs_bytes(io, pop_dl1, sizeof(pop_dl1)); pop_qs_bytes(io, pop_dl2, sizeof(pop_dl2)); pop_qs_bytes(io, pop_gstate, sizeof(pop_gstate)); if (!pop_lvl_ok) { io->failed = 1; return; } /* W0 одновременно не может держать страницу уровня и страницу снимка. */ for (off = 0; off < 24u * ROOM_TILES; off += sizeof(tmp)) { uint8_t i; if (!io->reading || io->apply) { gfx_w0_map(pop_lvl_page); if (!io->reading) for (i=0; ireading && io->apply && !io->failed) { gfx_w0_map(pop_lvl_page); for (i=0; i