Глюк найден. Вопрос решен. Всем спасибо и прошу прощения. Проблема в конструкции:
get_symbol:
cpi tmp,20
brsh symbol_blank
ldi ZL,low(symbol_jump)
ldi ZH,high(symbol_jump)
add ZL,tmp ; jump to adr (symbol_jump + step# * 2)
ijmp
Без нопов у меня symbol_jump попадает на адрес 0х00FС и по команде add ZL,tmp, при tmp больше трёх (об этом я упоминал) я получаю фигню. Добавив пучок нопов я сдвинул адрес метки на 0x0102 и конструкция заработала нормально. Этот кусок кода был позаимствован уже не помню откуда, но мораль налицо - проверять вдумчиво. Три дня загадку разгадывал...