Ahh... le $ signifie l'octet actuel dans notre code, alors avec $ - 6 nous sautons en arrière 6 octets, c'est à dire a le scf, on peut le voir comme ci:
9327h: scf ;1 octet
9328h: rr d ;2 octets
9330h: rr e ;2 octets
9332h: rra ;1 octets
9333h: djnz $-6
On l'utilise au lieu d'un label. Tu pourrais aussi bien faire:
boucle:
scf \ rr d \ rr e \ rra \ djnz boucle
C'est le même. Mais il faut noter quelque chose: si tu veux sauter en avant, il faudra ajouter la taille de la commande.
9327h: or a
9328h: jr z,$+2
9330h: inc a
9331h: inc a
...
Ici, si a=0, nous sauterons au premier "inc a" car la commande "jr" prend 2 octets. Donc si nous voulons sauter les deux "inc a", il faudra "jr z,$+4". Moi, je l'utilise parce que ainsi mon code est plus "propre", quelquefois le code est encombré de labels et il est assez difficile à lire (ou tout simplement je ne veux pas inventer de nom pour le label :P).
"scf" signifie "set carry flag". d = premier octet du masque, e = le second, a = $FF, b = l'offset (décalage?) X. Le masque normalement prend deux octets, mais si le sprite n'est pas aligné, il en faudra un troisième. Un exemple peut-être éclaircira les choses:
Notre masque:
(d)%11100110,(e)%00110111,(a)%11111111
si le offset = 5, nous aurons comme valeur de DEA (d, e et a):
%11111
111,%00110 001,%10111111
Je ne sais pas si je l'ai bien expliqué, mais il est assez tard et je devrais vraiment me coucher. Si tu as plus de questions, n'hésite pas à me les poser
EDIT: Ah, et les "rr" sont des commandes pour le décalage d'un registre, ici pour décaler à droite/mettre le carry au bit 7 (le plus à gauche). rra est une commande spéciale, elle fait la même chose que les autres mais est plus petite (1 octet vs 2) et plus rapide (4 t-states vs 7). Jette un coup d'oeuil au
z80 instruction set du 28 days tuto
