diff --git a/handoff/BLOCKMAP_529fe0.md b/handoff/BLOCKMAP_529fe0.md index edb7f4d..1eb6825 100644 --- a/handoff/BLOCKMAP_529fe0.md +++ b/handoff/BLOCKMAP_529fe0.md @@ -668,3 +668,33 @@ mask = bands_final^γ точно ⇒ γ возникает между scratch=lo 688 — сами bands_final (или их exp-копия). «track» — имя рендерснапа. - 678 ПОСЛЕ цикла = bands_final; применённая маска перезаписывает поверх (финальный combine) — поэтому захваченный 678 матчит аудио. + +## ДОПОЛНЕНИЕ 24mm6: ПЕРЕД EXP В FIR — УМНОЖЕНИЕ НА 2.0 (не −1!); гипотеза γ=2·k_design + +### Точная последовательность 52b60c–52b720 (проверено, без пропусков) +``` +rcx=[540628](scratch), rdx=[r15](источник design — уточнить r15!) +call 535a70 → swap → 1802a24c0(scratch ← DESIGN(src)) +th2210: FIR(@540668) ← scratch (copy, edx=0) +opB: th2180(FIR, buf548|550, buf598) ; complex pass +FIR[n]=0 +FIR[1 .. n/2] *= xmm13 = 2.0 @1824c41e0 ; 52d920, БЫЛО «−1» в 24l — НЕВЕРНО +FIR[n/2+1 .. n-1] *= xmm9 (=0) ; 52db50 +opC: th1a90(FIR, buf548|550, buf598) ; complex pass +EXP in-place 140b30 (float) / 140aa0 (double) +``` +xmm13/xmm9 не перезаписываются между 52b3d6 и использованием (проверено). + +### Гипотеза источника γ +Если opB/opC сохраняют пропорциональность (упаковка real-FFT), то +mask = exp(2 · scratch) ⇒ γ = 2·k, где k — масштаб выхода design +1802a24c0 относительно ln(bands): k = 1.760561/2 = 0.8802805. +Альтернатива: k=1, а opB/opC суммарно дают множитель 0.88028. + +### Открытые микровопросы (следующий раунд, всё локализовано) +1. Что такое [r15] на входе design (bands_final@678 или иной буфер)? +2. Семантика opB/opC (th2180/th1bb0/th1a90/th19d0 + твидлы 548/550/598) + — вероятно упаковка/развёртка real-FFT. +3. Масштаб выхода design: декод хвоста 1802a24c0 (файл уже есть: + nls_dasm/conv_float_a24c0.dis, 184K). +4. Согласование с identity-фазой захватов (гонка финального combine).