/NooDS-x86

A (hopefully!) speedy DS emulator

Primary LanguageC++GNU General Public License v3.0GPL-3.0

NooDS

A (hopefully!) speedy DS emulator.

NooDS aims to be a fast and portable Nintendo DS emulator. It's not quite there speed-wise, but it offers most other features that you might expect from a DS emulator. It even supports GBA backwards compatibility! I'm doing it for fun and as a learning experience, also because I'm a huge DS fan. It may not be a worthy competitor for the other DS emulators just yet, but I believe that I can get it there someday. If not, that's fine too; like I said, I'm just having fun!

Downloading

NooDS is available on Android, Linux, macOS, Switch, Vita and Windows. Automatic builds are provided via GitHub Actions; you can download them on the releases page.

Usage

NooDS should be able to run most things without additional setups. DS BIOS and firmware files must be provided to boot from the DS menu, which can be dumped from a DS with DSBF Dumper. The firmware must be dumped from an original DS; DSi and 3DS dumps don't have any boot code. A GBA BIOS file must be provided to run GBA games, which can be dumped from many systems with this dumper. The BIOS and firmware file paths can be set in the settings. Although not always accurate, save types are automatically detected. Manual alteration of the save type is needed if you load a new game and saving does not work.

Building for Android

The easiest way to build for Android would be with Android Studio. Android NDK is needed for building native code. Command line tools can be alternatively used; use sdkmanager to install build-tools, cmake, ndk-bundle, platform-tools and platforms;android-29 and set an ANDROID_SDK_ROOT environment variable to the directory containing cmdline-tools. You can then run ./gradlew assembleRelease in the project root directory to build.

Building for Linux or macOS

wxWidgets and PortAudio installed via your favourite package manager are needed to build for Linux or macOS. Homebrew can be used on macOS; no package manager is given by default. The command will look like apt install libwxgtk3.0-dev portaudio19-dev (Ubuntu) or brew install wxmac portaudio (macOS). You can then run make in the project root directory to build.

Building for Switch

devkitPro and the switch-dev package are needed to build for the Switch. You can then run make -f Makefile.switch in the project root directory to build.

Building for Vita

Vita SDK is needed to build for the Vita. You can then run make -f Makefile.vita in the project root directory to build.

Building for Windows

MSYS2 is needed to build for Windows. You can install every needed package by running pacman -S mingw-w64-x86_64-{gcc,pkg-config,wxWidgets,portaudio,jbigkit} make once you have that set up and running. It might also be a good idea to run pacman -Syu to ensure everything is up to date. You can then run make in the project root directory to build.

References

  • GBATEK by Martin Korth - It's where most of my information came from
  • GBATEK addendum by Arisotura - GBATEK isn't perfect, so some information came from here too
  • Blog posts 1, 2, 3, and 4 by Arisotura - Great resources that detail the 3D GPU's lesser-known quirks
  • DraStic BIOS by Exophase - Reference for the HLE BIOS implementation
  • ARM Opcode Map by Imran Nazar - Used to create the interpreter lookup table
  • Hardware tests by me - When there's something that I can't find or want to verify, I write tests for it myself!

See also