Skip to content

AetiasHax/ds-decomp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ds-decomp

Toolkit for decompiling DS games, dsd for short. Work in progress, not ready for production yet!

Contents

Goals

  • Automate decomp project setup with zero user input, saving months of manual setup time.
  • Allow developers to easily delink code into individual translation units and to quickly give names to symbols.
  • Generate linker scripts with correct link order.
  • Integrate with other decompilation tools, including objdiff.

Commands

rom extract

Extracts a DS ROM into separate files for code and assets.

$ dsd rom extract --rom path/to/rom.nds --output--path path/to/extract/

Options:

  • -r, --rom: Path to ROM file.
  • -7, --arm7-bios: Path to ARM7 BIOS file, needed for decryption.
  • -o, --output-path: Path to extract directory.

rom build

Builds a DS ROM from an extract directory.

$ dsd rom build --config path/to/extract/config.yaml --rom path/to/built_rom.nds

Options:

  • -c, --config: Path to config.yaml in the extract directory.
  • -7, --arm7-bios: Path to ARM7 BIOS file, needed for encryption.
  • -o, --rom: Path to ROM file.

rom config

Creates a ds-rom configuration to build a ROM from linked binaries.

$ dsd rom config --elf path/to/final_link.elf --config path/to/config.yaml

Options:

  • -e, --elf: Path to the final linked ELF file, generated by the LCF and the linker.
  • -c, --config: Path to config.yaml generated by init.

init

Initialize a new dsd configuration from a given extract directory generated by rom extract. This will analyze the code and generate config files.

$ dsd init --rom-config path/to/extract/config.yaml --output-path path/to/output/ --build-path path/to/build/

Options:

  • -r, --rom-config: Path to config.yaml in the extract directory.
  • -o, --output-path: Output path for dsd config files.
  • -d, --dry: Dry run, only perform analysis but don't write any files.
  • -b, --build-path: Output path for delinks and the LCF.

delink

Delinks the game into relocatable ELF files. The output directory is determined by delinks_path in config.yaml.

$ dsd delink --config-path path/to/config.yaml

Options:

  • -c, --config-path: Path to config.yaml generated by init.

dis

Disassembles the game into assembly files. Used for informational purposes, doesn't target a specific assembler.

$ dsd dis --config-path path/to/config.yaml --asm-path path/to/asm/

Options:

  • -c, --config-path: Path to config.yaml generated by init.
  • -a, --asm-path: Output path for assembly files.

objdiff

Generates an objdiff configuration.

$ dsd objdiff --config-path path/to/config.yaml

Options:

  • -c, --config-path: Path to config.yaml generated by init.
  • -o, --output-path: Path to directory to generate objdiff.json.
  • -s, --scratch: Include decomp.me scratches.
  • -C, --compiler: Name of compiler in decomp.me, see https://decomp.me/api/compiler for compilers for the nds_arm9 platform.
  • -f, --c-flags: Compiler flags, as a single string.
  • -m, --custom-make: Custom build command for objdiff.
  • -M, --custom-args: Arguments to custom build command. Can be passed multiple times to append more arguments.

lcf

Generates a linker command file (LCF) for mwldarm.

$ dsd lcf --config-path path/to/config.yaml --lcf-file path/to/linker_script.lcf --objects-file path/to/objects.txt

Options:

  • -c, --config-path: Path to config.yaml generated by init.
  • -l, --lcf-file: Output path to LCF file.
  • -o, --objects-file: Output path to objects list, to be passed to the linker.

check modules

Verifies that built modules are matching the base ROM.

$ dsd check modules --config-path path/to/config.yaml

Options:

  • -c, --config-path: Path to config.yaml generated by init.
  • -f, --fail: Return failing exit code if a module doesn't pass the checks.