About Press Copyright Contact us Creators Advertise Developers Terms Privacy Policy & Safety How YouTube works Test new features Press Copyright Contact us Creators. A demo for the 3DS featuring music and 3D effects SVatG Here: Yes July 2019 cubedemo A short demo of Homebrew on the 3DS, with working sound. Plutoo: Here: No N/A demo ou mourir: Small demo for the 3DS with music and 2D effects Desire Here: No November 2015 The Night of Interruptions! An independently made short film which can be watched on the. There are two types of games format which are compatible with Nintendo 3DS which is the 3ds format and the cia format.You need to have a flashcart such as Sk.
Because of the homebrewing scene the 3DS has had, you can install a variety of emulators. Currently, the New 3DS is capable of running much faster than the older models, making it a much more ideal platform for emulation, but despite this there are still some emulators that have issues regardless. For more information on how to homebrew your 3DS, visit 3ds.hacks.guide.
- 1Multi-System
- 2Consoles
- 3Handhelds
- 4Computers
- 5Others
Multi-System[edit]
RetroArch[edit]
There are preliminary 3DS ports of the following cores: stable 3DS ports
- 2048
- FinalBurn Alpha CPS1
- FinalBurn Alpha CPS2
- FinalBurn Alpha CPS3 (most games are too slow to run even on New 3DS, though JoJo runs almost full speed)
- FinalBurn Alpha Neo Geo (A few games are unable to be loaded due to memory constraints)
- FCEUmm
- Mednafen NGP
- Mednafen PCE Fast
- Mednafen VB
- Mednafen WonderSwan
- mGBA (acceptable with Pokemon Ruby/Sapphire, but some games are slow to use, even on New 3DS, at present)
- NXEngine
- PCSX-ReARMed (see below)
- Snes9x 2002 (formerly PocketSNES) (less compatible than CATSFC, but can actually run many special chip games at full speed)
- Snes9x 2005 (formerly CATSFC)
- Snes9x 2005 Plus (formerly CATSFC Plus) (has more accurate audio, slower)
- Snes9x 2010 (formerly Snes9x-Next) (too slow to use even on New 3DS at present)
Using current exploits, the New 3DS is capable of running most of these cores at or nearly at full speed on most games. The only cores the older 3DS can reliably run at full speed are 2048, Gambatte, QuickNES, NXEngine, and some older Sega games using PicoDrive.Opposed to normal use of RetroArch, these are all self-contained emulators, albeit sharing the same automatic configuration.Screenshot-taking is broken. Upon exiting RetroArch 3DS, press the Start button.
Unofficial Builds[edit]
There are unofficial ports which add new cores with emulators that do not have a retroarch by default
- Atari800
- GW
- VirtualJaguar
Consoles[edit]
NES[edit]
- 3DNESno longer in development
SNES[edit]
- Snes9x for 3DS - runs a good majority of games well, even on old 3DS/2DS's. It's recommended to use a New 3DS if you want to run games that uses the SuperFX or SA-1 chip properly.
- blargSNES - It works well, but lacks compatibility for games with certain chips (i.e. the SuperFX chip).
Nintendo 64[edit]
- DaedalusX64 - N64 has always been known to be a hard system to emulate, which is why many were skeptical about how feasible it would be to have an emulator for the system on the 3DS. While still in its beta stage, it has shown a lot of improvements thanks to using a dynamic recompiler, with some games running at a playable state. It also supports using stereoscopic 3D (at the cost of slower performance), which isn't a feature a lot of emulators have.
Playstation[edit]
- PCSX-ReARMed (RetroArch) - Thanks to the work of many developers, it is now possible to have full speed 60 FPS emulation for a majority of games and support for .CHD compression formats. Generally, 2D games will perform better than 3D, however you can get some better performance by tweaking the settings if necessary. The nightly builds have seen major improvements since the initial release and can even play some of the more demanding games at full speed (See here for some tips), so it's better to use that until the next stable release. NOTE: This emulator is mainly targeted for the New 3DS so don't expect the o3DS to run well if at all.
Atari 2600[edit]
Genesis/32X/Sega CD[edit]
- PicoDrive for 3DS - 32X and Sega CD are playable on the original 3DS, but works better on New 3DS. Sega CD requires BIOS in order to play, they must be named:
'bios_CD_U.bin', 'bios_CD_J.bin', and 'bios_CD_E.bin' based on the respective regions. BIOS need to be in the /3ds/picodrive_3ds/bios
folder.
PC Engine[edit]
Vectrex[edit]
- Vex3DS - Based on vecx
Handhelds[edit]
Game Boy[edit]
- GameYob: forked from a popular emulator used on the DS. Emulates the Game Boy and Game Boy Color. The original DS version is actually more polished than the 3DS port, so some of the more hardware pushing games won't work as well as the DS port.
Virtual Boy[edit]
- r3Ddragon - It's kind of surprising that Nintendo never released a Virtual Console for the Virtual Boy on the 3DS, especially given how small the library of games were for the system and how both utilizes 3D effects
and causes eyestrain. What makes this emulator stand out is the fact that it's able to display the graphics in 3D the way it was intended, something that is almost impossible to do on other platforms, unfortunately compatibility is still low and requires a New 3DS to run. Development has since halted.
Pokémon mini[edit]
Game Boy Advance[edit]
The 3DS does include native firmware for a GBA mode which was mainly used to run ambassador releases instead of having to develop an emulator for them. Because it's technically running a 'virtual' GBA, it can't provide features that are normally available on other emulators, such as savestates, screen filtering, or sleep mode, however it does have high compatibility with the exception of cartridges with special hardware. If you're using an old 3DS/2DS, this is the best option to play GBA games. There are two ways to take advantage of this firmware:
- New Super Ultimate Injector - There are other programs that can do injections, but this one is nice as it can do other Virtual Console injections and some forwarders for emulators. The only problem is each ROM must be injected and installed individually, including the save files, which makes the number of titles that can be installed restricted to the max the 3DS title limit (300 titles, not including pre-installed system titles).
- open_agb_firm(Name not finalized) - A custom FIRM payload that takes advantage of the built-in GBA firmware, it's still in early development but has an alpha build available. The major advantage of this compared to VC injection is it can load the ROM through the SD card instead of having to convert and install them, but needs to be launched on boot instead of being able to use the 3DS HOME Menu (there's ways to make a forwarder for in on the HOME menu, but requires additional setup to get it to work). One major issue is there's a chance that it may not detect the correct save format or will corrupt the existing save file so make sure to backup your saves beforehand (they are currently trying fix it by having a better database for save detection, if you're interested you can help).
- To install, simply put the .firm file in the
/luma/payloads/
folder and hold START to load up the chainloader to launch it. There's no way of exiting out once the program starts, so you will need to turn it off and redo the step to load it if you wanted to change games.
- To install, simply put the .firm file in the
On the other hand, there are also some homebrew GBA emulators available for 3DS:
- mGBA(Latest Nightly) - A port of the popular GBA emulator by the same developer, only a handful of GBA games suffer from slowdowns but are still playable. Also works great for GB(C) games and even supports the Gameboy Camera.
- GBARunner2 - a GBA hypervisor made for the DS(i), can only be ran through TWiLight Menu++ and is included by default with the program (see below). Compatiblity can be a hit-or-miss, but it's still in active development with plans to include interesting features such as gyro control emulation and local wireless multiplayer in the future.
- CitrAGB - (based on gpSP)
Nintendo DS[edit]
- TWiLight Menu++ - Not technically an 'emulator', rather it's a frontend for a separate program, nds-bootstrap, which allows for an NDS ROM to be loaded from an SD card. The program is originally designed for the DSi, however it's able to work on the 3DS by utilizing the virtual DSi (aka the TWL_FIRM or 'DS Mode') that the 3DS has for backwards-compatibility. Compatibility isn't the same as using a flashcart, however it's still pretty high with only a few games having issues or triggering anti-piracy protections (newer versions now come with AP patches for most games and will patch them if needed at launch). It also comes pre-bundled with a variety of emulators used on the DS and a work-in-progress GBA hypervisor, GBARunner2, that works to some degree.
- DeSmuME - an experimental port of DeSmuME that has since been abandoned, it wasn't very compatible.
DSiWare[edit]
Because the firmware that the 3DS uses for backwards-compatibility is actually the same as the DSi, it's possible to inject DSiWare as an installable .cia
file. There's two ways to do this:
- GodMode9 - Version 1.8.0 and above has a script that can convert
.nds
to.cia
, 3ds.hacks.guide has more information on how to update to the latest version if needed. - DSiWare Conversion Script - This script can be used to convert
.bin
files from your DSi's SD card to.nds
which can then be used to convert into.cia
.
These scripts will ONLY work for DSiWare, NOT NDS GAMES.
TWiLight Menu++ has support for two DSiWare as of v15.1.1 with a special preview of nds-bootstrap, Pop Island and Pop Island: Paperfield. These can also run on the DS.
Atari Lynx[edit]
- Handy 3DS - port of the Handy emulator to 3DS
Neo Geo Pocket[edit]
Computers[edit]
Intel CPUs[edit]
- 3DOS - Based on 8086tiny. Can only emulate 8086 CPUs.
Macintosh[edit]
ZX Spectrum[edit]
Commodore 64[edit]
Amiga[edit]
Others[edit]
Amiibo[edit]
- Wumiibo - Emulates Amiibo functionality on the 3DS without needing an NFC reader or using tags. You can even use your own Amiibo data, after it's been decrypted, or a generic AmiiboID which are freely available and explains how to get them on the project page.
CHIP-8[edit]
Super Mario 64[edit]
- SM64 3DS Port - Thanks to the decompilation project, you can now enjoy SM64 on the 3DS with *analog* support and native rendering (compared to the official DS port). Works pretty much at full speed on the New 3DS, the original model apparently has some slow downs but still playable. You can either build it yourself, or try finding pre-compiled build online (there are multiple versions, you can find some here but it's no longer up-to-date).
Virtual Console Injection[edit]
Some have tried injecting alternate ROMs in the available Virtual Console releases (MD, GG, NES, GBA Ambassador, GBC, Japanese emulated SFC compilations) with varying degrees of success. The emulators used for Virtual Console are not as accurate as other emulators so compatibility isn't perfect (the only exception is GBA since it runs it natively, not emulation), Sega systems in particular have high compatibility however.
There's an easy tool that will convert and inject any supported ROM file as its associated VC application called New Super Ultimate Injector. It's an all in one tool and can even remotely install the injection provided your 3DS is connected to the same network. It's currently in beta, but it's still really useful.
3DS Homebrew | |
---|---|
Introduction • Homebrew Development • Glossary • Flashcart FAQ | |
Lists | All Homebrew • Applications • Games • Emulators • Demos • CFWs • Exploits • Development libraries & tools • PC Utilities |
This page contains general information for 3DS Homebrew developers.
If you have any questions, you can come to GBAtemp's main homebrew development and help thread. It contains shared sources, examples and libraries.
You can find all known resources (hardware registers, syscalls, utilities) to develop your homebrew on 3dbrew.
To develop 3DS homebrew you need a development environment consisting of tools, scripts and libraries which will be detailed below. The sources are compiled to binary using GNU GCC-ARM or devkitPro with devkitARM. The available tools and SDK work on Windows 32/64bit and Linux.
The languages used to write homebrew are C, C++ and occasionally ASM. There are various online tutorials and books available to learn these languages.
Alternatively, you can also write homebrew in Lua by using Lua Player Plus.
- 1Install devkitARM
- 2Compiling sources
- 2.1Troubleshooting
- 4Editor setup
- 63ds/cia homebrew
- 8Using git
Install devkitARM
Windows
Use the automated-installer. Install in C:devkitPro and it will install all the latest versions of the required programs (you can disable devkitPSP, but be sure to enable libctru in devkitARM menu). It will create the environment variables automatically.
Linux / Mac OSX
1) Open a terminal and execute these commands:
Install libraries
You may want to install various libraries/tools if your project requires them.
Compiling sources
If you simply want to compile a homebrew project without (or after) editing it, you can use the make
utility from the command prompt/terminal.
1) Windows: Open a Command Prompt (Run -> cmd); Linux/Mac OSX: Open a Terminal from your applications
2) Navigate to the project directory (change to the correct path)
3) Run make
If you ever want to remove the compiled files, you can use this command:
This is often needed when re-compiling a project.
Troubleshooting
It is possible that sometimes your project will not compile. This can have various causes, for example missing libraries. In order to find out the problem, look into the output for the lines that start with 'error:
'; those will tell you what the problem is. You can ignore the warnings, they do not cause the compilation to fail.
If the output is big, you can filter it:
If you can't figure out what's wrong, feel free to make a post on the forums about it. Make sure to post all of the error output.
Windows Tip: To copy from your command prompt, right click and choose Mark. Then select the text to copy and press the Enter key.
Common errors
- cannot find 3dsx_crt0.o: No such file or directory
- In your makefile, find
-mfloat-abi=softfp
and change it to-mfloat-abi=hard
. You shouldn't ever usesoftfp
for 3DS homebrew.
- (name) uses VFP register arguments but (name2) does not
- Part of your project or the libraries you use were compiled with
-mfloat-abi=softfp
while other parts were compiled with-mfloat-abi=hard
. Make sure to use-mfloat-abi=hard
everywhere. You may have to manually recompile the libraries you use, if needed.
- (command) is not recognized as an internal or external command...
- Your PATH environment variable is not set up correctly. It should contain the msys folder in your devkitPro installation path (eg.
C:devkitPromsys
). Edit your PATH environment variable and make sure it includes this directory. If the command ispython
, make sure the python install directory (eg.C:PythonXX
, where XX is the version you installed) is in your PATH as well.
- unknown field 'rmdir_r' specified in initializer
- Your devkitARM is out of date. Rerun the installer or script.
- make[1]: *** No rule to make target `/c/Users/***/path/to'. Stop.
- Move the project to a folder with no spaces anywhere in its path
SMDH
Every homebrew application has an smdh file, containing additional information:
- Icon
- Name of the application (Short description)
- Description of the application (Long description)
- Name of the author (Publisher)
This information is used in The Homebrew Launcher (3DSX), and in the home menu (3DS/CIA).
The icon is a simple 48x48px png file. You can place this png in your project folder (the same folder as your Makefile is in) and name it icon.png. If no icon.png is present, a default icon from the ctrulib folder will be used.
The other data can be set in the Makefile directly:
The SMDH file is automatically created when building the project (unless you explicitly set NO_SMDH in the Makefile).
You can also manually build the SMDH using bannertool by steveice10:
Editor setup
This section explains how to set up various editors to edit and compile (existing) homebrew projects. If you want to start a new homebrew project, you should preferably copy an example project and edit the sources.
Note that this section lists only the more advanced editors which have features such as code auto-completion. You can use any text editor to edit the source files and compile as detailed above. You should however use a proper code editor (aka not notepad). Some examples are Notepad++, Sublime Text, vim, and Emacs.
Programmer's Notepad
The Programmer's Notepad is (optionally) installed by the devkitPro installer.
1) File -> New -> Project
Give it a name and save anywhere.
2) Right click the project -> Add Files
Now navigate to the example you want and add the files from that folder (eg. Makefile, readme.md, ...)
3) Right click the project -> Add Magic Folder
Navigate to the example directory again and add the source folder within. Repeat this for any other folders in the example (if any).
4) You can build the project using Tools -> Make
Make sure the project you want to build is the active project (Right click project -> active project)
Visual Studio 2015 (community)
When installing Visual Studio, make sure to install the Visual C++ packages!
1) File -> New -> Project From Existing Code...
2) In the dropdown, choose Visual C++ and click Next
3) Under Project file location, navigate to the folder with all sources. Enter a name for the project and click next.
4) Use external build system, Next
5) Build command line:
Clean command line:
Leave the rest blank. Click Finish.
6) Right click project (in the solution explorer) -> properties
7) Under VC++ directories -> General -> Include directories, add the devkitARM and ctrulib include directories (change if needed):
Make sure not to remove anything already in the box! You can add any other include folder that the project may need as well. In the end it'll read something like:
Click OK
8) (Optional) Right click project -> Add -> Existing Item
Choose the Makefile and any other files you want to add, then click Add. This step isn't required, but allows you to edit the Makefile etc. from the editor.
Alternatively, you can use 'Show All Files' under the 'Project' menu (on the top) to display all files and folders as they are on the file system.
9) You can now build the project (Right click -> Build)
Eclipse CDT
Tested with the standalone Eclipse Mars CDT on Linux. Instructions may be slightly different for other cases. Another alternate guide can also be found here.
1) File -> New -> Makefile Project with Existing Code
2) Under Existing Code Location, navigate to the folder containing the code.
You can leave both C and C++ checked, even if the project only contains one.
Under Toolchain for Indexer Settings, choose a valid Toolchain (eg. Linux GCC)
3) Right click the Project in the project explorer and choose properties.
4) Go to C/C++ Build -> Environment.
Here you need to add the DEVKITPRO and DEVKITARM variables, with their correct paths, eg.
Name | Value |
---|---|
DEVKITPRO | /opt/devkitPro |
DEVKITARM | /opt/devkitPro/devkitARM |
Make sure to change the values to the paths on your system.
5) This step isn't needed to build, but it will make Eclipse recognize the external libraries when editing code.Go to C/C++ General -> Paths & Symbols -> Includes
Under 'GNU C' (or 'GNU C++', or both, depending on what files your project has), add the following include directories:
Again, change the paths if needed. When finished, click OK.
6) You can now build the project. Right click project -> Build project
Code::Blocks
This premade project can be used as a base https://github.com/TricksterGuy/3ds-template
1) Open the project within Code::Blocks
2) Choose File > Save project as template, and choose a name for the template
3) When creating a new project, choose File > New > From template...
4) In the dialog select the template you created in 2)
5) Choose a directory to put the project
6) To build the 3dsx file choose target 3dsx and click the build (gear) button
7) To build and run your homebrew in citra choose the citra target and hit the build button (only works if citra is installed and in your PATH).
3dsx homebrew
Homebrew in this format is the most common, and can be played with ninjhax/ironhax/tubehax. No additional steps have to be taken to create this kind of homebrew; it is the default format produced when using make
.
Homebrew examples: https://github.com/devkitPro/3ds-examples
3ds/cia homebrew
If you don't need Kernel access, prefer developing homebrew in 3dsx format.
After building the project (see above), you should have an .elf file. You can convert this into a .3ds/.cia file with makerom:
- Download makerom (and compile it with
make
if needed) - Add the folder where you placed the makerom executable to your PATH environment variable
To create a .3ds or .cia file, you need some additional files in your project:
- An RSF file - Contains various info such as permissions etc. (TODO: Make guide on how to create these)
- An icon.bin - The icon and information for the home menu. This is equivalent to the compiled SMDH file, so you can just use that one.
- A banner.bin - The banner for the top screen
You should preferably put them in your project folder (or a subfolder).
Banner
Homebrew in 3DS or CIA format requires a banner, which appears on the top screen in the Home menu.
The banner consists of an image and an audio file. The image should be a 256x128px png file. This image may contain transparent parts. The audio file is a 16bit wav file.
You can create the banner.bin using bannertool by Steveice10:
Convert .elf to .3ds
Run the following commands:
Simple 3ds To Cia Converter
For example:
Please note that the first command will alter the ELF file, so you may want to back it up first.
Convert .elf to .cia
CIA files are generic data containers that can be installed on a 3DS. In order to do this you need to have a 3DS below 9.2.
The process of building a CIA is similar to building a .3DS file:
Note that the used RSF file is not the same one as the one used for building .3DS files.
Releasing
When you are ready to release your homebrew application, create a new thread in the Homebrew Development section. In this thread, you can describe your project.
Make sure to attach (or link to an uploaded version of) the relevant files for your homebrew. This will usually be the 3DSX and SMDH files that have been compiled. You can also include the ELF file, which will allow people to repack it with makerom to a 3DS (and CIA) file. The ELF file can also be used on 3DS Emulators (currently two available: Citra and 3DMoo).
If your project is open source, you can upload the code to GitHub. Alternatively, you can simply provide the source as a separate download, or include it with the compiled files.
Using git
git is a distributed version control system. This allows you to put your code into a repository, which can then be shared with others. The main advantage is that you can keep track of your (and others') changes and even revert them if needed.
You can find instructions on the git website on how to install git on your system.
After git is installed on your system, you need to setup your username and email address. This allows git to identify who made the changes. If you have a GitHub account, use the same username and email as there!
Open a command prompt (Windows) or Terminal (Linux/OSX) and use the following commands:
Getting started
1) If you have not yet done so, create a file named README.md
in your project folder. You can use this file to add a description and information of your project. This description will be shown when people view your repository on GitHub. You can use markdown to add formatting such as bold and headings.
2) Open a command prompt (Windows) or Terminal (Linux/OSX).
3) Navigate to your project folder
4) Initialize it as a git repository
5) Add your existing code to the repository (note: the .
is part of the command)
6) Do the initial commit
Committing
When you make changes to your code, they need to be committed in order to 'save' them to your git repository. When and how often you commit is up to you, but try to do at most one major change per commit.
1) Make the repository aware of your changes
2) Add them to a commit
Add your project to GitHub
GitHub is a popular host for online git repositories.
1) Create a GitHub repository.
Make sure to name the repository after your project and optionally give it a description. Make sure the checkbox to create a README is not checked. The .gitignore
and license
should also be set to None
2) Open a command prompt (Windows) or Terminal (Linux/OSX) and navigate to your project folder.
3) Add GitHub as a remote host (change the URL):
4) From now on, you can push
your changes to GitHub with the following command:
This pushes the master
branch to the remote called origin
, which we setup as GitHub.
You don't have to push after every commit, but your changes will only show up on GitHub after you push.
3ds To Cia Online Converter
Tags
Tags are a way on git to mark specific commits as special. For example, you could use them to track your major releases.
1) Create the tag
Cia To 3ds File Converter
For example:
3ds Simple Cia Converter 2019
To tag an older commit, specify the sha1 hash of the commit:
3ds To Cia Converter
2) If you are using GitHub, you must manually push the tag: