QuickSave F6/F9 в roomtest; bank_load_file/bank_save_file/gfx_w0_page_prepare; sprinter-cc: авто n_banks
roomtest: - QuickSave/QuickLoad (F6/F9): снапшот 'POPQ' v3 в POP.SAV/POP.BAK на HDD, транзакционная запись (POP.NEW -> rename, откат при ошибке), XOR-контрольная сумма payload'а; сериализация всех игровых переменных через W0-примитивы pop_qs_*; pop_qsave_process() на границе кадра вне Char-окон - pop_qsave_restore_room(): полная перезагрузка комнаты после загрузки (карта/края/швы, сброс bake-кэша, перерисовка обеих страниц, инвалидация кэшей спрайтов и HP) - сериализаторы в pop_map/pop_loose_mob/pop_trob/pop_guard_ai (+ восстановление инвариантов: mobs_live, trob_drawn, redraw) - immortal-чит 2 уровня: уровень 2 поглощает только малый урон Kid'а libc/libbgi: - bank_load_file()/bank_save_file() — резидентное файловое I/O в банк, без правила W3 (путь читается до переключения страницы) - gfx_w0_page_prepare(page) — подготовка W0-окна (IRQ/NMI-стабы) одной функцией; atlas_load.c и roomtest переведены на новые примитивы; ручные ISR-стабы удалены sprinter-cc / сборка: - --bank N=FILE.c: автогенерация n_banks (_n_banks_auto.c), ручные const n_banks удалены из тестов - roomtest/app.mk: ресурсы через stamp-файлы (.resource-stamps/) — один запуск упаковщика на группу вместо N под -B; HDD_PACK_ARGS
This commit is contained in:
@@ -2,9 +2,6 @@
|
||||
#include <stdint.h>
|
||||
#include <sprinter.h>
|
||||
|
||||
/* crt0_banked.s reads this constant to know how many banks to load. */
|
||||
const uint8_t n_banks = 2;
|
||||
|
||||
void bank1_func(int x) __banked;
|
||||
void bank2_func(int x) __banked;
|
||||
|
||||
|
||||
@@ -13,9 +13,6 @@
|
||||
#include <stdint.h>
|
||||
#include <sprinter.h>
|
||||
|
||||
/* crt0_banked.s reads this constant to know how many banks to load. */
|
||||
const uint8_t n_banks = 2;
|
||||
|
||||
void bank1_func(int x) __banked;
|
||||
void bank2_func(int x) __banked;
|
||||
|
||||
|
||||
@@ -18,11 +18,6 @@ extern void bank1_map_print(void) __banked;
|
||||
extern uint8_t *bank1_alloc_and_fill(int n, uint8_t pattern) __banked;
|
||||
extern void bank1_free (void *p) __banked;
|
||||
|
||||
/* MUST be `const`: crt0_banked reads _n_banks BEFORE gsinit, so
|
||||
* non-const initialized variables haven't been copied yet and would
|
||||
* read 0 → bank loading is skipped → garbage in window 3. */
|
||||
const uint8_t n_banks = 1;
|
||||
|
||||
uint8_t local0_buf[16];
|
||||
|
||||
|
||||
|
||||
@@ -2,9 +2,6 @@
|
||||
#include <stdint.h>
|
||||
#include <sprinter.h>
|
||||
|
||||
/* crt0_banked.s reads this constant to know how many banks to load. */
|
||||
const uint8_t n_banks = 2;
|
||||
|
||||
void bank1_func(void) __banked;
|
||||
void bank2_func(void) __banked;
|
||||
void bank1_func2(uint16_t) __banked;
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
#include <stdint.h>
|
||||
#include <sprinter.h>
|
||||
|
||||
const uint8_t n_banks = 1; /* читает crt0_banked */
|
||||
|
||||
extern uint8_t res_page_seen;
|
||||
uint8_t bank_page_before, bank_page_after, bank_page_after_home, bank_alive;
|
||||
extern uint8_t bank_pages[];
|
||||
|
||||
@@ -7,9 +7,6 @@
|
||||
#include <stdint.h>
|
||||
#include <sprinter.h>
|
||||
|
||||
/* crt0_banked читает это ДО gsinit — только `const`. */
|
||||
const uint8_t n_banks = 1;
|
||||
|
||||
void bigbank_func(void) __banked; /* W1-банк, трамплин */
|
||||
extern uint8_t w3_probe(uint8_t x); /* W3-резидент, прямо */
|
||||
extern void w3_show(void);
|
||||
|
||||
@@ -12,8 +12,6 @@
|
||||
#include <stdint.h>
|
||||
#include <sprinter.h>
|
||||
|
||||
const uint8_t n_banks = 1; /* один свапаемый W3-банк */
|
||||
|
||||
void hugebank_func(void) __banked; /* W3-банк, трамплин */
|
||||
extern uint8_t w3_probe(uint8_t x); /* W3-резидент, прямой вызов */
|
||||
extern void w3_show(void); /* W3-резидент, прямой вызов */
|
||||
|
||||
Reference in New Issue
Block a user