RED-Project
RED-Project copied to clipboard
Working ROMs extracted from 3DS VC (requires custom firmware)
Hi mate. Would this be outside the scope of this project?
There are a handful of guides out there explaining how to extract original (sometimes modified) system ROMs from titles released on the 3DS VC. The systems are NES, SNES, Game Boy, Game Boy Colour, and Game Gear. I won't go into too much detail yet in case it's not something we could include, but NES, GB, and GBC are identical to the ones released in the US (except NES games have the TNES header, which can be removed). SNES on the other hand has to be modified to have working sound, and this week I figured out how to do it.
Let me know and I can add more info.
Definitely within the scope of this project, would love it if you could add more info on how to extract these system ROMs! Thanks.
Ok so this guide here covers all the GB, GBC, and NES and GBA extraction: https://glazedbelmont.github.io/vcextract/
There's also a video tutorial here: https://www.youtube.com/watch?v=hLYytIVcsWU&t=2s
The GB, GBC, and NES ROMs all match the no intro database (NES if you remove the header).
The NES ROMs on the 3DS VC have a Nintendo TNES header, which can be viewed in a HEX editor, the first row. The guides explain how to convert that to an iNES header, which is used by some emulators. The header can also be converted on a PC using the same script but a python version. Although not all emulators require the iNES header, indeed some emulators can play NES ROMs without a header as they appear in the no-intro DB, but no emulators can play them with the TNES header afaik.
SNES isn't covered in the written guide because like I said in the first post it requires additional work, which I discovered how to get around. The process for extracting SNES roms is the exact same as the above methods, and is shown in the video tutorial, except the file is a .bin file with "data" in the title. For example, Legend of Zelda - A Link to The Past is titled data.bin, and Super Mario World is titled 11data.bin
Like Wii VC SNES ROMs, the audio data is encrypted with PCM (like your guide for Smash Bros Brawl as well, those ROMs are the same as the Wii VC). With the Wii VC the ROM and PCM files are separate, and can be simply merged using snesrestore. However, with 3DS VC, the .bin file contains everything in a single file.
There's some offset data that appears to be junk at the top of the file, then the ROM data with the audio encrypted, then the PCM audio data, then some additional junk at the bottom. I figured all that out and how to convert these to working ROMs for Legend of Zelda - A Link to The Past and Super Mario World using the original ROMs as well as the Wii VC versions as a guide. Worth noting that, at least SNES ROMs, some on the VC are different to the originals. Removal or lessening of flashing images etc.
I'm only just getting into ROM hacking and hex editing, so at the moment a tool to automate the process is beyond me. But I am a programmer, so it's not totally alien.
Last note. In Europe (where I live) the ROM versions on the 3DS VC are the USA or World versions. That goes for NES and SNES. There may well be exceptions, and I've only tested Nintendo games, but that's what I've come across.
So essentially unless someone (or me) figures out how to automate the process on the .bin file, each SNES ROM extraction will be different.
Here's an example. I documented my steps for both the ROMs I was testing.
Super Mario World
Open 11data.bin in hex editor
1. Delete all data from offset 00000000 to 00000050 (junk) (Rom actually begins at 00000060)
2. Delete all data from offset 00098E60 to end (junk).
3. Save as new base file. Contains the ROM (512 KiB) and PCM audio (100 KiB)
4. Delete all data from offset 00000000 to 0007FFF0. Save this file as .pcm
5. Reopen new base, Delete all data from offset 00080000 to end. Save this file as .rom
6. If done correctly, .rom is 512 KiB and .pcm is 100 KiB.
7. Use snesrestore to merge the two files into .sfc file. Should be 512 KiB with data:
Size: 524288 bytes (512 KiB)
CRC32: 5D3C0FAE
SHA-1: E23CB10E1BA86BBD1F583D3013A98368AE3301BA
8. (optional) Fix the bad checksum using IpsAndSum. New data:
Size: 524288 bytes (512 KiB)
CRC32: F485B0DB
SHA1: FA1E82C44EC77AAD496A39F4F111889DF0FDEE61
Legend of Zelda - A Link to The Past
Open data.bin in hex editor
1. Delete all data from offset 00000000 to 00000050 (junk) (Rom actually begins at 00000060)
2. Delete all data from offset 0011C160 to end (junk).
3. Save as new base file. Contains the ROM (1024 KiB) and PCM audio (113 KiB)
4. Delete all data from offset 00000000 to 000FFFF0. Save this file as .pcm
5. Reopen new base, Delete all data from offset 00100000 to end. Save this file as .rom
6. If done correctly, .rom is 1024 KiB and .pcm is 113 KiB.
7. Use snesrestore to merge the two files into .sfc file. Should be 1024 KiB with data:
Size: 1048576 bytes (1024 KiB)
CRC32: 2942CBD3
SHA-1: A296E48B36C3D21D2191D4FCF9516A488442221C
8. (optional) Fix the bad checksum using IpsAndSum. New data:
Size: 1048576 bytes (1024 KiB)
CRC32: FFCB9ADD
SHA1: E29B410D353F2C657272083BEEF8CD6D79F02382
What about Famicom Disk System titles?
@PW5190 FDS titles use the .qd format stored as a loose file in the RomFS. It can be converted to .fds easily.