Проглядывая спектрумную прессу, набрёл в журнале
Depth 01 на очень дельный совет по быстрому выводу спрайтов с маской.
Источник: статья ”
Программистам — совершенные методы кодинга и современные способы работы с графикой: печать спрайта, скроллинг экрана, очистка экрана, работы с двумя экранами”.
Цитата:
При выводе изображения по маске, спрайт удобнее всего хранить перемешанным с маской. Байт графики, затем байт маски и т.д. Выводиться такой спрайт будет так:
Код: "EMPTY"
...
POP DE ; два байта графики
LD A,D
AND (HL)
OR E
LD (HL),A
INC L
...
Cтек при этом должен указывать на графику, а HL на экран.
Действительно, с этим методом у нас будет идеальная скорость. POP DE достаёт из стека одним махом сразу байт данных и маску, и происходит очень быстрый вывод. Понятно, что это не готовая процедура, но и то неплохо!
Универсальная процедура вывода спрайтов любого размера (да ещё и корректно отрабатывающая выход спрайта за пределы экрана), как в Laser Basic, никогда не будет такой же быстрой, как специализированная, заточенная под фиксированный размер (или хотя бы ширину). Именно поэтому я предполагаю в своей графической библиотеке рассматривать наборы спрайтов с фиксированным размером как другие сущности — тайлы, и работать с ними конечно же другим способом.
Вам, Руслан, пока следует определиться, предполагается ли вывод знакоместных спрайтов (наиболее быстрый), с атрибутами или без, или точечных. Можно точечные спрайты программно сдвинуть в свободной области памяти в несколько фаз и работать с ними как со знакоместными, вполне нормальное решение.