Если ASHC выполняется за такое же время, как и ASH, то я бы сделал что-то типа того:
Код:R0, R1 - рабочие регистры R2 - какой-то буфер для спрайтов R3 - счетчик столбцов R4 - сдвиг R5 - указатель на спрайт 22$: MOV R3,-(SP) ; Сохранить R3 на стеке MOV @#176640,-(SP) ; Сохранить регистр адреса планов 1,2 на стеке 11$: CLR R0 ; R0 = 0 MOV (R5)+,R1 ; (R5)+ -> R1 ASCH R4,R0 ; R0.R1 << R4 BIS R0,R1 ; R1 = (R5)+ rol R4 MOV R1,R0 ; mask: BIC 0x0F0F,R0 ; Оставить старшие части сдвинутых байт ; (слово маски писать прям в код самомодификацией) BIS R0,@#176642 ; (план 1,2) = (план 1,2) | R0 MOV R0,(R2)+ ; R0 -> (R2)+ INC @#176640 ; Прирастить регистр адреса планов 1,2 XOR R0,R1 ; Оставить младшие части сдвинутых байт BIS R1,@#176642 ; (план 1,2) = (план 1,2) | R1 MOV R1,(R2)+ ; R1 -> (R2)+ SOB R3,11$ ; Цикл на R3 итераций MOV (SP)+,@#176640 ADD #80.,@#176640 MOV (SP)+,R3 3$: DEC #0 BNE 22$




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