Draft of the Manifest file format
📅 2025-05-22 · ✍️ Bas v.d. Wiel · 🏷 design
Now that all components of what makes a disk image are coming together nicely, it’s time
to worry about the first version of the Manifest
and the file format that goes with
it. The idea is for DOSContainer to primarily be easy to use for end users, meaning people
who cultivate collections of DOS software. The Manifest
is intended to be written by
those knowledgeable on particular DOS applications and are more or less a one-off exercise,
so it’s more verbose than HwSpec
although I’m still trying to keep it as simple as I
possibly can. Here goes!
For the initial version of DOSContainer I intend to only support IBM PC-DOS 1.00 and nothing
else. Why? Because the PC started at that point in history, and it’s the simplest incarnation of
the platform. It’s a foundation from which to build. The manifest format starts out at this point
and may get revised later on. That’s why the format has a mandatory version field that’s set to
1 for now. As soon as DOSContainer 1.00 comes out, Manifest
version 1 will also be fixed to
what it is at that point in time. The format will change with subsequent releases of DOSContainer
but the version of the format will only increment when there are changes. I’ll make an effort to
allow easy converting of old files to new versions of the format. Now without further ado, the first
draft of a Manifest
: DONKEY.BAS.
version = 1
[metadata]
application = "DONKEY.BAS"
developer = "Microsoft"
diskspace = "20KiB"
genres = ["driving"]
year = "1981"
[hardware]
graphics = ["hercules","cga"]
sound = ["bleeper"]
[os.ibm]
versions = ["1.00"]
[layers.hgcibm_11]
graphics = ["hercules"]
min_dos = "1.00"
max_dos = "6.22"
url = "https://dosk8s-dist.area536.com/hgcibm_11.zip"
checksum = "78173d19c1f7d96a6cf4ec711cd0d5d3301561b9cdef7875f7ad48368139f12c"
[layers.basica100]
checksum = "96cae63dc9f3eace501413598940d8a7f5ac6c84d5b7b59521c92fc936f88d93"
min_dos = "1.00"
max_dos = "1.00"
os_vendor = "ibm"
url = "https://dosk8s-dist.area536.com/basica_100.zip"
[layers.donkey100]
url = "https://dosk8s-dist.area536.com/donkey_100.zip"
checksum = "4f9bb6eecd3c37d3034cf7f8fdb4f6ccfef2fcac3b3cf053b449860493e92b15"
min_dos = "1.00"
max_dos = "1.00"
At the root level of the file you’ll only find the version
field, indicating the format version
of the Manifest
. This tells DOSContainer which version of the parser to use for this file.
Metadata
The metadata
section is not final yet at all. I’m very much open to suggestions. This section is here
to allow for easy filtering. The only field here that’s relevant to building of disk images is the diskspace
field, which tells DOSContainer how much space the disk image must have available. In this case it’s a tiny
game in BASIC. A few KiloBytes for the game itself, and a few for the BASICA.COM
BASIC interpreter add up
to almost 20KiB. The main point here: prevent DOSContainer from building images for applications that won’t fit
on the disk the user has, as specified in their HwSpec
. In case of PC-DOS 1.00 we’re always talking about
the same 160KiB floppy disk. The DOS system files and the game will fit in there generously.
Hardware
This section is open for later extension. It indicates which classes of hardware are natively supported by the
application. In this case we support hercules
and cga
. If you have graphics hardware in your HwSpec
that meets this minimum requirement, the image will build. Got EGA? That’s compatible with CGA, so it will work. If
you only have IBM MDA, you’re unable to show graphics and this manifest will not build.
OS version specification
We specify only [os.ibm]
because there were no clones in the world at this point in time yet. All we had was
the IBM 5150 and PC-DOS 1.00. Nice and simple. Sections like [os.microsoft]
will be added later.
Layers
This is where DOSContainer gets interesting. You may know that DONKEY.BAS only supports CGA graphics. That’s what
we have layer.hgcibm_11
in there for. It’s got graphics = ["hercules"]
so it only gets instantiated when
the HwSpec
has a Hercules Monochrome card for graphics. It then injects the HGCIBM CGA emulator utility into
the disk image, allowing your Hercules card to pretend like it’s CGA and still run the game.
In order to run a BASIC game, you’ll also need a BASIC runtime environment on your system. That’s what the layers.basica100
layer is for. It pulls in BASICA.COM
from PC-DOS, giving you the BASIC version that goes with the OS. Later
versions of the OS had later versions of the BASIC interpreter as well as the game. The Manifest developer should
add additional layers to the Manifest, specifying which DOS-versions to support with it.
ZIP-file format
The ZIP-files currently only contain the binaries that need to be copied into the final disk image. This will likely
change before 1.00 release. I’m still looking at ways to glue everything together into a wholesome AUTOEXEC.BAT
file so that the game can actually autoboot from the generated disk image. If that doesn’t completely work at version
1.00, I’ll leave it for later though.