Last week a most interesting image of a 160K disk arrived at the OS/2 Museum. The files on the disk image are rather old. When the disk boots up (not trivial, see below), the following message appears:
Astute readers will notice that that’s exactly the same message as PC DOS 1.0 (August 1981) shows, but this COMMAND.COM did not prompt for the date. That’s because this disk is not from August but rather early June 1981—newest file is timestamped June 6, 1981—which may make it the oldest known surviving piece of software written for the IBM PC (not counting the IBM PC ROMs which are dated April 1981). It’s certainly the oldest known surviving PC operating system. It comes with a short text file which provides further insight into the development history of PC DOS.
Even better, the disk can be explored at pcjs.org live in its native habitat. Note that the original disk had AUTOEXEC.BAT which immediately asked for the current date and launched Advanced BASIC; for improved ease of use, the batch file was disabled by renaming it to AUTOEXEC.BAK.
This pre-release DOS has no special version number and refers to itself as 1.0, exactly like the final product. All core files are present but are older and slightly smaller than the final version. The list includes IBMBIO.COM, IBMDOS.COM, COMMAND.COM, CHKDSK.COM, FORMAT.COM, and SYS.COM.
There is also DISKCOPY.COM included, but there’s no DISKCOMP.COM. The disk comparison program is called COMP.COM, and the file comparison program (COMP.COM in released PC DOS 1.0) is called FCOMP.COM instead. Yes, it’s confusing.
Miscellaneous utilities (BASIC.COM, BASICA.COM, DATE.COM, DEBUG.COM, EDLIN.COM. MODE.COM, TIME.COM) are also present. Again these are near-identical to the final release.
Where it gets interesting is the extras that do not exist on IBM’s PC DOS 1.0 disks. There is ASM.COM, SCP’s 8086 assembler which was used to develop early DOS versions.
There is 20HAL.COM, a tool that was clearly used during DOS development for exchanging files between Microsoft in Bellevue and IBM in Boca Raton. It is notable because its fragment can be found on the PC DOS 1.0 distribution disk, namely the string “DEC-20 Downlink to Boca Raton [300-bps] 9-Apr-81” at offset 0x16496 on the disk.
There’s HEX2BIN.COM, another tool which left its fingerprints on the PC DOS 1.0 disks (“HEXCOMError in HEX file–conversion aborted” etc. at offset 0x576B on the 1.0 release disk).
When developing the early DOS versions, there was no linker. The SCP ASM.COM assembler did not produce object files. It had a built-in locator and produced HEX files (text files) which were converted by HEX2BIN.COM into binary executable files. It is likely that IBM and Microsoft exchanged HEX files rather than binaries, and those were converted into binaries as required.
And there is non-ROM BASIC, too. More about that later.
The pre-release DOS is somewhat troublesome to run. In some situations, it calls into the BIOS with very little stack space (under 100 bytes) available, which is less than any released DOS version. As a consequence, especially newer BIOSes may cause hangs and may not boot this version of DOS at all. Using original IBM PC, PC/XT, or PC/AT BIOS works, although perhaps not reliably; there was no doubt a reason why the final PC DOS 1.0 provided more stack space; things get interesting when there is for example a BIOS disk call in progress, then the user presses a key triggering a keyboard interrupt, and then a timer interrupt arrives.
Differences and Similarities
The June 1981 version of PC DOS is in general rather close to the final release. As noted earlier, the pre-release does not prompt for the current date when COMMAND.COM is started.
FORMAT.COM does not include the boot sector; instead, it copies the boot sector from an existing disk. In FORMAT.COM there is a scrambled message which reads “Robert O’Rear Microsoft (c) IBM CORP.” Bob O’Rear was the Microsoft developer primarily responsible for porting DOS to the IBM PC.
CHKDSK.COM shows the number of “bytes total system RAM”, which is the same as 86-DOS 1.0, but not the same as final PC DOS 1.0 which shows “bytes total memory” instead.
The core DOS appears functionally almost identical to the final version with one major exception: No EXE file support. This shows that EXE file support was a rather late addition, happening in the last two months before PC DOS 1.0 was finalized.
An interesting difference from PC DOS 1.0 concerns BASIC. There’s BASIC.COM and BASICA.COM (Disk and Advanced BASIC, respectively) which require BASIC in ROM. But there’s also BAS18.COM and BAS18A.COM which expect the BASIC “ROM” at segment 1800h (at 96K, clearly assuming a 128K machine) in RAM rather than at segment F600h in ROM.
This scheme allowed BASIC.COM/BASICA.COM to be run on machines that either didn’t have the BASIC in ROM at all or perhaps had some outdated version. No such mechanism was available in any released PC DOS, only Microsoft offered an equivalent with GW-BASIC.
It is notable that the ROM BASIC image (RBAS.COM) is not identical to the one found in the ROM of IBM 5150 PCs. Although it reports itself as the same version (C1.00) and contains the same timestamp (25-Apr-81), several bytes are different. Their significance is currently unknown.
What’s also interesting is that while the pre-release DOS came with several BASIC utilities and games (THREED.BAS, SPCWAR.BAS), these were completely different from what was shipped on the final PC DOS 1.0 disks.
A simple terminal program (TTY.ASC) was also provided:
In general it is apparent that assembler and BASIC were the primary development languages in the early IBM PC era.
Even More Ancient History
The previously mentioned COMMENTS file dated June 5, 1981 provides further insight into the history of PC DOS development.
In earlier PC DOS development versions, IBMBIO.COM and IBMDOS.COM used lowercase names on disk. That meant the files were visible but could not be easily manipulated, because DOS implements case-insensitive file searches by always uppercasing file names in the API and actually doing case-sensitive searches. By the end of May (FORMAT.COM is dated May 29, 1981), DOS added the ‘hidden’ attribute (the first file attribute defined) so that system files could not be modified or even seen in directory searches.
At some earlier point, the PC DOS disks were laid out differently. The directory (root and only!) was on track 2, with IBMBIO.COM/IBMDOS.COM presumably stored on tracks 0 and 1 and not part of the file system, just like in 86-DOS 1.0. In PC DOS 1.0, the directory starts on the 4th sector, after one boot sector and two copies of FAT (one sector each). It is likely that IBM did not want to waste valuable space on non-bootable disks.
An even earlier PC DOS development version likewise stored the directory on track 2 but did not record any date information in the directory entries. It is likely that that version of DOS used 16-byte directory entries rather than the usual 32-byte entries. Note that PC DOS 1.0 recorded the dates in the directory entries, but not the time of day (that had to wait for PC DOS 2.0). Implementing a UNIX-style
make might be difficult under such conditions.
The pre-release version of PC DOS 1.0 is an interesting historical artefact, a true museum piece. Being from June 1981, it falls right in the middle between 86-DOS 1.0 (April 1981) and PC DOS 1.0 (August 1981), and while it’s not the oldest surviving version of DOS, it is the oldest known PC operating system.