Все внутреннее озу сдвигается аппаратно (за счет посуммирования счетчика к адресу) каждый такт 48 кГц
Для одиночного дилея нужно патчить только адрес конца (время задержки) и коэффициент суммирования (фидбэк)
Для хоруса вообще только параметры LFO (частота и амплитуда).
Вся хитрость, что минимальный элемент загрузки 1 команда (32 бит), то есть можно менять только те команды которые нужно.
Вот программа (вся!) тройного дилея (Patch - те команды, которые динамически меняются).
В первых трех командах меняется адрес (я использовал некратные числа)
В 6-ой меняется коэффициент суммирования (фидбэк).
RZP DELAYMEM K=.333 ; Read first delayed (Patch Addr)
RAP DELAYMEM K=.333 ; Add second delayed (Patch Adrr)
RAP DELAYMEM K=.333 ; Add third delayed (Patch Addr)
WZP TEMP K=.999 ; Save delayed summ
RZP ADCR K=.9 ; Read right * 0.9 into accumulator
RAP TEMP K=.5 ; Add summ (Patch Coeff)
WZP DELAYMEM K=.999 ; Save input + feedback into the first delay location
RZP TEMP K=.999 ; Read delayed summ
WZP OUTR K=.999 ; Write to OUTR
PS программа под атмегу (загрузка из родного по wavefrontsemi)
http://milas.spb.ru/~kmg/files/projects/dre/avr/