1

Voilà, j'ai fait une routine graphique qui a un bug, mais je l'ai pas vu bein qu'ayant tout commente, tout relu avec attention...
Voila la source:
_main:
	jsr	graphlib::clr_scr	;efface l'ecran
	lea croix(pc),a0		;Le sprite a afficher est: "croix"
	move.w	#7,d0			;d0=x	
	move.w	#10,d1			;d1=y
	bsr	affiche			;on appelle la routine de sprite
	jsr userlib@0000		;on attend la pression d'une touche
	rts				;on quitte


affiche:				;La routine de sprite
	movem.l	d0-d4/a0-a1,-(a7)	;On pose sur la pile les registres
	move.b (a0)+,d2			;On charge la taille du sprite dans d2, et on incremente a0 de 1
	sub #1,d2			;on enleve 1 a d2 pour le dbra futur
	move.l #LCD_MEM,a1		;a1 pointe sur la memoire video
	move.w	d1,d4		; on fait : 	d4=d1		)
	lsl.w	#5,d1		;		d1=d1*32	)	
	add.w	d4,d4		;		d4=d4*2		)
	sub.w	d4,d1		;		d1=d1-d4	) on a fait d1=d1*30
	add.w	d1,a1		; on pointe sur la bonne ligne----------------------------------
	move.w	d0,d4		;		d4=d0
	lsr.w	#3,d0		;		d0=d0/8	
	and.w	#7,d4		;		d4=reste de d4/8
	add.w	d0,a1		; on pointe sur la bonne colonne +/- 8 pxls
	move.b	#24,d3		; long=32bits	d3=24=32-8
	sub.w	d4,d3		; 		d3=d3-d4
boucle:
	clr.w	d0		;		d0=0
	move.b	(a0)+,d0	;		d0=(a0)+
	lsl.l	d3,d0		;		d0=2^d3
	eor.l	d0,(a1)		;		(a1)|=d0
	lea	30(a1),a1	;		on pointe sur la ligne suivante
	dbra.b	d2,boucle	;		on le refait d2+1 fois...
	movem.l	(a7)+,d0-d4/a0-a1	;	On restaure les registres detruits	
	rts


croix:
 dc.b 8
 dc.b %10000001
 dc.b %01000010
 dc.b %00100100
 dc.b %00011000
 dc.b %00011000
 dc.b %00100100
 dc.b %01000010
 dc.b %10000001



cette routine marche tres bien pour les abscisses inferieur a 8, mais sinon elle provoque une adress error...
J'ai reussit a cerne le probleme, mais je ne trouve pas le bugsad

voilà merci..

Sinon j'ai un autre question:
quel est le plus rapide:
lea 0(a1,d1),a1
ou add d0,a1?

merci.

2

Ok merci beaucoup [pollux]

3

C'est bon, je n'ai plus d'adress error, merci.
Pour les shift, faut pas les mettre tout au debut de la routine, mais juste avant add d0,a1;
Mais ca marche merciwink

4

A propos de ce que dit Polux : si on fait add.w dn,an : que se passe-t-il si le resultata dépasse 16 bits ?????