19Fermer21
GT TurboLe 19/08/2012 à 22:41
Je viens de mettre un oeil rapide et je suis tombé la dessus :

move.l (a6)+,d5 ; 1 point dans d5 ; 12 cycles
move.w d5,d6 ; y dans d6 ; 4 cycles
swap d5 ; x dans d5 ; 4 cycles

ce qui nous fait 20 cycles pour récupéré ton X et ton Y alors que :

move.w (a6)+,d5
move.w (a6)+,d6

fait 2 * 8 = 16 cycles ce qui fait un code plus court et plus rapide. ( Fait juste gaffe je sais pas si d5 et d6 sont dans le bon ordre (Sinon ton X et on Y seront permutés))


ensuite :

sub1 sub.w #3,d1 ; x-3
bra sub_ok

sub2 sub.w #2,d1 ; x-2
bra sub_ok

sub3 sub.w #1,d1 ; x-1

sub_ok

cmp.w #0,d1 ; compare X a 0
bgt plus ; si plus grand on sauve

ton cmp.W #0,D1 est inutile et oui !! Car toute operation mathematique normale positionne les flags conditions (En gros fait un test en 'douce') donc tous tes sub avant font le test en meme apres la soustraction directement donc tu peux le viré wink

Pour la gestion des touches pour quitter, il y a un reg en $fffc02 qu'il suffit de lire pour avoir le 'scancode' de la touche, en gros on utilise couramment :

cmp.b #$39,$fffc02
bne Start

mais attention pour faire cela il faut accèder a la partie basse de la mémoire qui est protégé, il faut y acceder en superviseur sinon plantage.

Pour un début, bravo, ce que j'écris ce sont juste des optims ou des choses que tu connaitras par coeur d'ici quelque mois, mais rien que le fait de le faire en assembleur merite un Bravo smile

Il y a des grosses optims possibles mais comme écrit avant ca sera pour plus tard a moins que tu veuilles quelque explications.


GT smile