Currently th eonly real Nintendo 3DS emulator at an early stage of development.
Citra is an experimental open-source Nintendo 3DS emulator/debugger written in C++. It is written with portability in mind, with builds actively maintained for Windows, Linux and OS X. Citra 3DS only emulates a subset of 3DS hardware, and therefore is generally only useful for running/debugging homebrew applications. At this time, Citra 3DS is even able to boot several commercial games! Most of these do not run to a playable state, but we are working every day to advance the project forward.
It has taken a while to arrive, but finally we have the first REAL working Nintendo 3DS emulator. The name of this emulator is Citra3DS, and is written in C ++. It's all a real breakthrough for 3DS scene as it will facilitate the development of 3DS homebrew for the console. Furthermore, the possibility that the project remains unfinished is quite low, since the author has released the source code licensed under GPLv2, so we can modify the code to our liking, and contribute to its development.
It's been three years of the launch of 3DS. During this time we have seen within hours of the launch hackers managed to break the security of the DS Mode on the 3DS, the firmware was decrypted, and plunged into the market, after many rumors, the first 3DS ROM flashcard, 3DS Gateway was released. Since a few days ago, is another important step on the scene of the console, and is, of course, the launch of Citra 3DS, the first emulator 3DS.
Citra is available for Windows and Linux, and so far, we can only emulate homebrew 3DS (launcher.dat) plus debug your code (debugger). Those waiting to load backups (backups), for now, will have to sit idly as essential parts of the 3DS are not yet supported by the emulator. Note that Citra is at a very early stage of development, it is a matter of time for this to change.
NOTE: Note that we have not added download as testing staff have concluded that it is still compatible with a very small number of PCs, letting this news as fact, then when the project is progressing more if you will.
In today 3DS Gateway Team has released an update on their official website GW3DS.com announcing that soon your Flash cart Gateway 3DS will be compatible with the latest updates from 9.0 to 9.2 Nintendo 3DS system and therefore will also support the Nintendo 2DS and the New Nintendo 3DS. According to user type Gateway Team 3DS given some recommendations for what to do as they have in our console version.
Today's news Team Gateway launched an update to its Flash support cart with 2DS and New Nintendo 3DS and the latest version of the system to the 9.2.0-2 today has recommended to the users who are interested in flash cart that those who have the console in 4.1 to 4.5 are kept in those versions to continue using the existing roles and users who are in a higher version 4.5 update to version 9.0 to 9.2 to make use of the flash cart with future updates and if you leave a higher version 9.2.0-20 not update the consoles if you want to make use of the Flash cart.
The reason for this announcement seems to come from the release of a new Flash cart called Sky3DS support the latest version of the console 9.x all 3DS New 2DS and 3DS models, but no ability to load homebrew not be region free and a limit of 10 backups by Flash cart.
We hope that in coming days we know the performance and features that can be used with the 3DS Gateway in the latest versions of the 3DS.
On 30 November, a video where the operation of Gateway 3DS is a New Nintendo 3DS, apparently works on firmware 9.2, expect more surprises on the scene of 3DS and that is growing day by day public.
Citra is a work-in-progress 3DS emulator. Citra 3DS can currently emulate, with varying degrees of success, a wide variety of different homebrew programs and commercial software.
Citra 3DS can, ostensibly, "play" many different games, including The Legend of Zelda: Ocarina of Time, and Animal Crossing. Many games, however, will not load at all, only showing a black screen. Many other games will only show the title screen and then freeze, or crash.
You can expect almost all games to run incredibly slowly, though, and to exhibit many gameplay and graphical glitches.
If you're interested in 3DS emulation as an experiment, you may gain something out of trying Citra 3DS, but if you're simply looking to play games then stick to your 3DS handheld.
Currently, no retail games/software are fully playable on Citra. The few games that do run are slow and can suffer from glitches or bugs. Sooner or later, games will come to playable state. Check back regularly for more updates.
Citra currently uses (very slow!) interpreters to emulate both the 3DS's CPU and parts of its GPU. At this point, Citra 3DS is simply not fast enough to run most commercial games at full speed, even if your computer can run the most demanding of PC games just fine.
The only hard requirement for Citra 3DS is a graphics chip that supports at least OpenGL 3.2, but you definitely want a processor with the highest possible performance per core.
At the moment, there are no stable versions of Citra for you to download, however, you can download nightly builds or compile from source. Once Citra 3DS has progressed to the point where a stable version becomes viable, we'll make those available for download.
We're pleased to say that Citra works on all three major desktop OSs!
Citra 3DS is compatible with 64-bit versions of Windows, Linux, and OS X. In the far future, mobile platforms may be targeted as well.
Citra 3DS is licensed under the GPLv2 (or any later version). Refer to the license.txt file included. Please read the FAQ before getting started with the project.
For development discussion, please join us @ #citra on freenode.
If you want to contribute please take a look at the Contributor's Guide, TODO list and Developer Information. You should as well contact any of the developers in the forum in order to know about the current state of the emulator.
If you like, you can donate by PayPal - any donation received will go towards things like:
We also more than gladly accept used 3DS consoles, preferrably ones with firmware 4.5 or lower! If you would like to give yours away, don't hesitate to join our IRC channel #citra on Freenode and talk to neobrain or bunnei. Mind you, IRC is slow-paced, so it might be a while until people reply. If you're in a hurry you can just leave contact details in the channel or via private message and we'll get back to you.
That's awesome, contributions are welcome! Please start by forking the project, and then create a Pull Request when you're ready to submit your contribution. Once you've made some good contributions, we'll consider adding you as a collaborator. Please also review Coding Style. If you're not sure where to start, this TODO list is the best place to find ideas.
Refer to Decryption.
Unfortunately, we're not really at the point yet where beta testers (who don't have any developer experience) would be useful to the project. Commercial games will not run, and the amount of homebrew available to test with is very limited at this time. However, if you're able to compile/tweak/test homebrew applications, we are very interested in new demos that exercise different 3DS features. If this is you, please share your results on IRC freenode @#citra and/or create an Issue with a link to the homebrew application.
Citra3DS is a cross-platform emulator and will run on Windows (Vista and up), Linux, and OS X. Ports to other Unix platforms should be somewhat trivial, but currently there are no active developers who are able to support them.
There are no specific hardware requirements for Citra3DS - any modern x86/x64 system should be fine. Currently, Citra3DS only includes a rather slow pure interpreter CPU core, so performance will suffer regardless of your system power. Video output is currently framebuffer only (so most GPUs should be OK), but requires an OpenGL 3-capable video card.
That's awesome! Such support is what motivates us to keep working :) Stick around and keep motivating our work! If you're interested in donating, please donate here, which will be used to buy systems and games to test with, as well as paying for infrastructure and web costs.
For running Citra builds, make sure to have icudt53.dll, icuin53.dll, icuuc53.dll, Qt5Core.dll, Qt5Gui.dll, Qt5OpenGL.dll and Qt5Widgets.dll in either the application directory or in the system PATH. If not there those files are in C:\Qt\5.4\msvc2013_64_opengl\bin,copy them here.Else, Citra will fail on startup.
Also, make sure platforms/qwindows.dll in the application directory. If not there you will find it in C:\Qt\5.4\msvc2013_64_opengl\plugins\platforms by default. Just copy it.
QT 5.3 is known to fail in windows building Citra3DS. Install QT 5.3.1 or greater for the result.
Citra's current CPU core is an ARM interpreter called "dyncom", which was originally taken from a project called SkyEye, and then modified to support the ARMv6 instruction set that the 3DS uses.
Dyncom originally supported ARM7 (ARMv5) and partial ARMv6 only. We added in the remaining ARMv6 media instructions and other fixes ourselves to get 3DS emulation as far as it is.
There are plans to implement a dynamic recompiler that will fall back into dyncom for unimplemented instructions; work has been started on this but very little progress has been made.
There are no plans for emulating the ARM9 chip in the 3DS, which is mainly used for security purposes as well as DS games.
This guide focuses on how do dump games in Windows, but since all of the programs work on various operating systems, it should be fairly easy to figure out how to translate each of the steps into another operating system.
For Windows Users
For 3DSes with firmwares older than 7.x when decrypting a 7.x firmware or newer game
On your computer, download the latest firmware package of the Gateway3DS launcher from their website. Within one of the folders (ex: /GATEWAY ULTRA 3.2.1 PUBLIC BETA/ for version 3.2.1) will be a Launcher.dat file. Place the Launcher.dat file on the root of the SD Card and place it into your 3DS.
If you have internet access on your 3DS
On the 3DS, open the browser and navigate to 'http://dukesrg.no-ip.org/3ds/go' .
If you don't have internet access on your 3DS
You can host the launcher page by using FakeMii. See the installation instructions there. You can then open your browser and navigate to 'http://launcher'.
Back to instructions everyone must follow
From here, your 3DS may display some weird colors or even say that it cannot load the page, but the Gateway loader should boot up regardless.
Within the gateway launcher you have a lot of options. The only one necessary is "Backup 3DS Game Cartridge". It can take quite a while to dump bigger games, so be patient and wait for it to complete. After that, the SD Card will contain the ROM from your cartridge.
You can now copy this to your computer to clear space; this ROM file will never need to be on your SD card again. On a smaller SD card, you'll need that space for a later step anyway!
NOTE: If a game is greater than 4GiB, it will be split into multiple files when it dumps. Using generic names, it would be Game.3D0, Game.3D1 etc. On Windows 7, we can fix this easily by putting both files into the same folder, opening up command prompt and navigating to that folder. We'll use Bravely Default as the example here.
Copy /b "BTRE.3D0"+"BTRE.3D1" "Bravely Default.3DS"
On a *NIX system
cat "BTRE.3D0" "BTRE.3D1" > "Bravely Default.3DS"
This will give you a single combined file that is your entire ROM dump. If you're certain you've done this correctly, you can delete the input files and just keep the .3DS produced.
This part can be a bit tricky, so please pay careful attention to every detail! If this part is messed up, you won't know until later!
For the purposes of this guide, think of the xorpad as a decryption key that will eventually decrypt your ROM for use in Citra3DS.
NOTE: Python is required for this step. During the creation of this guide, Python 2.7.9 was used.
The first thing you’ll need to do is obtain (either download or compile) a program called Decrypt9. Within your Decrypt9 folder, there will be a scripts folder with a few scripts in it. We only care about one, ncchinfo_gen.py. The others can be ignored.
Assuming Python is installed correctly, open up command prompt and navigate to this folder. A shortcut for this is to hold shift and right click on the background of the explorer window and then click "Open Command Window Here" in the options. It can be helpful when typing out long paths is annoying! Either way, just make it so that you can run the python file from the command prompt with the ROM following. For the ROM file, if you don't want to type out a big long path, you can just drag the ROM onto the command prompt and it will automatically fill everything out. Your command should look something like this.
ncchinfo_gen.py "D:\dump\Cubic Ninja.3DS"
If you have many games, you can input multiple of them to put many games in at once. NOTE: Make sure your SD card has enough space, the xorpads will amount to the same size as a game.
ncchinfo_gen.py "D:\dump\Cubic Ninja.3DS" "D:\dump\Pokemon X.3DS"
There are many ways to get the program running in the command prompt, so if you're familiar with how to use it, feel free to use the way you're most comfortable with.
In the 7.x firmware, Nintendo added a new encryption scheme meant to force users to update to 7.x firmware and up to run the game. Those with a 3DS with a firmware less than 7.x can get around it, but they need to go through an additional step to create the encryption key manually.
First create an empty file named "slot0x25KeyX.bin". The simplest way to do this would be to right click in an explorer window, select create empty text file, and then rename it to "slot0x25KeyX.bin".
Note: This will not work if you have "Show known file extensions" disabled.
Then you must use a hex editor to put in the key. We cannot provide you with the key, you have to find it yourself unfortunately. Once you do have it, you can literally copy and paste it in on the first line. The hex editor will likely warn you that this will change the length of the file, hit accept and save the file. Then place it on the root of the SD Card. Since this key is universal, you only have to do this step once.
The line of FFs should be replaced with the key. It will fill out the whole line and nothing more.
Back to instructions everyone must follow
Overwrite the Launcher.dat on your SD card with the one included in the Decrypt9 package. If you'll be dumping more games, make sure you keep both Launcher.dat files safely and remember which is which!
On the 3DS, open the browser and return to the site that has the exploit ('http://dukesrg.no-ip.org/3ds/go' or 'http://launcher') and this will launch the second Launcher.dat.
This one will have a few options, but all we'll be doing is hitting A to generate the xorpads.
Be warned: this can take an extremely long time on bigger games, so beware! If you've completed this successfully, when you put the SD card back into the computer it'll have at least three xorpad files with fairly long names. If you have these files, congratulations, you can move onto the last step; if not, you'll have to repeat step 3 from the beginning.
For the final step, we use the last program, xorer. If you don't have that program yet, download it and extract it into a folder. If you want to make your life easier, copy the xorpads off your SD card into this folder with the xorer program, otherwise you'll have an extremely long command with the paths to each file.
Then, using whichever method you prefer, navigate to that folder in command prompt so that you can run the program from command line. Next up we're going to give it a very specific command that will decrypt your 3DS file!
NOTE: If you’re unsure you did everything correctly, backup the .3DS file! This will overwrite the encrypted one with a decrypted one.
xorer takes 5 inputs total. First make sure you have the program put in, if you've navigated to the folder, that just means typing in xorer so that it knows to run that program. Next up, add one space and navigate to (or drag and drop on) the 3DS dump. If we follow the earlier example, it will look like this currently:
xorer "D:\dump\Cubic Ninja.3DS"
So, now the beginning of the command is correct. Next we have to feed it all the xorpads. Add a space after the ROM dump and type -e and another space. Now find to the xorpad that has exheader in its name. You can either type out its name (if it's in the directory alongside the xorer program) or you can drag it into the command window (regardless of wherever it is at).
Your command should now show something like this:
xorer "D:\dump\Cubic Ninja.3DS" -e "0004000000046500.Main.exheader.xorpad"
Now we repeat the step for the remaining commands. -x points to the exefs_norm.xorpad, and then -r points to the romfs.xorpad. For Cubic Ninja, the command would now look like this:
xorer "D:\dump\Cubic Ninja.3DS" -e "0004000000046500.Main.exheader.xorpad" -x "0004000000046500.exefs_norm.xorpad" -r "0004000000046500.romfs.xorpad"
Now all we have to do is set the output file. This is what the finalized command will look like for most games, except replaced with your file names:
xorer "D:\dump\Cubic Ninja.3DS" -e "0004000000046500.Main.exheader.xorpad" -x "0004000000046500.exefs_norm.xorpad" -r "0004000000046500.romfs.xorpad" -o CubicNinjaDecrypted.3DS
If you're confident in yourself and have done this before, you can instead pass --inplace so it will overwrite the encrypted ROM. If you're unsure you did this correctly always use -o and check your game.
xorer "D:\dump\Cubic Ninja.3DS" -e "0004000000046500.Main.exheader.xorpad" -x "0004000000046500.exefs_norm.xorpad" -r "0004000000046500.romfs.xorpad" --inplace
For 7.x or newer firmware games
For newer games, the command is slightly different. We have to add one more command to give it the 7.x key. This is noted with the -7 command and placing in the exefs_7x.xorpad after it.
xorer Pokemon.3ds -e 0004003000009702.Main.exheader.xorpad -x 0004003000009702.Main.exefs_norm.xorpad -7 0004003000009702.Main.exefs_7x.xorpad -r 0004003000009702.Main.romfs.xorpad --inplace
Hit enter, and if it doesn't error out, it worked! The dumped ROM can now be used in Citra.
This is a guide to a typical Git workflow with Citra3DS. It covers forking from the main repository, creating a branch, keeping your branch up to date with the main repository, resolving conflicts, and merging back into the main repository. It's not meant to be a hard-and-fast set of rules. However, if you follow something along these lines, you'll be less likely to piss people off.
It's appreciated if every single commit in a branch on its own compiles on all supported platforms (Windows, Linux, and OS X) and doesn't cause any regressions if the commits after it were left unmerged. We understand that with early development, sometimes it's easier to commit early-and-often, and sometimes you may unintentionally break things (and then later fix them in your branch). If this is part of your workflow, we expect appropriate use of Git rebase to squash broken commits and resolve merge conflicts. If you don't know how Git rebase works, please read this article before developing for Citra.
Before you begin
Create a new branch
Scenario A: You did some work in your branch... Then, someone committed something to upstream/master that you want!
Scenario B: You did some more work in your branch... Then, someone committed something to upstream/master that will cause conflicts when trying to get the branch merged back to upstream/master!
Your branch is getting near completion, now you're ready for a pull request!
Gracefully receive feedback from the team
Once your pull request is ready to be merged...
2015 www.Citra3DS.com .