by kindermoumoute » 06 Nov 2010, 23:05
Le problème c'est qu'il faut avoir un peu de notion sur l'hexadécimal et les octets (je ne sais pas si tu en a :/).
La liste des variables r1-r6 se trouve ici :



Donc rapidement :
Un octet c'est 8 bits, 1 bit c'est soit 0 soit 1. La valeur maximum de un octet est donc de :
11111111
C'est du binaire (base 2). On transforme ce binaire en décimal et on obtient 255, il y a donc 256 possibilités d'octets (de 0 à 255).
255 en hexadécimal est FF. Cela tombe bien, comme la base hexadécimal (base 16) est puissance du binaire (2^3), on peut donc rentrer 1 octet avec 2 chiffre hexadécimals.
C'est pour cela que sur une sprite de 16 chiffres ([8100000000000081] par exemple) tu fait Pic1+8 octet pour passer à la suivante.
La fonction DS va en fait afficher les tiles au bonne endroit de l'écran.
Et la fonction GN va extraire d'un octet, 2 valeurs hexadécimal (ici transformé en décimal).
Je recommente le code car ce n'était pas le bon :
- Code: Select all
:[100000000001]→GDB0
:[122222222221]
:[100000000003]
:[100404000003]
:[100444000003]
:[100000000003]
:[100000000003]
:[100000000003]
:[122222222221]
:.Chaque chiffre hexadécimal correspond à l'emplacement d'une tile sur l'écran, c'est des datas
:
:[0000000000000000→Pic1 //la tile numéro 0 utilisé en général pour afficher un blanc
:[8100000000000081] //la tile numéro 1
:[000000FFFF000000] // la tile numéro 2
:[1818181818181818] // la tile numéro 3
:[187E42C3C3427E18] // la tile numéro 4
:...
:.Jusqu'à 16 tiles tu peut (c'est de l'héxadécimal)
:
:.même chose que précédemment mais pour le back buffer (en gris)
:[0000000000000000→Pic2
:[00003C3C3C3C0000] //la tile numéro 1
:[0000FF0000FF0000] // la tile numéro 2
:[2424242424242424] // la tile numéro 3
:[003C242424243C00] // la tile numéro 4
:.etc
:
:0→S→W
:
:...
:sub(DS)
:Repeat getKey(0)
:DispGraphr
:End
:...
:
:.Fonction de dessin
:Lbl DS
:ClrDraw
:ClrDrawr
:
:.L'écran est de 96 pixels en X (12*8) et de 64 pixel en Y (8*8)
:For(X,0,11)
:For(Y,0,7)
:
:.*12 pour sauter une ligne en fonction de Y
:sub(GN,Y*12+X)→W
:.W aura donc la valeur de l'octet correspondant à X et Y dans les datas
:Pt-On(X*8,Y*8,W*8+Pic1)
:.X*8 et Y*8 en fonction grâce aux boucles For( et W*8 pour les sprites
:Pt-On(X*8,Y*8,W*8+Pic2)r
:End
:End
:Return
:
:.On récupère la data
:Lbl GN
:.Comme pour les sprites, on fait GDB+(le nombre d'octet voulu)
:{r1/2+GDB0}→S
:
:.Si le nombre voulu est le deuxième chiffre (hexadécimal) de l'octet enregistré dans S
:If r1^2
:S^16
:Else
:.Ou sinon ce sera forcément le premier chiffre (hexadécimal) de renvoyé
:S/16
:End
:.La fin d'un programme est un simple Return