Nintendo 3DS

The Nintendo 3DS and its variants (codenamed "CTR") are the successor to the Nintendo DS family of handheld video game consoles. It's most distinguishing feature is the glasses-free stereoscopic 3D screen (using a LCD display with a parallax barrier) on the top half of the console.

Released in early 2011, the original 3DS system (usually referred to as old / original 3DS, "o3ds") struggled to gain any traction, but eventually went on to become a major commercial success. A hardware revision with a larger screen, the Nintendo 3DS XL, was released in early 2012, followed by the Nintendo 2DS - an entry-level version of the console that omits the stereoscopic 3D on the top screen. The New Nintendo 3DS ("n3ds") upgrades the CPU and adds another control stick, and was released along with an XL version.

Unlike the Nintendo DS, the 3DS focusses fully on 3D rendering and has no sprite or bitmap scrolling hardware. It is able to run NDS games through emulating that hardware, using its vastly superior CPU.

Technical Specifications

CPUs: 268MHz ARM11 2x MPCore CPU with VFPv2 hard-float support (4x MPCore running at up to 804MHz with a 2MB L2 cache in the n3ds model) and corelink DMA, 134MHz ARM946
GPU: DMP PICA200, running at 268MHz, featuring a programmable vertex and geometry processing stage and a complex fixed-function fragment processing stage that allows for anything from blinn-phong shading to cook-torrance BRDFs or basic sub-surface scattering.
Memory: 2x64MB FCRAM, 6MB VRAM.
Screens: 800x240 with parallax barier on top, netting an effective resolution of 400x240 per eye; 320x240 on bottom, with touch screen capability.
DSP: 134Mhz CEVA TeakLite

Development and emulators

To run code on the Nintendo 3DS, the system has to be hacked in some way or other. Exploits that grant user-mode access to the ARM11 (as much access as commercial software has) are available for most system versions. Further exploitation and downgrading can lead to complete access to all hardware. The process is detailed here: https://github.com/Plailect/Guide/wiki - note that for plain user mode development, you can stop after Part 1.

The easiest way to set up a toolchain for 3DS development is to use devkitARM. This will set up the full set of tools required to compile, link and package homebrew Nintendo 3DS applications, and install some commonly used basic libraries and tools.

One installed tool that is very important for development is 3dslink (not to be confused with the flash cart of the same name), which comes with devkitPro. It allows netloading of 3DS homebrew executables onto the system. The 3DS-side counterpart is automatically installed with the homebrew menu and can be accessed by pressing y.

Commonly used libraries include ctrulib (provides a basic low-level interface to the 3DSs hardware and OS) and citro3d (provides low-level access to the PICA200 GPU), both of which are installed by the devkitPro installer. though an upgrade to the current version in the linked repositories is strongly suggested, as the versions shipping with devkitPro are very outdated and contain many bugs that have been fixed in the current versions. An emulator, citra, exists. As of July 2016, It is not neccesarily suitable for testing during development yet, but has been making great strides in hardware compatibility.