Les Pointeurs SNES par Jes |
Sommaire 1) Un pointeur, c'est quoi? A quoi ça sert? 2) Line Break, Section Break, Message Break 3) Structure de la rom 4) Les pointers proprement dits A) Repérage et modification B) Les pointers de la bank 5) Remerciements & Derniers commentaires Préface Cette faq vous sera certainement inutile si vous avez déjà lu et compris la faq dAnus Pee. En effet le contenu en est pratiquement le même ! Si je lai réalisée, cest pour tous ceux qui seraient encore dans le brouillard. Si néanmoins certains points vous restent encore obscures, envoyer moi un mail. 1) Un pointeur, cest quoi, à quoi ça sert? Un pointer indique ou commence une phrase et ou elle termine, il « pointe ». Pour mieux comprendre, prenez cet exemple simple de la vie quotidienne : Lorsque vous êtes sur la route, des panneaux indicateurs vous indiquent souvent le chemin, ils vous « pointent » la route à suivre ; les pointers font la même chose ! Ils indiquent précisément dans la rom où se trouve la phrase, cest donc une adresse hexadécimale. Cest bien beau tout ça,
mais en quoi les pointers vont nous servir ? VERY EASY.HARD.MEDIUM En traduisant : TRES FACILE.DUR.MOYEN Vous comprenez maintenant ? Les pointers ne sont plus correctement réglés, voilà ce que ça va donner dans le jeu : TRES
FACILE apparaîtra correctement puisque le pointer
correspond bien au début de la phrase. En corrigeant le pointers de cette façon : TRES FACILE.DUR.MOYEN Le texte sera
parfaitement bien affiché. Le texte dépasse du cadre, on va donc mettre un Line Break: - [ Section Break], c'est une valeur hexadécimale
( par ex: 04) qui affichera un nouveau cadre texte vide
après que le joueur ait appuyé sur une touche. Je suis sorti du cadre, j'ai mis 4 lignes dans le cadre alors qu'il ne peut y en avoir que 3 au maximum, il faut donc mettre un Section break: (il y a en général une flèche qui clignote en bas du texte, pour montrer au joueur qu'il y a encore du texte après ... ) Bon ensuite on appuie sur un bouton et ... Magie! - [ Message Break], c'est une valeur hexadécimale
( par ex: 00) qui dit au jeu Si on édite la rom, on obtient : Debout
guerrier,<$02>le désastre a frappé.<$04>Le
village est détruit<$00> Tout dabord, commençons par l[ header]. Lheader
est une tout petite partie de la rom se trouvant au début.
Cette portion a été ajoutée lorsque la rom a été
dumpée ( donc inexistante sur la cartouche ), et elle
contient des informations utiles à lémulateur. C000000000000000AABB040000000000 N.B. : Toutes les roms nont pas toujours dheader. Le restant de la rom est découpé en [ bank] : Une bank est un morceau de la rom, une
partie, qui contient du code, du texte, des graphiques,
des sons ... En simplifié, la structure dune rom SNES se résume à ceci : - Pour une Low-rom : Pour une High-rom: Le $ devant un nombre signifie que c'est une valeur hexadécimale. Regardons dabords de quel type de rom il sagit. ( Low-rom ou High-rom, voir aussi chapitre 2 ) -
Commençons par le mode de calcul [ Low-rom] : On
trouvera en général plus d'une solution, et pour savoir
s'il sagit du pointer, on peut recourir à 2 méthodes
: - Les
[ High-rom] maintenant : -Pourquoi ne prendre que 2 valeurs ? Il faut savoir que les pointers sont codés soit sur 2 octets ( 16bits ) soit sur 3 octets ( 24bits ). Les pointers 24 bits sont vraiment les meilleurs, car ils permettent de changer le texte ou on veut dans la rom, ( vraiment partout ) malheureusement ils sont rares. Je
reviens vers les pointers 16bits : 0000F2
8100F2 E800F2 6401F2 D701F2 0B02F2 8E02F2 0903F2 8003F2
FD03F2 On remarque que la bank ( $F2 ) est toujours la même, et cest pour libérer de lespace quon va remplacer ces pointers par des pointers moins volumineux, qui sont codé sur 2 octets et non plus 3. ( A cette époque, on essayait davoir un jeu prenant le moins de place possible car il serait plus cher à produire sur cartouche. ) 0000
8100 E800 6401 D701 0B02 8E02 0903 8003 FD03 6A04 B804 E304
2705 7505 On
gagne de la place. Et donc comme ça le problème est résolu. Maintenant pour déplacer le texte dans une autre bank, il faudra changer son octet , et il n'est pas toujours très facile à découvrir, il faut parfois recourir à l'ASM, mais voici la formule pour le trouver : On prend l'adresse de la première phrase d'un bloc de texte, Ensuite si c'est une [ High-rom ], on calcule le pointer normalement ( donc -$200 +$C00000, séparer, inverser, ) Mais cette fois il faut garder les 3 octets, les inverser, ( par ex $A88000 donne $0080A8 ), et on recherche cette valeur dans la rom !! Bon
mais pour les [ Low-rom ], après avoir soustrait lheader (
$200 ), il faut "convertir" l'adresse, dans la
faq d'anus sur TRAF, il y a la charte des Low-rom, utilisez-la
pour convertir. Après, il suffit d'inverser l'adresse et
de rechercher dans la rom. N.B. : Les pointers seront généralement précédés de BF. Donc 0080A8 donnerait BF0080A8 Si vous êtes trop fainéant pour calculer les pointers, vous pouvez prendre un programme qui le fait automatiquement ( comme Vbapointer de Lag, disponible sur son site ) ou encore créé son propre logiciel, comme un grand. Tout
ça c'est très théorique, le tout est d'avoir quelques
expériences pour bien les maîtriser, car la théorie ne
vaut jamais la pratique : on se rend compte beaucoup
mieux "sur le terrain". Il est tout à fait
possible aussi qu'une rom n'utilise pas les pointers
"courants", c'est comme dans tout, il y a des
exceptions ! Je voudrais remercier Minh pour ses conseils avisés sur lécriture de cette faq, il en a lui-même écrit une très complète sur les pointers NES dont je me suis inspiré pour écrire la 2ème partie du chapitre 1. Remerciement aussi à Readiosys Fisher qui ma également donné quelques conseils. Voilà
cest terminé ! Vos
commentaires et critiques seront les bienvenus sur Jes |
Retour |