j'ai enfin nettoyer et finit ma partie que me permettra d'afficher les sprites dans un ecran virtuel voici la routine dite moi tout ce qu'on peut optimisé dedans
ClrScr #1360-1,#EcranVirtuel ;nettoie l'ecran virtuel
lea.l Map,a0
move.w #17-1,d6
move.w #10-1,d7
moveq.w #0,d0
moveq.w #0,d1
BoucleDessineMapEcranVirtuel:
tst.b (a0)+
beq FinTestSprite
Sprite16EV d0,d1,#EcranVirtuel,#BlockSprite ;routine speciale pour l'ecran virtuel
FinTestSprite:
add.w #16,d0
dbf.w d6,BoucleDessineMapEcranVirtuel
lea.l 13(a0),a0 ;il reste 30 - 17 que l'on va sauter pour passer a la ligne suivante
moveq.w #0,d0
add.w #16,d1
move.w #17-1,d6
dbf.w d7,BoucleDessineMapEcranVirtuel
pour l'instant elle ne teste que les 1 de la map 0 = vide
Sprite16EV macro
movem.l d0-d2/a0-a1,-(a7)
move.w 1,d0
move.w 2,d1
move.l 3,a0
move.l 4,a1
moveq.l #0,d2
move.w d1,d2 ;optimise la multiplication par 34
;>------ sequence optimisé --------
lsl.w #5,d1
add.w d2,d2
add.w d2,d1
;------ sequence optimisé --------<
;;;;;;;;;;;;;;;;;;;;;;;;;;
move.w d0,d2 ;copy d2
lsr.w #3,d0 ; d0 / 8
and.w #$FE,d0
add.w d0,d1
add.w d1,a0 ;A0 pointe sur le bon word :)
and.w #15,d2 ; mod(16)
moveq.w #16,d0 ;pour pouvoir allumé le bon bit
sub.w d2,d0 ;décallage ! :)
move.w (a1)+,d1 ;nombre de boucles ! en word !
sub.w #1,d1 ; à cause du dbf !
@BoucleSprite16:
moveq.l #0,d2
move.w (a1)+,d2 ;Le sprite
lsl.l d0,d2 ;On decalle le sprite !
or.l d2,(a0) ;On applique le sprite!
lea 34(a0),a0 ;A0 + 30 -> A0
dbf.w d1,@BoucleSprite16
movem.l (a7)+,d0-d2/a0-a1
endm