From 06a1772011fa101840a8115122cefd41c686c60a Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Wed, 26 Aug 2026 10:21:55 +0300 Subject: [PATCH] =?UTF-8?q?Fade:=2032=20=D1=81=D1=82=D1=83=D0=BF=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=20=D1=8F=D1=80=D0=BA=D0=BE=D1=81=D1=82=D0=B8=20?= =?UTF-8?q?=E2=80=94=20=D0=BD=D0=B0=20=D0=B3=D0=BB=D0=B0=D0=B7=20=D0=BD?= =?UTF-8?q?=D0=B5=D0=BE=D1=82=D0=BB=D0=B8=D1=87=D0=B8=D0=BC=D0=BE=20=D0=BE?= =?UTF-8?q?=D1=82=20=D0=BE=D1=80=D0=B8=D0=B3=D0=B8=D0=BD=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=2064?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Шестнадцать ступеней на 2,13 с давали различимую лесенку (0,13 с на шаг). Тридцать две меняются каждые 66 мс — это уже слитное затухание. Запас на них есть: ступень стоит 487 тысяч тактов, тридцать три съедают около сорока кадров из ста шести, остальное цикл ждёт луча. Длительность каждого fade остаётся оригинальной (128 тиков), поэтому сумма «fade in + сцена + fade out» совпадает с SDLPoP без правки самих сцен. Co-Authored-By: Claude Opus 5 --- applications/PoP/docs/sound_plan.md | 7 +++++-- applications/PoP/roomtest/pop_ui.c | 6 +++--- applications/PoP/roomtest/pop_ui.h | 16 +++++++++------- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/applications/PoP/docs/sound_plan.md b/applications/PoP/docs/sound_plan.md index 5e98bb2..15fc293 100644 --- a/applications/PoP/docs/sound_plan.md +++ b/applications/PoP/docs/sound_plan.md @@ -899,8 +899,11 @@ load_intro у оригинала и так начинается с ожидан тика, 128 тиков = 2,13 с; сцена перед уровнем 2 занимает с ними около семи секунд. Наши четыре ступени укладывались в восемь сотых секунды, и сцена выходила втрое короче. Теперь `INTRO_FADE = POP_T60(128)`, а ступеней в -`pop_ui_palette_dim` шестнадцать вместо четырёх: на четырёх растянутых -ступенях затемнение выглядело бы скачками. +`pop_ui_palette_dim` тридцать две вместо четырёх: на четырёх растянутых +ступенях затемнение выглядело бы скачками. Половина от оригинальных 64 — +на глаз от них не отличается (ступень каждые 66 мс), а вот шестнадцать уже +видно. Сумма «fade in + сцена + fade out» при этом совпадает с оригиналом +сама собой: длительность каждого fade та же, что у fade_*_1. **Цена ступени** (замеры в MAME 2026-08-26, такты 21 МГц; кадр 430 000): diff --git a/applications/PoP/roomtest/pop_ui.c b/applications/PoP/roomtest/pop_ui.c index 9a84bc6..a4d411e 100644 --- a/applications/PoP/roomtest/pop_ui.c +++ b/applications/PoP/roomtest/pop_ui.c @@ -192,10 +192,10 @@ void pop_ui_palette_dim(uint8_t dim_step, uint8_t keep_ui) __banked uint8_t mul = (uint8_t)(POP_PAL_DIM_BLACK - dim_step); uint16_t v = 0; - /* Без умножения вовсе: значение растёт на mul/16 с каждым шагом, - * дробная часть копится в младших четырёх битах аккумулятора. */ + /* Без умножения вовсе: значение растёт на mul/32 с каждым шагом, + * дробная часть копится в младших пяти битах аккумулятора. */ for (i = 0; ; i++) { - lut[i] = (uint8_t)(v >> 4); + lut[i] = (uint8_t)(v >> 5); v += mul; if (i == 255) break; } diff --git a/applications/PoP/roomtest/pop_ui.h b/applications/PoP/roomtest/pop_ui.h index 6c2d3ed..6d3d44d 100644 --- a/applications/PoP/roomtest/pop_ui.h +++ b/applications/PoP/roomtest/pop_ui.h @@ -35,12 +35,13 @@ void pop_text_right_mapped(pop_text_font_t font, int right, int baseline, /* Снимок обеих (идентичных по контракту) палитр хранится в свободном хвосте * FONT.ATL. dim_step: 0 — исходная, POP_PAL_DIM_BLACK — чёрная; между ними - * равные ступени яркости (step/16). Шестнадцать, а не четыре, потому что - * fade оригинала длится 2,13 с: на четырёх ступенях это четыре заметных - * скачка, а не затухание. + * равные ступени яркости (step/32). Тридцать две, а не четыре: fade + * оригинала длится 2,13 с, и на четырёх ступенях это четыре заметных + * скачка вместо затухания. Половина от оригинальных 64 — на глаз разницы + * с ними нет, а вот шестнадцать уже видно. * keep_ui сохраняет диапазон 0x37..0x3F ярким для текста/рамки меню. */ void pop_ui_palette_snapshot(void) __banked; -#define POP_PAL_DIM_BLACK 16 +#define POP_PAL_DIM_BLACK 32 /* СКОЛЬКО КАДРОВ ЖДАТЬ, чтобы fade длился столько же, сколько у оригинала * (fade_in_1/fade_out_1 — 64 шага по 2 тика = 128 тиков = 2,13 с, то есть @@ -48,9 +49,10 @@ void pop_ui_palette_snapshot(void) __banked; * * Ждать все 106 нельзя: пересчёт палитры не бесплатен — 487 тысяч тактов * на ступень, то есть чуть больше кадра (замер в MAME 2026-08-26; из них - * 136 тысяч уходит на заливку через BIOS). Семнадцать ступеней съедают - * около двадцати кадров, и без вычитания fade растянулся бы длиннее - * заказанного. */ + * 136 тысяч уходит на заливку через BIOS). Тридцать три ступени съедают + * около сорока кадров, и без вычитания fade растянулся бы в полтора раза + * длиннее заказанного. Ступень при этом меняется каждые 66 мс — на глаз + * это уже слитное затухание, а не лесенка. */ #define POP_FADE_STEP_FRAMES 1 /* цена одного пересчёта, кадров луча */ #define POP_FADE_FRAMES (106 - (POP_PAL_DIM_BLACK + 1) * POP_FADE_STEP_FRAMES)