Nintendo 3DS ARM Documentation

About the 3DS CPU(s)

  • The 3DS has two processors in it, an ARM11 processor, and an ARM9 processor.
    • ARM11 MPCore 2x & 2x VFPv2 Co-Processor
    • ARM946

The ARM11 MPCore processor is a dual-core processor, which has it's cores divided in terms of accessibility and purpose. One core is dedicated solely for system software while the other core is used for applications (e.g. Games and general software); this is the core that applications you create will run on. These cores are commonly referred to in the homebrew community as the syscore and appcore.

The ARM9 processor only ever has one process running, which is named Process9. Process9 interacts with the kernel and handles commands from the ARM11 MPCore processor.

Since the MPCore only has VFPv2, this means it doesn't have NEON or any of the fancy floating-point operations that are possible in newer processor models, so this makes things (sort of) simple for us. I'll explain in detail in the respective sections.

When building applications for the 3DS. It is best to pass -march=armv6k in your Makefile.