SprPoP: сняты остальные глушения насоса — появление/закрытие меню, настройки, quicksave
Продолжение предыдущего коммита: заплатка стояла не в одном месте. * открытие меню (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 <noreply@anthropic.com>
This commit is contained in:
@@ -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 вернул обе страницы из тени, снятой ДО меню: всё, что
|
||||
* статус-полосы нарисовали за это время (или сообщение, дотикавшее в
|
||||
|
||||
@@ -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 — обычной
|
||||
|
||||
Reference in New Issue
Block a user