The Lost Art of Burning Game Discs
Burn. Noun. The process of recording data -- video, audio, or otherwise -- onto a recordable optical disc.
In the olden days (the mid-2000s) burning optical media was a very common practice. Even relatively non-technical people often burnt music onto CD-Rs for playback on the go, to make backups, or to share amongst their friends. Over the last 15 years or so though, optical media has become less and less common. Streaming has replaced the CDs and DVDs of old, and even for those of us who still enjoy physical media, "improvements" in DRM have made it progressively more difficult to create your own custom media. The old ways are not quite dead though, and there are some compelling use-cases for burning your own media in the mid-2020s. One of the most interesting of these is video game piracy.
The concept is simple. Given a digitally acquired copy of a video game, burn it onto a disc so that it can be played on original hardware. For some systems, this has been a practice since the console was originally released. The Sega Dreamcast famously had an exploit that allowed games burnt to a CD-R to be playable. (Some people blame the commercial failure of the Dreamcast on this vulnerability, which I think is greatly overblown, but definitely was a headache for Sega executives). In the modern day, it can be an excellent method to playing older software, as opposed to emulation, modding systems to run games from external storage, or spending a small fortune purchasing retail copies. However, there are some caveats to its feasibility. Most systems have some level of piracy protection, preventing them from loading non-retail copies. While methods like jailbreaking or hardware modifications can remove this limitation, the details I'm going to list here are for burning discs that will run on any console, or at least on a subset of models. This is possible via modifications to the game files themselves, embedding software exploits that bypass the console's security and allow for the discs to be read. These methods too have existed for many years, but only recently have some exploits been discovered that allow for copies of any game to be made, without needing to swap discs or utilize other clumsy workarounds.
While these exploits exist for many systems, I've only personally experimented and had success with a few, namely the Sega CD, Sega Dreamcast, and Sony PlayStation 2. Below are some details for the methods and tools I used. Everything is for Linux OSes, if your a Windows user there is alternative software available to do much of the same thing.
Sega CD
Unlike optical formats that came later, such as DVD and Blu-Ray, the various CD formats had no DRM protection, and from what I've been able to tell, this extends to the Sega CD. My assumption is that CD-Rs were too new and expensive for Sega to worry about at the time. Sega CD games are most commonly distributed as .bin
/.cue
files, a format which pairs binary data stored in one or more .bin
with a .cue
file. The .cue
file are a table of contents of sorts specifying how the .bin
files are structured. To burn SCD games on Linux, the widely-used cdrdao program can be used. By pointing it at the .cue
file, cdrdao
will parse it, identify where and how .bin
should be copied to disc, and perform the copying itself.
There are a few tricks involved though. In my experience, simply burning the data to disc will lead to fine gameplay but corrupted audio. From what I understand, this is due to the data being saved in a byte-swapped format from what the system natively expects (probably due to some convention set by whichever person was most prolific in ripping Sega CD titles). In any case, cdrdao
has the functionality to perform the opposite byte-swap via a command flag. Thus, I burn Sega CD games like so:
$ cdrdao write --swap --speed 1 --eject mygame.cue
It's traditionally best to burn games as slow as possible, to minimize the possibility of getting an invalid burn. Most modern optical drives won't do 1x burn speed anymore (my 4K Blu-ray drive only does a minimum of 16x CD burn), but cdrdao
will detect this and burn at the lowest possible speed, even if it's higher than 1.
Sega Dreamcast
Fast forward a few years after the Sega CD, and things have gotten more complicated. Game piracy had become a real worry, so when choosing what optical format their new console would support, Sega's engineers developed the GD-ROM format, in collaboration with Yamaha. While based on the CD-ROM format, GD-ROM discs had a higher density and thus could hold up to 1 GBs of data. Since it was a proprietary format, there would be no GD-R burners or discs made, meaning no one would even have the option to create counterfeit games.
This wasn't a bad idea, and probably would've worked well in stopping piracy if it weren't for another feature they added to the Dreamcast. They also added the ability to play standard Mixed Mode CDs, a common format Sega had supported on the Sega CD and Saturn. This meant that the Dreamcast did have the ability to read standard CDs, and sure enough less than a year after release, hacker groups discovered an exploit that would trick the system into booting games saved to CD-Rs, first via a secondary exploit disc then later via self-booting. Piracy became so widespread on the Dreamcast that its effects are still seen today. There are two commonly used Dreamcast file formats, .gdi
files, which are direct rips from a commercial GD-ROM disc, and .cdi
which is a copy of the game that has been modified so it will fit on a ~700 MB CD-R and to have the self-booting exploit that allows it to run on unmodified Dreamcast hardware. .gdi
files are ideal if you're playing on an emulator or a modded system, but if you want to burn to a readable CD-R, then the .cdi
version is the way to go.
Burning Dreamcast discs on Linux is more complex than Sega CD games, but can still be done using a combination of commonly used utilities. Personally, I commonly use a script written by another developer that uses a combination of cdrtools, cdirip, and other utilities to burn a disc. To use it's simply a matter of invoking the script and pointing it at your .cdi
file.
# dcdib mygame.cdi
The script will detect your optical drive and perform the needed initialization to start the burning process. The script also has other functionality, but this is all that's needed to start a burn.
There are two caveats here though. Not all Sega Dreamcasts are equal, and some model revisions Sega made throughout the years are better suited to reading burnt CD-Rs than others. On the bottom of the system, there is a circled number printed near the bottom of the informational stick. This number, which should read 0, 1, or 2, refers to the console's revision number. While revisions 0 and 1 largely accept any valid CD-R media, revisions 2 are noted for having addressed (some of) the piracy exploits being used at the time, and thus won't read all media types. Revision 1 is by far the most common, but if shopping for a used Dreamcast, it's important to keep an eye out for which revision you end up with.
The second caveat deals with how the data is stored within the .cdi
file itself. I'm a bit unclear on the specifics, but there are several different .cdi
format types, most notably "Audio+Data" and "Data+Data". When I first began experimenting with Dreamcast CD-R burning, I was surprised to discover my revision 1 Dreamcast was able to read Data+Data discs just fine, but not Audio+Data discs. After a lot of digging around for ways to convert from one type to another (if you're searching as well, I never found a method), I discovered the fix to my problem. Inside the Dreamcast, attached to the optical laser assembly, is a potentiometer that can be carefully turned. This allows for fine tuning of the power output of the optical drive read laser. By slightly turning up this control, I was able to magically give my Dreamcast the ability to read all .cdi
burns I threw at it, although my disclaimer is that this is not recommended, and can potentially damage the laser itself or the discs it's reading. If you're curious, this guide largely describes the process I took to repair my system.
Sony PlayStation 2
Unlike the Sega CD and Dreamcast before it, the PS2 does not use CD discs, but instead this new-fangled DVD format. On the surface, this might imply it makes it easier to create burnable PS2 games than Dreamcast, as DVD-Rs and drives were incredibly common. However, unlike the Dreamcast, an exploit was not found during the life cycle of the PS2 to create single, self-booting discs. Fortunately for us though, we live in the future, and a few years ago, an exploit was discovered that did just that. Known as FreeDVDBoot, it's effectively a method to patch PS2 .iso
files so that, when burnt to a disc, an unmodified PS2 will skip any verification steps and load the disc as it would a commercial title. This is a heavily dumbed down explanation, but if you're interested, the creator of the exploit wrote an excellent blog post describing how it works, I recommend it. For our purposed though, we simply need to apply the patch to our .iso
files and we're off to the races. I personally use this program which provides a simple GUI to perform the patching. It is a Windows-only program, but works just fine on Linux via Wine.
Once the patching is done, there are many DVD burning programs out there (although admittedly fewer and fewer each year). For the sake of completeness, I personally use growisofs
, provided as part of dvd+rw-tools package. There are many frontends to this (I think k3b uses it under the hood) but for just the CLI, it can be invoked via the following.
$ growisofs -dvd-compat -Z /dev/sr0=mygame.iso
(This assumes your optical drive is available at /dev/sr0
, which is the case for some Linux distributions, but not all).
Conclusion
While I'll admit that I wrote this article mainly so I could remember how to perform these actions in the future, I hope they've been helpful for others who stumble upon this. These are by no means the limit of what exploits exist for burning physical game media (I know a similar process is possible for the PS1 as well, although I've never tried it). If I do ever take the time to learn those steps, I'll fill this article in with those details as well.