245Fermer247
geogeoLe 01/11/2003 à 22:39
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