%d0.w = x %d1.w = y %d2.w = Hauteur %d5.w = Bytewidth %a0.l = Destination %a3.l = Source _ExecCmd_Get_Copy: moveq.l #0,%d6 move.w %d2,%d6 subq.w #1,%d6 |Hauteur -= 1 jbcs _ExecCmd_Get_Copy_end add.w %d1,%d1 |Y *= 2 move.w %d1,%d2 |Y->%d2 lsl.w #4,%d2 |%d2 *= 16 sub.w %d1,%d2 |%d2 = Y*30 move.w %d0,%d1 |%d0->%d1 lsr.w #3,%d1 |%d1 /= 8 add.w %d1,%d2 |%d2 += %d1 adda.w %d2,%a3 |%a3 += %d2 soit %a3 += y*30+x/8 moveq.l #30,%d1 |Nombre d'octets à sauter ligne suivante sub.w %d5,%d1 |%d1 -= Bytewidth subq.w #1,%d5 |Byetewidth-- andi.w #7,%d0 |Sprite à adresse absolue jbeq _ExecCmd_Get_absolute moveq.l #8,%d2 |8-shift sub.w %d0,%d2 |Décalage->%d2 tst.w %d5 jbeq _ExecCmd_Get_single_bytewidth _ExecCmd_Get_columns: moveq.l #0,%d7 move.w %d5,%d7 |%d7 = Bytewidth _ExecCmd_Get_line: move.b (%a3)+,%d3 lsl.b %d0,%d3 move.b %d3,(%a0) move.b (%a3),%d3 lsr.b %d2,%d3 or.b %d3,(%a0)+ dbf %d7,_ExecCmd_Get_line adda.w %d1,%a3 dbf %d6,_ExecCmd_Get_columns _ExecCmd_Get_Copy_end: rts _ExecCmd_Get_single_bytewidth: move.b (%a3)+,%d3 lsl.b %d0,%d3 move.b %d3,(%a0) move.b (%a3),%d3 lsr.b %d2,%d3 or.b %d3,(%a0)+ adda.w %d1,%a3 dbf %d6,_ExecCmd_Get_single_bytewidth rts _ExecCmd_Get_absolute: tst.w %d5 |Bytewidth = 0 jbeq _ExecCmd_Get_absolute_single_bytewidth |Bytewidth > 0 _ExecCmd_Get_absolute_columns: moveq.l #0,%d0 move.w %d5,%d0 |%d0 = Byewidth _ExecCmd_Get_absolute_line: move.b (%a3)+,(%a0)+ dbf %d0,_ExecCmd_Get_absolute_line adda.w %d1,%a3 dbf %d6,_ExecCmd_Get_absolute_columns rts _ExecCmd_Get_absolute_single_bytewidth: addq.w #1,%d1 |Octets entre chaque lignes _ExecCmd_Get_absolute_single_bytewidth_columns: move.b (%a3),(%a0)+ adda.w %d1,%a3 dbf %d6,_ExecCmd_Get_absolute_single_bytewidth_columns rts