Anus Pee Hacking Doc


Ecrit par Anus P. il y a quelque temps pour aider les gens qui connaissent déjà les bases du rom hacking pour effectuer une meilleur traduction. Ce document traite aussi des tables de Pointer (ce qui peut aider tout le monde à obtenir une très grande qualité de traduction), et l'expansion des roms SNES.

Ecrit par : Brian Maxwell / Anus Pompous
Anus Pee's gaddamn home page
AnusP e-mail
J2e translation
J2e translations e-mail

Porté et fixé en HTML par : Mike Loranger / CaTaclysmX
CaTaclysmX home page
CaTaclysmX e-mail

Traduction Française: Elfe Noire
Elfe Noire e-mail

Version texte ici

======================================================================
TABLE DES MATIERES
======================================================================


1-Introduction
2-Comment le texte est normalement localisé
3-Headers
4-La Table des Pointers
5-Bouger le texte dans les roms SNES
6-Entendre physiquement les roms
7-Etendre le texte des banks
8-Conclusions

=======================================================================
SECTION 1 INTRODUCTION
=======================================================================

1.0 truc générale au sujet de ce document

Ce document a été créé pour aider les gens qui désirent apprendre les Pointers Tables et comment étendre les roms SNES. Ce document est peut être très confus mais j'ai essayé de le garder aussi simple que possible! hé. Je l'ai écrit en une seule nuit! donc je devrai sûrement l'updater plus tard pour fixer les erreurs, ou pour écrire les chose encore plus simplement.....mais je ne suis rien d'autre qu'un bâtard paresseux, donc mon hack viens d'abord! dans tout les cas, si vous ne connaissez rien au sujet rom-hacking, ou si vous n'en savez pas beaucoup à ce sujet, alors APPRENEZ et obtenez un peu d'expérience! Le seul programme dont vous avez besoin pour la suite est un éditeur hexadécimal. Je recommande "hex Workshop"! j'ai aussi essayé d'écrire ce document pour être le plus universel possible, donc toutes les roms ne pourrons pas être modifiées ou étendues de cette façon.
Donc si vous avez des problèmes avec ce document, alors soit vous hacker une mauvaise rom, soit quelque chose n'as pas été encore vu. Ou il est possible que j'ai donné des points de travers...SVP, dites moi comment est ce document! je vous le demande!

1.1 Historique

version 1.2 (HTML) 03/25/98
- ajout de trucs pour bouger le texte dans une high-rom.
- ajouté information sur comment étendre le texte dans une bank.
- Nouvel adresse e-mail ! notez la ! j'ai été damnement chanceux d'avoir ce nom de domaine!

version 1.1(html)
- ajout de la section historique!
- changement des couleurs autour des tables de pointer ajouté pour un environnement plus sympathique
- ajout d'un liens vers la home page d'AnusP!

version 1.0(html)
- ajout d'info au sujet de comment trouver les pointers et comment étendre les roms SNES
dans ce document.

=======================================================================
SECTION 2 COMMENT LE TEXTE EST NORMALEMENT LOCALISE
=======================================================================

2.0 longueur de texte Variable

