Ze Skeud's guide sur l'asm

 

_
_
Sommaire
_Introduction
_SNES
_Compression
_Megadrive
_Final Thoughts
_


 
 
 

INTRO




Ce guide a été fait pour tous ceux desireux d'apprendre comment hacker un jeu, au delà du hack normal (fonte, texte, etc..).
Mais surtout, il a été fait pour emmerder read! :-))))

I°) Approche "basique"

Une certaine connaissance d'un language de programmation est préferable pour comprendre ce qui suit (basic, C etc..), mais si vous avez déjà de l'experience au niveau ASM PC, c'est encore mieux ;-) .
Ce guide ne vous apprendra pas la base de l'asm, il existe(ra?) des docs expliquant ça (pourquoi refaire en moins bien ce qui existe déjà?). Donc, je sous entend que LDA CMP ou autres STA ne vous sont pas totalement étrangers. Si il vous manque des infos, ou si vous vous posez des questions sur un opcode inconnu, d'abord la doc de Jay (eXcellente doc) ou alors zieutez dans le .zip de qwertie (plus d'infos après). Ce n'est pas la peine d'apprendre TOUS les opcodes, juste ceux de "base".
Il faut aussi connaitre en gros la structure de la snes (DMA VRAM ne sont pas des monstres venus de l'espace, juste des élements de la snes!).

Voilidonc, on va passer à la deuxième partie : l'utilisation des utilitaires.

II°)Les TOOLZ

Difficile de creuser sans pioche, non? Et bah là, il vous faut une trousse à outils bien chargée qui vous faliciterons la vie. Petite revue des différents programmes.

Les désassembleurs : inutiles en premier temps. Ca ne sert à rien de désassembler un jeu et se retrouver après avec un fichier de 30 Mo (tracer) sans aucune information. On s'en sert plus tard (voir après). Le must? Celui de Jay ou de pelrun (oubliez tracer!!)

Les debuggers : un ptit peu de zsnes, un ptit peu de snes9x, et BEAUCOUP de LT's SNES9X! En résumé, la version de LT ajoute une fonction TRES importante, et ô combien utile. Vous appuyez sur "VErr Num" juste avant l'apparition d'une fenètre de texte, par exemple, puis vous rappuiez sur la meme touche. Puis, vous quittez snes9x. Vous avec un Bô fichier trace.log qui dépasse rarement 200 Ko, donc plus facilement analisable (voir III).

Divers : Après avoir trouvé la routine, tout préparé pour les modifs, voici ASMDEV (de Jay et Disnesquick) l'outil ultime pour faire des modifs asm. C'est un désassembleur interactif. Inutile de refaire les modifs asm avec un éditeur hexa (n'est-ce pas Mera!). Si vous devez convertir des adresses pc en snes, et vice-verca, je vous conseille Hex2snes de Anus Pee, ou alors UHR, qui a un convertisseur integré.

III°)Le Trace.log

Donc, vous avez fait comme je vous ai dit, et vous vous rertouvez avec un Bo trace.log. Mais kesskeckecetruk? me direz vous. C'est le code asm que la snes a effectué lors de la periode entre les 2 pressions sur VErr Num. Mais il vire les boucles! (si le jeu lance 200 fois la meme routine, ca devient lourd!). Mais comment retrouver ce que l'on veut dans cette bouillie? Là, plusieurs solutions, je vous en donne 2.

1° : Vous savez d'avance où se situe ce que vous voulez modifier (la fonte, ou le texte), et, après avoir converti l'adresse pc en snes, vous cherchez des appels à cette adresse, ou alors des appels dans la bank où se situe la fonte (si c une fonte que vous cherchez BIEN sûr!), et vous essayez d'isoler la routine. puis, vous allez au IV :-).

2° : La "technique du barbare"®©™. Il demande l'utilisation de 2 trace.log. Comment les faire? C'est simple : vous appuyez sur Verr num, juste avant l'affichage de la phrase A, et vous quittez, après ravoir appuyé sur verrnum. Vous renommez trace.log en 1.asm. Vous faites pareil une seconde fois, MAIS avec une phrase DIFFERENTE (phrase B), et vous renommez en 2.asm. puis, vous comparez. Bien sûr, il y a peu de chances que les fichiers soient absolument identiques, mais il le seront par "blocs" (plus d'infos après). Dès que vous trouvez une différence dans les [ ], vous avez trouvé l'endroit recherché (texte ou fonte).

Quelle est la meilleure technique? Essayez d'abrod la première, mais, si elle donne rien, faites la 2eme. Il existe des technique différentes, mais plus longues, donc chiantes, donc que je n'utilise pas ;-) .

Par contre, il y a des moments où cette deuxième méthode ne fonctionne pas. C'est une des raisons qui ont fait que je ne l'utilise plus.
Le dernier jeu en date sur lequel je me soit attelé était Slam Dunk (fonte compressée! Faut bien s'occuper :-) ).
J'avais trouvé l'emplacement dans la rom où se situait la fonte compressée grâce à la technique expliquée au IV.
MAIS, en cherchant dans le fichier trace.log, je n'avait AUCUNE correspondance d'un appel dans cette zone de la rom. La raison était evidente : la plupart des données de cette rom étaient compressés, donc, il y avait des appels à la routine de décompression sans arrêt!
J'ai alors ressorti snes9x version "normale", et pis j'ai mis des Break points aux bons endroits (pour récuperer le maximum de routines), et j'ai laissé tourner.
Je me suis retrouvé avec un ENORME fichier de 40 Mo! Mais, comme je connaissais l'endroit où la fonte compressée se situait, j'ai pu trouver la bonne routine. Victoire!

IV°) Comment trouver les données compressées

En fait, j'ai piqué cette technique à mera (rendonsà Cesar ce qui appartient à Cesar). Pour la plupart des compressions Lz, le début n'est pas compressé. Il faut d'abord récuperer la donnée décompressée (grâce à un .zst), puis, allez au tout début de cette donnée. Prenez les premiers bits QUI NE SE REPETENT PAS! et cherchez-les dans la rom. Vous les trouvez plusieurs fois? Modifiez les un par un (je veux dire, modifiez toute la zone sur 20 octets) et savegardez. Ca a changé la donnée décompressée? Parfait! vous avez trouvé l'emplacement de la donnée compressée.
 

V°) Mais y'a pas des docs pour m'aider?

Non... ou très peu!
Il y a la "bible" qui regroupe la plupart des docs sur la snes (processeur, etc..). Je connais cette doc depuis plus d'un an, mais j'ai été étonné d'être parmis les seuls! 
Elle a été compilée par qwertie, auteur du regretté snesqR (emulateur en open source).
De plus, elle est dans la partie "utiles".
Pour d'autres docs sur le hack asm, c'est la pénurie.
En anglais, il y a celle de F.H sur la décompression du texte LZSS de lodoss (bonne doc, mais assez dure pour un débutant!), et..... c'est tout (pour les docs qui prennent pour base un jeu).
Vous pouvez aussi vous orienter vers les sources de démos asm, où l'on apprend pas mal de choses sur le fonctionnement interne de la snes.
En français, il y a RIEN sur l'asm (sauf ma doc bien sûr ;-) ) : un vide que je compte bien combler.

C'est tout pour maintenant. Normalement, vous en savez assez pour passer dans les autres rubriques