void signalOUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0)
{
asm volatile("eor r28, r28 ;r28<-0" "\n\t"
"eor r29, r29 ;r29<-0" "\n\t"
"1:" "\n\t"
"add r28, %0 ;1 cycle" "\n\t"
"adc r29, %1 ;1 cycle" "\n\t"
"adc %A3, %2 ;1 cycle" "\n\t"
"lpm __tmp_reg__, %a3+ ;3 cycles" "\n\t"
"out %4, __tmp_reg__ ;1 cycle" "\n\t"
"rjmp 1b ;2 cycles. Total 9 cycles" "\n\t"
:
:"r" (ad0),"r" (ad1),"r" (ad2),"e" (signal),"I" (_SFR_IO_ADDR(PORTD))
:"r28", "r29"
);
}