Ben pour effacer il y a plusieurs optims possibles. Déjà CMPY est plus lent que CMPX, donc en utilisant X comme pointeur d’adresse tu gagnera un peu au niveau de la comparaison (c'est pareil avec LDX qui et plus rapide que LDY). Bien entendu, tu peux sauver la valeur de X sur la pile durant le temps de l'effacement si tu l'utilises ailleurs dans le programme.
Ensuite tu peux faire plusieurs STA d'affilés (consécutifs) avant de faire un CMP. Ca réduit le poids de la comparaison avec le poids de ce qu'on veut faire vraiment (à savoir mettre de octets à 0). Il faut faire gaffe à prendre un nb de STA qui soit un diviseur du nombre total bien entendu, sinon ca ne tombera pas juste.
Mais avec cela une instruction (STA) ne fait toujours qu'un seul octet à la fois, ca veut dire qu'on a toujours minimum 16000 instructions à exécuter pour effacer l'écran. C'est beaucoup, donc c'est lent! Tu peux diviser ce total par deux en utilisant STD (après avoir initialisé D à 0 bien entendu). STD est certes plus lent que STA, mais faire 8000 STD est plus rapide que 16000 STA, donc on est gagnant. Pas mal, non?
Oui mais...
...Mais le fin du fin est de ne pas passer par X ou Y, mais par U en pushant pleins de registres nuls d'un coup en une seule instruction.
Code:
PSHS D,X,Y,DP,U ; on sauve les regs qu'on va utiliser
LDU #16380 ; 16380=7*2340.
LDX #$0000 ; X=0
TFR X,D ; D=0
TFR A,DP ; DP=0
LEAY ,X ; Y=0
boucle:
PSHU DP,D,X,Y ; et bim 7 octets à 0 en une seule instruction
CMPU #0 ; ok là on pert un peu de temp à comparer plutôt qu'à mettre de la ram à 0, mais voir note 2.
BNE boucle
PULS D,X,Y,U,DP,PC ; <== PC fait gagner un RTS ici!
Notes:
- On pouvait prendre U=$4000=16384 au lieu de 16380 et pusher 4 octets nuls au début, mais comme cette zone n'est pas visible, c'est pas grave. Donc autant prendre le plus grand multiple de 7 plus petit que 16384, c'est à dire 16380.
- On peut gagner en répétant le PHSU 5 ou 10 de suite fois car 2340 et divisible par 5 ou 10.
Après, oui comme tu l'indiques n'effacer ou ne redessiner que la zone occupée par les sprites utilisera aussi moins d'opérations que les 2000 et quelques de cette dernière boucle. Ce sera donc vraisemblablement plus rapide à exécuter, mais plus complexe à écrire. Il faudra choisir.