Difference between revisions of "Disassembly instructions"

From Pikmin Technical Knowledge Base
Jump to navigation Jump to search
(Added instructions for the r2 and r13 register values.)
 
(8 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{DISPLAYTITLE:''Pikmin 2'' disassembly instructions}}
+
The following guide will teach you how to get a disassembler environment with ''Pikmin'' or ''Pikmin 2''<nowiki>'s</nowiki> code, complete with the symbol map. Some things to keep in mind:
The following guide will teach you how to get a disassembler environment with ''Pikmin 2'''s code, complete with the symbol map. Some things to keep in mind:
+
 
* The symbol map (i.e. the thing that gives functions, classes, etc. a name) can only be found in a ''Pikmin 2'' demo inside of a multi-game demo disc.
 
* These instructions apply to that demo. For most purposes, it's good enough, since the code should be very similar to the final game. You can apply this guide to the final version of ''Pikmin 2'', but you won't be able to get the symbol map working without a lot of effort.
 
 
* The disassembly is still written in PowerPC assembly language, and we only have access to the names of functions, classes, and so on; even then, some of them might be missing. We don't have access to the names of variables or anything like that.
 
* The disassembly is still written in PowerPC assembly language, and we only have access to the names of functions, classes, and so on; even then, some of them might be missing. We don't have access to the names of variables or anything like that.
 +
* The symbol map (i.e. the thing that gives functions, classes, etc. a name) for ''Pikmin 2'' can be found in the final version of the game but the demo version of the game, the one found inside of a multi-game demo disc 17. has a more complete map than final. These instructions apply to that demo. For most purposes, it's good enough, since the code should be very similar to the final game. You can apply this guide to the final version of ''Pikmin 2'', but you won't be able to get the symbol map working without a lot of effort.
  
 
== Getting the necessary files ==
 
== Getting the necessary files ==
 +
=== ''Pikmin'' ===
 +
# Obtain any copy of ''Pikmin'', as long as it's on the GameCube.
 +
# Add it to Dolphin's game list.
 +
# Right-click it, Properties, Filesystem:
 +
## Right-click Disc at the top of the tree, Extract DOL..., and extract it somewhere.
 +
## Right-click <code>/dataDir/build.map</code>, Extract File..., and extract it somewhere.
 +
 +
=== ''Pikmin 2'' ===
 
# Obtain the Multi Game Demo Disc Version 17 (US).
 
# Obtain the Multi Game Demo Disc Version 17 (US).
 
# Add it to Dolphin's game list.
 
# Add it to Dolphin's game list.
Line 13: Line 20:
 
# Right-click the ''Pikmin 2'' demo in Dolphin's game list, Properties, Filesystem:
 
# Right-click the ''Pikmin 2'' demo in Dolphin's game list, Properties, Filesystem:
 
## Right-click Disc at the top of the tree, Extract DOL..., and extract it somewhere.
 
## Right-click Disc at the top of the tree, Extract DOL..., and extract it somewhere.
## Find <code>pikmin2UP.MAP</code>, right-click it, Extract File..., and extract it somewhere.
+
## Right-click <code>pikmin2UP.MAP</code>, Extract File..., and extract it somewhere.
  
 
== Setting up a disassembly environment ==
 
== Setting up a disassembly environment ==
Line 20: Line 27:
 
# Go to the [https://github.com/aldelaro5/ghidra-gekko-broadway-lang Ghidra Gekko/Brodway language project], and follow the instructions to install it on Ghidra.
 
# Go to the [https://github.com/aldelaro5/ghidra-gekko-broadway-lang Ghidra Gekko/Brodway language project], and follow the instructions to install it on Ghidra.
 
# Go to the [https://github.com/Cuyler36/Ghidra-GameCube-Loader Ghidra GameCube loader project], and follow the instructions to install it on Ghidra.
 
# Go to the [https://github.com/Cuyler36/Ghidra-GameCube-Loader Ghidra GameCube loader project], and follow the instructions to install it on Ghidra.
# In Ghidra, create a project for ''Pikmin 2'', and add the .dol file you extracted to the project. The type should be detected automatically, but you should select GameCube game.
+
# In Ghidra, create a project for the game you want, and add that respective game's <code>.dol</code> file you extracted to the project. The type should be detected automatically, but if not, you should select Nintendo GameCube Binary for the format, and PowerPC:BE:32:Gekko_Brodway:default for the language.
# When asked if you want to include a symbol map, choose yes, and pick the .MAP file you extracted.
+
# When asked if you want to include a symbol map, choose yes, and pick the <code>.map</code> file you extracted.
# Drag the .dol file to the CodeBrowser tool. When prompted to analyze the project, press Yes, and go with the defaults.
+
# Drag the <code>.dol</code> file to the CodeBrowser tool. When prompted to analyze the project, press Yes, and go with the defaults.
  
 
=== Details ===
 
=== Details ===
 +
==== ''Pikmin 2'' ====
 
# In the disassembly pane, select all with Ctrl+A.
 
# In the disassembly pane, select all with Ctrl+A.
 
# Right-click, Set Register Values...
 
# Right-click, Set Register Values...
Line 32: Line 40:
 
{{credits|[[User:Espyo|Espyo]], [[User:Yoshi2|Yoshi2]]}}
 
{{credits|[[User:Espyo|Espyo]], [[User:Yoshi2|Yoshi2]]}}
  
 +
[[Category:Pikmin]]
 
[[Category:Pikmin 2]]
 
[[Category:Pikmin 2]]
 
[[Category:Notes]]
 
[[Category:Notes]]

Latest revision as of 02:41, 11 March 2024

The following guide will teach you how to get a disassembler environment with Pikmin or Pikmin 2's code, complete with the symbol map. Some things to keep in mind:

  • The disassembly is still written in PowerPC assembly language, and we only have access to the names of functions, classes, and so on; even then, some of them might be missing. We don't have access to the names of variables or anything like that.
  • The symbol map (i.e. the thing that gives functions, classes, etc. a name) for Pikmin 2 can be found in the final version of the game but the demo version of the game, the one found inside of a multi-game demo disc 17. has a more complete map than final. These instructions apply to that demo. For most purposes, it's good enough, since the code should be very similar to the final game. You can apply this guide to the final version of Pikmin 2, but you won't be able to get the symbol map working without a lot of effort.

Getting the necessary files[edit]

Pikmin[edit]

  1. Obtain any copy of Pikmin, as long as it's on the GameCube.
  2. Add it to Dolphin's game list.
  3. Right-click it, Properties, Filesystem:
    1. Right-click Disc at the top of the tree, Extract DOL..., and extract it somewhere.
    2. Right-click /dataDir/build.map, Extract File..., and extract it somewhere.

Pikmin 2[edit]

  1. Obtain the Multi Game Demo Disc Version 17 (US).
  2. Add it to Dolphin's game list.
  3. Right-click it, Properties, Filesystem, go down to zz_Pikmin2_game.tgc, right-click it, Extract File..., and extract it somewhere.
  4. Add the Pikmin 2 demo you've extracted to Dolphin's game list.
    • If your version of Dolphin can't read .tgc files, download tgctogcm and run the .tgc file through it, in order to get a plain old .gcm file.
  5. Right-click the Pikmin 2 demo in Dolphin's game list, Properties, Filesystem:
    1. Right-click Disc at the top of the tree, Extract DOL..., and extract it somewhere.
    2. Right-click pikmin2UP.MAP, Extract File..., and extract it somewhere.

Setting up a disassembly environment[edit]

Basics[edit]

  1. Install Ghidra (and maybe familiarize yourself with how it works).
  2. Go to the Ghidra Gekko/Brodway language project, and follow the instructions to install it on Ghidra.
  3. Go to the Ghidra GameCube loader project, and follow the instructions to install it on Ghidra.
  4. In Ghidra, create a project for the game you want, and add that respective game's .dol file you extracted to the project. The type should be detected automatically, but if not, you should select Nintendo GameCube Binary for the format, and PowerPC:BE:32:Gekko_Brodway:default for the language.
  5. When asked if you want to include a symbol map, choose yes, and pick the .map file you extracted.
  6. Drag the .dol file to the CodeBrowser tool. When prompted to analyze the project, press Yes, and go with the defaults.

Details[edit]

Pikmin 2[edit]

  1. In the disassembly pane, select all with Ctrl+A.
  2. Right-click, Set Register Values...
  3. Set r2 to 8051e2a0, and r13 to 8051c5c0.
    • The game uses these registers a lot to load data. These values can be obtained by playing the demo in Dolphin with debug mode, pausing emulation, and examining the value of the registers, since they're always the same.
Credits: Espyo, Yoshi2