Le script de la rom est généralement stocké dans un groupement de plusieurs texte dans ce cas, les textes apparaîtront les uns après les autres, et seront généralement séparé par une valeur hexadécimal laquelle signifiera la fin du groupement. Maintenant le texte dans ces groupements (j'aime les appeler bloc de texte)n'est pas nécessairement dans l'ordre qu'il apparaîtra dans le jeu. Dans les roms NES c'est comme cela que tout le texte est généralement stocké, avec un système de "table de pointers standard". Mais dans les roms SNES, j'ai trouvé une autre façon de stockage du texte; quelque fois le texte est stocké dans des blocs comme mentionné ci-dessus, mais inclura quelque code entre chaque groupement à la place d'une hex standard pour signifier la fin de la ligne. Ces blocs de texte généralement n'ont pas de table de pointer et vous pouvez changer la longueur de chaque groupement individuel sans aucun problèmes! le seul problème avec le texte stocké de cette façon est en fait que cela le rends plus dur pour dumper son script pour le traduire. exemples de roms ou les textes sont stockés de cette façon :
the romancing saga.

2.1 Longueur de texte constant

Dans d'autres cas certains textes sont quelques fois stockés dans les roms SNES dans un format de "longueur constante". C'est généralement dans ce système que sont stockés les noms des monstres, objets etc.....dans les RPGs. La saga des Final Fantasy stocke le texte dans ce format. Qu'est-ce qu'une longueur de texte constante; il s'agit de bandes de texte (objets) qui ont une certaine longueur et qui ne sont pas séparés par une valeur hex laquelle signifie la fin du bloc. Ils sont collés les uns aux autres.....Par exemple, les objets dans Final Fantasy 4 sont long de 9 caractères, et ils se suivent de cette façon :

Tent_____FenixDownPotion___BlackSwrdIronArrow

Comme vous pouvez le voir il n'y as pas de valeur hex spécifique qui les séparent. ce qui veut dire que vous pouvez utiliser les espaces comme vous l'entendez! parce que si vous regardez bien il y a 5 espaces à utiliser pour Tent, donc vous pouvez faire devenir ce mots aussi long que vous le voulez! toutefois il vous sera impossible d'utiliser plus d'un certain nombre d'espace pour chaque objet. La seule façon de pouvoir augmenter le nombre de lettres que vous pouvez utiliser pour les "longueurs de texte constante" sera d'apprendre l'ASM!

2.2 Texte flottant

Finalement, quelques fois dans les roms SNES, il y a juste des textes flottant quelque part dans la rom, ils ne sont pas dans des "blocs de texte" spécifique. La seule façon de les étendre est de les déplacer quelque part dans la rom où il y a de la place pour les étendre! (expliqué avec plus de détails dans la section 5)

2.3 choses que vous devez aussi savoir au sujet de la façon ou le texte est stocké dans la SNES.

Certaines fois il y as des blocs de texte dans la rom qui n'utilisent pas de table de pointer. Ils peuvent être étendu comme vous le voulez sans aucun problème en bougeant la valeur hex qui défini la fin du bloc. C'est similaire au "RS"(romancing saga) bloc de texte avec un code entre chaques groupements. bougez juste le code pour adapter le texte dans la rom. Mais vous devez savoir une chose c'est qu'il y as parfois des textes stockés dans la rom (dans des blocs de
texte) qui doivent être étendu de manière similaire au bloc de texte flottant.

=======================================================================
SECTION 3 HEADERS
=======================================================================

3.0 Headers NES

Le header (tête de la rom) dans les roms nes sont les premières lignes que l'ont voient dans l'éditeur hexadécimal. Les 16 premier bytes de la rom sont le header. En d'autre mots le header couvre 10 bytes. Il s'agit d'un nombre important qu'il faut retenir pour éditer la table des pointers des roms nes.

Le header ressemble généralement a ceci :

4E45 531A 1000 1300 0000 0000 0000 0000

Vous remarquerez que les 3 premier bytes sont le standard ASCII pour la "NES"! d'autres infos sont stockés ici tel que le mapper, etc....

3.1 Headers SNES

Le header des roms snes est bien plus grand que celui de la nes. Il couvre 512 bytes. Ou plus exactement $200 bytes (hexadécimal). Il s'agit d'un autre nombre très important à retenir. Il n'est pas seulement important pour la table des pointers mais il est aussi important pour bouger les blocs de texte et bien d'autres choses!

Le header dans les roms snes ressemble a ceci:

8000000000000000AABB040000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000

Les informations situées à l'intérieur ne sont pas vraiment importante. Mais si votre rom n'a pas de header, hé bien ajoutez en un! (C'est certaine fois la raison du mauvais fonctionnement d'une rom dans certains émulateurs) Pour ajouter un header à la rom copiez juste un header d'un jeux SNES qui en as un, et insérer le header copié dans la rom.

=======================================================================
SECTION 4 TABLE DES POINTERS
=======================================================================

4.0 Table des pointers Nes

Pour trouver une table de pointers pour le texte de votre rom, il est nécessaire de savoir où le texte se situe dans la rom, quel hex signifie la fin d'une ligne, et en sachant cela vous pouvez alors trouver le début d'un bloc de texte. Une fois que vous avez trouvé le début d'un bloc de texte la table des pointers doit être immédiatement avant le texte! Prenez une adresse du début d'une ligne. (pour un exemple prenons 012D63) et enlevons toutes les lettres en plus excepté les 4 chiffres qui font 2D63. Les tables des pointers sont stockées dans des adresses de 2 paires de valeur hex..... Coupez 2D63 en deux vous obtenez 2 valeurs hex.. 2D et 63! maintenant avant de couper en deux vos 2 paires d'hex j'ai oublié de vous dire, vous devez soustraire le header, pour une rom nes comme nous l'avons vu ci-dessus il s'agit de 10 donc 2D63 - 10 = 2D53 maintenant couper en deux et réarrangez en inversant les deux vous obtenez 53 2D. Ceci vous indique un pointer de la table. vous êtes en mesure de trouver 53 dans la table mais 2D c'est une autre chose...donc vous devez actuellement chercher 53xx (ou xx est inconnu)

Un exemple de table de pointers suivi par le texte dans une rom nes :

019D30: 4D76 00F8 349D 3B9D 419D 449D 499D 4D9D
019D40: 529D 569D
E5E3 F6CD 4ADA 70F8 F9FA FBF0
019D50: 704C FE70 4BDD CEF3 705C F64D 704C F6CF
019D60: CE70 F5DD CB70 4BF0 DDF1 F2DD F370
83B7

Explication : hé bien, l'hex 70 signifie la fin d'un bloc donc en utilisant celui-ci vous trouverez le début d'un bloc de texte lequel est a l'adresse hex : 019D44, et donc tout ce qui est avant c'est la table des pointers! vous noterez que 9D se répète plusieurs fois dans la table. hé bien, c'est votre inconnu celui que vous deviez trouver par vous même!

4.1 Table des pointers SNES

La table des pointers des roms SNES fonctionne de la même manière, excepté que vous ne devez pas soustraire l'header. Mais vous devez faire attention, parce que certaine fois vous aurez affaire à une mauvaise rom et vous devrez soustraire quelque chose, mais c'est vraiment rare et assez simple de s'en occuper une fois que vous avez pigé! maintenant gardez en mémoire que certaine fois les textes des roms SNES n'utilisent pas de table de pointers (romancing saga). Donc si vous ne pouvez pas en trouver une avant le texte, alors expérimentez! essayer de changer la longueur du groupement en bougeant l'hex qui signifie la fin d'un bloc et regardez si cela marche! mais si cela ne marche pas, et qu'il n'y a pas de table de pointers, alors vous devrez apprendre comment bouger le texte à l'intérieur de la rom (expliqué dans la section 5)

=======================================================================
SECTION 5 BOUGER LE TEXTE DANS LES ROMS SNES
=======================================================================

5.0 Bouger le texte à l'intérieur des banks

maintenant il s'agit de choses plus sérieuses! vous devez faire cela si le texte que vous avez ne possède pas de table des pointers, et ne s'étend pas si vous bougez l'hex qui signifie la fin d'un bloc de texte. Vous devrez faire cela aussi pour étendre les textes "flottant". La plupart du temps le texte doit bouger à l'intérieur des banks. Qu'est-ce qu'une bank? hé bien... il est temps pour moi d'expliquer. Une bank est une partie de la rom dans la quel les infos sont stockées. Une bank dans une low-rom est de 32KB (8000 hex bytes) et dans une high-rom elle est de 64kb (10000 hex bytes). Dans une low-rom l'adresse de $000200 à $0081FF est la 1ere bank et $008200 à $0101FF est la 2nd bank, etc......pour une high-rom la 1ere bank c'est $000200 à $0101FF et $020200 à $0301FF pour la 2nd, etc...ces adresses ont le header de $200 compris! oh est-ce que je n'ai pas oublié de vous dire que le $ devant une adresse signifie que je parle de valeur hex! dans tout les cas.......la plus part du temps le texte "flottant" de la bank, ou autre chose peut seulement être bougé dans sa bank originaire. Pour faire cela vous devez commencer par convertir l'adresse en un pointer. Premièrement, allons prendre un peu de texte de FF4 (il n'est pas dans un bloc texte) à l'adresse 09DEC6. maintenant il faut soustraire le header de cette adresse ($200 dans le header des roms SNES, si le jeu possède un header). Donc $09DEC6-$200=$09DCC6. le texte ne peut être bouger que dans sa bank donc entre $098000 et $09FFFF (sans le header naturellement. Remarquez aussi que FF4 est une low-rom) maintenant la prochaine étape à effectuer est de se débarrasser du 09 donc 09DCC6 devient DCC6, maintenant inverser les 2 paires ce qui donne : C6 DC, faite une recherche de ce nombre à l'intérieur de la bank, et avec un peu de chance vous trouverez la table des pointers!
Une autre remarque : l'adresse que vous recherchez doit toujours être entre 8000 et FFFF dans une low-rom, donc si vous cherchez le pointer du texte de $0928B0, soustraire le header, éliminer l'extra 09 (ou quelque soit le chiffre), ce qui donne 26B0. maintenant avant d'inverser vous devez lui attacher $8000 pour faire une adresse entre 8000 et FFFF, donc $26B0 + $8000 devient $A6B0, maintenant vous pouvez inverser ce qui fait B0A6 et cherchez le! mais dans une high-rom, l'adresse peut être n'importe où entre 0000 et FFFF puisque la bank est de 64KB au lieu de 32KB.

5.1 bouger un large bloc de texte (ou autre chose) dans différentes banks

Généralement des larges blocs de texte auront des pointers qui permettront de bouger le texte où vous le voulez dans la rom! c'est là où étendre physiquement une rom devient pratique! (expliqué dans la section 6) ce que vous aurez à faire est de bouger le texte là où il y a assez de place pour le mettre. Premièrement cherchez la place où votre texte commence (vous devrez bouger le texte et sa table des pointers séparément... cela ne peut s'appliquer qu'à du texte "flottant", mais ils utilisent généralement des pointers à l'intérieur des banks pour pointer vers eux.) Les bouger revient à faire la même chose qu'au-dessus, excepté que vous devez savoir de quelle bank il s'agit. La première chose à faire est de soustraire le header, et la charte qui suit montre la conversion entre l'adresse actuel et la façon dont la SNES lira cette adresse.

la charte des low-roms :

 HEX

 Low-ROM SNES

000000-007FFF

008000-00FFFF

010000-017FFF

018000-01FFFF

020000-027FFF

028000-02FFFF

030000-037FFF

038000-03FFFF

040000-047FFF

048000-04FFFF

050000-057FFF

058000-05FFFF

060000-067FFF

068000-06FFFF

070000-077FFF

078000-07FFFF

080000-087FFF

088000-08FFFF

090000-097FFF

098000-09FFFF

0A0000-0A7FFF

0A8000-0AFFFF

0B0000-0B7FFF

0B8000-0BFFFF

0C0000-0C7FFF

0C8000-0CFFFF

0D0000-0D7FFF

0D8000-0DFFFF

0E0000-0E7FFF

0E8000-0EFFFF

0F0000-0F7FFF

0F8000-0FFFFF

100000-107FFF

108000-10FFFF

110000-117FFF

118000-11FFFF

120000-127FFF

128000-12FFFF

130000-137FFF

138000-13FFFF

140000-147FFF

148000-14FFFF

150000-157FFF

158000-15FFFF

160000-167FFF

168000-16FFFF

170000-177FFF

178000-17FFFF

008000-00FFFF

018000-01FFFF

028000-02FFFF

038000-03FFFF

048000-04FFFF

058000-05FFFF

068000-06FFFF

078000-07FFFF

088000-08FFFF

098000-09FFFF

0A8000-0AFFFF

0B8000-0BFFFF

0C8000-0DFFFF

0D8000-0CFFFF

0E8000-0EFFFF

0F8000-0FFFFF

108000-10FFFF

118000-11FFFF

128000-12FFFF

138000-13FFFF

148000-14FFFF

158000-15FFFF

168000-16FFFF

178000-17FFFF

188000-18FFFF

198000-19FFFF

1A8000-1AFFFF

1B8000-1BFFFF

1C8000-1CFFFF

1D8000-1DFFFF

1E8000-1EFFFF

1F8000-1FFFFF

208000-20FFFF

218000-21FFFF

228000-22FFFF

238000-23FFFF

248000-24FFFF

258000-25FFFF

268000-26FFFF

278000-27FFFF

288000-28FFFF

298000-29FFFF

2A8000-2AFFFF

2B8000-2BFFFF

2C8000-2CFFFF

2D8000-2DFFFF

2E8000-2EFFFF

2F8000-2FFFFF

Je suis sûr que vous voyez le schéma maintenant. Donc disons que vous avez un bloc de texte à l'adresse $080600. Soustraire le header, donc cela devient $080400, puis regardez dans la charte et trouvez sa nouvelle adresse. donc $080400 est actuellement $108400. Maintenant coupez les en paire => 10 84 00 et inverse les => 008410. Maintenant vous devez chercher, et souvenez vous qu'il apparaîtra plus d'un fois dans la rom, donc la meilleur chose à faire est de changer toutes les adresses qui apparaissent par la nouvelle.
Un petit truc : en général ils ont "BF" avant, donc 008410, ressemblera à BF008410.
Maintenant pour les high-rom puisque les banks sont dans des bloc de 64KB la façon dont la SNES les adresse est différente. ils n'ont pas à être entre 8000 et FFFF ! Il faut juste leur ajouter une adresse normale à l'exception que cela commence à C00000. Donc en fait, tout ce que vous avez à faire c'est d'ajouter $C00000 à la valeur hex pour avoir l'adresse de la high-rom. Par exemple, prendre $1AE380, soustraire le header ce qui donne $1AE180 et maintenant ajouter $C00000 ce qui donne $DAE180. Et vous l'avez! vous avez trouvé votre pointer!

=======================================================================
SECTION 6 ETENDU PHYSIQUE D'UNE ROM SNES
=======================================================================

Maintenant pour cette partie assez simple! dans les roms SNES, tout ce que vous aurez a faire pour rendre la rom plus grosse, est de lui ajouter plus d'espace! naturellement l'espace que vous ajouterez devra être un multiple de 32KB, ou $8000 hex bytes ou 1 bank.
Mais la roms sera généralement plus stable si vous la gardez à un multiple de 4Mbits.
En dessous une petite charte pour montrer la taille des fichiers pour que la rom soit stable

(les adresses qui suivent comprennent l'header de $200)

 MBITs

 HEX BYTES

 SIZE

4mbit

$080200

0.5MB

8mbit 

$100200

1.0MB

12mbit

$180200

1.5MB

16mbit

$200200

2.0MB

20mbit

$280200

2.5MB

24mbit

$300200

3.0MB

yada yada yada.... je suis sur que vous voyez le schéma.....

Hé bien, c'est tout pour cela! ne me demandez pas comment étendre les roms nes, parce que je ne sais pas comment, et j'ai entendu dire que c'était impossible!

=======================================================================
SECTION 7 ETENDRE LE TEXTE DANS LES BANKS
=======================================================================

Qourquoi devrais-je parler de ceci? hé bien, sauf si vous êtes préparé à faire quelques modifications en ASM. Ce que je veux dire par là, si vous avez une low-rom et que vous étendez le texte, vous ne pouvez pas dépasser les 32KB qui sont allouer à la bank, ou 64 KB pour une high-rom. Ce qui va arrivé si vous dépassez : le texte qui va dans la 2e bank ne sera pas affiché. Maintenant je ne suis pas sûr que ce soit le cas avec certaine roms, mais je suspect que c'est la raison car c'est ce qui est arrive dans notre traduction de FF4. Maintenant il y
a une autre façon de franchir ce problème, ce serait de limiter le joueur à jouer avec Zsnes 2.95 parce qu'un bug dans celui-ci le permet! mais je ne recommande pas cette alternative, car peu de gens voudront utiliser cette vieille version de zsnes.

=======================================================================
SECTION 8 CONCLUSION
=======================================================================

Wow! j'ai écrit cela en une nuit!?! yep! maintenant je suis très fatigué! la plus part des choses dans ce documents couvre les roms SNES, si vous avez des problèmes avec les roms nes, SVP ne me contactez pas, parce que probablement je n'y connaîtrais rien! je connais juste comment trouver la table des pointers de la nes, mais la SNES c'est une autre histoire! Je suis constamment en train d'apprendre plus et encore plus, et donc un jour ce document sera encore mieux! mais pour l'instant il restera ainsi.

je voudrais remercier les personnes suivante :

P-funk : pour son aide sur comment bouger les choses à l'intérieur d'une rom
Dark Force: pour son aide sur certaine chose technique
necrosaro : pour avoir créé son programme qui permet de sauver du temps dans l'ajout
des pointers de FF4 (cela aurait pris un loooooong moment sans lui)
cataclysmX: pour avoir porté ce document en html et pour d'autre truc

des question/commentaire? : AnusP : AnusP@ihavepms.com
des commentaires sur html : cataclysmX : cataclysmx@hotmail.com

***Copyright***
Tout ceux qui distribueront ce document ne doivent le modifier en aucune façon, sans l'accord de l'auteur. Il doit aussi y avoir un liens vers J2E translation et anusP home page au début et à la fin de la page merci pour votre coopération.

J2E translation

Anus P. (C) 1998


Sommaire