From 42316efa71141cc49c4738c9dd3eaccad85b005a Mon Sep 17 00:00:00 2001 From: Matiq Date: Wed, 19 Aug 2026 23:20:38 +0300 Subject: [PATCH] P1.2: confirm f_52d990 memcpy via decomp (FUN_18052d990(lVar22, window+N/2, N/2)); infer N=4096 from freq-axis spacing + window sape; step-5 low-pass near-flat ramp --- handoff/NOTES_LEVEL.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/handoff/NOTES_LEVEL.md b/handoff/NOTES_LEVEL.md index 30c34ac..e9ec4bd 100644 --- a/handoff/NOTES_LEVEL.md +++ b/handoff/NOTES_LEVEL.md @@ -184,7 +184,9 @@ Disasm: handoff/nls_dasm/f_52d990.dis (52 B), f_52d920.dis, f_52db50.dis; caller inverse FFT ``` So step 5 replaces the FIR's lower half with the SECOND half of the captured window -(window[N/2:] is the 0.75→1.0 rising segment) and fills the upper half with a constant xmm9. +(window saturates to 1.0 at idx 2049; so window[N/2:] is all 1.0 WHATEVER N/2>=2049 — the tail +copy degenerates to a flat 1.0 unless N/2 < 2049, i.e. FFT size would have to be < 4098 for the +window shape to matter here). Upper half filled with a constant xmm9. ### Corrected step 3 (f_52b570:52b685-52b6b3): ``` @@ -195,6 +197,13 @@ So step 5 replaces the FIR's lower half with the SECOND half of the captured win inverse FFT ``` +### Size inference & effective semantics +- window = 8193 f32; it saturates to 1.0 at idx 2049 (w[2048]=0.8, plateau 1.0 beyond). +- freq-axis = 2048 f32, spacing 48000/4096 = 11.718 (matches 4096 FFT half). => Nā‰ˆ4096, N/2ā‰ˆ2048. +- Then step 5 copies window[2048:4096] = {0.8 -> 1.0 (mostly flat)} into FIR[0:2048], + upper FIR[2048:4096]=xmm9(=0?), FIR[4096]=0. Effective = gentle low-pass ramp, near-flat. + This matches NOTES line 416: captured window adds almost nothing over empirical (it's essentially 1.0). + ### Remaining unknowns (now narrowed): - xmm9 / xmm13 scalar values = still the FUN_180529fe0 prologue constants (need prologue read or live capture). - window[N/2:] copy + xmm9 fill IS the whole "window" mechanism; the earlier "FIR *= WINDOW"