Toolkit for decompiling DS games, dsd
for short. Work in progress, not ready for production yet!
- 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.
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.
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 toconfig.yaml
in the extract directory.-7
,--arm7-bios
: Path to ARM7 BIOS file, needed for encryption.-o
,--rom
: Path to ROM file.
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 toconfig.yaml
generated byinit
.
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 toconfig.yaml
in the extract directory.-o
,--output-path
: Output path fordsd
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.
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 toconfig.yaml
generated byinit
.
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 toconfig.yaml
generated byinit
.-a
,--asm-path
: Output path for assembly files.
Generates an objdiff
configuration.
$ dsd objdiff --config-path path/to/config.yaml
Options:
-c
,--config-path
: Path toconfig.yaml
generated byinit
.-o
,--output-path
: Path to directory to generateobjdiff.json
.-s
,--scratch
: Include decomp.me scratches.-C
,--compiler
: Name of compiler in decomp.me, see https://decomp.me/api/compiler for compilers for thends_arm9
platform.-f
,--c-flags
: Compiler flags, as a single string.-m
,--custom-make
: Custom build command forobjdiff
.-M
,--custom-args
: Arguments to custom build command. Can be passed multiple times to append more arguments.
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 toconfig.yaml
generated byinit
.-l
,--lcf-file
: Output path to LCF file.-o
,--objects-file
: Output path to objects list, to be passed to the linker.
Verifies that built modules are matching the base ROM.
$ dsd check modules --config-path path/to/config.yaml
Options:
-c
,--config-path
: Path toconfig.yaml
generated byinit
.-f
,--fail
: Return failing exit code if a module doesn't pass the checks.