The PC Revolution
The IBM Personal Computer
In August 1981, IBM released its Personal Computer (better known as the PC) and DOS 1.0. It was widely expected that Digital Research would release CP/M-86 for the new system (which did eventually happen), but in the meantime, there was the IBM Personal Computer DOS, not too different from CP/M after all. IBM also announced UCSD p-System support for the PC, but only DOS was available at the launch. The announcement was eagerly anticipated and thoroughly covered by the press.
It should be remembered that with the first IBM PC, DOS was optional. The PC came with BASIC, which could act as a very primitive operating system, built into its ROM. The ROM BASIC could use cassette tape as a storage medium, although this method never became popular and later PC revisions removed cassette support entirely.
The base PC model came with only 16KB RAM and no disk drives; the memory was expandable to 256KB (quite a lot in 1981). The model equipped with a disk drive came with 64KB RAM, although DOS itself needed less.
It should be noted that DOS would theoretically be able to run on the base PC model with 16KB RAM. However, this was not an option in practice: The PC’s BIOS loaded the boot sector (from a floppy) at address 7C00h, which is 31KB, meaning that it was not possible to boot DOS on a PC with less than 32KB memory. DOS applications naturally needed additional memory, and might have significantly higher system RAM requirements.
A Note on Version Numbers
IBM was inconsistent in referring to DOS version numbers. For instance, upon booting DOS, the user might see a message identifying Personal Computer DOS as “Version 3.00”. However, the IBM announcement letter for the same product referred to “DOS 3.0”. This inconsistency is reflected in the following text; references to, for example, DOS 2.10 and DOS 2.1 are equivalent.
DOS 1.0
The first version of DOS was almost more interesting for what it couldn’t do than what little it could. DOS 1.0 could read and write 160KB floppy disks, start .COM and .EXE applications, and process batch (.BAT) files. It could keep track of date and time (by no means a ubiquitous feature at the time), although both had to be manually entered every time DOS was started. A batch file called AUTOEXEC.BAT could be automatically executed at startup.
There was no support for hard disks, no directories (all files had to be stored in the root directory of a disk), no pipes or redirection, no loadable device drivers. The DOS programming interface was likewise very limited.
The command interpreter (COMMAND.COM) supported only seven internal commands: DIR, COPY, ERASE, PAUSE, REM, RENAME, and TYPE. Furthermore, DATE and TIME were implemented as external commands.
A basic interactive debugging tool, DEBUG.COM, was shipped with DOS. It was not easy to use but was quite powerful in the hands of a skilled user. A linker (LINK.EXE) was also shipped, but development tools capable of producing linkable object modules (such as MASM) had to be purchased separately.
For editing files, a very rudimentary line-oriented editor called EDLIN was provided. EDLIN was a very limited editor, hard to use and not very capable. Yet it remained as the one and only editor shipped with DOS for a decade, probably to a great surprise of its original author.
BASIC
DOS 1.0 was perhaps most useful as a vehicle for Disk BASIC and Advanced BASIC. The ROM BASIC built into the PC could not use disks; the DOS commands BASIC.COM and BASICA.COM “upgraded” the ROM BASIC and added disk support, among other things.
BASIC.COM and BASICA.COM together with the ROM BASIC provided a complete environment which was started from DOS, but was more or less entirely separate from DOS. In a way, BASIC was a primitive integrated development environment (IDE). The SYSTEM command could be used to return back to DOS.
Several demo programs written in BASIC were provided on the DOS diskette. These demos were designed to show off some of the capabilities of the IBM PC. All of the demos required at least 32KB of memory, some 48KB, and some utilized the Color Graphics Adapter (CGA).
Since the ROM BASIC was an interpreter, the demo programs were effectively shipped in source form; the files were tokenized and not stored as plain text files to save space, but they could be listed and edited from within the BASIC environment.
The demos showed how to play “music” on the IBM PC, how to send data to the (optional) printer, how to perform basic calculations, and how to display graphics. In the early years of the IBM PC, BASIC proved popular. It was relatively easy to use, reasonably capable, and came built into the system. For simple automation, it was an adequate tool.
Of course BASIC was not very suitable for developing word processors or spreadsheets. Once better development tools became available, BASIC was used less and less and eventually IBM removed it from the PC successors’ ROMs.
Technical Details
The core DOS consisted of about 4,000 lines of assembly code; no high level languages were used. There were three main components: IBMBIO.COM, IBMDOS.COM, and COMMAND.COM.
IBMBIO.COM or “BIOS” was a low-level driver component. When adapting DOS to a new computer platform, the BIOS computer would typically need the most changes (and ideally the required changes to the other components would be minimal). IBMBIO.COM contained the disk, console, and printer drivers, and itself was built on top of the ROM BIOS.
The “DOS” proper, IBMDOS.COM, was the operating system kernel. It implemented the DOS API (Application Programming Interface) callable via INT 21h and a few others. It also included the file and memory management code.
IBMBIO.COM and IBMDOS.COM together formed the core of DOS, but when most DOS users think of DOS, they think of COMMAND.COM, the command interpreter. COMMAND.COM is optional and may be replaced by a workalike (such as JP Software’s 4DOS) or a special purpose application may be launched directly (e.g. IBM’s diagnostic disks).
However, on most systems, COMMAND.COM was loaded and provided the user interface. It’s typically known for the C:> prompt, except in DOS 1.0 there was no such thing. Drive C did not exist (unless perhaps the user had more than two floppy drives installed), and the PROMPT command was not available, so the prompt was A> in most cases.
COMMAND.COM used an innovative division into three parts (initialization, resident, and transient) to save memory. The initialization part was used to process the contents of AUTOEXEC.BAT and was discarded once its job was done. The transient part was the largest and contained the command processor, handled user input and implemented the built-in commands. Because the built-in commands didn’t need to be loaded from disk, they executed quickly. However, they consumed precious memory, and if an application required more, COMMAND.COM discarded the transient part, only leaving the tiny resident part in memory. Once the application completed, the resident part of COMMAND.COM would re-load the transient portion from disk.
DOS versus CP/M
DOS was designed to be to a large extent compatible with CP/M, but wasn’t a clone of it. Compatibility with CP/M brought such features as the dreaded 8.3 file name limitation, but DOS was in several ways more capable than CP/M.
The different (and better) file allocation strategy has already been mentioned earlier.
DOS provided a very rudimentary form of device independence, with the console (CON), printer (PRN) and serial communication (AUX) devices being treated as special files. The user could thus for instance print a file by copying it to the PRN device. This feature was clearly inspired by UNIX (or XENIX, as was likely the case with Microsoft).
The file interface could handle variable size record I/O, while CP/M was limited to fixed 128-byte records.
In addition to CP/M style .COM files, DOS also supported relocatable .EXE files, a format developed by Mark Zbikowski (hence the MZ signature in the .EXE file header). While .COM files were limited to a maximum of 64KB combined for code, stack, and data, .EXE files did not have the limitation. On a PC, an .EXE format executable could thus occupy the entire available memory.
DOS 1.1
Version 1.1 was a relatively minor update to DOS, released together with a refreshed Personal Computer in May 1982. The newer PC sported double-sided floppy drives; DOS simply doubled the disk capacity by utilizing both sides, going from 160KB to 320KB. DOS 1.1 itself was of course still shipped on 160KB disks so that it could be used on the earlier PC model.
Unlike the previous version, DOS 1.1 did not require the user to enter a valid date. The Enter key could be used to accept the default date, which resulted with many files being dated January 1st, 1980—before the PC even existed.
Internally at Microsoft, DOS 1.1 was actually version 1.25; the latter was consistent with Tim Paterson’s original 86-DOS versioning, but didn’t perhaps make much sense for IBM. DOS 1.1 (or 1.25) was important in that it was the first version which Microsoft licensed to several OEMs, among others COMPAQ and Zenith.
MS-DOS 1.25 wasn’t quite the same as PC DOS 1.1; Microsoft did not supply all of PC DOS and several utilities were written by IBM. Those included DISKCOPY, DISKCOMP, COMP (all written by David Litton) and the MODE command (written by Mel Hallerman, Ron Heiney, and, in version 1.1, also Ed Kiser). The first three were relatively generic, but MODE was somewhat tied to the specific hardware model.
Changes from previous version
There were no major differences between DOS 1.1 and 1.0. DATE and TIME were now internal commands built into COMMAND.COM. The familiar DEL command was added as an alias for the ERASE command, and REN for RENAME.
The operating system now kept track of times in directory entries, not just dates. The LINK utility was updated to version 1.1.
A new EXE2BIN.EXE utility was added to convert EXE format files into plain binary or .COM format files. BASIC and BASICA (Disk and Advanced BASIC) were also updated to version 1.1, with a few rather minor differences.
On the whole, DOS 1.1 was technically more or less the same as its predecessor. All the big changes had to wait for version 2.0, and there were quite a few.
References
The MS-DOS Encyclopedia, edited by Ray Duncan, Microsoft Press, 1987. ISBN 1-55615-049-0
I need to look up because I am curious to see the codes.
Gonzalo Velasquez
So was there ever an MS-DOS 1.0? If I’m reading this correctly, it sounds like DOS 1.0 was IBM PC-DOS, and not MS-DOS. Was Microsoft only selling to IBM between 1.0 and 1.25? Were they not selling to OEM’s yet?
Was there ever an MS-DOS 1.25 retail package? Or was Microsoft strictly selling to OEM’s during DOS 1.
I know of Compaq DOS 1.12, which as I understand it is just MS-DOS 1.25 re-branded. And I know of Z-DOS 1.19, or Zenith DOS, which is also just MS-DOS re-branded. (But as I understand it, Zenith also had some other utilities they added in for specific hardware.)
There was no retail MS-DOS until 5.0. Starting with MS-DOS 3.2, there was a “Packaged Product” MS-DOS available which was a generic MS-DOS box with floppies and documentation, but it was not sold to end users, only to “system builders”. Prior to 3.2, MS-DOS was strictly for OEMs. It’s important to consider that before 3.2, Microsoft did not offer a complete DOS package with all the standard utilities and OEMs had to write their own.
There was never any MS-DOS 1.0 product. There was probably something called MS-DOS 1.0 internally at Microsoft, but not shipped to anyone. The Microsoft versioning wasn’t in sync with IBM’s at the time, either.
I’m not sure what the first version of MS-DOS shipped to anyone other than IBM was. However, Tim Paterson says PC DOS 1.1 corresponds to MS-DOS 1.24, and MS-DOS 1.25 was the first version that other OEMs received, and I have no reason to doubt that.
At any rate, the Compaq or Zenith (or IBM, for that matter) versions of DOS were not exactly re-branded MS-DOS, it was adapted MS-DOS with a significant portion of code written by the OEMs. If you look at PC DOS 1.0, you’ll see that COMP, DISKCOMP, DISKCOPY, and MODE were all written by IBM, and FDISK/SYS had to be adapted. The OEM also had to supply IO.SYS/IBMBIO.COM.
Thanks again for all the great info. I found a “Timeline of DOS operating systems” (yes – it actually says DOS operating systems) on wikipedia which answers these questions as well.
My statement of “re-branding” was an oversimplification. I do remember reading that MS-DOS 1.25 didn’t include disk utility programs like FDISK, so it was up to the OEM to write their own to match their hardware. I also read that Microsoft provided OAKs (OEM Adaption Kits) with source code for, I believe, IO.SYS and/or IBMBIO.COM so that OEMs could, I guess, tailor the boot up messages. (And probably a bit more.)
So it sounds like MS-DOS wasn’t in use in any fashion (excluding internal testing) until version 1.25. And as far as the 1.x versions go, that was it. There wasn’t a 1.26, 1.3 or 1.5 or anything. Is there any such thing as a non-OEM version of MS-DOS 1.25? A generic MS-DOS 1.25?
Yes, I’ve written about MS-DOS OAKs before. It was more than just messages, the OEM had to customize the IO.SYS and a few other components. In the DOS 1.x/2.x days, it was a relatively involved process. The reason for this was that there existed a whole class of “MS-DOS compatibles”, 8088/8086-based systems that ran MS-DOS but were not IBM compatible, either on the hardware or BIOS level. The NEC PC-98 is the best known example.
If you look at the DOS 1.x/2.x source code recently released by the CHM, you can get some idea what was or wasn’t provided by Microsoft (although unfortunately that code doesn’t contain a complete OAK). The file v20source/README.txt in the archive, will give you a good idea what Microsoft shipped to OEMs in the DOS 2.x days.
The term “generic MS-DOS” seems to be a bit loaded. The MS-DOS Encyclopedia uses it to refer to what Microsoft shipped to OEMs other than IBM. Again, it wasn’t a complete product until DOS 3.2. The MS-DOS Encyclopedia also agrees that MS-DOS 1.25 was the OEM equivalent of PC DOS 1.1.
There is no mention of MS-DOS 1.x beyond 1.25 ever being shipped to anyone. The above mentioned MS-DOS 2.x source code includes version history in MSHEAD.ASM, which does mention version 1.26 and eventually goes from 1.54 to 2.00. However, at least starting with 1.27 those were clearly development versions of DOS 2.0, not really DOS 1.x anymore.
>> “The MS-DOS Encyclopedia also agrees that MS-DOS 1.25 was the OEM equivalent of PC DOS 1.1.”
I see. So, indirectly, PC DOS 1.1 is the “generic” version of MS-DOS 1.25. Sort of.
Sort of, if by “generic” you mean “suitable for any IBM PC compatible. But in those days, “generic MS-DOS” had the opposite meaning, it meant “not tied to any specific OEM hardware”.
Poor choice of words on my part. What I meant was that PC-DOS 1.1 would have been the “upstream” version of MS-DOS 1.25. Like if we think of how Ubuntu Linux got started. On day 1, before any modifications were made, Ubuntu was exactly equal to whatever version they got from Debian.
So in my mind, I’m seeing MS-DOS 1.25 as being the original “fork” of PC-DOS 1.1. And then it goes off to the OEM’s to be customized as needed for Zenith, Corona, Seattle Computer, etc… But perhaps even that isn’t quite the right way of looking at it.
If anything, MS-DOS was the “upstream” and PC DOS was the major distribution. Except it wasn’t quite like that, because a) end users could not get MS-DOS from Microsoft directly at all, and b) there was a contractual relationship between Microsoft and IBM, meaning that Microsoft’s work on DOS was to a large extent directed by IBM.
MS-DOS 1.0
the earliest i have tried is 1.25!!!
(I was born in 2003 on the first of Jan so I am 12)
Very cool! And a nice reminder of just how old Windows XP is by now.
Unfortunately SB-86 from Lifeboat Associates is not mentioned here. To my knowledge it was the only MS-DOS based distribution that was not hardware vendor specific. To cite Microsoft’s Bill Gates from an old interview: “And the operating environment that we provided is known by IBM as Personal Computer DOS. We call it MS-DOS and Lifeboat Associates calls it SB-86.”
Hi … I’m from Colombia and Información need the MS-DOS foro the Zenith data system eazy pc. This computer was made in 1985 but it doesn’t has a hard disk. Can you help me? … Muy email is … [available on request]
I’m afraid I can’t help you directly. The Zenith eazy pc is not a system I’m familiar with at all.
You wrote, “Once the application completed, the transient part of COMMAND.COM would re-load the resident portion from disk.” Surely that’s the wrong way round?
Yes, word swap, corrected. Thanks for noticing!
There was never an MS-DOS 1.0, closest to that would have been depending on whether you count the first licensed copy of 86-DOS (0.3 November 1980) as 1.0, or whether you count the internally versioned 1.0 (April 1981) as 1.0. PC-DOS 1.0 was somewhere between 86-DOS 1.10 and 1.14.
That depends on what your definition of ‘is’ is. Was there an externally available MS-DOS 1.0 product? No, only IBM shipped DOS 1.0. Internally there clearly was MS-DOS 1.0 at some point, but there is more than one candidate. Ultimately a pointless question because if Microsoft didn’t put a “MS-DOS 1.0” label on anything back then, why should we do it now.
The first IBM PC motherboard only had 64k capacity. I remember when they were doing the piggybacked memory so you could have 128k.
MS-DOS 1.10 exists as a stand-alone version that is not v. 1.25. I have a copy with my Compaq Portable. I’ve read before that the earliest version from an OEM was v. 1.2 (1,25), however my copy shows that is incorrect.
Not necessarily. You have to keep in mind that the MS-DOS version numbers did not line up with PC DOS version numbers. Compaq would have wanted to match the IBM version number, even if the actual MS-DOS version number was higher.
Funny this article mentions the thief Tim Patterson who secretly worked for MS cloning CP/M-86 as if he invented the kernel for MS to “Buy” which in turn was licensed to IBM and marketed as PC-DOS. Gary Kildall had every right to sue the pants off Tim and MS but in swooped IBM and paid him hush money with the agreement to distribute CP/M with their PC’s if that’s what the customer wants… for $240 more. IBM basically priced him out of the market. Unfortunately for Gary, DR-DOS came on the scene too late as IBM/MS already saturated the market with PC-DOS/MS-DOS. Still he did pretty well with DR-DOS until Digital Reseach sold the whole thing to Novell.
What a load of nonsense. Tim Paterson didn’t steal anything, he wrote a clone of an 8-bit OS for a 16-bit CPU. He kept the same OS interface but the internals were quite different, and anyone can look at 86-DOS to see it. What next, Linus Torvalds stole Unix from AT&T?
DRI’s real problem was missing the boat with 16-bit CP/M when IBM needed it (and SCP before them). That was to some extent bad luck, but not anyone else’s fault. Similarly if DR-DOS had shown up a few years earlier, who knows what we’d be running today.
A load of nonsense is right. CP/M was an 8-bit OS written for the 8080 while 86-DOS was a 16-bit OS written for the 8086 and it took advantage of the segment architecture to provide access to the entire 1MB address space. There is simply no way that CP/M code could have been used for 86-DOS since a translator wouldn’t magically add the segmentation support. Also 86-DOS used the FAT file system which CP/M certainly didn’t support. Finally many people (myself included) have analyzed early versions of DOS to see if there was any internal similarities between it and CP/M and there are not other than the fact that DOS used an 8086 equivalent of the CP/M API. The actual implementation is completely different in structure and of course the fact that the CPUs are different. Only people who are rabidly anti-Microsoft or Kildall fanboys (or both) continue to perpetuate this ludicrous myth.
Exactly. There are major differences between the OSes and the silly stories about Tim Paterson/Microsoft stealing code from DRI are just that, silly stories.
As for cloning someone else’s OS… Digital Research was pretty successful at proving that it’s perfectly legal, and if Microsoft was really worried about something in the late 1980s and early 1990s, it was DR-DOS. I think anyone who knows something about the history of computing has respect for Gary Kildall, but there’s no need to make stuff up.
I’ve recently come across a copy of PC DOS that is unusual. My copies of PC DOS 1.0 and 1.1 have the exact same binder and spine numbers with 1.1 having a decal with the version number on it, however this new one merely says “DOS” on the spine with the IBM logo at the bottom instead of the top. It’s sealed and for now I’m not going to open it without more information. I’ve been told it may be one of the few first releases given to “Friends & Family” of IBM with the initial 5150s prior to the public release of that machine. Any information would be very much appreciated.
Del *.*
Del *.* doesn’t work in DOS 1.0, only from 1.1 and onwards.. In 1.0 you’d have to use “erase”. Funny, I never realized the ubiquitous “del” command to be an alias for “erase” as DOS 3.30 was the very first DOS I used as a 7 year old back in ’87 🙂
DOS 1.0 it is 86-QDOS by Tim Paterson. Tim worked in Microsoft up to DOS 1.1, then he back to Seattle Computer Products. DOS 2.0 was by Microsoft for IBM PC/XT (Mar., 1983): HDD 10MB, FDD 360kB, 128kB RAM,
That’s a gross oversimplification. Yes, the kernel (IBMDOS.COM/MSDOS.SYS) was 86-DOS, and so was EDLIN and DEBUG. But there was a lot more than that in PC DOS 1.0, and much of it didn’t come from Microsoft at all, including IBMBIO.COM. 86-DOS also came with tools that were not part of MS-DOS, such as the SCP assembler.
Also the SCP product was called first (internaly?) QDOS and later 86-DOS, not 86-QDOS.