Diving into DOS --------------- I have been sinking the vast majority of my spare time recently into writing assembly code for the ROM chip of my homebrew Z80 computer. In parallel with this I have been doing a lot of reading about old operating systems, especially small and simple ones, but really anything is interesting to me. A side effect of all this, which I mentioned on Mastodon recently, is that I've become fairly interested in DOS for the first time in my life. I made what seemed like plenty of use of DOS when I was younger, but I never really had anything like a deep technical understanding of it. By the time I taught myself to program circa 2000, DOS was not really a part of everyday computing life for most people. My earliest DOS use was for playing games, back in an age when AU$10 shareware games on single 3.5 inch floppies was my main vector for new entertainment. To this end, I was happy enough moving around the filesystem, and running SETUP.EXE to install games. I memorised the magic IRQ numbers for our SB16 sound card and other peripherals so that I could get through the trickier game insalls, with no understanding whatsoever of what an "interrupt" was. Later, in the Win95/98 era I relied on DOS as a rescue environment. But I never really knew what I was doing. By the time I got into Linux and BSD, and once again spent time at the command line, DOS was a vaugely distant memory. As a teenager getting into Linux in the early naughties it was basically impossible not to pick up the habit of unthinkingly and uncritically dismissing anything and everything vaguely related to Microsoft as irredeemable crap, so I probably thought of DOS as quite limited and pathetic compared to my newly discovered *nix. Which, I suppose, it *is*, but its unfair to be too deprecating of it. Reading Wikipedia articles about technical aspects of DOS, especially but not limited to the article on "Terminate and Stay Resident" programss [1], have given me a kind of appreciation for it. The earliest computers I used, like the Commodore 64 and BBS Micro, slapped you across the face with their true nature as universal computing machines. They boot up into interpreted programming language environments, and the only interface for a lot of features are PEEKing and POKEing directly into memory. This is great for learning, for hacking, etc. but has the consequence that the machines are largely unusable for "normal people". Even for the technically inclined, they are not terribly usable, with the general paradigm being that closing one program and opening another involves rebooting the machine. Modern mainstream operating systems invert this pattern, being comparatively easy to learn and use, but achieving this by abstracting away from any and all underlying technical concepts (in the Win95/98 days, I used to lament how Microsoft had tried to make it as difficult as possible to get the computer to expose in any way the concept of a file extension - these days, tablets and smartphones come pretty close to hiding the very notion of *files*!). DOS seems to live somewhere between these two extremes. Even if the user interface is a CLI, it is comparatively user friendly compared to a C64. All of your software resides on *one* disk, which is permanently available, and even if you cannot run more than one program at once, you can exit one program and enter another without rebooting your machine. It *was* possible for not terribly technical people to use it day to day to do real work. However, this palatable interface did not actually do an awful lot to insulated you from the true machine underneath it, if you actually wanted to get your hands dirty. Using TSRs, it was possible to "effectively hijack the operating system in varying documented or undocumented ways" to overcome limitations and, e.g., achieve very limited kinds of multitasking. DOS seems to make it easy to do a certain limited range of "normal" activities while simultaneously not making it impossible to go off on your own crazy path and push the machine to its limits if you have the underlying technical knowledge. Xmanmonk taught me about the DEBUG command[2], a basic (dis)assembler and hex dump program for DOS, which I never would have imagined was there! Of course, all of this appreciation gleaned from reading Wikipedia articles is theoretically and possibly involves a certain degree of rose-tinted glasses. Happily, it's quite possible in this day and age to get your hands dirty with DOS even if you are a hardcore FOSS zealot, because the FreeDOS project provides a GPL licensed implementation of the MS-DOS API with excellent compatibility with the original. So, I've installed FreeDOS on a VirtualBox machine and hope to play around with it a bit over the holiday period, to see if it really is a nice environment for the informd user to play around with. I'll have to see if I can get a gopher client for it, if nothing else. [1] https://en.wikipedia.org/wiki/Terminate_and_stay_resident_program [2] https://en.wikipedia.org/wiki/Debug_%28command%29