Interface with Nintendo DS ROM images.
Go to file
2025-04-20 17:46:40 -07:00
.github/workflows build: Remove libpng subproject, direct developers to install from source 2025-04-19 21:16:11 -07:00
docs docs: Write initial documentation for access-director and command-drivers 2025-04-20 17:07:23 -07:00
examples feat(pack): Implement basic variable-substitution in CONFIG.INI 2025-04-20 00:53:43 -07:00
include feat(pack): Implement basic variable-substitution in CONFIG.INI 2025-04-20 00:53:43 -07:00
source docs: Update README with director help-text 2025-04-20 17:07:18 -07:00
tests refactor: Move internal library headers to include/libs/ 2025-04-17 12:05:47 -07:00
tools build: Add shell script for tagging releases 2025-04-19 22:33:08 -07:00
.clang-format chore: Bootstrap new project with important files 2025-04-12 21:12:04 -07:00
.clang-tidy chore: Bootstrap new project with important files 2025-04-12 21:12:04 -07:00
.editorconfig chore: Bootstrap new project with important files 2025-04-12 21:12:04 -07:00
.gitignore docs: Write initial documentation for access-director and command-drivers 2025-04-20 17:07:23 -07:00
.pre-commit-config.yaml chore: Bootstrap new project with important files 2025-04-12 21:12:04 -07:00
.version feat: Add git revision ID to --version in debug-builds 2025-04-17 08:49:09 -07:00
CONTRIBUTING.md docs: Add table-of-contents to CONTRIBUTING.md 2025-04-20 17:24:18 -07:00
LICENSE chore: Bootstrap new project with important files 2025-04-12 21:12:04 -07:00
meson.build build: Do not warn about unused results 2025-04-20 17:46:40 -07:00
meson.options docs: Write initial documentation for access-director and command-drivers 2025-04-20 17:07:23 -07:00
README.md docs: Touch-up the README's title and background sections 2025-04-20 17:16:48 -07:00

NitroROM

Interface with Nintendo DS ROM images.

Table of Contents

Background

NitroROM is a program for interfacing with Nintendo DS ROM-files in a variety of ways. Its primary aims are to provide a reusable tool-suite for developers, modders, hackers, and reverse-engineering researchers. This tool-suite is sub-divided into a set of commands which act as programs unto themselves; the top-level executable acts merely as an access-director to these programs.

This project originally began as a packaging utility for building ROM-files with a similar strategy as that used by the original SDK-tooling. This implementation is thus able to construct binary-matches of retail ROM-files for decompilation projects and modders making patches of their outputs using a delta-encoding format, e.g., .xdelta or .bps.

Install

This project does not yet have a release distribution for end-users, as it is still in an alpha-stage where many breaking-changes are anticipated.

Developers and early-adopters can build the project from source:

  1. If you have not already, install meson using either their official instructions or your package manager.
  2. If you have not already, install libpng.

Warning

Developers working on MSYS2 will need to compile libpng from source; after downloading a source archive:

tar xf libpng-<version>.tar.xz
cd libpng-<version>
./configure --prefix=/usr
make check
make install
  1. Clone the repository.

  2. Configure the project's build as you like using Meson:

    # Use -O0 with debug symbols
    meson setup --buildtype debug build
    
    # Use -O2 with debug symbols
    meson setup --buildtype debugoptimized build
    
    # Use -O3 and strip debug symbols
    meson setup --buildtype release build
    
    # Link the project against Address Sanitizer for richer crash reports
    meson setup -Db_sanitize=address --buildtype debug build
    
  3. Use Meson to invoke the build:

    meson compile -C build
    
  4. Verify that you have successfully built the executable by invoking it with no arguments, which will display the program's help text:

    ./build/nitrorom
    

Optionally, distributable manual-pages can be generated from the plain-text files in docs/. An alias target is provided for convenience, e.g., if using the ninja backend for meson:

ninja -C build docs

This requires setting up the project with the manuals option set to true, which must be specified when configuring the build:

meson setup -Dmanuals=true build

The generation targets use asciidoctor to convert the .adoc files into manual pages.

Usage

nitrorom's built-in help text provides a basic overview of its usage.

nitrorom - Interface with Nintendo DS ROM images

Usage: nitrorom [OPTIONS] [COMMAND]

Options:
  -h / --help      Display this help-text and exit.
  -v / --version   Display the program's version number and exit.

Commands:
  list             List the components of a Nintendo DS ROM
  pack             Produce a ROM image from source files

For details on the usage of individual commands, refer to the associated documentation in docs/. Some example input-files for the pack command are also provided in examples/.

Note

More detailed documentation is a work-in-progress as the project evolves.