Virtual Console games are usually identical to the original game, as Nintendo usually avoids modifying ROMs directly and instead layers patches on top. However, even when directly modified, easy methods have been found to revert them.
This means the original game can be extracted and used exactly the same as one dumped from a cartridge.
Required Reading
This tutorial currently supports NES, SNES, GB, GBC, GBA, and Game Gear VCs.
Note that ROMs from three consoles are altered in VCs, as follows:
NES VCs use a non-standard TNES header that only works in the Virtual Console, and must be converted back after dumping. This guide walks through how to convert the header.
SNES VCs are altered for more efficient playback in the Virtual Console, and if not restored after dumping the audio will be unusuable in other emulators. This guide walks through how to restore the ROM.
Game Gear VCs are compressed into a unique archive type, and sometimes their ROMs are directly patched. This guide walks through how to decompress the archive (WIP), but as the patches are nondestructive it does not revert them.
Instructions
What You Need
The latest release of GodMode9 (the GodMode9 .zip file)
If extracting a Game Gear game: The latest release of MArchiveBatchTool
Section I - Prep Work
In this section, you will set up the necessary files to extract a VC game.
Power off your console
Insert your SD card into your computer
Copy GodMode9.firm from the GodMode9 .zip to the luma/payloads folder on your SD card
Copy the gm9 folder from the GodMode9 .zip to the root of your SD card
If you are extracting an NES game, copy tnes2ines.gm9 into the gm9/scripts folder on your SD card
If you are extracting an SNES game, extract the vcromclaim .zip into a folder and place snesvcsplit.py into this folder
If you are extracting a Game Gear game, extract the MArchiveBatchTool .zip into a folder
Reinsert your SD card into your console
Section II - Accessing the Game Files
In this section, you will mount the VC game's internal files.
Hold the START button and power on to open GodMode9
Press the HOME button, then press A on the Title manager option
Press A on [A:] SD CARD and wait for the search to complete
Once it completes, all titles that you have installed will appear
Find the VC that you wish to extract a ROM from and press A on that title, then choose to Open title folder
Press A on the main game file - usually named 00000000.app - then choose NCCH image options..., then Mount image to drive and press A again to confirm
The internal files of the chosen game will appear
Section III - Dumping the ROM
In this section, you will copy the ROM out of the VC, and fix its structure if it is an NES/SNES game.
What console does the chosen game originally come from?
Go into the folder romfs/rom
Press A to select the file that appears, then choose Copy to 0:/gm9/out
Press HOME, then go into Scripts... -> tnes2ines
Select the copied file and choose a mirroring if it asks, then let the script run
Rename the ROM so its file extension is .nes
Your ROM is now extracted and can be used in an emulator.
If you are on Linux, replace py -2 with python2 in the commands.
Go into the folder romfs
Press A to select the file data.bin, then choose Copy to 0:/gm9/out
Press R+START to power off the console
Take the SD card out of your 3DS and put it into your PC
Copy data.bin into the vcromclaim folder
Right-click anywhere in the empty space inside this folder and click on the option that opens Command Prompt, PowerShell, or the terminal
If no such option appears, open this window manually and use cd or similar commands to target it into the vcromclaim folder
Run the following two commands one at a time:
py -2 snesvcsplit.py data.bin
py -2 snesrestore.py game.rom game.pcm output.smc
If desired, change output.smc's filename to a name of your choice
Your ROM is now extracted and can be used in an emulator.
Go into the folder romfs/rom
Press A to select the file that appears, then choose Copy to 0:/gm9/out
Press B until you return to the drive list, then go into 0:/gm9/out
Place the cursor on the copied ROM, press R+X, and change the file extension to match the console it came from: .gb for Gameboy, or .gbc for Gameboy Color
If desired, also change the ROM's filename to a name of your choice
Your ROM is now extracted and can be used in an emulator.
Go into the folder exefs
Press A to select the .code file, then choose Copy to 0:/gm9/out
Press B until you return to the drive list, then go into 0:/gm9/out
Press A on the .code file, choose GBA image options..., then choose Rename file and press A to confirm
Your ROM is now extracted and can be used in an emulator.
These ROMs can only be fully extracted on Windows or Linux. If you do not have access to a PC that runs either of these operating systems, stop after copying the ROM into gm9/out and wait until you have access.
This section is a work in progress. Notes:
Need to figure out how to determine the seed and codec for every game. This section can't be finished without them.
Go into the folder romfs/system/roms
Press A to select the file that appears, then choose Copy to 0:/gm9/out
Press R+START to power off the console
Take the SD card out of your 3DS and put it into your PC
Copy the ROM from sd:/gm9/out into the MArchiveBatchTool folder
Right-click anywhere in the empty space inside this folder and click on the option that opens Command Prompt, PowerShell, or the terminal
If no such option appears, open this window manually and use cd or similar commands to move the terminal into this folder