It premiered at the UK Kickstart Expo this year, and I'll be honest, I only got it working properly the day before!

It can't play every MOD file (what is a MOD file), and there's a couple of reasons for that. The main one being the physical time it takes for the camera to jump around the disc. That'll make more sense in a bit.

First, a quick demo...

If you'd like to see this in real life, I'll be taking it to the Retro Computer Museum (Leicester, UK) on the 5th Decemberfor one of their special events.

Part 1 - The Discs

Let's start with the discs themselves, because it's not entirely obvious what's going on when you look at one.

Front of one of the DisksClick for High Res Image

On the front there's this circular pattern, and at a quick glance it almost looks like how a disk would be laid out with tracks and sectors. Well, that's not entirely incorrect. Get in really close though, and you can see it's text. Each ring contains patterns from the MOD file, printed row by row, with the four sound channels squashed together with no spaces, each one split into note, sample number, effect and effect value.

I wrote some Python that takes a MOD file, pulls out all the patterns, and draws them radially onto one enormous image rendered at 1200dpi. The text uses a modified version of the Amiga Topaz font. The modifications make it easier to tell apart characters like 8 and B, which otherwise would very easily be mistaken for each other. You'll see why that matters later.

Down the left edge of every row is a number running from 0 to F and then repeating. I was always worried I'd never get the disc positioned perfectly, so knowing which row was in the centre of the camera's view seemed difficult. This gives it a clue. You might be wondering why I didn't just write 0 to 63 like a normal person. Well, the disc is designed to be the same size as a 12" vinyl record and I just didn't have the room, especially with the spacing needed to keep each ring obviously separate from the next.

The font size was an experiment. I basically kept shrinking it until the printer couldn't print it accurately anymore. And yes, I bought a new printer for this, my very old one didn't stand a chance at this resolution. The problem is the printout is bigger than A4, and buying the new printer was expensive enough without going for an A3 1200dpi laser, so instead the image gets split into three A4 sections. That's why there's what looks like wasted space on the disc. With 63 patterns it balances nicely and cuts into three pieces easily. You can fit 65, but cutting that out was time consuming and prone to errors, and most MOD files have fewer patterns than that anyway.

Closeup of the disk showing three coins for scale

I also realised very short MODs will fit on a 7" disc, which prints from a single A4 sheet. These are much easier to make and tend to play much easier too.

The back

So that's the front. What about the back? First I had to work out what actually needed storing, and it turns out it's the first 1084 bytes of the MOD file. That's the song name, the details of the 31 samples (length, finetune, looping), the play sequence and the M.K. marker. After that would normally come the patterns, but they're printed on the front, so that just leaves the sound samples.

I had loads of ideas for this, including physically printing the waveform of each sample, but there was no way that was going to sound good enough. So I went digital, which meant coming up with a barcode.

Designing a Barcode

There's loads of barcode formats out there already, but most are built to be scanned at weird angles in all sorts of conditions. That makes them very robust, at the cost of how much data they hold.

QR Code Breakdown

Take a QR code. It has finder patterns so it can be located mid-air, an alignment pattern so rotation, skew and distortion can be corrected, white space around the finders, timing patterns to work out the grid size, format information describing how much of the rest is error correction, the actual data, a big chunk of Reed-Solomon...

Read more »