First post, by bvdw78
Hello all,
Inspired by running the MiSTer AO486 and PCXT cores, I started working on a toolbox for collection-building. Creating disk images from scratch all the time was getting old really quickly. The problem: the DOS ecosystem comes with a bazillion permutations for running any half-decent game or application. Hence the idea of DOSContainer was born: I stole the idea from Docker in that I'm building up disk images in layers. Start with an inception layer that contains just the sacred trinity of system files, then layer the game/app itself and its requirements on top of there as needed in the form of any number of layers. I'm writing the toolbox in Rust because that's a language I wanted to learn anyway and it lends itself to systems programming.
Current state: I have a very preliminary CLI working with an even more preliminary YAML format that specifies an application's "manifest". The plan is to work up from IBM PC-DOS 1.00 all the way to MS-DOS 6.22. Currently I have PC-DOS 1.00 and 1.10 working and I'm currently implementing PC-DOS 2.00.
DOSContainer is now spitting out floppy images in 160/320 and 180/360 formats. Once I'm done implementing subdirectory support, volume labels and all of the supported directory entry attributes I'll start work on partitioned media (hard drives). The 'golden path' for this will be IBM versions until the point in time where MS started releasing their OS to the general public. When I get to 6.22, I'll look into whether finishing the PC-DOS pedigree makes sense or things like DR-DOS would be more valuable.. but I'm getting way ahead of myself.
The main challenge I'm setting myself is to be as close to the original as I can get. I'm calling this "museum quality". You should be able to write "my" disk images to a physical floppy and not be able to tell it apart from a contemporary original. This is so that collection builders can use my tool to build high quality disk images with the strictest guarantees when it comes to compatibility. This is especially important for the FAT implementation and surrounding structures, so I'm actually rewriting all of that code entirely from scratch based on what IBM/MS documented and by reverse-engineering what these OS'es actually do on hardware.
The state of affairs currently is a very early pre-alpha stage, so why announce it? Simply put: I could use some help. While I was technically alive when these ancient DOS versions were current, I was born in 1978 so I missed most of the first decade of DOS. Anyone who can give me some deeper insights into the what/how/why of ancient DOS beyond the official IBM/MS manuals, please reach out. Also, if you're a Rust developer I'd very much appreciate a code review or two. I'm not a professional developer and I only have ChatGPT as a "mentor" to guide my coding style.
The code for my project lives here: https://code.area536.com/DOSContainer
My CI server drops builds here: ftp://ftp.area536.com/doscontainer/builds/ but beware, my CI dumps *every* build in there so it's a bit of a mess.