Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

3DS:Cleaninty and 3DS:Emulators: Difference between pages

From Hacks Guide Wiki
(Difference between pages)
m s/3dsbrew:/3dbrew:
 
Handheld video game consoles: Virtual Boy (not exactly handheld but it's also not exactly a home console)
 
Line 1: Line 1:
{{lowercase title}}{{Infobox homebrew
{{hatnote|3DS:EMU redirects here. For EmuNAND, see [[3DS:EmuNAND and RedNAND]].}}
| title = cleaninty
| developers = luigoalma
| version = 0.1.3
| releasedate = 2023-03-18
| github = luigoalma/cleaninty
| githubtag = v0.1.3
| forwindows = 1
| formac = 1
| forlinux = 1
}}
'''cleaninty''' is a PC tool used to communicate with Nintendo's [[wikipedia:SOAP|SOAP]] servers. For a 3DS, these servers deal with managing eShop accounts, downloading eShop titles, and system transfers. It is also the tool used for what is informally known as a "SOAP Transfer".


== Overview ==
An '''emulator''' is a piece of software that uses computing power to simulate another device, such as a video game console or a personal computer. As a general guideline, the original Nintendo 3DS is capable of emulating most popular home consoles up to around the {{iw|wikipedia|fourth generation of video game consoles}} (the SNES/Genesis era), while the New Nintendo 3DS series is (just barely) capable of emulating some of the {{iw|wikipedia|fifth generation of video game consoles|fifth generation}} (the N64/PS1 era).
<br>This is because emulation requires significantly more computing power than running the console natively - though even if it could run emulated games as efficiently as native playback, even a new model 3DS would still only be able to emulate the {{iw|wikipedia|sixth generation of video game consoles|sixth generation}} (the Xbox/PS2/Dreamcast era) and possibly the Wii.


There are two pieces of data a 3DS that give it a unique ID to Nintendo's eShop servers: its serial number and its [[3DS:System files|<code>otp.bin</code>]]. If these are copied out of the console and used somewhere else, they can be used to imitate the console - meaning Nintendo's servers can act on commands without the console doing anything on its end.<br>
The Nintendo 3DS has hardware that allows for native backwards compatibility with the Nintendo DS and Game Boy Advance, meaning such software can run at full speed as they would on the original hardware. While this is not actually emulation, methods that use this hardware will be included here due to the ubiquity of the term.
However, the files cannot communicate on their own, and a connection to Nintendo's servers that acts identically to a console is still needed. This part is where cleaninty comes in.


The reason this allows for changing eShop regions easily, and at infinite range, are as follows:
== Handheld video game consoles ==
* '''Ease of Use''': Tickets for both system software & purchased apps are stored on Nintendo's servers, and some of these tickets are 'sticky' - they refuse to be deleted when trying to delete the console's eShop account. (The most common sticky tickets are from preinstalled games and the [[3dbrew:StreetPass Mii Plaza|Mii Plaza 3.x]] update.) The only way to remove these tickets is to transfer them to another console, and cleaninty is able to move ''only'' the tickets with a single command.
* '''Infinite Range:''' System transfers are effectively divided into two parts: the content transfer (done entirely on consoles), and the NNID/title transfer (done entirely on servers).<br>On an actual console, these two must be done at the same time - but if cleaninty sends the commands for a server transfer, it doesn't start a content transfer and thus the consoles do not have to be next to each other. (Technically, this also means a [[3DS:MMM|Manual Movable Transfer]] is the exact opposite of a SOAP transfer.)


=== Nintendo DS ===
{{Main|3DS:DS games}}


== Features ==
Nintendo DS software can be played natively using nds-bootstrap, a tool that allows NDS backups to be run from the SD card. In most cases, you will use either TWiLight Menu++ or NDS forwarders to launch the ROM, after which nds-bootstrap will do the hard work of getting it to run.


When the required constants have been supplied through <code>SetupConstants</code> and you have the unique data (<code>otp.bin</code> and either <code>SecureInfo.bin</code> or the serial number) of a console, cleaninty can act as that console and do the following:
In the past, Nintendo DS flashcarts were a popular way to run Nintendo DS software. Because of nds-bootstrap's development over the years, they have become less and less necessary, but can still offer useful features like being able to use the flashcart on unmodded 3DS-family and DS-family consoles (depending on the cartridge).


* <code>GenJson</code>: Compiles the console's data into a single JSON file. This JSON is required for all other commands except <code>RecoverIVS</code>.
=== Game Boy Advance ===
* <code>CheckReg</code>: Obtains the console's eShop status, eShop region, and any titles attached to its eShop account, then updates the JSON file if any differences in the data are found.
{{Main|3DS:GBA games}}
* <code>SysTransfer</code>: Moves the eShop titles of the source console to the target console. This is the secondary part of what is known informally as a "SOAP Transfer".
** A successful use of this command triggers a 7-day cooldown on system transfers for both consoles, the same as a full system transfer.
* <code>NNIDTransfer</code>: <u>(Still experimental. Use with caution.)</u> Moves only the NNIDs of the source console to the target console. This is not affected by system transfer cooldowns and does not trigger one. 
* <code>LastTransfer</code>: Provides the date&time of the given console's last system transfer, the number of transfers it has ever done, and the time at which the current transfer cooldown will expire if there is one active.
* <code>GetIVS</code>: Downloads the console's <code>movable.sed</code> from the SOAP servers, if the servers have a stored copy.
* <code>SetIVS</code>: Uploads the chosen JSON's stored <code>movable.sed</code> to the SOAP servers. This will overwrite the current stored movable.
* <code>RecoverIVS</code>: Tries to recover a console's <code>movable.sed</code> from only its raw <code>otp.bin</code> and eShop region data.
* <code>EShopDelete</code>: Deletes the target console's eShop account.
* <code>EShopRegionChange</code>: Attempts to delete and then recreate the target console's eShop account for the entered region. This is the main part of a "SOAP Transfer", but after a successful SysTransfer the console will do this automatically when it next connects to the eShop.
* <code>ETickets</code>/<code>ETicketDownload</code>/<code>ETikTitleDownload</code>: Lists all owned eShop tickets / downloads all tickets / downloads the titles attached to all tickets, respectively, from the given console's eShop account.


Game Boy Advance software can be played natively by leveraging AGB_FIRM, something built into every 3DS that allows for native playback of Game Boy Advance software. AGB_FIRM was only ever used officially as part of the Ambassador Program for early purchasers of the original Nintendo 3DS before its price was cut.


== Installation ==
The current recommended way to run GBA software is [[3DS:open_agb_firm|open_agb_firm]] due to its drag-and-drop functionality and ease of save file access. open_agb_firm runs as a payload (similar to GodMode9), meaning it is not directly accessible from HOME Menu (requiring a reboot to enter/exit) unless an alternate bootloader such as [[3DS:fastboot3DS|fastboot3DS]] is combined with [https://gbatemp.net/download/open-agb-launcher.36828/ Open AGB Launcher].<br>
If you want to use another method but still want icons directly on your HOME Menu, you can create virtual console injects on a Windows device.


Instructions for installation & setup are {{GitHub|luigoalma/cleaninty#Installing|on the GitHub page}}, but the installation instructions may need to be interpreted for your OS.
GBA games can also be emulated, the recommended emulator being [[udb:3ds/mgba|mGBA]]. This is the best option if you wish to use cheats and save-states, but performance will rarely be full-speed on old models and some games will not work correctly.


GBARunner2 is a middle ground between native playback and emulation, similar to Nintendont on the Wii - this means it has none of the emulator features and the reduced compatibility of an emulator.<br>
It is included with TWiLightMenu++ (which you may already be using for NDS software), but because of the other options available, it isn't recommended.


Regardless of your OS, you will need a 3DS with both custom firmware and [[3DS:GodMode9|GodMode9]] installed to dump the vast majority of the files required to do <code>SetupConstants</code> using [https://raw.githubusercontent.com/luigoalma/cleaninty/master/gm9scripts/ExtractSystemElements.gm9 ExtractSystemElements.gm9]. A guide to legally deriving the only constant ''not'' dumped via this method, the [[wikipedia:Advanced_Encryption_Standard|AES]] Constant "C", can be found [https://3ds.goombi.fr/convertMii/0x31.html on this page].
=== Game Boy Color / Game Boy ===
{{critical|The AES Constant, along with all other constants used by cleaninty, are copyrighted data. Obtaining them from your own console(s) is fine, but '''do not''' share the constants with anyone else.}}
The Game Boy Color and Game Boy are old enough that all models of the 3DS (and even the DS) can run them at full speed. The historically popular GB(C) emulator has been [[udb:3ds/gameyob-3ds|GameYob]], but due to 3DS-specific issues the [[udb:ds/gameyob|DS version]] is preferred (ran through TWiLight Menu++).<br>
=== Windows ===
You can also create virtual console injects for GB/GBC games if you prefer individual icons on HOME Menu.


Don't bother trying to install cleaninty on Windows directly. Windows has OpenSSL disabled in its <code>curl.exe</code>, but cleaninty requires OpenSSL to function. Working around this issue manually is obnoxious and not worth the time spent.
The multi-platform GB(C) emulator [https://github.com/RossMeikleham/PlutoBoy/actions PlutoBoy] is currently under active development. A GitHub account is required to download the automated builds.


Instead, there are two options:
=== Virtual Boy ===
# Install a Linux distro through [https://learn.microsoft.com/en-us/windows/wsl/install WSL] and then install cleaninty inside the WSL instance using the macOS/Linux instructions. (This is the simpler path, and WSL is useful for many other things. If you choose this instead of msys2, it is recommended that you also install the {{GitHub|microsoft/terminal|Windows Terminal}}.)
Possible with [[udb:3ds/red-viper|Red Viper]].
# Install [https://www.msys2.org/ msys2] and then install cleaninty inside the msys2 instance using the below instructions.


To install cleaninty inside msys2, open the terminal <code>mingw64.exe</code> that is inside the msys2 installation folder, then run the following two commands one at a time:
=== WonderSwan ===
* <code>pacman -Syu mingw-w64-x86_64-python mingw-w64-x86_64-python-defusedxml mingw-w64-x86_64-python-cryptography mingw-w64-x86_64-python-pycurl</code>
Possible through the Mednafen (WonderSwan) core on [[3DS:RetroArch|RetroArch]]. Performance has been reported to be slow on Old 3DS units.
* <code>python -m pip install cleaninty</code>


Once this is completed, from here on out you will need to open the msys2 <code>mingw64.exe</code> terminal to use cleaninty.
== Home video game consoles ==


{{info|Be aware that when using cleaninty through msys2, the place it will look in to find <code>boot9.bin</code>, <code>SSLCertificates</code>, and <code>ctr_constants.json</code> is a folder named <code>3ds</code> inside your msys2 <code>home</code> folder.}}
=== PlayStation 1 ===
Possible through the PCSX ReARMed core on [[3DS:RetroArch|RetroArch]], with playable speeds on '''New 3DS only'''. A partial compatibility list can be found [https://docs.google.com/spreadsheets/d/1pl2bTkzTe736EOaQjk8FBWY9ixfgoNSYSitbm5Gnyqs/edit#gid=0 here], and optimal configuration can be found [https://www.reddit.com/r/3dshacks/comments/jvkotb/full_speed_psx_finally_here_on_new_3ds_new_2ds_xl/ here].


=== macOS and Linux ===
=== Nintendo 64 ===
''Barely'' possible on '''New 3DS only''' through [[udb:3ds/daedalusx64-3ds|DaedalusX64-3DS]]. A partial compatibility list can be found [https://wiki.gbatemp.net/wiki/DaedalusX64_3DS_Compatibility_List here]; most games are incompatible or run very slowly.


First, ensure you have Python 3.7 or newer. You can check if your Python version is new enough by opening a terminal and running the command <code>python3 --version</code>. If you do not, install a compatible version from either your package manager or [https://www.python.org/downloads/ the Python website].
=== Super NES ===
Possible on both Old and New 3DS using [[udb:3ds/snes9x|Snes9x]], which is optimized so that many SNES games can run well on an Old 3DS. Additionally, New 3DS users can create [[3DS:Virtual_Console|virtual console]] injects that use Nintendo's official SNES emulator.


Then, either install cleaninty directly from <code>pip</code> or clone its repo via the command <code>git clone https://github.com/luigoalma/cleaninty.git</code> and then run the <code>setup.py</code> script.
=== NES / Famicom Disk System  ===
The NES is old enough that all models of the 3DS can run it at full speed. The recommended emulator is [[udb:3ds/virtuanes|VirtuaNES]].<br>
Virtual console injects can also be created if you prefer individual icons on HOME Menu.


=== Sega Genesis / CD / 32X / Master System ===
Possible through [[udb:3ds/picodrive|PicoDrive]], covering the Genesis / Mega Drive and its add-ons (the Sega CD and 32X) as well as the Sega Master System. It is apparently reasonably well-optimized for Old 3DS.


== Usage ==
== Arcade cabinets ==
{{critical|Make sure the files for all consoles you compile into a json are accurate before using them in cleaninty, or else the commands may affect a different console than they "should be".
WIP


The easiest way to do this is by checking the serial sticker(s) on the console against the copy of the serial in [[3dbrew:Nandrw/sys/SecureInfo_A|SecureInfo_A]], and if none of the stickers agree with the SecureInfo, also check against the copy in [[3dbrew:Twln/sys/log/inspect.log|inspect.log]].}}
== Home computers ==


There is no graphical interface for cleaninty. All commands are ran through the command line.
=== DOS / Win9x ===
Possible through {{GitHub|MrHuu/dosbox-3ds/releases/latest|DOSBox-3DS}}. Tested mostly on New 3DS. Windows 3.1 and 95 technically ''work'', albeit extremely slowly; this emulator is much more practical for older DOS games.


=== Manual command line ===
=== Commodore 64 ===
Possible through [[udb:3ds/vice3ds|Vice3DS]].


The commands are the same on all operating systems. Run <code>cleaninty ctr (command) --help</code> for information on an individual command's syntax.
== Other ==


As an example, the minimum list of commands needed to set up two consoles' data and perform a SOAP transfer between them would be as follows:
=== Calculators ===
# <code>cleaninty ctr GenJson --otp otp.bin --secureinfo secinfo.bin --out soap_donor.json</code>
''Omega'', a custom firmware for the Numworks graphing calculator, has a simulator available for the Nintendo 3DS. The latest available version (as of 2022/08/09) is available {{GitHub|Omega-Numworks/Omega/releases/download/O1.23.0-E15/simulator.3dsx|here}}.
# <code>cleaninty ctr GenJson --otp otp1.bin --secureinfo secinfo1.bin --out soap_target.json</code>
# <code>cleaninty ctr CheckReg -C soap_donor.json</code>
# <code>cleaninty ctr CheckReg -C soap_target.json</code>
#* The CheckReg commands are not necessary if you are already certain the donor and target have the same region.
# <code>cleaninty ctr EShopRegionChange -C soap_target.json -r (new eShop region - required) -c  (country in chosen region - required if region is not JPN/KOR/CHN) -l (language in chosen region - optional)</code>
#* If this succeeds, '''stop here'''. The next command is only needed if this one fails.
# <code>cleaninty ctr SysTransfer -s soap_target.json -t soap_donor.json</code>


=== Autosoap script ===
[https://gbatemp.net/download/wabbitds.7859/ WabbitDS] is a TI-83 Plus emulator for the Nintendo DS. It ''might'' work on the 3DS under TWiLight Menu++ or through a DS flashcart.


If you are inexperienced with the command line or just don't want to type the commands manually every time, there is a {{GitHub|StarlitSkies/autosoap|SOAP bash script}} made by StarlitSkies that heavily simplifies the process.
== Overview chart ==
<br>The only downside is that if cleaninty has a nonstandard error, the script will be unable to tell you the exact text of the error - meaning you will need to revert back to manual commands anyway in order to debug.
WIP


Read the instructions on its page for setup and usage.
== Emulators that don't exist ==


[[Category:Nintendo 3DS guides]]
These are consoles or devices that will not work on the 3DS, usually due to computing power requirements.
 
* GameCube/Wii/Wii U/Switch
* PlayStation 2 and newer
* PlayStation Portable and Vita
* All Xbox consoles
* Dreamcast
* Windows NT (XP/Vista/7/etc)
 
== Emulating the 3DS itself ==
 
To emulate the 3DS on another platform, Citra is the recommended option.<ref group=Note name=Note01>Citra's website and github repos have been taken down by the owners due to legal action against Yuzu (owned by the same entity) by Nintendo.</ref> Other options include [https://mikage.app Mikage] and [https://github.com/wheremyfoodat/Panda3DS Panda3DS].
 
== Notes ==
<references group="Note"/>
 
[[Category:Nintendo 3DS information]]

Revision as of 07:08, 26 September 2024

An emulator is a piece of software that uses computing power to simulate another device, such as a video game console or a personal computer. As a general guideline, the original Nintendo 3DS is capable of emulating most popular home consoles up to around the fourth generation of video game consoles (the SNES/Genesis era), while the New Nintendo 3DS series is (just barely) capable of emulating some of the fifth generation (the N64/PS1 era).
This is because emulation requires significantly more computing power than running the console natively - though even if it could run emulated games as efficiently as native playback, even a new model 3DS would still only be able to emulate the sixth generation (the Xbox/PS2/Dreamcast era) and possibly the Wii.

The Nintendo 3DS has hardware that allows for native backwards compatibility with the Nintendo DS and Game Boy Advance, meaning such software can run at full speed as they would on the original hardware. While this is not actually emulation, methods that use this hardware will be included here due to the ubiquity of the term.

Handheld video game consoles

Nintendo DS

Nintendo DS software can be played natively using nds-bootstrap, a tool that allows NDS backups to be run from the SD card. In most cases, you will use either TWiLight Menu++ or NDS forwarders to launch the ROM, after which nds-bootstrap will do the hard work of getting it to run.

In the past, Nintendo DS flashcarts were a popular way to run Nintendo DS software. Because of nds-bootstrap's development over the years, they have become less and less necessary, but can still offer useful features like being able to use the flashcart on unmodded 3DS-family and DS-family consoles (depending on the cartridge).

Game Boy Advance

Game Boy Advance software can be played natively by leveraging AGB_FIRM, something built into every 3DS that allows for native playback of Game Boy Advance software. AGB_FIRM was only ever used officially as part of the Ambassador Program for early purchasers of the original Nintendo 3DS before its price was cut.

The current recommended way to run GBA software is open_agb_firm due to its drag-and-drop functionality and ease of save file access. open_agb_firm runs as a payload (similar to GodMode9), meaning it is not directly accessible from HOME Menu (requiring a reboot to enter/exit) unless an alternate bootloader such as fastboot3DS is combined with Open AGB Launcher.
If you want to use another method but still want icons directly on your HOME Menu, you can create virtual console injects on a Windows device.

GBA games can also be emulated, the recommended emulator being mGBA. This is the best option if you wish to use cheats and save-states, but performance will rarely be full-speed on old models and some games will not work correctly.

GBARunner2 is a middle ground between native playback and emulation, similar to Nintendont on the Wii - this means it has none of the emulator features and the reduced compatibility of an emulator.
It is included with TWiLightMenu++ (which you may already be using for NDS software), but because of the other options available, it isn't recommended.

Game Boy Color / Game Boy

The Game Boy Color and Game Boy are old enough that all models of the 3DS (and even the DS) can run them at full speed. The historically popular GB(C) emulator has been GameYob, but due to 3DS-specific issues the DS version is preferred (ran through TWiLight Menu++).
You can also create virtual console injects for GB/GBC games if you prefer individual icons on HOME Menu.

The multi-platform GB(C) emulator PlutoBoy is currently under active development. A GitHub account is required to download the automated builds.

Virtual Boy

Possible with Red Viper.

WonderSwan

Possible through the Mednafen (WonderSwan) core on RetroArch. Performance has been reported to be slow on Old 3DS units.

Home video game consoles

PlayStation 1

Possible through the PCSX ReARMed core on RetroArch, with playable speeds on New 3DS only. A partial compatibility list can be found here, and optimal configuration can be found here.

Nintendo 64

Barely possible on New 3DS only through DaedalusX64-3DS. A partial compatibility list can be found here; most games are incompatible or run very slowly.

Super NES

Possible on both Old and New 3DS using Snes9x, which is optimized so that many SNES games can run well on an Old 3DS. Additionally, New 3DS users can create virtual console injects that use Nintendo's official SNES emulator.

NES / Famicom Disk System

The NES is old enough that all models of the 3DS can run it at full speed. The recommended emulator is VirtuaNES.
Virtual console injects can also be created if you prefer individual icons on HOME Menu.

Sega Genesis / CD / 32X / Master System

Possible through PicoDrive, covering the Genesis / Mega Drive and its add-ons (the Sega CD and 32X) as well as the Sega Master System. It is apparently reasonably well-optimized for Old 3DS.

Arcade cabinets

WIP

Home computers

DOS / Win9x

Possible through DOSBox-3DS. Tested mostly on New 3DS. Windows 3.1 and 95 technically work, albeit extremely slowly; this emulator is much more practical for older DOS games.

Commodore 64

Possible through Vice3DS.

Other

Calculators

Omega, a custom firmware for the Numworks graphing calculator, has a simulator available for the Nintendo 3DS. The latest available version (as of 2022/08/09) is available here.

WabbitDS is a TI-83 Plus emulator for the Nintendo DS. It might work on the 3DS under TWiLight Menu++ or through a DS flashcart.

Overview chart

WIP

Emulators that don't exist

These are consoles or devices that will not work on the 3DS, usually due to computing power requirements.

  • GameCube/Wii/Wii U/Switch
  • PlayStation 2 and newer
  • PlayStation Portable and Vita
  • All Xbox consoles
  • Dreamcast
  • Windows NT (XP/Vista/7/etc)

Emulating the 3DS itself

To emulate the 3DS on another platform, Citra is the recommended option.[Note 1] Other options include Mikage and Panda3DS.

Notes

  1. Citra's website and github repos have been taken down by the owners due to legal action against Yuzu (owned by the same entity) by Nintendo.