The Networked PC/AT
The IBM PC/AT
In August 1984, IBM introduced the PC/AT, the last successful major redesign of the PC architecture for a very, very long time. The PC/AT used an 80286 CPU, a 16-bit processor compatible with the earlier 8086 and 8088 but capable of directly addressing up to 16MB of memory and executing in protected mode. At 6 MHz, the PC/AT was not clocked significantly higher than the PC/XT at 4.77 MHz. However, the 286 was a significantly more efficient processor, and possessed another major advantage: a 16-bit bus.
The 8088 in the IBM PC and PC/XT introduced 16-bit computing on the cheap, with a 16-bit CPU plugged into an 8-bit hardware environment. The PC/AT was finally a fully 16-bit system, with support for 16-bit memory and adapter cards.
The PC/AT came with at least 256KB RAM, significantly more than the early PCs. A 512KB model was also available. With add-on cards, RAM could be expanded well beyond one megabyte.
The PC/AT also added a second interrupt controller (bringing the total number of usable interrupt lines from 8 to 15), a second DMA controller (adding three 16-bit DMA channels), and, long overdue, a real-time clock with non-volatile battery-backed CMOS memory for storing configuration data. For obvious reasons, real-time clock adapter boards were one of the most popular add-on products for the PC.
The floppy drive has been upgraded to a high-density model with double the number of tracks (80 vs. 40) and higher sector per track count (15 vs. 9), significantly expanding the floppy capacity from 360KB to 1.2MB.
Finally the PC/AT introduced a new disk subsystem, with a Western Digital WD1002-WA2 adapter controlling a 20MB fixed disk through the ST-506 drive interface. The controller was eventually immortalized as the IDE/ATA interface.
Perhaps even more significantly, IBM was also working on the development of a product ultimately known as the IBM Personal Computer Network. The PC Network was an optional product, but with a very significant impact on the PC landscape.
DOS Disk Enhancements
The development of DOS 3.0 was led by Mark Zbikowski and Aaron Reynolds, both experienced DOS 2.x programmers.
Accommodating DOS to handle the new high-density floppies was relatively simple with defining a new floppy format. Supporting the 20MB fixed disk was both simpler and more difficult. The entirely different disk controller had no impact on DOS, since low level access was handled entirely by the system BIOS. However, the larger size required changes to DOS.
While DOS 2 could get away with treating fixed disks as large floppies and using the same 12-bit FAT entry format, this was no longer deemed adequate. 30MB and larger disks were already planned, and using 12-bit FAT entries (which allowed roughly 4,000 allocation units) would force the cluster size to 8KB or more, wasting significant amounts of precious disk space.
The FAT code in DOS was therefore enhanced to handle 16-bit FAT entries, which allowed the use of 512-byte clusters on a 20MB fixed disk, thus minimizing disk space wastage.
Unfortunately, there were two problems with the new fixed disk management approach. The new 16-bit FAT layout was not backwards compatible with DOS 2.0, which meant that once a fixed disk was formatted with DOS 3.0, it was not possible to boot a DOS 2.x floppy and access the data on the disk. That had only a relatively short-term impact, but the other problem did not: while the updated FAT filesystem could handle disks larger than 1GB (almost unimaginable in 1984), the lower level code could only use 16-bit sector numbers. With 512-byte sectors, that limited DOS volume size to 32MB. A larger disk had to be split into partitions no larger than 32MB, significantly complicating disk management.
The IBM requirement to support networking forced significant and pervasive changes in DOS. Version 3.0 was another big rewrite of the DOS kernel, introducing features critical to networking support: file locking and file redirection.
Companies like Novell did not have the luxury of modifying DOS and had to make do without. Novell’s NetWare ‘shell’ hooked interrupt 21h and directed file request either to the local system or across the network. Microsoft wanted to implement a cleaner approach and introduced the redirector interface.
The network redirector was an interface which DOS itself would use to call into a separate component, essentially an installable filesystem. The interface worked on file level rather than block media level (such as a floppy, fixed disk, or a RAM disk).
“Network redirector” was something of a misnomer. It was designed with networking in mind, but was sufficiently generic and not inherently tied to networking. In later years, it was very successfully used to implement CD-ROM support (MSCDEX.EXE being the redirector) and on the fly disk compression (Stacker and DoubleSpace).
On August 14, 1984 IBM announced the new Personal Computer AT and Personal Computer DOS 3.0. Unfortunately Microsoft wasn’t able to deliver the complete network redirector implementation, and DOS 3.0 was a stopgap product with support for the PC/AT hardware. While the redirector hooks were present in DOS 3.0, there was nothing to use them. DOS 3.0 was priced at $65, with planned availability on September 14, 1984 (a month after the announcement).
DOS 3.0 was quite different from the earlier DOS 2.1, and also significantly larger—requiring at least 36KB RAM versus 24KB in DOS 2.1. IBM therefore didn’t market DOS 3.0 as a replacement of DOS 2.1 and sold both versions for a while. The size increase was primarily caused by the networking support and virtualized drive interface (not entirely unlike the UNIX VFS layer).
DOS 3.0 was the last major redesign of the DOS kernel. The basic structure of DOS remained largely unchanged since then, and most of the DOS 3.0 internal routines still exist in DOS 4/5/6 with only relatively small modifications.
It should be noted that earlier versions of DOS did function on the PC/AT, but could not use the new high-density floppy disks (or the real-time clock), which severely limited their usefulness. Conversely DOS 3.0 could be used on older PCs, but the increased memory requirements likewise made it a bad choice in some cases. IBM recommended at least 128KB of RAM for DOS 3.0.
In version 3.0, DOS supported the high-density 1.2MB floppy media and introduced the previously mentioned FAT16 filesystem. A very welcome new feature was the support for the PC/AT’s real-time clock, with DOS automatically adopting the current date and time, a long overdue death knell to January 1st, 1980 timestamps.
While the network redirector interface was not complete, the support for file sharing and locking was already present in DOS 3.0 (albeit with limited usefulness in the absence of networking). The SHARE.EXE utility, which implemented file sharing, made its first appearance in DOS 3.0.
The new ATTRIB.EXE utility allowed the user to manipulate file attributes (Read-only, Hidden, System, etc.). It is notable for being the first DOS utility written in C (up to that point, all components in DOS were written in assembly language) and contains the string “Zbikowski C startup Copyright 1983 (C) Microsoft Corp”, clearly identifying Mark Zbikowski’s handiwork.
IBM was now also supported DOS in markets outside North America. This was reflected by the addition of the KEYBxx.COM utilities in DOS 3.0. These utilities provided support for several international keyboard layouts: United Kingdom (UK), Germany (GR), France (FR), Italy (IT), and Spain (SP). The BIOS in PCs had no support for internationalization whatsoever, and any international keyboard or display support had to be implemented in software. The new SELECT.COM utility provided an easier way to set up bootable DOS disks with international support (with specified country code and keyboard layout).
A very important fact about DOS 3.0 was that it did not run in the protected mode of the 286 CPU, and thus was limited in the amount of memory it could directly address. Version 3 started the trend where the core DOS slipped further and further behind the hardware capabilities, yet various workarounds were introduced that could take advantage of the updated hardware without needing a protected-mode operating system.
IBM shipped a RAM disk driver called VDISK.SYS in Personal Computer DOS 3.0. This was the only component of PC DOS which could optionally use extended memory (memory beyond 1MB not directly accessible from DOS). In an unusual move, IBM also shipped the complete assembly listing of VDISK.SYS with DOS, providing programmers with a very valuable example of how extended memory may be exploited.
On August 14, 1984 IBM announced not only the PC/AT and DOS 3.0, but also DOS 3.1. That was somewhat unusual and reflected the fact that DOS 3.1 was fully specified but behind schedule, and DOS 3.0 had to be released together with the PC/AT. IBM offered a nine-month upgrade period during which owners of DOS 3.0 could purchase version 3.1 for $30, which was not standard practice at the time. The regular price of DOS 3.1 was $65. The planned availability for DOS 3.1 was the first quarter of 1985; it was released on April 2, 1985 together with the IBM PC Network Program.
DOS 3.1 fully supported the network redirector interface, which was previously implemented in DOS 3.0 but unused (for that reason, the DOS 3.1 kernel was only very slightly larger than DOS 3.0). As noted earlier, the redirector interface was not strictly tied to networking. Prior to DOS 3.0, every DOS drive letter (in the absence of add-on products) was directly backed by a local block device. Starting with version 3, DOS drive letters might refer to foreign filesystems (e.g. CD-ROM) or network drives, without a corresponding block device. The DOS file support was thus abstracted to work on a file level rather than just the earlier “block device + FAT filesystem” approach.
Microsoft independently marketed Microsoft Networks (or MS-Net) to OEMs as a networking solution, but without much success. The undisputed leader in PC networking was Novell NetWare, a situation that remained unchanged until the mid-1990s.
The Importance of DOS 3.1
The fully supported redirector interface made DOS 3.1 a tremendously important version. It was the first mature release of DOS, with a stable and complete API (implemented via INT 21h etc.). For that reason, DOS 3.1 was the minimum required version for a huge number of DOS applications.
It should be understood that DOS 3.1 itself was by no means the version most users would choose to run (or at least not after 1986 or so); among its major deficiencies was the lack of support for 1.44MB floppies, and lack of support for disks larger than 32MB. However, support for these features had no direct impact on the DOS API itself, and applications typically did not worry about it. A full-featured general purpose DOS application rarely needed API features which DOS 3.1 did not provide.
IBM announced DOS 3.2 twice. First on March 18, 1986 as a new version of DOS for existing computers, and again on April 2, 1986 as the first version of DOS available on 3½” (720K) media and with support for the IBM PC Convertible. The releases were most likely identical, as even the later version on a single 3½” disk contains mostly files dated December 30, 1985. IBM significantly raised the price to $95 (from $65); upgrade pricing was not available.
Technically speaking DOS 3.2 was not a particularly significant release. Apart from additional hardware support (not just the PC Convertible but also the new Token Ring Network), there were several new commands and usability enhancements.
For example, the FORMAT utility now required the user to specify the drive letter, lowering the likelihood of inadvertently reformatting disks. When reformatting a fixed disk, the user was now forced to enter the existing volume label, again as a measure to avoid accidental reformats.
The REPLACE.EXE utility was added to replace all instances of a file with a given name on a disk. The usefulness of this utility was questionable. That was not the case of the other new utility, XCOPY.EXE, which was a welcome addition. With XCOPY, users were finally able to copy entire directory trees.
DOS 3.2 implemented notable changes in disk management. A phantom B: drive was now created on systems with a single floppy drive. This allowed easy disk copying on single-drive systems. DOS also moved away from using the media descriptor byte in the FAT, a holdover from DOS 1.0, to determine floppy drive type. Where available, the BPB (BIOS Parameter Block) was now used instead.
Version 3.2 was the last IBM version of DOS which shipped with LINK.EXE and EXE2BIN.EXE, as well as all the BASIC sample programs.
MS-DOS 3.2 Packaged Product
With version 3.2, Microsoft created a so-called packaged product version of MS-DOS. It was a copy of MS-DOS in a box with installation media and documentation. The product was intended for small system builders (OEMs) who assembled PC compatibles from off the shelf component. It was not a retail product and could not be legally sold without a new PC, but it was as close to a retail version as MS-DOS would get until the early 1990s.
For the packaged product, Microsoft had to write several tools (e.g. MODE.COM or FDISK.COM) originally created by IBM and normally supplied by an OEM.
The packaged product was a confirmation of the trend away from custom systems and towards total hardware compatibility with IBM PC/XT/AT. OEMs with custom hardware still had to license and adapt an OEM version of MS-DOS, but that was becoming less and less common.
Multitasking DOS 4
Around the same time when IBM introduced DOS 3.2, Microsoft released the near-mythical “DOS 4”, a real-mode operating system with support for multitasking. This version is also known as “European OEM DOS 4”.
There is very little reliable information about this release and there are no known surviving binaries. It was a purely Microsoft product, with no involvement from IBM. It was reportedly designed for telecommunication companies, only sold to OEMs (Apricot in the UK and Goupil in France), and not marketed for very long. One of the major uses for Multitasking DOS 4 was as a non-dedicated Microsoft Networks 2.0 server.
The existence of Multitasking DOS 4 is not in question, as it was mentioned in numerous Microsoft materials and was reported in the press. It is likely that Microsoft saw no point in this product when work was well underway on OS/2, which adopted some concepts and technologies from Multitasking DOS 4, such as the New Executable (NE) format. Other DOS 4 technologies ended up in Windows, notably the memory manager with support for movable and swappable segments in real mode.
In some ways, Multitasking DOS 4 was very advanced, but at the same time severely hobbled by the fact that it ran on 8086 class PC compatibles. That meant the 640KB barrier was a serious problem. In addition, while Multitasking DOS 4.0 was compatible with DOS 3.2, applications had to be specially adapted to allow background execution. IBM was not interested in the product and for that reason, OEMs in the North American market ignored it.
The existence of Multitasking DOS 4 is also the reason why one of the internal names of OS/2 during development was DOS 5, rather than DOS 4—even though the eventual release of OS/2 (1987) predated the release of IBM DOS 4.0 (1988). It is also the reason why the early versions of Microsoft’s segmented executable linker (used e.g. for Windows) were called LINK4.EXE.
Microsoft may have been surprised when IBM eventually released DOS 4.0, as that created an inconvenient naming clash. On the other hand, it is understandable that IBM did not want to skip version 4, a move that would have made no sense at all to IBM’s customers.
The MS-DOS Encyclopedia, edited by Ray Duncan, Microsoft Press, 1987. ISBN 1-55615-049-0
Undocumented DOS, 2nd Ed., Andrew Schulman et al, Addison-Wesley, 1993. ISBN 0-201-63287-X