Toolkit for decompiling DS games, dsd
for short. Work in progress, not ready for production yet!
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.