Humongous Entertainment's DOS driver format

Humongous Entertainment's "classic" DOS games (Putt-Putt Parade, Moon, Fatty Bear, Fun/Activity Packs and Bear Stormin') use MIDPAK and DIGPAK for sound support.

This was popular audio middleware to support a wide variety of sound cards in the DOS days. But Humongous shipped their games with a limited number of drivers, and they're in an undocumented format, so we can't add more drivers in.

Well heck, why don't we fix that.

The following is my own reverse engineering of the DRV files in Humongous' DOS games. This has nothing to do with DRV files from Windows or anything else.

This should be enough to put any MID/DIGPAK driver you want into the game. If not I'll release more material later, anyway.

And yes, you will be able to play Putt-Putt Goes to the Moon with a General MIDI synth. (YES!!)

The DRV files simply consist of all the game's driver files concatenated together. The secret here is that each driver includes a header the game needs to load them.

All you'll need to do is add the correct header to the start of the driver file, and you can add it onto the end of the stock driver... or even replace the drivers!

Also change the game's INI configuration to reference your new driver. I don't understand how HE's DOS config program works, so you'll have to edit it manually. Its format at least is fairly obvious.

HE's driver header starts with the word FILE

Next, there are two NUL bytes (00 00)

The next two bytes are the length of the driver file INCLUDING HEADER. They're hex bytes, for example it's 39 AC in SBFM.ADV because that driver is 39AC (14764 decimal) bytes long.

Next is driver filename as a string. They always seem to be stored uppercase. Haven't probed the limits yet, but usually it's just the original driver's filename. (Such as SBFM.ADV.) This is the driver name referenced in the INI file.

Pad with NUL bytes until the header is 21 bytes in length.

End of header. The driver binary is stored verbatim after the header, nothing goes after it. (Other than the next driver.)

Updated February 2, 2022: Description regarding NUL bytes was wrong. Sorry for leaving it like this for so long!