📅 2025-06-16
· ✍️ Bas v.d. Wiel
·
🏷
announcement
The good news is that the codebase as built from the main branch is feature complete. It works,
but I haven’t announced it as 1.00 yet because the project hosting infrastructure is not yet up
to standards. Apparently not all URL’s in the example content are reachable for everyone and I have
work to do on that. Work, the professional kind, is unfortunately getting in the way of this so
a final 1.00 announcement will have to wait. You want to test? Read on!
Read more...
📅 2025-06-07
· ✍️ Bas v.d. Wiel
·
🏷
announcement
So I started my new job at a large ISP this week. While irrelevant for the project itself,
this does take quite a massive bite out of the time I have available to spend on DOSContainer.
That’s why I finished up the repository service and contribution guidelines
and am inviting others to chip in. While it’s annoying that work gets in the way of my hobbies, it’s
not money that’s keeping me from DOSContainer so I’m not looking for donations. What I do need is code.
So if you’re halfway decent at Rust, please have a look and help where you can!
Read more...
📅 2025-06-01
· ✍️ Bas v.d. Wiel
·
🏷
announcement
Short service announcement for today: the code repository for DOSContainer moved
yet again. Since I’m not seeing any sort of uptake regarding collaboration and I’m
still the only developer, I’m choosing to self-host my code. Can I do better than
GitHub? Well, yes. I don’t want my code to be beholden to some cloud-behemoth. The
code itself is as public as ever
at its new address and you can even keep using your GitHub credentials to contribute.
Read more...
📅 2025-05-27
· ✍️ Bas v.d. Wiel
·
🏷
announcement
DOSContainer generates bootable PC-DOS 1.00 disk images! So technically that means
we have lift-off, and I’d be lying if I said I wasn’t happy about this milestone. However,
and there’s always a “but”, we’re not there yet. In fact, I’ve been at this very spot
before and even further along. I had bootable PC-DOS running a BASIC game from a generated
image but I still started over. Why? Architecture! The code would absolutely not scale
at all, and I’m running into similar questions again this time around. Allow me to elaborate,
because things are not as dire as they sound.
Read more...
📅 2025-05-24
· ✍️ Bas v.d. Wiel
·
🏷
design
One major issue for DOSContainer is to figure out the optimum between what you have
on your desk and what the software you’re building actually supports. In a previous
version of the codebase I had started a convoluted decision tree of if/then/else/unless
logic. That stopped scaling after two versions of DOS, while I intend to support dozens
so something had to give. The alternative? Modeling compatibility as data!
Currently DOSContainer is gearing up to release 1.00 which will only support PC-DOS 1.00
on the surface. Inside the codebase, however, I’m already working with versions 1.00, 1.10
and 2.00 to prove the design. These three versions already have a few quirks between them
and the hardware they run on that will exclude certain combinations. Modeling how to handle
this is crucial to the future of DOSContainer.
Read more...
📅 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!
Read more...
📅 2025-05-20
· ✍️ Bas v.d. Wiel
·
🏷
design
Because the filesystem is such a crucial part of how DOSContainer aims to achieve
that legendary `museum quality’ output, let’s look into it some more. The current
progress is up to the point where I have two things: an abstract model of the data
structures that constitute FAT and a proof-of-concept serializer struct that takes
this model’s AllocationTable and spits out an IBM PC-DOS 1.00 compatible interpretation
of it.
The abstract model of a File Allocation Table is there to support the basic data
structure that all versions of the FAT filesystem have in common, without any of the
specific quirks introduced by vendors over the decades. An AllocationTable
in
the abstract now looks like this:
Read more...
📅 2025-05-18
· ✍️ Bas v.d. Wiel
·
🏷
design
One of the hardest parts of this project is learning Rust. It’s also one of my
main personal goals with this one. Rust is hardly forgiving, but using it made
me a much better developer over the past few months. Unfortunately that also meant
not having much progress to show for all my effort. Right now, I ran into my own
code for the filesystem
crate. That’s the part of DOSContainer that handles
everything to do with FAT. I’m essentially reimplementing the FAT filesystem in a
very unorthodox way. Here’s why that is so complicated.
Read more...
📅 2025-05-15
· ✍️ Bas v.d. Wiel
·
🏷
design
After finishing the first implementation of HwSpec
, I started working on handling
the Manifest
configuration file. These two are what should make DOSContainer work
like magic for the end user, so they’d better be good. As it turns out, things aren’t at
that point just yet. Some musings on the design and how DOSContainer will reconcile the
facts of what you have (HwSpec
) with what you want (Manifest
) in an optimal way.
Read more...
📅 2025-05-12
· ✍️ Bas v.d. Wiel
·
🏷
design
At the time of this writing, the HwSpec
format does not concern itself with storage media. The
reason for this is simple, but it may also be wrong: storage is currently a concern for Manifest
. The
Manifest
determines everything that has to do with the application or game and the disk image
it will create. However, this determination is a leftover from when DOSContainer didn’t yet have a
concept of HwSpec
. Some thoughts..
Read more...
📅 2025-05-12
· ✍️ Bas v.d. Wiel
·
🏷
design
, documentation
Hardware specifications are one key part of a complete DOSContainer configuration. Manifests
are the other, but we’ll get to that. Hardware specifications, or HwSpec for short declares
to DOSContainer what your retro PC hardware looks like. In it, you specify exactly what devices
you have in your real or emulated system so that DOSContainer can take this into account when
configuring applications and games to run on your system. It means DOSContainer will configure
your game to use CGA graphics if that’s all you have, even if the game itself can do better. This
article explains the first draft of the HwSpec
TOML file format and shows a couple of
complete examples that define a real IBM PC and a 1983 IBM XT.
Read more...
📅 2025-05-11
· ✍️ Bas v.d. Wiel
·
🏷
design
Loading and parsing configuration files is a key component of DOSContainer. The chosen
file format for configuration is TOML, for simplicity. Rust’s community produced a crate
specifically to read and write this format, so yay! But unfortunately for me, this is far
from ideal. One of my project’s base principles is that I only want to write code if I
absolutely have to. If I can borrow functionality from a community crate, that’s what I’ll do.
Read more...
📅 2025-05-10
· ✍️ Bas v.d. Wiel
·
🏷
design
The main reason why I picked Rust to write DOSContainer is because I wanted to learn
it. The second reason is the fact that Rust has a large ecosystem of code that is
easy to pick up and use. Some years ago I started coding in C++ and while libraries
are indeed nothing new, managing them was like getting your teeth pulled by a toddler
with a claw hammer. Rust has cargo
, and I’m using a lot of it in DOSContainer!
Read more...
📅 2025-05-08
· ✍️ Bas v.d. Wiel
·
🏷
design
One of the most complicated aspects of DOS gaming used to be the support for a
whole forest of different audio hardware. Initially the PC came with nothing
beyond a simple speaker that was intended to produce simple square wave bleeps
as a means of auditory feedback, like system alerts. As computers found their
way into markets IBM had not envisioned, like gaming and music, lots of add-ons
appeared that would readily slot into the supplied ISA-slots of the PC. DOSContainer
intends to support the most relevant such hardware, primarily for gaming. If you
think something important is missing, drop me a note!
Read more...
📅 2025-05-07
· ✍️ Bas v.d. Wiel
·
🏷
announcement
So what is DOSContainer? It’s a software project aimed at those who build and
maintain collections of games and applications for the DOS platform. DOS, an
abbreviation for Disk Operating System, is a class of operating systems that
were popular in the 1980’s and 1990’s for use on IBM-PC and compatible hardware
that would go on to grow into the Windows platform we have today. DOS was quite
a basic operating system that was command-line driven. The fact that there were
dozens of versions from different vendors paired with wildly different hardware
platforms didn’t make things easier on the systems’ owners. DOSContainer aims to
take the complexity out of the maintenance of large libraries of DOS software.
Read more...
📅 2025-05-06
· ✍️ Bas v.d. Wiel
DOSContainer is still progressing, even though I skimped on the updates. Let’s rectify
that. There’s a lot that happened over the past months, but unfortunately there still isn’t
a stable release to be made. The main effort went into reimagining the configuration file
format and structure behind it, and I’m hoping this’ll be the last such major overhaul
because it’s no fun writing code that only does boring stuff like config file parsing. I
really want to get into the nitty gritty bits of ancient DOS and making sure that gets
reproduced as faithfully as possible. Let’s go over the changes though.
Read more...