Aller au contenu
GHANMI

Emulateurs à déboguage

Messages recommandés

Je pense que ce serait utile comme liste d'emulateurs à aider pour le modding et déboguage des jeux.

 

NES: FCEUX, Mesen

SNES: Geiger's Snes9X 1.51

GBC: BGB

PS1: no$psx

Megadrive: Regen, Gen Tracer build

GBA: vba-h-sdl, no$gba

DS: no$gba

GameCube/Wii: Dolphin (avec flag debug)

PS3: RPCS3 (avec flag debug)

 

Ca couvre le désassemblage d'instructions language machine avec les outils suivants:

 

- Cheat Engine (inclus dans l'emulateur, ou outil externe. faut savoir comment convertir l'addresse vers le format attendu par le jeu, et pour ce il faut une memory map de la console en question) ça donne une addresse du contenu intéressant à modifier (un compteur de vies, etc)

- Affichage de mémoire visuelle ou sonore ou autre, ou extracteur de RAM vers fichier externe afin de l'analyser avec editeur hexadecimal et dénicher le contenu intéressant

- Breakpoint sur l'adresse intéressante afin de piéger et isoler toute instruction de programme qui l'utilise, soit en lecture, écriture ou exécution (si c'est une addresse de programme en soi même)

- Trace, qui piège toutes les instructions jusqu'à un breakpoint, pour les instructions d'avant l'instruction intéressante

- Step, pour avancer vers les instructions d'après l'instruction intéressante

 

Faut savoir aussi comment lire le programme. On utilise une documentation:

- la liste des instructions assembleur de cette architecture et leur sens et particularités. (exemple: cas de la NES - assembleur c6502)

- la liste des hardware registers de cette console pour tout accès graphique, gamepad, etc (exemple: cas de la NES - hardware map de la nes sur nesdev ou site problemkaputt)

- la memory map de la console

- diverses autres particularités de cette console, comme restrictions graphiques, comment ce mapper particulier fait le bankswitch, etc.

 

Bien sûr c'est selon le besoin et on n'est pas censé apprendre tout.

 

Pour changer le programme, faut:

- un désassembleur pour convertir les données binaires en "code source" avec instructions type lda / sta en anglais humain lisible et compréhensible. Ca peut partir d'un émulateur en cours d'exécution de jeu, de fichier statique à partir d'une addresse (dénichée avec l'etude breakpoint dessus) ou à partir du vecteur où commence la toute première instruction du programme entier pour les fous qui veulent désassembler toute la ROM (les fameuses disassembly, qui sont bien plus faciles et flexibles à changer)

- notepad++ ou autre pour écrire du nouveau code

- un assembleur qui fait la conversion inverse, pourvu qu'il y a de l'espace libre dans la rom en destination

 

Y'en a plusieurs programmes mais c un bon départ.

C'est amusant et si on fait déjà des codes de triche on peut utiliser ce savoir faire pour des petits changements et tweaks de jeu.

Partager ce message


Lien à poster
Partager sur d’autres sites

Une liste à émulateurs:

https://gamehacking.org/wiki/Assembly_Hacking

 

Outils de débogage:

NES:

https://wiki.nesdev.com/w/index.php/Tools

SNES:

https://www.romhacking.net/utilities/241/

 

MS-DOS/PC (utile en intermédiaire entre débogueur <> émulateur <> console)

https://en.wikibooks.org/wiki/X86_Disassembly/Disassemblers_and_Decompilers

Partager ce message


Lien à poster
Partager sur d’autres sites

pour la SMS, 
Meka, Emulicious

 

pour la Snes, j'utilise Dispel pour désassembler.

Megadrive : Exodus

 

Dans tous les cas, je préfère toujours avoir un fichier "texte" (donc une rom désassemblée) pour fouiller tranquillou/annoter dedans.

Attention, tous les désassembleur ne se valent pas.

 

Et il faut aussi les opcodes (et parfois cycles) de la machine selon ce qu'il y a a hacker/modifier.

 

