blackmirror, идея хорошая. Видимо, придётся держать 4 похожих процедуры, каждая из них выводит соответственно 4, 3, 2 и 1 столбец (не всегда ведь нужны все 4).
Если переписать на ассемблере БК, то получится примерно следующее:
Код:
; R0 указывает на адрес спрайта, забираем первые 4 столбца
MOV (R0)+,R1
MOV (R0)+,R2
MOV (R0)+,R3
MOV (R0)+,R4
MOV #8.,R6 ; будем выводить 8 точек в высоту
LOOP:
ROR R1 ; берём пиксель из первого столбца
ROR R0
ROR R1
ROR R0
ROR R2 ; берём пиксель из второго столбца
ROR R0
ROR R2
ROR R0
ROR R3 ; берём пиксель из третьего столбца
ROR R0
ROR R3
ROR R0
ROR R4 ; берём пиксель из четвёртого столбца
ROR R0
ROR R4
ROR R0
; выводим полученный набор пикселей на экран
MOVB R0,(R5)
ADD #100,R5 ; адрес экрана смещаем на 1 пиксель вниз
SOB R6,LOOP
После смотрим сколько столбцов осталось нарисовать.
Если 4 - повторяем ту же процедуру.
Если меньше - переходим к аналогичной процедуре для 3, 2 или 1 столбца.
Но надо обсчитать производительность.
И остаётся вопрос как начинать выводить спрайт если его начальная горизонтальная координата не кратна 4.
Для спрайтов лабиринта 6x8 можно написать что-то подобное. Объединить отрисовку двух соседних спрайтов (12 точек, 3 байта).