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:
@@ -28,6 +28,18 @@
|
||||
uint8_t pop_snd_page[POP_SND_PAGES];
|
||||
uint8_t pop_snd_ok;
|
||||
|
||||
/* ХОЧЕТ ЛИ ЗВУКА ПОЛЬЗОВАТЕЛЬ (Ctrl+S) — отдельно от pop_snd_ok.
|
||||
*
|
||||
* Разделять обязательно: pop_snd_ok значит «CBL сейчас открыт», и его
|
||||
* гасит служебная пауза на время загрузки уровня. Если бы Ctrl+S правил
|
||||
* только его, то первая же смена уровня позвала бы pop_sfx_start() и
|
||||
* вернула звук, который пользователь выключил. Поэтому start уважает
|
||||
* этот флаг, а pause его не трогает.
|
||||
*
|
||||
* Живёт в резиденте, а не в банке: метку в борте рисует отладочный ярлык
|
||||
* каждый кадр, и тащить ради одного байта трамплин незачем. */
|
||||
uint8_t pop_snd_want;
|
||||
|
||||
/* Курсор проигрывания. volatile: пишет главный цикл, читает прерывание.
|
||||
* Всё в 8/16 бит — 32-битной арифметики на Z80 избегаем (см. memory
|
||||
* avoid_32bit_arith_z80); поэтому и в таблице смещение уже разобрано на
|
||||
|
||||
Reference in New Issue
Block a user