Почти заработало, НО что означает конструкция
sum := sum + $9E3779B9;
не прибавить шестнадцатичеричное число же - переполнение возникает и алгоритм в разнос идет...
К sum прибавляется $9E3779B9, оно же 2654435769. Да, теоретически может возникнуть переполнение (то есть результат может быть быть больше $FFFFFFFF), но на самом деле процессор оставляет только младшие 32 бита результата. Математически это выглядит как sum := (sum + $9E3779B9) mod $FFFFFFFF.
Если твой процессор (AVR, или как там) так не делает, а происходит переполнение, то надо обходить, например сложив отдельно верхние и нижние WORD-ы. Например, для SUM := SUM + $9E3779B9 получится такая конструкция:
Dim SH, LH as Long
SH = HIGHW(SUM) \'Старший Word от SUM
SUM = SUM And &HFFFF \'Оставили младший Word в SUM
SUM = SUM + &H79B9 \'Складываем младшие
LH = HIGHW(SUM) \'Извлекаем старший Word суммы младших
SUM = SUM And &HFFFF \'Снова оставляем младший Word в SUM
SH = SH + LH + &H9E37 \'Сложили все старшие
SHIFT SH, LEFT, 16 \'Подвинули сумму старших на место (переполнившие биты ушли)
SUM = SUM + SH \'Складываем старшие с младшими
Как-то так. Не факт, что оптимально.