Files
Sprinter-SDCC/release_docs/ru/sprinter_cc.md
T
snark13 f4b4852d51 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
2026-08-22 11:53:10 +03:00

83 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# `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>/` рядом с выходным.