f4b4852d51
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
83 lines
3.6 KiB
Markdown
83 lines
3.6 KiB
Markdown
# `sprinter-cc` — драйвер компилятора
|
||
|
||
Однострочный вход во всю цепочку инструментов. Принимает `.c` файлы и
|
||
опции, выдаёт SprintEXE.
|
||
|
||
## Синопсис
|
||
|
||
```
|
||
sprinter-cc -o OUT.exe SRC.c [more.c ...] [options]
|
||
```
|
||
|
||
## Опции
|
||
|
||
### Раскладка памяти
|
||
|
||
| Флаг | Описание |
|
||
|---|---|
|
||
| `--memory MODE` | `tiny` (по умолчанию), `small`, `big`, `huge`, `manual`. См. `memory_modes.md`. |
|
||
| `--memory-manual SPEC` | Для `--memory manual`: список `KEY=VAL` через запятую, например `CODE=W2,DATA=W2,BANKED=W3`. |
|
||
| `--stack-size N` | Сколько байт зарезервировать под стек. По умолчанию ≈1278. Большее значение уменьшает heap. |
|
||
|
||
### Организация кода
|
||
|
||
| Флаг | Описание |
|
||
|---|---|
|
||
| `--bank N=FILE.c` | Компилировать FILE.c в банк N (1..15). Номера без пропусков; число банков crt0 получает автоматически. Повторяемый; функции нужны с `__banked`. |
|
||
| `--crt0=TYPE` | Переопределение startup-файла: `default` / `minimal` / `banked` / `small`. Обычно выбирается автоматически по memory mode. |
|
||
|
||
### Диагностика
|
||
|
||
| Флаг | Описание |
|
||
|---|---|
|
||
| `--debug` | Подмешивает `DEBUG_RT = 1` в crt0 + передаёт `-DDEBUG_RT` в SDCC. Открывает runtime-symbols типа `_w2_self_allocated`. |
|
||
| `-v` | Verbose — печать каждой подкоманды. |
|
||
| `-h` / `--help` | Встроенная справка. |
|
||
|
||
### Pass-through
|
||
|
||
| Флаг | Описание |
|
||
|---|---|
|
||
| `-I PATH` | Дополнительный include-путь. |
|
||
| `-Wl FLAG` | Передать FLAG линкеру. |
|
||
| `--mkexe FLAG` | Передать FLAG в mkexe (например `--mkexe -p --mkexe 0` для zero-padded банков). |
|
||
| `-L 0xADDR` | Переопределить load-адрес. |
|
||
| `-E 0xADDR` | Переопределить entry-адрес. |
|
||
| `-S 0xADDR` | Переопределить стартовый стек. По умолчанию `0xBFFE`. |
|
||
|
||
## Примеры
|
||
|
||
Минимальная сборка:
|
||
```sh
|
||
sprinter-cc -o hello.exe hello.c
|
||
```
|
||
|
||
Программа побольше (не помещается в 14 КБ):
|
||
```sh
|
||
sprinter-cc --memory small -o big.exe big.c
|
||
```
|
||
|
||
Многобанковая игра:
|
||
```sh
|
||
sprinter-cc --memory huge -o game.exe \
|
||
main.c --bank 1=engine.c --bank 2=ai.c --bank 3=audio.c
|
||
```
|
||
|
||
Свой размер стека:
|
||
```sh
|
||
sprinter-cc --stack-size 4096 -o app.exe app.c
|
||
```
|
||
|
||
## Что происходит внутри
|
||
|
||
1. Выбирает crt0 на основе `--memory` (и наличия `--bank`).
|
||
2. Ассемблирует crt0 (с опциональным `DEBUG_RT` / `BANK_W1`).
|
||
3. Ассемблирует `heap_top.s` (custom значение если `--stack-size`).
|
||
4. Каждый `.c` → `.rel` через SDCC.
|
||
5. Bank-исходники компилируются с `--codeseg/--constseg/--dataseg BANK_n`.
|
||
6. Компилирует trampoline `runtime/bank.s` (если есть банки).
|
||
7. Линкует всё в `.ihx`, запускает `check_banks.py` для проверки 16 КБ лимита.
|
||
8. Вызывает `toolchain/mkexe/mkexe` для упаковки `.ihx` в SprintEXE.
|
||
|
||
Промежуточные файлы лежат в `.sprinter-cc-<basename>/` рядом с выходным.
|