diff --git a/handoff/NOTES_LEVEL.md b/handoff/NOTES_LEVEL.md index 8851618..130b35c 100644 --- a/handoff/NOTES_LEVEL.md +++ b/handoff/NOTES_LEVEL.md @@ -4287,3 +4287,42 @@ mapped-фильтр, строгая валидация ctx по trk==exp(scr)). Грабли: адреса-константы в патчах скрипта молча не применялись при чужом отступе — проверять installed-list; DC40=0x1800dc40 (не 0x18000dc40); DIV/DC40/EXPVAR/FN могут быть вне маппинга процесса (пропускать). + +## ============ 24mm13: ХЕЛПЕРЫ КАСКАДА 529c60 ДЕКОДИРОВАНЫ (статика) ============ + +Резолв ILT-цепочек (movsxd rax,[1826159a0]=4; lea r10,tbl; jmp [r10+rax*8]): +``` +5355d0.f → 18e0(ILT) → 0x1800032c0 → call 0x180016140(a,b,n2) [векторная, + 5-й арг из стека — MXCSR-сохраняющая, тело не дочитано] +530080.f → 2090(ILT) → 0x180010e40: b[i] += a[i] IN-PLACE (vaddss; + a=rcx, b=rdx, store в rdx!) +20f0.f → 0x180011580: dst[i] = a[i] + b[i] (vaddss, dst=r8) +1850.d → 0x1800025e0: то же в double +1a00.f → 0x180004720: dst[i] = xmm1 · src[i]; skip при xmm1∈{0,1} +52d920 : dst[i] *= xmm1 (in-place, skip при 1/0 — как ffe0) +``` +Грабли раунда: адреса теряли ноль при ручном наборе (0x180018e0 vs +0x1800018e0) И интермиттент пустые чтения soothe_mem.bin (лечится ретраем). + +### Рекуррентия каскада на полосу (порядок вызовов из 529c60): +``` +A: 16140(bands_curve@678, T_old, n2) ; до цикла, семантика ??? +цикл по [ctx+0x1b0]: + a: bands[1+j] += bands[j] ; j=0..n2-2 (префикс!) + b: bands[j] *= 0.5 ; j=0..n2-2 + c: vec6f8[j] = bands[1+j] + bands[j] ; (20f0, dst=r8=6f8) + d: bands[1+j] = 0.5 · vec6f8[j] ; (1a00, xmm1=0.5f/d) +→ результат пишется в track-буфер полосы (ctx+0x380 таблица) +``` +Замечание: префикс-аккумуляция (a) + деление пополам (b) + попарное +усреднение (c,d) — это вычисление ПОЛУСУММ смежных бинов = построение +иерархического сглаживания (wavelet/Haar-класс!) поверх спектра. +Tin на захватах ≈ trk^5.5 в нотчах — согласуется с накоплением за много +кадров такого экспоненциального смешения. + +### Следующий шаг (финал Этапа B) +1. Дочитать 0x180016140 (оп A до цикла — вероятно T_new = α·T_old + β·bands). +2. Собрать рекуррентию в numpy, прогнать по 400 живым кадрам + (winetrace_casc/chain_samples.pkl: scr→Tin покадрово), подобрать + единственные константы из асма (не фитом!), проверить выход == Tin. +3. γ=1.760561 затем выводится из замкнутой рекуррентии аналитически.