;C prototype: void CopyScreenBufferToScreen4 (short x, short y, void *src, void *dest1, void *dest2); ; ;void CopyScreenBufferToScreen4 (register short x asm("%d0"), ; register short y asm("%d1"), ; register void *src asm("%a0"), ; register void *dest1 asm("%a2"), ; register void *dest2 asm("%a3")); xdef CopyScreenBufferToScreen4 CopyScreenBufferToScreen4: movem.l d3-d7,-(a7) move.w d1,d2 lsl.w #5,d1 sub.w d2,d1 sub.w d2,d1 moveq.l #$0F,d3 ;15=0b1111=décalage sur 32 bits move.w d0,d2 ;d2=x and.w d3,d0 ;d0=Bit à décaler not.w d3 and.w d3,d2 ;d2=octet lsr.w #3,d2 add.w d2,d1 ;Octet ou ce commence la copie adda.w d1,a0 ;Ce place dans la source lea.l 6000(a0),a1 ;Prépare plan1 move.l #99,d7 ;Prépare la boucle de 128 pixels moveq.l #-1,d1 ;Tout les bits de 2^32 activé. lsl.w d0,d1 ; d1 = mask1 move.w d1,d2 not.w d2 ; d2 = mask2 ;d0=Bit à décaler ;d1=mask1 ;d2=mask2 ;d7=boucle \LineStart: move.l (a0)+,d3 lsl.l d0,d3 move.l (a0)+,d4 rol.l d0,d4 move.w d4,d5 and.w d2,d5 or.w d5,d3 move.l d3,(a2)+ ; 1 move.l (a1)+,d5 lsl.l d0,d5 move.l (a1)+,d6 rol.l d0,d6 move.w d6,d3 and.w d2,d3 or.w d3,d5 move.l d5,(a3)+ and.w d1,d4 move.l (a0)+,d3 rol.l d0,d3 move.w d3,d5 and.w d2,d5 or.w d5,d4 move.l d4,(a2)+ ; 2 and.w d1,d6 move.l (a1)+,d5 rol.l d0,d5 move.w d5,d4 and.w d2,d4 or.w d4,d6 move.l d6,(a3)+ and.w d1,d3 move.l (a0)+,d4 rol.l d0,d4 move.w d4,d6 and.w d2,d6 or.w d6,d3 move.l d3,(a2)+ ; 3 and.w d1,d5 move.l (a1)+,d6 rol.l d0,d6 move.w d6,d3 and.w d2,d3 or.w d3,d5 move.l d5,(a3)+ and.w d1,d4 move.l (a0)+,d3 rol.l d0,d3 move.w d3,d5 and.w d2,d5 or.w d5,d4 move.l d4,(a2)+ ; 4 and.w d1,d6 move.l (a1)+,d5 rol.l d0,d5 move.w d5,d4 and.w d2,d4 or.w d4,d6 move.l d6,(a3)+ and.w d1,d3 move.l (a0)+,d4 rol.l d0,d4 move.w d4,d6 and.w d2,d6 or.w d6,d3 move.l d3,(a2)+ ; 5 and.w d1,d5 move.l (a1)+,d6 rol.l d0,d6 move.w d6,d3 and.w d2,d3 or.w d3,d5 move.l d5,(a3)+ ;and.w d1,d4 ;move.l (a0)+,d3 ;rol.l d0,d3 ;move.w d3,d5 ;and.w d2,d5 ;or.w d5,d4 ;move.l d4,(a2)+ ; 6 ;and.w d1,d6 ;move.l (a1)+,d5 ;rol.l d0,d5 ;move.w d5,d4 ;and.w d2,d4 ;or.w d4,d6 ;move.l d6,(a3)+ ;and.w d1,d3 ;move.l (a0)+,d4 ;rol.l d0,d4 ;and.w d2,d4 ;or.w d4,d3 ;move.l d3,(a2)+ ; 7 ;and.w d1,d5 ;move.l (a1)+,d6 ;rol.l d0,d6 ;and.w d2,d6 ;or.w d6,d5 ;move.l d5,(a3)+ ;swap.w d4 ;swap.w d6 ;move.w d4,(a2)+ ;move.w d6,(a3)+ lea.l 6(a0),a0 lea.l 6(a1),a1 lea.l 10(a2),a2 lea.l 10(a3),a3 ;add.l #2,a0 ;add.l #2,a1 dbf d7,\LineStart movem.l (a7)+,d3-d7 rts