NooDS
A (hopefully!) speedy DS emulator.
Overview
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 - Some information came from here too as GBATEK isn't perfect
- 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!
Other Links
- Hydra's Lair - Blog where I may or may not write about things
- Discord Server - Place to chat about my projects and stuff