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
Notable about MS-DOS 3.2 was that it was the first “packaged product” version of MS-DOS for PC compatibles to be bundled with computers.
So I heard, but could find no real evidence. I couldn’t find any note to that effect in my books (and I looked), and I haven’t seen any floppies or floppy images proving that either. DOS 3.3 definitely existed in an unbranded version. With 3.2 all I can say at this point is “maybe”.
BTW, there is no such thing as MS-DOS 3.0, only PC-DOS 3.0:
You should tell that to Microsoft: http://support.microsoft.com/kb/69912
I’d also like to know what http://actapricot.org/disks/apr00191.zip is, since it can’t be MS-DOS 3.0 (as you say) but claims to be “MS-DOS 3.06”. Also note how the SYSTEM3.DOC file in the archive documents the “MSDOS 3.0 SYSTEM CALLS” for the fictional MS-DOS 3.0…
On the second zip, I think this is probably an interim release. Notice it is 3.05 and not 3.0.
RIght. That’s what Microsoft gave to OEMs when they gave IBM PC DOS 3.0. Just like they gave OEMs MS-DOS 2.01 when they gave IBM PC DOS 2.0. But in Microsoft literature you’ll find mentions of MS-DOS 2.0 and 3.0, not 2.01 or 3.05.
“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.”
Which means for example that the DOS executable loader invoked by INT 21h 4Bxxh had to be completely reimplemented by NETX, as the DOS version did not call INT 21h again but linked to DOS’s file calls directly. And BTW, the redirector interface was undocumented and changed in DOS 4.0, and even the function 4B01h used by debuggers was initially undocumented too.
Pictures of the disks… so close, and yet so far away..
I saw that archived page a while back. I wonder where those disks live now…
The first 8086 I owned shipped with both MS-DOS 3.2 and DR’s DOS Plus and GEM.
Disk images for the platform are still available at:
I’ve verified the version via a hex editor:
Microsoft(R) MS-DOS(R) Version 3.20
(C)Copyright Microsoft Corp 1981-1986
Interestingly, each disk was colour-coded: http://www.flickr.com/photos/corchonozomi/91960622/
The most notable memory I have is of using MS-DOS 3.2 with Edit/QBasic taken from an MS-DOS 5 installation – with the person I lifted QB from claiming it wouldn’t work 🙂
The GEM release also included Locomotive BASIC2, which was pretty much the first GUI-based programming language I had exposure to. http://www.reenigne.org/computer/basic2.gif
I just created a quick-and-dirty video of MS-DOS 4.0 running multiple apps in PCjs. The video is here.
You are a god among men. I have been waiting to see MS-DOS 4.0 for the last 22 or so years of my life, since I first read about it in “The Design of OS/2”, where the mythical DOS 4.0/Big DOS/CP/DOS/ad nauseum was mentioned.
>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.
If I understand this statement correctly, it is plain wrong…
DOS supported phantom driver B: for single-driver systems from the beginning. Version 1.00 already had it. Disassembly of IBMBIO.COM from 1.00, http://www.pagetable.com/?p=184 , contains corresponding code. Also, can be easily checked either by quick disassembling or in emulator. 🙂
Or you meant something different?
By the way, thank your for great site/museum!
The text refers to what IBM announcement letter 286-129 calls logical device support: “[DOS 3.2] Provides logical drive support. Allows a physical drive to be referenced by more than one device letter. (Example: A user can copy from one 720Kb 3.5-inch diskette to another 720Kb 3.5-inch diskette using only one 3.5-inch diskette drive.)”
What was new in DOS 3.2 were several IOCTLs, notably INT 21h/440Eh and 21h/440Fh, to control the functionality. A good explanation is in the (look for “logical to physical drive mapping”). Note that the README says “most” (by inference not all) MS-DOS implementations supported a similar mechanism in single-floppy systems; it may be worth pointing out that since OEMs traditionally supplied their own IO.SYS, they may or may not have supported this functionality prior to DOS 3.2. If you were specifically talking about IBM’s DOS then that is more of a known quantity of course.
At any rate, the DOS 3.2 implementation is more general and provides additional level of control to programmers. The idea was not new in DOS 3.2, but the implementation was, at least if one is to believe Microsoft when they wrote “There’s quite a bit of new code required in IO.SYS to support this scheme.”
Thank you for clarification! I forgot about that “Get/Set logical driver map” services (and corresponding infrastructure), so, original statement, coupled with example old drive B: was little bit misleading for me.
It’s worth noting IBM released PC-DOS 3.21 sometime around 1986 or 1987; I have a copy on a 3 1/2″ 720kB diskette for the IBM PC JX. There is nothing interesting or notable about it, other than the presence of BASICJ.COM/BASICJA.COM which are identical to the IBM PCjr versions.
I have not been able to find anything different about 3.21 compared to 3.20 which was shipped for the PC Convertibles.
Our PC JX was originally shipped in 1985 with PC-DOS 2.11,m on 3 1/2″ 360kB media. (As far as I can tell it’s just a regular double-density 3 1/2″ diskette, but with only the first 40 tracks used.)
I’m having trouble finding anything remotely official about PC DOS 3.21. It seems to have been one of those quiet updates that were not officially announced. I’d be interested in a file listing of the 3.21 disk to check of the timestamps compare to the regular PC DOS 3.2 release. On the normal DOS 3.2 disks, most files were dated 12/30/1985.
Huh. Didn’t think MS-DOS 3.05 was a real thing, but there it is, and with IBM DOS 3.0’s IBMBIO.COM, the thing actually boots.
Now if I can just figure out how to modify the default country table settings from UK, I’ll be in business.
It’s real, although exactly how it relates to IBM’s releases is a bit hard to say. It seems the early DOS 3.x era was the tail end of Microsoft’s internal versioning which didn’t match IBM’s. I believe MS-DOS 3.05 was closer to IBM’s DOS 3.1 rather than DOS 3.0.
Well, the “3.06” (really 3.05) BDOS boots with a 3.0 BIOS, but with 3.1 it hangs.
This kind of mix-and-match is how I brought up MS-DOS 2.0 and 2.01.
From everything I can see, PC DOS 3.21 is like 1.05 – just the same old with bugfixes for BASIC.COM and BASICA.COM. The remainder is identical to 3.20 and reports as such.
Supposedly the only changes for PC DOS 3.21 were to BASIC and BASICA:
Technically not a real update since the DOS kernel didn’t change nor did COMMAND.COM or any of the standard DOS utilities. I wonder how many people actually cared about BASIC at that point (1986) ?
Note: there was an MS-DOS 3.21 released in 1987 which actually reported itself as 3.21 but IBM never used this.
The whole “DOS 2.11 for the JX” makes me curious.
Pingback: How to Void Your Valuable Warranty | OS/2 Museum