Реализовал AWLV, SL8V, SR8V, WL8V, WR8V и PTNV. Осталось сделать зеркалирование, горизонтальные сдвиги на 1 и 4 бита, вертикальные сдвиги и вывод спрайта за пределами экрана. На чём план-минимум будем считать выполненным. Остальное по запросу.
PTNV - это новая операция: инверсный вывод спрайта. Ранее в Лазере приходилось сначала инвертировать спрайт в памяти, выводить и инвертировать опять, чтобы вернуть в исходное состояние. Теперь вывод инверсного спрайта так же эффективен, как и обычного (4 такта на CPL против 4-х на NOP).
Насчёт зеркалирования. Уверен, что буфер не нужен. Логика такая: есть зеркалируемая область, построчно берём первый и последний байт картинки, зеркалим и меняем местами, т.е. на место первого записываем зеркальный последний, на место последнего зеркальный первый, далее берём два следующих байта и т.д. Последний (средний) байт может оказаться один, если длина строки непарная, тогда мы его просто зеркалим.
В связи с чем вопрос: чтобы поменять в байте порядок битов на обратный (отзеркалить) можно ли действовать эффективнее, чем в этой процедурке?
Код:; Подпрограмма зеркального отображения байта в аккумуляторе MIRV0 RLA RR B ;отображенный байт получится в B RLA RR B RLA RR B RLA RR B RLA RR B RLA RR B RLA RR B RLA RR B RET




Ответить с цитированием