si c'est le cas, deja sauv pas d0 d1 utilise pas d6 mais d2.
apres pour le reste je vais regarder

Est-ce que si je programme en A68K GNU je peux utiliser ce registre (a6)?
De plus il semble y avoir un problème quand je programme mes routines en ASM 68K en utilisant a6 comme paramètre, a6 est utilisé par GCC par un pointeur frame?
De plus je dois sauver quoi comme registres en ASM 68K et quoi en GNU 68K?
Tu peux quand même l'utiliser à l'intérieur d'une fonction ASM comme variable temporaire (à condition évidemment de le restaurer à la fin )
Miam, quelle bonne idée Et il est où l'intérêt, par rapport au fait d'utiliser a0 comme tout le monde?
Et je déconseille l'utilisation de a6 sans le % aussi (i.e. avec GTC )
ça doit baisser les performances plutôt que de les améliorerJ'ai fait ça à une fonction qui le mérité malheuresement.
Elle méritait qu'on baisse ses performances? Amende pour excès de vitesse : utilisez tous les registres d'adresse comme paramètre.
Tu n'as pas lu ce que j'ai écrit, si je passais les paramètres par la pile, j'aurais était obligé de ralonger le code et donc de ralentir la routine.
En tout cas si j'ai fait ça c'est qu'il y a une raison, je sais passer par la pile quand il le faut...
;C prototype: void DrawSquareUp (unsigned char *sprt1, unsigned char *sptr2, unsigned char *sprt3, unsigned char *sprt4, void *dest); ; ;void DrawSquareUp (register unsigned char *sprt1 asm("%a2"), ; register unsigned char *sprt2 asm("%a3"), ; register unsigned char *sprt3 asm("%a4"), ; register unsigned long *sprt4 asm("%a5"), ; register void *dest asm("%a0")); section ".data" xdef DrawSquareUp DrawSquareUp: movem.l d0-d2/a1,-(a7) lea 8000(a0),a1 moveq.l #7,d5 bcl_draw_sprite8: clr.l d0 clr.l d3 move.b (a4)+,d0 move.b (a4)+,d3 ;Corner left move.b (a2)+,(a0)+ move.b (a2)+,(a1)+ ;Up x 3 move.b d0,(a0)+ move.b d0,(a0)+ move.b d0,(a0)+ move.b d3,(a1)+ move.b d3,(a1)+ move.b d3,(a1)+ ;Doors move.l (a5),(a0)+ move.l 4(a5),(a1)+ ;Up x 12 ;Long gris clair clr.l d1 clr.l d2 move.b d0,d1 rol.w #8,d0 or.w d0,d1 move.l d1,d2 swap.l d1 or.l d1,d2 ;Long gris foncé clr.l d1 clr.l d4 move.b d3,d1 rol.w #8,d3 or.w d3,d1 move.l d1,d4 swap.l d1 or.l d1,d4 move.l d2,(a0)+ move.l d2,(a0)+ move.l d2,(a0)+ move.l d4,(a1)+ move.l d4,(a1)+ move.l d4,(a1)+ ;Doors move.l (a5)+,(a0)+ move.l (a5)+,(a1)+ ;Up x 3 move.l d2,(a0)+ move.l d4,(a1)+ ;Corner right move.b (a3)+,-1(a0) move.b (a3)+,-1(a1) lea 12(a0),a0 lea 12(a1),a1 dbf d5,bcl_draw_sprite8 movem.l (a7)+,d0-d2/a1 rts
;C prototype: void DrawSquareSide (unsigned char *sprt, void *dest); ; ;void DrawSquareSide (register unsigned char *sprt asm("%a2"), ; register void *dest asm("%a0")); section ".data" xdef DrawSquareSide DrawSquareSide: movem.l a1/a3,-(a7) movea.l a2,a3 lea 320(a0),a0 lea 8000(a0),a1 moveq.l #5,d6 \bcl_draw_all_left: moveq.l #31,d7 movea.l a3,a2 \bcl_draw_left8: move.b (a2),(a0) move.b (a2)+,27(a0) move.b (a2),(a1) move.b (a2)+,27(a1) lea 40(a0),a0 lea 40(a1),a1 dbf d7,\bcl_draw_left8 dbf d6,\bcl_draw_all_left movem.l (a7)+,a1/a3 rts
movem.l a2-a6,-(a7) move.l Plane0(pc),a0 move.l Plane1(pc),a1 lea sprite1(pc),a2 lea sprite2(pc),a3 lea sprite3(pc),a4 lea sprite4(pc),a5 lea sprite5(pc),a6 jsr DrawSquareUp movem.l (a7)+,a2-a6 ... DrawSquareUp: movem.l *,-(a7) ... movem.l (a7)+,* rts
move.l Plane0(pc),a0 move.l Plane1(pc),a1 jsr DrawSquareUp ... DrawSquareUp: movem.l */a2-a6,-(a7) lea sprite1(pc),a2 lea sprite2(pc),a3 lea sprite3(pc),a4 lea sprite4(pc),a5 lea sprite5(pc),a6 ... movem.l (a7)+,*/a2-a6 rts
A part ça, le screenshot a l'air pas mal, quoique je me méfierais du fond foncé qui risque de baver horriblement on-calc et qui empêchera peut-être de distinguer les balles dans certains cas.