Не додумал я. Не рассматривал такой вариант. А вариант похоже рабочий. Конечно надо все посчитать проверить. В моем варианте машинные циклы уходили, в основном , на обработку прерывания. В вашем коде неточность. Между отрицательным фронтом CL2 и сменной данных необходима задержка, в соответстыии с даташитом, минимум 30ns. Поэтому надо добавить команду CBI, что добавит 2МЦ. Но и сэтим дополнением свободного времени должно остаться достаточно))) Спасибо за науку. Как-нибудь попробую этот вариант. Результаты постараюсь выложить.

И еще поправочка- счетчик строк все рано нужен. Т.к. zl не отражает количество строк. Может вы имели ввиду регистровую пару Z?