Не совсем понял, в чем вопрос, но примерно следующее:
имеется основная программа, расположенная начиная с 0 адреса (RWW Section по терминологии Atmel). Она писать во FLASH не может. При выполнении некоторого условия (приход команды программирования по COM) управление передается программе загрузчика (BootLoader), которая расположена в верхних адресах (NRWW Section). Она производит программирование и возвращает управление главной программе.
Часто делают наоборот, при сбросе управление передается загрузчику, при выполнении некоторого условия он продолжает работу, иначе передает управление основной программе. Так, я думаю, более правильно и безопаснее (например, выключили свет при записи, придется разбирать устройство и программировать на программаторе, т. к. основная программа испорчена и управление загрузчику не происходит). Загрузчик мы испортить не можем, т. к. он сам в себя не пишет.
Исходные данные для работы: ДатаШиты на AVR (раздел Boot Loader Support (смотрю ATmega128)), Appnotes с сайта Atmel,
http://www.ya.ru.
Обрати внимание на соответствующие Fuse.