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;
|
int8_t rc;
|
||||||
if (!changed) return 0;
|
if (!changed) return 0;
|
||||||
pop_settings_apply(1);
|
pop_settings_apply(1);
|
||||||
/* ESTEX может уйти в диск на много CBL-периодов. */
|
/* Звук не глушим: POP.CFG — десятки байт, а на практике HOF пишется
|
||||||
pop_sfx_pause();
|
* под звучащий «won» и насос это переживает (проверка пользователя
|
||||||
|
* 2026-08-28). Прежняя осторожность «ESTEX может уйти в диск на много
|
||||||
|
* CBL-периодов» относилась к загрузке НАБОРА страниц, а не к записи
|
||||||
|
* одного мелкого файла. */
|
||||||
rc = pop_cfg_save();
|
rc = pop_cfg_save();
|
||||||
(void)pop_sfx_start();
|
|
||||||
ui_notice(rc > 0 ? "SETTINGS SAVED" : "SAVE ERROR");
|
ui_notice(rc > 0 ? "SETTINGS SAVED" : "SAVE ERROR");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -650,10 +652,9 @@ static uint8_t settings_process(void)
|
|||||||
static int8_t menu_quickload(void)
|
static int8_t menu_quickload(void)
|
||||||
{
|
{
|
||||||
uint8_t slots;
|
uint8_t slots;
|
||||||
/* probe делает open/close на D:, поэтому насос в это время выключен. */
|
/* probe — это только open/close на D:, данных не читает; глушить насос
|
||||||
pop_sfx_pause();
|
* ради него незачем (см. settings_finish). */
|
||||||
slots = pop_qsave_probe();
|
slots = pop_qsave_probe();
|
||||||
(void)pop_sfx_start();
|
|
||||||
if (slots & POP_QS_SLOT_SAVE) return POP_MENU_QUICKLOAD;
|
if (slots & POP_QS_SLOT_SAVE) return POP_MENU_QUICKLOAD;
|
||||||
if ((slots & POP_QS_SLOT_BACKUP) && ui_confirm("LOAD BACKUP?"))
|
if ((slots & POP_QS_SLOT_BACKUP) && ui_confirm("LOAD BACKUP?"))
|
||||||
return POP_MENU_QUICKLOAD_BACKUP;
|
return POP_MENU_QUICKLOAD_BACKUP;
|
||||||
@@ -719,7 +720,12 @@ int8_t pop_menu_process(void) __banked
|
|||||||
saved_page = gfx_get_draw_page();
|
saved_page = gfx_get_draw_page();
|
||||||
saved_bank = gfx_get_bank();
|
saved_bank = gfx_get_bank();
|
||||||
getfillsettings(&saved_fill);
|
getfillsettings(&saved_fill);
|
||||||
pop_sfx_pause(); /* snapshot/dim + первый full redraw */
|
/* Звук НЕ глушим (снято 2026-08-28, вторая половина той же заплатки —
|
||||||
|
* см. ui_begin). Здесь под ней были снимок палитры, затемнение фона и
|
||||||
|
* первая полная перерисовка: копия режет DI бандами по 16 строк, а
|
||||||
|
* палитровое затемнение идёт и в титрах с катсценами, где музыку оно не
|
||||||
|
* рвёт. Цена глушения была слышна как пауза в мелодии ровно на
|
||||||
|
* появление меню. */
|
||||||
pop_pal_snapshot();
|
pop_pal_snapshot();
|
||||||
/* 50 % яркости; диапазон UI остаётся ярким. Долю берём от шкалы, а не
|
/* 50 % яркости; диапазон UI остаётся ярким. Долю берём от шкалы, а не
|
||||||
* числом: ступеней стало 32 вместо четырёх, и прежняя «2» означала бы
|
* числом: ступеней стало 32 вместо четырёх, и прежняя «2» означала бы
|
||||||
@@ -780,7 +786,8 @@ int8_t pop_menu_process(void) __banked
|
|||||||
pop_pace_end(pop_pace_n(0)); /* игра стоит — обычный темп */
|
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(entry_page);
|
||||||
/* menu_erase вернул обе страницы из тени, снятой ДО меню: всё, что
|
/* menu_erase вернул обе страницы из тени, снятой ДО меню: всё, что
|
||||||
* статус-полосы нарисовали за это время (или сообщение, дотикавшее в
|
* статус-полосы нарисовали за это время (или сообщение, дотикавшее в
|
||||||
|
|||||||
@@ -234,14 +234,16 @@ int8_t pop_qsave_process(void) __banked
|
|||||||
if (!blk) return -1;
|
if (!blk) return -1;
|
||||||
page=mem_get_page(blk,0);
|
page=mem_get_page(blk,0);
|
||||||
gfx_w0_page_prepare(page);
|
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);
|
if (request == QS_SAVE) rc = qs_save(page);
|
||||||
else if (request == QS_LOAD_BACKUP) rc = qs_load_one("POP.BAK", page);
|
else if (request == QS_LOAD_BACKUP) rc = qs_load_one("POP.BAK", page);
|
||||||
else {
|
else {
|
||||||
rc = qs_load_one("POP.SAV",page);
|
rc = qs_load_one("POP.SAV",page);
|
||||||
if (rc < 0) rc = qs_load_one("POP.BAK",page);
|
if (rc < 0) rc = qs_load_one("POP.BAK",page);
|
||||||
}
|
}
|
||||||
pop_sfx_start();
|
|
||||||
mem_free_block(blk);
|
mem_free_block(blk);
|
||||||
/* Успех ничего не меняет: нужная строка висит с начала операции.
|
/* Успех ничего не меняет: нужная строка висит с начала операции.
|
||||||
* Отказ переписывает её на NO QUICKSAVE/NO QUICKLOAD — обычной
|
* Отказ переписывает её на NO QUICKSAVE/NO QUICKLOAD — обычной
|
||||||
|
|||||||
Reference in New Issue
Block a user