Так. Я тут Bascom AVR IDE поставил и потестил
. Не знаю насколько точно он эмулирует железный AVR, но после устранения пары граблей, результат в нем в точности соответствует писишному. Итак:
- Первые грабли. Умножение Delta*32 = переполнение. Умножение на 32 - это фактически сдвиг влево на 5 бит. Таким образом надо заменить
Sum = Delta*32 на
Sum = Delta
Shift Sum, Left, 5.
- Далее, вторые грабли - это сочетание Mod и отрицательного числа (в знаковых числах Long). В итоге получаем отрицательные индексы массива. Однако при беззнаковых числах Dword выражение
X mod 4 просто оставляет 2 младших бита, зануляя остальное, то есть оно идентично выражению
X and 3.
Ну и от констант избавился. Что-то с ними не так было. Искажались значения. И End-ы перепроверь еще, а то у меня на второй круг уходило, пока не поставил End перед процедурами.
После выполнения должен быть выведен следующий текст:
--Original--:
000000AE
000000AF
000000B0
000000B1
--Encrypted--:
AFE206E2
586DC5DD
D60B7876
3AE90B31
--Decrypted--:
000000AE
000000AF
000000B0
000000B1