Video Game File Formats
Getting into retro gaming is a slippery slope. It begins with just ahem "acquiring" the games you really want to play for just a few systems. Eventually this escalates into trying out more and more games until you're storing entire system collections and have a wide variety of obscure platforms no one remembers. When you accumulate a large collection however, it's easy to end up in a place with a wide variety of different file formats, even for the same system. I wanted to take a moment and discuss the different options for many of the different consoles, and which I have personally elected to store my files in.
This is not going to cover every single possible file format and its pros and cons, instead it will just go over the ones you are most likely to encounter, the differences between them, and the justification for which I personally prefer. If you also don't care for my babbling, an excellent reference can be found on the Emulation wiki, which gives details for many disc-based systems.
Nintendo Consoles
NES
Starting off simple are NES ROMs. The only format you will likely ever see is the iNES format, which has the .nes
extension. This format provides useful metadata about the game stored in the file's header, followed by the dump of the game itself. Although it was created by an early NES emulator developer, it became so widely accepted that even Nintendo uses it for their Virtual Console games.
SNES
Unlike the NES, the Super Nintendo has two widely used formats, although calling them different formats might be somewhat misleading. The first is the .sfc
file extension, which is simply a dump of the SNES cartridge with no modifications. The second is .smc
which is identical to the .sfc
file but with the addition of a 512 byte header. This header is useless. It's a relic of an old cartridge dumping device and provides no useful information for emulators. That being said, since the .smc
is so wide spread, SNES emulators largely are able to expect it and ignore it. There is no reason to keep it around though, so I would strongly recommend storing your games as .sfc
files. There are tools available that will simply delete the first 512 bytes of the file to make this conversion, although it's important to note that while you can go from .smc
to .sfc
, you cannot go back.
You may be wondering why the NES needed a special format with a header while the SNES apparently does not. The NES format stores information about the physical components of its cartridge in the header. This is required so the emulator knows how to configure various parameters. This would be needed for the SNES as well, except the SNES game format already includes this information (even though real hardware doesn't actually use it). Dumping devices don't need to store any additional information about the cartridge because the original developers did that for us.
N64
There are three common Nintendo 64 file formats, although two of them are much more common than the third. These are the .n64
, .v64
, and .z64
formats, with .n64
and .z64
being the two common ones. Unlike the NES and SNES, there are no header differences here. Instead, the three formats differ based on their endianness. Without getting too technical, when the data values you're working with are large enough to require more than one byte each, there's different ways to actually store them in a file. So long as you're consistent all the way through, you can use any endian style you prefer. However, the designers of the N64 chose Big Endian for cartridges, meaning that only the .z64
format stores the game in the same manner as a physical cartridge. The other two formats are again due to the dumping devices which produced .n64
and .v64
files back in the day. It's strongly suggested you store all your N64 files as .z64
files, and there are programs that can do this conversion. Conveniently, converting between any of the three formats is possible without any data loss, although the only practical reason to do this would be for mods that only support one of the other formats.
GameCube
Here's where things get interesting. The GameCube has quite a few widely used formats, somewhat due to the prevalence of the Dolphin emulator, whose developers have devised a number of these formats. Because the GameCube is an optical disc format, it will share similarities with most of the other disc systems we'll discuss later, although it does have a few unique ones to itself.
The first to discuss is perhaps the most common, the .iso
format. As I was saying, ISOs are by no means unique to GameCube games, and are instead a direct rip of all the data stored on an optical disc. When you rip an .iso
, the software has no idea what is and isn't useful data, so the entire disc is ripped and encoded into a file. This means that .iso
files are always the same size -- the maximum size of the optical media in question. For the smaller discs the GameCube used, this means that all GameCube .iso
files are exactly 1.4GB.
It's very rare for any disc to contain 100% useful data. Instead, .iso
files will store a lot of empty data that will never actually be accessed. With some knowledge about how the platform stores its data on disc, it's possible to identify useless data and remove it. For GameCube (and Wii games) this was commonly done using a format called NKit. NKit would perform the steps to strip out the unused junk data in a reversible fashion, and was commonly used on both .iso
and .gcz
files. Since it could be used on more than one format, it was common to see these files saved as .nkit.gcz
or .nkit.iso
depending.
Speaking of .gcz
, this was a compressed format for GameCube games created by Dolphin. After importing games into Dolphin an option would be available to compress them into their own .gcz
format, which could be combined with NKit for better gains.
I've used the past tense for most of these formats because none of them are really recommended anymore. In recent years, Dolphin has devised a new file format which improves upon the benefits of .gcz
and NKit. This is the .rvz
format, and it's the current recommended format for GameCube titles. Conversion can be done within Dolphin and it is fully reversible back to raw .iso
files. This benefit is important as while Dolphin can readily use .rvz
files, a real GameCube cannot. So if you have a modded GameCube, you will need to convert back to .iso
before attempting to load the game.
Wii
Wii shares a lot of similarities to the GameCube, both in physical architecture but also perhaps due to also being supported by Dolphin. Like GameCube games, physical Wii games can be ripped as .iso
files, the junk data can be removed via NKit, and they are also supported by the new .rvz
format. Like the GameCube, it is recommended that you store games as .rvz
for space efficiency reasons. There are a few other formats that exist, such as .wia
and .wbfs
, but I personally haven't encountered them much and they seem to not be as preferred as .rvz
these days.
Unlike the GameCube however, the Wii supported digital download games. Since these did not ship on a physical disc, the .iso
format doesn't apply to them. The .wad
format (not to be confused with WADs for Doom) is the primary format for WiiWare titles. From what I can tell, this is really the only format for WiiWare games, and as such is really the only choice for archiving.
Wii U
The Wii U disc format allows for up to 25GB of storage, further necessitating the need for some sort of compression. There are a number of different formats which can be converted between.
Perhaps the one I see most commonly is just the raw game data extracted from the device. These can be identified by assets broken out into game
, content
, and meta
folders. Since these are just the raw assets, they can be compressed like any other folder into something like .zip
.
When dumping from a disc though, a disc image similar to an .iso
is produced, identified as a .wud
file, or more commonly compressed into a .wux
file. These can be executed by the Cemu emulator and can be converted back into a format a physical Wii U can use. Lastly is the .wua
format which was created by the Cemu emulator as a more optical file format. Games stored as raw files can be converted into .wua
, which combines everything into a single, compressed file which can be directly used by Cemu (which something like .zip
cannot). I am a little unclear on whether .wua
archives can be converted back into a format useful for physical hardware however, but if that is not a concern, then this is the optimal format.
Switch
There are two common Switch formats, and in a way they mimic the formats on previous Nintendo consoles. These are .xci
and .nsp
. .xci
files are complete dumps of a physical Switch cartridge, which often can contain assets not required by the game itself. .nsp
is more akin to the digital download of the game, which doesn't include any of the junk data .xci
might. Both are perfectly valid formats, but .nsp
is more advantageous for its (sometimes slight) size benefits. I also prefer .nsp
for its usability. Since .xci
files are packaged cartridge games, they will need to be "installed" to the emulator in question, while .nsp
files are more readily available to be played. This is a small difference in practice -- and some people might prefer the opposite behavior -- but I personally have stored everything as .nsp
for this reason.
Nintendo Handhelds
Game Boy / Game Boy Color
The Game Boy immediately stands out as being simpler to the home Nintendo console by only having a single file format. Like the SNES, this format is just a raw dump of the data stored on the cartridge ROM, but unlike the SNES, no one made a competing format with a useless header. You will sometimes see different file extensions for Game Boy games -- .gb
versus .gbc
are common to differentiate between GB and GBC titles, but I have rarely seen .dmg
or .bin
files. There are no differences between these (even between .gb
and .gbc
), they're just there for recognition, you're free to rename them to the standard you prefer, which I would recommend being .gb
and .gbc
.
Game Boy Advance
I have never seen any GBA formats other than .gba
, which like the GB/GBC before it, is a dump of the game's cartridge. I have seen some older dumps with custom intros added in by the developers who dumped them. This is an older (and terrible) practice that seems to have fallen out of favor, and isn't unique to GBA, but it's the system I've historically seen on the most. Perhaps this was just my own experience as those dumps are largely frowned upon.
Nintendo DS/DSi
Like the two systems before it, the DS has only one widespread file format -- .nds
files. Some research implies that DSiWare titles might have their own format which is a dump of the download format, but I've only ever seen DSiWare games also distributed as .nds
files.
Nintendo 3DS
Finally, something a bit more complicated. The 3DS has quite a few different formats, with the most common being .3ds
, .3dsx
, and .cia
. The simplest to understand is .3dsx
which is only used for Homebrew titles. For commercial titles, it's somewhat similar to the different Switch formats, with .cia
used for installable game dumps while .3ds
files are cartridge dumps but don't need to be installed to be used. I personally prefer .3ds
when using an emulator, as they can simply be launched, but .cia
files integrate to a 3DS home screen, making them more ideal on a real unit. However, both play just as well in emulators as on real hardware.
Note that while the New Nintendo 3DS has games that aren't supported on a base 3DS, there's no separate file format. AFAIK only way to tell if a game isn't going to work on a base 3DS is to try it, or to memorize the small list of commercially released New 3DS titles.
Sony
PlayStation
Since most Sony consoles are disc-based, the general advice for disc systems applies. I discussed a few of these when discussing GameCube and Wii titles, but there are other formats that don't apply to them. The PS1 used a version of the CD format to store data, and thus the primary format you'll encounter is based off of the Audio CD format, which is made up of a combination of .bin
and .cue
files. .bin
is a general file extension for binary data. For PS1 games this will include all the game and audio data, and it is not uncommon to have more than one .bin
file. .cue
files provide a datasheet for giving context to each of the accompanying .bin
files. You'll sometimes see .iso
files rather than .bin
, or for traditional audio files to be mixed in, but this is more or less the same format.
BIN/CUE files are fine, but it can be a bit of a pain to have to manage multiple files per game. A new format has been created by the MAME arcade developers to compress optical media data into a single .chd
file. This format has become well supported by relevant emulators. You'll see me mention this format quite a bit in this article, as it's the one I've largely used for many disc-based consoles for its compression and greater ease of use over BIN/CUE.
Since many PS1 games were multi-disc, an optional format you might see are .m3u
files. This format was originally for creating music playlists, but has been used by some emulators to specify a set of discs belonging to the same game. The format is simply a plaintext list of discs, one per line, but this allows some emulators to know which discs can be swapped in when needed.
A final common format are .pbp
files, often named eboot.pbp
. This is the official file format Sony created for playing PS1 games on PSP and other later consoles. Converting between other PS1 formats and .pbp
is possible, but there aren't many tools to do it. For that reason, I tend to only have .pbp
files for games I explicitly want to play on a PSP, and keep everything else as .chd
.
PlayStation 2
Pretty much all the advice for the PS1 applies here too. The PS2 uses a DVD format, so the common format is the generic .iso
. Like other formats that use it, .iso
files are straight rips from the entire capacity of a disc, and thus often contain a lot of junk data the game doesn't access. This can be stripped away, although I personally don't know of any tools to do so for PS2 titles. Standard compression methods can also be used to minimize storage size, although you'll need to decompress the files in order to play them. Instead, like the PS1 I would recommend using .chd
files to compress and remove the junk data, while still leaving them playable in popular emulators -- although you'll need to convert them back to .iso
if you wish to play them on physical hardware.
.m3u
files might also be used for disc-swapping, although it's not as common as PS1 games.
PlayStation Portable
Just about the same advice for the PS2 applies to the PSP. While the UMD is a physically smaller platform, its games still use a .iso
format for rips. These can again be improved upon by converting them to .chd
files, but that is only useful for archiving or some emulators. If you need to play on a physical system, you will need to convert back to .iso
.
It was mentioned in the PS1 section, but PS1 games for the PSP use Sony's proprietary .pbp
format. More details can be found above.
PlayStation Vita
Systems released after 2010 or so tend to have a few different supported file types, and the Vita is no exception. Sony's official format is .pkg
which is an encrypted format, requiring a decryption key (usually named work.bin
) to make the game files playable. AFAIK, there doesn't seem to be a standard single-file file format for decrypted commercial games, instead you have to manage the raw game directories, meaning you can use any standard compression software to archive them. Finally, there is the .vpk
format, which is largely used for Homebrew Vita titles.
Sega
Master System & Game Gear
While the two systems are very strongly related, their games are not compatible with each other. Both are simply ROM dumps of their games and are typically given the .gg
prefix for Game Gear and .sms
for Master System.
Sega Genesis / Mega Drive
There is surprisingly little information available about the different Genesis file formats. Throughout my travels I've seen quite a few different formats, most commonly .md
, but .smd
and .bin
also shows up occasionally. .bin
is a generic file extension for binary files, so it really doesn't tell us anything about the file (and really shouldn't be used, but it is), but these appear to just be exact ROM dumps. .md
and .smd
appear to be situations like we saw for the SNES, where popular dumping hardware would format the ROMs in their own manner. The only documentation I could find on this is here unfortunately, so I don't have any technical details about what the precise differences between these formats actually is. Finally, that same link -- and some other search results on the web -- also mention a .gen
format. This essentially is what those .bin
files should've been called, but I don't think I've ever once ran into a .gen
file before.
Sega Saturn
Not too much to say here. Like other CD-based consoles such as the PS1, the Saturn uses formats common to CDs, such as BIN/CUE, ISO, or the more modern .chd
, if your emulator supports it.
Sega Dreamcast
Last but not least is the Dreamcast. The Dreamcast did not use a typical CD-ROM format, instead opting to create their own proprietary GD-ROM discs, which was considered more secure and had a higher density than traditional CD-ROMS (ironically, while the GD-ROM format was considered secure, the system also supported a format known as MIL-CD, which was wildly insecure and led to widespread piracy on the system). Due to this change in format, we see formats similar to, but distinct from, the typical optical filetypes. The first is .gdi
which are exact rips of the game disc, in a similar way to how .iso
files are exact rips of DVD-based games. There is also a trimmed down format, known as .cdi
, which is commonly used for burning onto typical CD-Rs. Finally, like other optical systems, .chd
support is becoming quite common as that format has increased compression advantages over the traditional two formats.
Microsoft
I'm going to be honest, I'm not terribly involved with Xbox system emulation. In the slight amount I have played around with it, I've only seen your traditional .iso
files, for both the original Xbox as well as the 360. I don't see .chd
support cited for these systems as I do for other optical consoles, but I suspect that .chd
support will eventually come to the popular emulators, if the format proves to have the same advantages.
Misc.
Most players aren't going to branch out to systems not made by the big four -- Nintendo, Sony, Sega, or Microsoft. However, there have been other console developers over the years, although their systems generally have a single, somewhat straight-forward file format. You're not going to see the amount of attention something like the GameCube has received on consoles that only had a few million in sales.
WonderSwan / WonderSwan Color / SwanCrystal
Bandai's WonderSwan line was developed by the former creator of the Game Boy -- Gunpei Yokoi -- after he left Nintendo. It's a rather interesting system, but being a cartridge-based console only has a single file format for each its black and white and color consoles. This is the appropriately named .ws
for the original WonderSwan and .wsc
for the WonderSwan Color and its fancier SwanCrystal release.
TurfoGrafx-16 / PC Engine / TurboGrafx-CD / PC Engine CD
Perhaps better known in the west are NEC's consoles, the TurboGrafx-16 (known as the PC Engine worldwide) and its CD-based successor the TurboGrafx-CD / PC Engine CD. I'm again not too familiar with these, but the common formats seem to be .pce
for the cartridge-based games, and the common BIN/CUE format for the CD ones.