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

Proxy Information
Original URL
gemini://zaibatsu.circumlunar.space/~solderpunk/phlog/diving-into-dos.txt
Status Code
Success (20)
Meta
text/plain; charset=utf-8
Capsule Response Time
390.874993 milliseconds
Gemini-to-HTML Time
0.97071 milliseconds

This content has been proxied by September (ba2dc).