The Mature DOS
IBM PS/2
On April 2, 1987 IBM announced the long-awaited new line of personal computers, the Personal System/2. The PS/2 line was a radical redesign of the PC platform, a very bold but ultimately unsuccessful move (perhaps because it was too bold). IBM attempted to strengthen its control of the PC platform, but achieved the opposite.
The PS/2 machines were technically excellent, far ahead of the clones. Unfortunately, the PS/2 systems were also quite different and incompatible, in many ways needlessly so. For example, PS/2 machines came standard with 3½” 1.44MB drives (and a few years later, even 2.88MB drives), certainly an improvement over the existing 1.2MB drives. But the rest of the world only had 360KB or 1.2MB 5¼” drives, which made data exchange difficult. Many existing systems could not be upgraded to 1.44MB drives (that included IBM’s first two PC/AT generations), and a 5¼” drive for a PS/2 was an extra which was expensive and in the first few months after the release, also near impossible to get.
The PS/2 systems used a brand new bus called the Microchannel Architecture or MCA. The new bus supported 16-bit or 32-bit operation, advanced arbitration, bus mastering, and transfer speeds with theoretical maximum of well over 100MB/sec. MCA was fully software configurable, more or less Plug and Play, although the term didn’t exist yet. MCA was also completely incompatible with every single existing ISA expansion board. For many users who invested in memory cards, network controllers, storage adapters, etc., that made switching to PS/2 a very expensive proposal indeed (the high end 386-based PS/2 Model 80 cost over $10,000). Compaq, Intel, et al. did not repeat that mistake with EISA and PCI, providing a much smoother upgrade path.
The first generation PS/2 machines were 386-based (Model 80), 286-based (Model 60 and 50), and 8086-based (Model 30). The 8086-based Model 30 was not a “true” PS/2 as it used the ISA bus rather than MCA. The PS/2 introduced VGA graphics, 1.44MB drives, and PS/2 keyboards and mice, all of which stayed around for a very long time. As usual, a new version of DOS was required to take advantage of the new hardware.
DOS 3.3
DOS 3.3 was announced on April 2, 1987 with immediate availability. IBM again changed the pricing structure, with the base price raised to $120. However, upgrade pricing was now available for owners of any previous version of DOS at $75. That was cheaper than DOS 3.2 ($95) for which there was no upgrade pricing.
IBM also changed the packaging. With DOS 3.2, there were separate 5¼” and 3½” releases. In version 3.3, IBM simply included both media types—two 360KB 5¼” disks and a single 3½” 720KB disk. There was no danger of accidentally getting the wrong package and there was (again) only a single DOS part number.
A much less obvious but no less significant change was that unlike all previous versions, DOS 3.3 development was done solely at IBM. Microsoft was busy working on OS/2 (not yet under that name) and the OS/2 development team included many core DOS developers, such as Mark Zbikowski.
The copyright messages in DOS 3.3 hinted that IBM alone had developed that version. The COMMAND.COM banner read “Copyright International Business Machines Corp 1981, 1987” but “Copyright Microsoft Corp 1981, 1986”.
Changes and additions
One of the most significant new capabilities of DOS 3.3 was the support for extended partitions. DOS 3.3 did not remove the 32MB partition limit, but for the first time it was possible to easily partition larger disks and map several partitions to multiple drive letters. Since the new PS/2 systems supported disks with capacity over 100MB, this enhancement was very welcome, or perhaps overdue. However, the support for larger than 32MB partitions still had to wait.
It should be noted that various OEMs (notably Compaq) had supported partitioning even earlier, but always with the help of special drivers. Since DOS 3.3, custom partition drivers were not necessary.
The FASTOPEN.EXE utility was a strange beast, essentially a rudimentary disk cache which hooked into DOS but wasn’t quite part of it. Clearly an IBM creation, possibly developed earlier and simply bundled with DOS 3.3.
New on the floppy side was naturally support for 1.44MB media, the mainstay of PC removable storage for the next decade and more.
The CALL internal command allowed batch files to execute other batch files. This was previously only possible by starting another copy of COMMAND.COM, which was a workable but not very efficient solution.
The DOS INT 21h API was extended with calls to set the file handle count and commit files without having to close and re-open them. The latter was an important optimization for networked systems, where the overhead of closing and opening a file again was too great.
The XCOPY.EXE external command finally allowed copying of directory trees. The internal COPY command was still limited to files within a single directory.
The FDISK.COM, BACKUP.COM, and RESTORE.COM utilities were rewritten in C. JOIN.EXE and SUBST.EXE had already been written in C when first introduced in DOS 3.1, in addition to ATTRIB.EXE, the first DOS utility written in C and shipped with DOS 3.0.
With version 3.3, IBM finally retired the Disk BASIC because the systems which were expected to run DOS 3.3 had enough memory and the higher memory usage by the Advanced BASIC version did not matter any longer. A BASIC.COM executable was still shipped with DOS, but simply launched BASICA.COM.
In keeping with the merge, BASIC was now called simply “The IBM Personal Computer Basic” and only the A3.30 version marker indicated that this was the Advanced BASIC.
With DOS 3.3 started a gradual shift towards less technical users of DOS. LINK.EXE and EXE2BIN.EXE, the BASIC sample programs, and the VDISK.SYS listing were no longer shipped with DOS. To obtain them, customers had to separately purchase the DOS Version 3.30 Technical Reference from IBM. DEBUG.COM was still shipped with DOS, but was only documented in detail in the Technical Reference.
Internationalization
One of the less visible but very important changes in DOS 3.3 was significantly improved internationalization support. Country information was now separately stored in COUNTRY.SYS (a data file, not an installable driver, despite the extension). The COUNTRY statement in CONFIG.SYS could be used to provide the path to COUNTRY.SYS.
The approach of having separate KEYBxx.COM utilities for each language (utilized in previous versions of DOS) didn’t scale and in version 3.3, KEYB.COM was a generic utility which read keyboard description data from KEYBOARD.SYS (again not an installable driver), where they were stored in a somewhat compressed form, and built translation tables on the fly.
The new NLSFUNC.EXE Terminate and Stay Resident (TSR) utility enhanced the INT 21h API to allow retrieval of country information for country codes other than the currently active one. The new internal CHCP command allowed users to switch the active code page (used for the screen, keyboard, and printer) on the fly. The MODE.COM command was also enhanced with code page support.
Impact
DOS 3.3 was an extraordinarily long-lived release. On June 11, 1991 (coinciding with the release of DOS 5.0) IBM announced the withdrawal of DOS version 3.3 from marketing, together with DOS 4 and Windows 2.x. The planned withdrawal date was June 11, 1992. But on June 9, 1992 IBM in a rather unusual move announced that DOS 3.3 would continue to be available with no new withdrawal date. The cited reasons were a cleaner operating environment and more available memory on 286 and older systems than DOS 5.0 would provide, calling DOS 3.3 “an operating system considered to be one of the standards of the industry”. And that was five years after the release of DOS 3.3.
Because DOS 4.0 never managed to displace its predecessor, DOS 3.3 was in widespread use for at least 4 or 5 years, significantly longer than any other version—at least as long as DOS mattered.
There are interesting parallels between DOS 3.3 and Windows XP. Like Windows XP, DOS 3.3 didn’t bring any radically new technology, it was rather a refinement of the preceding groundbreaking version (Windows 2000 and DOS 3.1, respectively). Like Windows XP, DOS 3.3 stubbornly resisted to be replaced by its successor (Windows Vista and DOS 4.0, respectively) and stayed on the market for far longer than anyone expected.
OEM DOS 3.3
Microsoft was of course still supporting DOS OEMs, even if IBM did most of the development work. And as a side effect of the Joint Development Agreement (JDA) with IBM, Microsoft obtained rights to hardware-specific DOS utilities such as MODE.COM or FDISK.COM. Starting with version 3.3, Microsoft shipped the same utilities as IBM, although OEMs were still free to write their own.
One of the most significant OEM releases was COMPAQ DOS 3.31 in late 1987. That version pioneered support for 32-bit logical sector numbers and thus partitions larger than 32MB. The same support appeared a few months later in DOS 4.0 and OS/2 1.1.
With the support for large partitions, DOS 3.31 removed one of the biggest shortcomings and proved formidable competition to later versions of DOS. An unavoidable casualty of the change were disk utilities (PC Tools, Norton Utilities, etc.) which had to be updated to understand the new disk structure.
Starting around 1988, Microsoft was also shipping non-branded MS-DOS (“packaged product”) in significant quantities. At that time, DOS was still not a retail product, but small OEMs could buy generic MS-DOS from Microsoft directly. Larger OEMs (COMPAQ, Zenith, HP) still chose to customize DOS, but for cheaper no-name OEMs that was an unnecessary expense. At that time, the PC platform had stabilized to the point where a generic “PC compatible” was able to run MS-DOS without requiring any customization.
Legacy
With DOS 3.3, the DOS API matured and more or less stabilized. Missing features like larger than 32MB partition support made a big difference to users, but no difference to applications except for specialized disk utilities. Because DOS 3.3 was so widespread and feature complete, few applications required a higher version. DOS 4.0 was something of a cul-de-sac, and DOS 5.0 was designed to be less different from 3.x, not more.
Enhanced OEM versions such as Compaq’s DOS 3.31 with larger than 32MB partition support were quite suitable for hosting Windows 3.0 and 3.1, a plethora of networking packages (Microsoft last DOS network client from 1995 still only required DOS 3.3), and just about any DOS based application.
References
The MS-DOS Encyclopedia, edited by Ray Duncan, Microsoft Press, 1987. ISBN 1-55615-049-0
IBM Blames DOS 3.3 Problems on Non-IBM Hard Disk Drives, InfoWorld, Jun 1, 1987, page 6
Compaq’s New DOS Version Cripples Leading Disk Utilities, InfoWorld, Dec 14, 1987, page 22
“Because DOS 3.3 was so widespread and feature complete, few applications required a higher version. ”
Actually, most later DOS apps (particularly those released closer to the mid-1990s) did require DOS 5.0, particularly TSRs that depended on DOS internal data structures which often changed between 3.x, 4.x, and 5.0.
Can you name five or ten such major apps or TSRs? Preferably released before 1996 or so, when DOS still mattered…
Also, the DOS internal structures were less different between DOS 3.x and 5.0 than they were between DOS 3.x and 4.0.
AFAIK, TSRs that depended on DOS’s internal data structures like network redirectors generally had separate versions or code paths for 3.x, 4.x, and 5.x+.
In fact, one of the reason SETVER was invented in DOS 5.0 is to deal with these kinds of programs, which usually checked the major version of DOS and return with an error message like “Incorrect DOS version” if the version is unknown. MS when developing DOS 5.0 would consider the internal data structures of both 3.x and 4.x, consider which kinds of programs were depending on them, choose which version is best to imitate for each kind, and ensure that DOS 5.0 emulated the specific DOS version enough for this particular kind of program and then added the program to the SETVER list with the correct version number. For example, network redirectors generally was SETVERed to version 4.01.
I used to have a PCjr with a Racore/Rapport expansion kit (with a so-called PC/PCjr toggle switch). I was able to boot PC-DOS 3.3 on it. About halfway through the boot process, I would get multi-colored ascii garbage on the screen (nothing CLS in AUTOEXEC.BAT couldn’t cure).
I even tried PC-DOS 4.01. That wouldn’t even boot. That machine would hard lock tight as a drum!