Ctrl+S — вкл/выкл звук; чит «выдать меч» убран

Порт Ctrl+S из SDLPoP (seg000:657).  Выключение реально закрывает CBL, а
не глушит сэмпл: иначе насос продолжал бы отдавать блоки тишины и платить
те же 3,26 % процессорного времени.

Флаг намерения pop_snd_want отдельно от pop_snd_ok: последний гасит
служебная пауза на время загрузки уровня, и правь Ctrl+S только его —
первая же смена уровня вернула бы выключенный звук.

Индикация: пурпурная палочка в борте, когда звука НЕТ (включённый слышно
и так, а молчание неотличимо от «нечему звучать»).

Чит S «выдать меч» был отладочным и больше не нужен — снят, клавиша ушла
под звук.

Замер цены звука — sound_plan.md §9: 8 001 такт на прерывание при периоде
245 759 (3,26 % времени), +2,2 % к работе кадра в сцене 11/15, период
кадра не сдвинулся ни разу.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-20 15:49:33 +03:00
parent 7e2e7fbb37
commit e0c86a96ef
7 changed files with 147 additions and 13 deletions
+11
View File
@@ -38,6 +38,17 @@ void pop_sfx_pause(void) __banked;
/* Закрыть CBL и отпустить страницы; звать на выходе. */
void pop_sfx_close(void) __banked;
/* Вкл/выкл звук по воле пользователя (Ctrl+S, порт SDLPoP seg000:657).
* Правит pop_snd_want и приводит вывод в соответствие. */
void pop_sfx_toggle(void) __banked;
/* ХОЧЕТ ЛИ ЗВУКА ПОЛЬЗОВАТЕЛЬ. Не то же самое, что «CBL открыт»: вывод
* ещё гасит служебная пауза на время загрузки уровня. Читать для
* индикации; писать — только через pop_sfx_toggle. 0 и в случае, когда
* набор вообще не поднялся (нет файлов, нет страниц) — то есть флаг
* честно means «звука не будет». */
extern uint8_t pop_snd_want;
/* Начать эффект с номером id (0..56 — нумерация оригинала, см.
* sound_plan.md). Перебивает играющий. У звуков без оцифровки (это
* музыка) длина 0 — вызов просто глушит текущий.