/* * pop_qsave.h — потоковый QuickSave/QuickLoad одного игрового слота. * * На диске используются POP.NEW, POP.SAV и POP.BAK. Формат не содержит * указателей, файловых дескрипторов и графических кэшей; многобайтные поля * записываются явно little-endian. Внутренние функции pop_qs_* нужны * модулям-владельцам закрытого состояния. */ #ifndef POP_QSAVE_H #define POP_QSAVE_H #include typedef struct { uint8_t page; uint16_t pos; uint16_t limit; uint16_t checksum; uint16_t count; uint8_t reading; uint8_t apply; uint8_t failed; } pop_qs_io_t; void pop_qs_bytes(pop_qs_io_t *io, void *data, uint16_t size); void pop_qs_u8(pop_qs_io_t *io, uint8_t *value); void pop_qs_i8(pop_qs_io_t *io, int8_t *value); void pop_qs_u16(pop_qs_io_t *io, uint16_t *value); void pop_qs_i16(pop_qs_io_t *io, int *value); void pop_qs_raw_put(pop_qs_io_t *io, const uint8_t *data, uint8_t size); uint8_t pop_qs_raw_get(pop_qs_io_t *io, uint8_t *data, uint8_t size); uint16_t pop_qs_checksum_page(uint8_t page, uint16_t pos, uint16_t size); /* Вызывается в безопасной границе кадра. Возвращает: 0 — запроса нет, * 1 — сохранено/загружено, -1 — ошибка. */ int8_t pop_qsave_process(void) __banked; void pop_qsave_request_save(void); void pop_qsave_request_load(void); void pop_qsave_request_load_backup(void); /* Валидность слотов без изменения состояния игры. Нужна menu для вопроса * LOAD BACKUP?: основной SAV уже пригоден, backup спрашиваем только если * основной отсутствует или повреждён. */ #define POP_QS_SLOT_SAVE 0x01 #define POP_QS_SLOT_BACKUP 0x02 uint8_t pop_qsave_probe(void) __banked; #endif