Avant de débuter en ROMHacking , il est nécessaire de bien assimiler ce que sont les systèmes "hexadécimal" et "binaire" puisque c'est précisément ces derniers qui seront à la base de toute analyse que vous ferez , ainsi que de tout hack possible sur un JV , et ce , peu importe le support jeu dont il sera question . Vous comprendrez donc très rapidement qu'il est indispensable d'être familiarisé avec ces derniers avant de débuter quoi que ce soit d'autre , auquel cas vous ne pourrez aller bien loin .
Le binaire :
Toute personne sachant compter , connait le langage "décimal" composé de chiffres allant de "0" à "9" . Comme son nom l'indique le décimal nous permet de compter sur une base de 10 .
En informatique , la donne est différente puisqu'un ordinateur lui ne compte qu'en langage "binaire" uniquement composé de "0" et de "1" . C'est donc une base de 2 .
Ainsi , toute opération exécutée par votre ordi ne sera fondée que sur des suites de calculs binaires . Il est important de savoir également que chacun de ces "0" ou "1" se nomme un "bit" .
Je vois déjà la question venir : "Oui mais le binaire n'a que 2 chiffres alors comment l'ordinateur peut il faire des calculs décimaux ?"
La réponse est très simple , le "binaire" interprète le "décimal" en "octets" , un "octet" étant une suite de "8 bit" .
Chacun des "bit" composant un "octet" sera donc multiplié par une valeur définie selon sa position dans l'octet , les multiplicateurs étant : x1 , x2 , x4 , x8 , x16 , x32 , x64 , x128 .
Voyons ça sous forme de tableau ça vous sera plus clair :
![Image](http://myth-project.fr/ftp/images/tutoriels/systeme-binaire-et-hexa-001.png)
Comme vous le voyez sur cette image , tout comme en décimal , la valeur la plus à gauche est la plus forte et celle la plus à droite la plus faible .
Voyons maintenant comment interpréter nos valeurs "décimales" en valeurs "binaires"
Pour cela , aidons nous d'un autre tableau sur la base de celui ci dessus :
![Image](http://myth-project.fr/ftp/images/tutoriels/systeme-binaire-et-hexa-002.png)
Comme vous pouvez le constater dans le tableau , nos "0" et nos "1" servent à activer ou non nos multiplicateurs , ainsi , suivant la position des "0/1" dans l'octet , vous pourrez déterminer votre valeur décimale .
Exemples :
Note/ De préférence il vaut mieux comme dans toute opération calculer de droite à gauche
3 = (1x1) + (1x2) + (0x4) + (0x8) + (0x16) + (0x32) + (0x64) + (0x128) = (en binaire) 00000011
7 = (1x1) + (1x2) + (1x4) + (0x8) + (0x16) + (0x32) + (0x64) + (0x128) = (en binaire) 00000111
9 = (1x1) + (0x2) + (0x4) + (1x8) + (0x16) + (0x32) + (0x64) + (0x128) = (en binaire) 00001001
38 = (0x1) + (1x2) + (1x4) + (0x8) + (0x16) + (1x32) + (0x64) + (0x128) = (en binaire) 00100110
etc...
Puisqu'un octet contient "8 bit" , la valeur maximale en binaire de ce dernier sera donc : 11111111 , ce qui équivaut à 255 en décimal . Un octet à donc une valeur décimale comprise entre 0 et 255 (ce qui nous fait 256 possibilités puisque le 0 est compté dans le lot) .
Bien entendu à partir du moment ou la valeur décimale dépasse les 255 , alors on passe à plusieurs octets , ainsi votre tableau s'élargit et compte tout autant de multiples supplémentaires (x256 , x512 etc ...) pour pouvoir correspondre à votre valeur décimale .
Il est juste important pour la suite que vous sachiez exactement comment fonctionne le binaire et également ce qu'est un octet
![Clin d’oeil ;)](./images/smilies/icon_e_wink.gif)
Comme je ne suis pas sûr d'avoir été totalement clair , je vous invite si vous n'avez pas tout compris ou si vous souhaitez approfondir la chose , à consulter ce >> wiki << qui traite du binaire plus en détails .
L'hexadécimal :
Tout comme le binaire est sur une base de 2 et le décimal sur une base de 10 , l'hexadécimal permet de compter sur une base de 16 (hexa = 6 , décimal = 10) .
Et la fameuse question : "Oui mais pourquoi utiliser une base de 16 et pas une autre ?"
La réponse est également simple , la base de 16 est celle qui colle le mieux pour faire une interprétation à la fois simplifiée et contractée du système binaire , qui je le rappelle , est celui utilisé par l'informatique dans toute opération quelle qu'elle soit .
Ainsi donc , comme un "octet" , qui est composé de "8 bit" (16 étant un multiple de 8) , à forcément une valeur décimale comprise entre 0 et 255 (soit 256 possibilités en incluant le 0) , la base de 16 va donc nous permettre de facilement l'interpréter puisque 16 x 16 = 256 , soit pile poil le nombre possibilités maximum qu'un octet peut contenir .
Vous imaginez bien que de faire des analyses dans de fichiers contenant pour chaque octet des suites de 8 bits va rapidement se révéler complexe et également prendre une place phénoménale ! Le système hexadécimal est donc l'alternative au binaire à la fois pratique et beaucoup plus accessible , que nous autres pauvres humains qui ne sommes pas comme des machines , pourrons plus facilement utiliser .
Maintenant que vous avez compris pourquoi le système hexadécimal est si intéressant et autant utilisé en informatique , apprenons un peu à identifier sa logique de fonctionnement , ce qui nous amène à la question : "Comment fait on pour compter sur une base de 16 alors que nous ne possédons que 10 chiffres en tout ?"
Là encore la réponse est facile , on va utiliser des lettres de l'alphabet et le tour sera joué
![Clin d’oeil ;)](./images/smilies/icon_e_wink.gif)
En hexadécimal on compte donc comme suit : 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , A , B , C , D , E , F , 10 , 11 , ... , 18 , 19 , 1A , 1B , ... , 1E , 1F , 20 , 21 , ... , 98 , 99 , 9A , 9B , ... , 9E , 9F , A0 , A1 , etc ... jusqu'à "FF "qui sera donc la valeur max d'un octet soit 255 en décimal .
Note importante : Lorsque l'on note une valeur hexadécimale , on la précède généralement de "0x" pour bien la différencier d'une valeur décimale habituelle . Certains utilisent également le signe "&" mais la première est , il me semble , bien plus courante donc , pensez à bien manier vos valeurs de la sorte lorsque vous les noterez , ça évitera toute confusion .
Pour exemple :
10 = décimal (équivaut à 0xA en hexadécimal)
0x10 ou &10 = hexadécimal (équivaut à 16 en décimal)
Pour ce qui est des correspondances entre décimal et hexadécimal , si vous ne l'avez pas encore compris , ça se compte de cette manière :
0 = 0x0
1 = 0x1
2 = 0x2
...
8 = 0x8
9 = 0x9
10 = 0xA
11 = 0xB
12 = 0xC
13 = 0xD
14 = 0xE
15 = 0xF
16 = 0x10
17 = 0x11
...
25 = 0x19
26 = 0x1A
27 = 0x1B
...
31 = 0x1F
32 = 0x20
33 = 0x21
...
158 = 0x9E
159 = 0x9F
160 = 0xA0
161 = 0xA1
...
254 = 0xFE
255 = 0xFF
A partir d'ici on passe à 2 octets :
256 = 0x0100
257 = 0x0101
Pour ces 2 dernières valeurs sur 2 octets , elles peuvent également être notées :
256 = 0x100
257 = 0x101
Cela reviendra au même
![Clin d’oeil ;)](./images/smilies/icon_e_wink.gif)
Voilà , j'espère vous avoir aidé à comprendre un peu mieux ce que sont les systèmes binaire et hexadécimal à travers ces quelques explications , il vous sera indispensable de bien assimiler ça si vous souhaitez par la suite persévérer dans votre apprentissage du ROMHack , ces derniers sont vraiment la base de tout .
Pour ce qui est de l'hexadécimal si quelque chose vous a échappé ou si vous souhaitez en savoir plus , je vous invite à consulter ce >> wiki << qui est très complet .
Après ça , vous devriez en théorie être moins perdus lorsque vous utiliserez un éditeur hexadécimal , le meilleur ami du ROMHackeur et surtout son outil de base .
Astuce : Notez également que vous pourrez aisément faire appel à la calculatrice "windows" lors de vos travaux , elle vous permettra de faire très facilement les conversions entre décimal , hexadécimal et binaire .
Cette dernière se situe dans : Démarrer > Tous les programmes > Accessoires > Calculatrice (réglez là sur : Affichage > Scientifique/Programmeur)