si c'est le cas, deja sauv pas d0 d1 utilise pas d6 mais d2.
apres pour le reste je vais regarder
, c'est quoi ton format de plan?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.
Amende pour excès de vitesse : utilisez tous les registres d'adresse comme paramètre.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
Arkanoid suppose vraiment qu'on voie tout l'écran de jeu. (Monster est lui aussi lourd pour la même raison.)
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.