Voici ma nouvelle routine pour dessiner un motif en mosaique:
;C prototype: void DrawScreen (void *sprt, void *dest);
;
;void DrawScreen (register long *sprt asm("%a0"),
; register void *dest asm("%a1"));
section ".data"
xdef DrawScreen
;Motif de 32x32 répété sur une zone de 234x200 pixels
DrawScreen:
movem.l d3-d7/a2-a3,-(a7)
lea 256(a0),a0
lea 7988(a1),a1
lea 8000(a1),a2
movea.l a0,a3
;Réptition 6 motifs par colonnes soit 192 pixels de hauteur
moveq.l #5,d7
;Répétion du motif en hauteur
\draw_up
moveq.l #31,d6
;Répétition du motif sur 32 pixels de hauteur et 216 pixels de largeur.
\rep:
move.l -(a0),d0
move.l d0,d1
move.l d0,d2
move.l d0,d3
move.l d0,d4
move.l d0,d5
move.w (a0),-(a2)
movem.l d0-d5,-(a2)
move.l -(a0),d0
move.l d0,d1
move.l d0,d2
move.l d0,d3
move.l d0,d4
move.l d0,d5
move.w (a0),-(a1)
movem.l d0-d5,-(a1)
sub.l #14,a1
sub.l #14,a2
dbf d6,\rep
movea.l a3,a0
dbf d7,\draw_up
movem.l (a7)+,d3-d7/a2-a3
rts