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

3.6 KiB
Raw Blame History

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.

Примеры

Минимальная сборка:

sprinter-cc -o hello.exe hello.c

Программа побольше (не помещается в 14 КБ):

sprinter-cc --memory small -o big.exe big.c

Многобанковая игра:

sprinter-cc --memory huge -o game.exe \
    main.c --bank 1=engine.c --bank 2=ai.c --bank 3=audio.c

Свой размер стека:

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>/ рядом с выходным.