From 89e96637537fe9fc28d56acaa10984c2230751d0 Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Fri, 28 Aug 2026 17:36:20 +0300 Subject: [PATCH] =?UTF-8?q?SprPoP:=20=D1=81=D0=BD=D1=8F=D1=82=D1=8B=20?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20=D0=B3?= =?UTF-8?q?=D0=BB=D1=83=D1=88=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BD=D0=B0=D1=81?= =?UTF-8?q?=D0=BE=D1=81=D0=B0=20=E2=80=94=20=D0=BF=D0=BE=D1=8F=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5/=D0=B7=D0=B0=D0=BA=D1=80=D1=8B=D1=82?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BC=D0=B5=D0=BD=D1=8E,=20=D0=BD=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=B8,=20quicksave?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Продолжение предыдущего коммита: заплатка стояла не в одном месте. * открытие меню (snapshot палитры + затемнение фона + первая полная перерисовка) и закрытие (menu_erase — те же две полностраничные копии) — DI у копира бандами по 16 строк (~1,6 мс против дедлайна 11,7 мс), а палитровое затемнение идёт и в титрах с катсценами, где музыку не рвёт; * сохранение POP.CFG и проба quickload — это десятки байт и open/close; прежняя осторожность «ESTEX уходит в диск надолго» относилась к загрузке НАБОРА страниц. Подтверждение с поля: HOF пишется под звучащий «won»; * quicksave/quickload (pop_qsave.c) — единственное снятое место, где по диску реально едут 16 КБ (~три периода насоса). Помечено в комментарии: если на F6/F9 появится скрежет, вернуть pop_sfx_pause/start точечно сюда. Дисковых глушений в живом звуке больше не осталось; те, что стоят на загрузке уровня и наборов страниц, не трогали — там они по делу. Co-Authored-By: Claude Opus 5 --- applications/SprPoP/src/pop_menu.c | 23 +++++++++++++++-------- applications/SprPoP/src/pop_qsave.c | 6 ++++-- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/applications/SprPoP/src/pop_menu.c b/applications/SprPoP/src/pop_menu.c index 18bcc6f..afefd8c 100644 --- a/applications/SprPoP/src/pop_menu.c +++ b/applications/SprPoP/src/pop_menu.c @@ -556,10 +556,12 @@ static uint8_t settings_finish(uint8_t changed) int8_t rc; if (!changed) return 0; pop_settings_apply(1); - /* ESTEX может уйти в диск на много CBL-периодов. */ - pop_sfx_pause(); + /* Звук не глушим: POP.CFG — десятки байт, а на практике HOF пишется + * под звучащий «won» и насос это переживает (проверка пользователя + * 2026-08-28). Прежняя осторожность «ESTEX может уйти в диск на много + * CBL-периодов» относилась к загрузке НАБОРА страниц, а не к записи + * одного мелкого файла. */ rc = pop_cfg_save(); - (void)pop_sfx_start(); ui_notice(rc > 0 ? "SETTINGS SAVED" : "SAVE ERROR"); return 1; } @@ -650,10 +652,9 @@ static uint8_t settings_process(void) static int8_t menu_quickload(void) { uint8_t slots; - /* probe делает open/close на D:, поэтому насос в это время выключен. */ - pop_sfx_pause(); + /* probe — это только open/close на D:, данных не читает; глушить насос + * ради него незачем (см. settings_finish). */ slots = pop_qsave_probe(); - (void)pop_sfx_start(); if (slots & POP_QS_SLOT_SAVE) return POP_MENU_QUICKLOAD; if ((slots & POP_QS_SLOT_BACKUP) && ui_confirm("LOAD BACKUP?")) return POP_MENU_QUICKLOAD_BACKUP; @@ -719,7 +720,12 @@ int8_t pop_menu_process(void) __banked saved_page = gfx_get_draw_page(); saved_bank = gfx_get_bank(); getfillsettings(&saved_fill); - pop_sfx_pause(); /* snapshot/dim + первый full redraw */ + /* Звук НЕ глушим (снято 2026-08-28, вторая половина той же заплатки — + * см. ui_begin). Здесь под ней были снимок палитры, затемнение фона и + * первая полная перерисовка: копия режет DI бандами по 16 строк, а + * палитровое затемнение идёт и в титрах с катсценами, где музыку оно не + * рвёт. Цена глушения была слышна как пауза в мелодии ровно на + * появление меню. */ pop_pal_snapshot(); /* 50 % яркости; диапазон UI остаётся ярким. Долю берём от шкалы, а не * числом: ступеней стало 32 вместо четырёх, и прежняя «2» означала бы @@ -780,7 +786,8 @@ int8_t pop_menu_process(void) __banked pop_pace_end(pop_pace_n(0)); /* игра стоит — обычный темп */ } - pop_sfx_pause(); /* две full-page копии menu_erase */ + /* И на закрытии не глушим: menu_erase — те же две полностраничные + * копии, что и в ui_begin, с DI бандами по 16 строк. */ menu_erase(entry_page); /* menu_erase вернул обе страницы из тени, снятой ДО меню: всё, что * статус-полосы нарисовали за это время (или сообщение, дотикавшее в diff --git a/applications/SprPoP/src/pop_qsave.c b/applications/SprPoP/src/pop_qsave.c index 634b087..776d009 100644 --- a/applications/SprPoP/src/pop_qsave.c +++ b/applications/SprPoP/src/pop_qsave.c @@ -234,14 +234,16 @@ int8_t pop_qsave_process(void) __banked if (!blk) return -1; page=mem_get_page(blk,0); gfx_w0_page_prepare(page); - pop_sfx_pause(); + /* Звук не глушим (2026-08-28). Единственное место из снятых, где по + * диску реально едут 16 КБ (~33 мс, три периода насоса): если на F6/F9 + * появится скрежет — вернуть сюда pop_sfx_pause/pop_sfx_start, это + * лечится точечно и только здесь. */ if (request == QS_SAVE) rc = qs_save(page); else if (request == QS_LOAD_BACKUP) rc = qs_load_one("POP.BAK", page); else { rc = qs_load_one("POP.SAV",page); if (rc < 0) rc = qs_load_one("POP.BAK",page); } - pop_sfx_start(); mem_free_block(blk); /* Успех ничего не меняет: нужная строка висит с начала операции. * Отказ переписывает её на NO QUICKSAVE/NO QUICKLOAD — обычной