Если 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$