Программ без багов не бывает :-) Нашел таки. Проблема такая: Keil генерит HEX-ы "с разрывами". Например получаем, что данных там 5370 байт, но максимально адресованный байт - 5378.
В make_bin() имеем значения cnt = 5370, Max=5378, и далее в Unit2 на основании значения cnt получаем что будет записано 42 страницы = 5376 байт.
В итоге 2 байта прошивки теряются.
А также теряется время на поиск багов в математике, в компиляторе, а ведь оно могло быть потрачено на разнообразное питиЕ )))