Mame offre aussi des fonctions de debug, mais perso je ne trouve pas ca "hyper" pratique ni friendly

(mais parfois pas le choix vu que l'on n'a que ca pour hacker des trucs arcade)

 

Pour appliquer les modifications, selon le nombre cela peut être un simple editeur hexa (HxD sur PC ou iHex sur Mac), ou un assembleur avec une fonction de mise en background de la rom (pour n'écrire que les modif par dessus)

Partager ce message


Lien à poster
Partager sur d’autres sites
Megadrive : Exodus

 

Jamais entendu parler de celui là avant. J'avais utilisé Gens (pour la recherche cheat) + Regen (pour le désassembleur) mais je n'ai pas encore de bon moyen pour faire une trace, ni de désassembler à partir de l'adresse ligne code que j'ai trouvée, encore moins d'assembler et réinsérer.

 

Pour les assembleurs (même la snes et nes) la procédure d'insertion dans une rom existante m'échappe. Il me semble que ça construit de nouveaux programmes à zéro, ou des fragments de code. Mais l'hameçon avec l'instruction de saut est quelque chose que je dois toujours insérer manuellement (en écrivant manuellement l'équivalent en hex de l'instruction du saut sur l'instruction à remplacer) et je crois qu'il existe une meilleure façon de le faire en propre mais qui m'échappe.

 

 

Dans tous les cas, je préfère toujours avoir un fichier "texte" (donc une rom désassemblée) pour fouiller tranquillou/annoter dedans.

Attention, tous les désassembleur ne se valent pas.

 

Y en a des émulateurs qui génèrent des fichiers "symbole" modifiables avec notepad++ au cas où on voudrait ajouter des noms à des lignes de fonctions de programmation en particulier, comme bsnes-plus. A ce que j'entends, il y a des jeux qui ont des symboles nommés déjà par le constucteur oubliés dans le disque, mais je ne saisis pas trop comment les exploiter.

 

La remarque à propos des désassembleurs est tellement vraie.. ça m'a fait perdre tellement du temps sur NES.

 

 

Mame offre aussi des fonctions de debug, mais perso je ne trouve pas ca "hyper" pratique ni friendly

(mais parfois pas le choix vu que l'on n'a que ca pour hacker des trucs arcade)

 

Le mode debug avec ligne de commande? On peut faire pire.

Certains émulateurs demandent un débogeur du programme windows (x86) de l'émulateur. Ou un autre débogeur en parallèle. Sans aucune documentation par ailleurs. C atroce.

Partager ce message


Lien à poster
Partager sur d’autres sites

FCEUX ça marche comme bonne entrée dans la matière avec:

 

- désassembleur inclus

- assembleur inclus

- trace

- code logging (pour détecter données utilisées)

- breakpoints, dont ceux à conditions

 

(Mesen ajoute une décomposition avec flèches plus claires où chaque fonction commence)

 

 

Malheureusement c'est rare de trouver d'emulateurs à débogeurs aussi bien foutus pour autres consoles. bsnes-plus (snes) était une récente surprise mais ça reste pas assez.

Partager ce message


Lien à poster
Partager sur d’autres sites

Exodus ne fonctionne que sous Windows 64bits.
Et il faut une machine puissante...

 

Les .sym c'est simple fichier texte de adresse:label pour permettre de se retrouver.

 

Wladx (assembleur) fonctionne avec pas mal de machines dont la SNES

C'est l'assembleur que j'utilise pour programmer en ASM sur Master System.

Il génère un fichier symbol (.sym) qui peut etre utilisé sous meka ou emulicious ensuite.

 

pour mettre une rom en arrière plan, c'est simple (sur wladx):

.background "ma-rom.xxx"

ensuite des .org ou .orga pour les adresses à modifier

Partager ce message


Lien à poster
Partager sur d’autres sites

Puisque ce n'est pas très cité ailleurs pour soucis d'impropriété et de réputation, mais ça peut être utile pour ceux à court d'options, la documentation officielle incluse avec les software development keys, ainsi que certains outils logiciels inclus de conversion, peuvent avoir des informations vraiment précieuses.

 

Mais vu que leur acquisition est souvent illégale ou viole les termes du contract du développeur, ils sont difficiles à trouver vu qu'ils ne restent jamais sur le même site sur internet avant d'être supprimés et c'est un risque en soi.

 

Ils peuvent être un complément très efficace à la documentation hardware, mais même les versions officielles peuvent avoir des erreurs (que ce soit par omission, par fautes de traduction depuis le japonais auquel cas la version japonaise du guide est supérieure mais bien plus inaccessible que ce soit l'acquisition en soi même ou le vocabulaire technique utilisé, et il y a les cas où le constructeur garde jalousement certains aspects du hardware et produit d'autres guides pour leurs équipes internes, quelque chose dont Nintendo est très coupable)

Partager ce message


Lien à poster
Partager sur d’autres sites

Quelques pages de documentation hardware très utile (mais loin d'être parfaites étant un travail en progrès)

 

GBATek (GBA/DS/DSi)

EveryNES (NES)

PSX-SPX (PS1) à complémenter par la documentation officielle

fullsnes (SNES)

Pandocs (GB/GBC)

SacredTechScroll (VB)

 

(je me souviens d'une pour la wonderswan, le pc engine, et la megadrive mais je ne les retrouve pas. il y a pour le pc-98 en japonais)

 

Pour les arcades il y a les commentaires inclus dans le code source de MAME qui sont assez élaborés qui peuvent être très utiles.

Partager ce message


Lien à poster
Partager sur d’autres sites

Comment faire son premier homebrew qui dit "hello world" ca peut aider aussi, histoire de comprendre comment le hardware communique avec son extérieur. Ce sont souvent des packs préconçus, à assembler avec un outil assembleur. C'est pour épargner aux développeurs de faire toute l'initialisation des registres hardware de démarrage (qui peut être assez longue) eux mêmes.

 

Très utile pour tester ses connaissances en programmation assembleur et éventuellement, ajouter des écrans d'intros ou des changements plus radicaux.

 

NES:

https://github.com/PeterLemon/NES/blob/master/HelloWorld/HelloWorld.asm

 

SNES:

https://en.wikibooks.org/wiki/Super_NES_Programming/Initialization_Tutorial

 

Genesis:

http://sega4ever.power-heberg.com/tutoriaux/ProgMD/Sommaire.html (en français)

 

GBA:

https://www.reinterpretcast.com/writing-a-game-boy-advance-game

http://www.loirak.com/gameboy/gbatutor.php (utilise VBA, même si la recommendation usuelle est no$gba, mais ça marche aussi)

Partager ce message


Lien à poster
Partager sur d’autres sites

A part ça, il y a des documentations hardware sous format vidéo facile à comprendre avec du très bon travail d'infographie pour ceux que ça tente.

 

SNES (série documentation hardware):

 

Megadrive (un tuto hello world):

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu peux oublier la version snes9x de Geiger, largement obsolète.

Préfère celle-là : https://github.com/devinacker/bsnes-plus

(le «K» de SDK est pour «Kit», pas «Key» :) )

 

Pour la Geiger, ça faisait l'affaire pour un moment, mais je n'avais jamais compris comment l'utiliser pour le trace. et il paraît qu'il faut aussi installer un correctif windows pour pouvoir continuer à l'utiliser.

 

J'utilise déjà bsnes-plus depuis un bail parce que le memory viewer couvre déjà bien plus de choses (SA-1, Super FX-2) que celui de la fork de Geiger, et le PPU viewer n'est vraiment pas de trop (une aubaine même, ça change de faire un dump de vram et le faire passer à un tile éditor chaque fois pour voir tout changement)

 

No$sns est une autre option, mais ça rate l'ergonomie et les bonnes bases de l'émulation en soi même.

Partager ce message


Lien à poster
Partager sur d’autres sites

×
×
  • Créer...