DOSContainer logo DOSContainer

Another update on the filesystem crate

馃搮 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...

Redesigning the filesystem crate

馃搮 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...

Designing the interaction between HwSpec and Manifest

馃搮 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...

How should we define storage?

馃搮 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...

How to set up your hardware specifications

馃搮 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...

Loading configuration files in Rust

馃搮 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...

Why so many dependencies?

馃搮 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...

Audio device configuration

馃搮 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...

Welcome to DOSContainer

馃搮 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...

DOSContainer update Q2 2025

馃搮 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...