DOS Versions

 TECH Help! indicates variations and incompatibilities between DOS versions
 by displaying a highlighted version number as a warning flag.

 Where DOS Functions or DOS Interrupts changed significantly between
 versions, these flags are used to let you see them at a glance; e.g.:

     2.0+ .............. or (none) applies to DOS version 2.0 and higher
      2.x .............. applies to DOS 2.0 or 2.1 or 2.11, etc.
     3.0+ .............. applies to DOS versions starting at DOS 3.0

   MS-DOS and PC-DOS ... identifies differences between generic DOS and
                         IBM's customized (OEM) version

 This topic summarizes changes from version to version of DOS.  For a
 programmer's-eye view of version differences, see:

                    DOS Function Index - by DOS Version

█▌Version Summaries▐█
  The fundamental DOS services were roughed out with DOS 1.0 and stabilized
  (read: debugged) with version 1.1.  If your program must be able to run
  under DOS 1.1, you must use only DOS Functions lower than 2fH.

  When IBM introduced a hard disk PC (the XT), it released DOS version
  2.0 -- a significant upgrade, including:

  ■ Multiple directories to enhance access to large capacity media.
  ■ Handle-Oriented File I/O  superseded the hard-to-use FCB File I/O to
    simplify file/device access.
  ■ Standard I/O  Redirection for generalized UNIX-like device
    independence.
  ■ Installable Device Drivers  to interface non-standard equipment & RAM
    disks and included the ANSI.SYS console driver

  DOS 2.1 fixed a few bugs and added support for the PCjr diskette drives.

  DOS 3.0 came out with the AT and included support its 20M hard disk.  It
          added support for 16-bit FAT entries to minimize slack space on
          hard disks.  Added extended error reporting for DOS functions.

          Significant new DOS commands:  Attrib, Label, VDISK.SYS RAM disk

          Change Summary:
            Fn 3dH  (open) supports file sharing
            Fn 44H  subFns 08H (check removable) and 0bH (set retry count)
            Fn 59H  extended error information
            Fn 5aH  create temporary (unique) file
            Fn 5bH  create new file (create only in it doesn't exist)
            Fn 5cH  lock/unlock file
            Fn 62H  get PSP address
            INT 24H indicates which of (abort, retry, ignore) are valid.

  DOS 3.1 included some network services (file sharing, locking,
          redirecting).

          Significant new DOS commands: Join, Subst

          Change Summary:
            Fn 44H   SubFns 09H and 0aH were added for network support
            Fn 5eH  (network printer) and 5fH (network device redirection)

  DOS 3.2 came out with the IBM Convertible PC.  It expanded on the device
          driver IOCTL Functions to include DOS-blessed disk formatting,
          etc.

          Significant new DOS commands: Replace, Xcopy, DRIVER.SYS

          Change Summary:

            Fn 44H was extended to support Generic IOCTL and to support
            logical drives with subFns 440dH, 440eH, and 440fH.

  DOS 3.3 was released with the PS/2.  It supports the 1.4M 3½" diskettes.

          Significant new DOS commands: Append, Call, Chcp, Fastopen,
          Nlsfunc

          Change summary:
            ■ Attrib can work on a tree of subdirectories
            ■ Backup will format a diskette on the fly if you specify /F
            ■ batch commands can be truly silent (e.g., @ECHO OFF is not
              seen) and one batch file can execute another and return to
              the caller
            ■ Date and Time modify CMOS Memory for 'permanent' time changes
            ■ Fdisk supports logical volumes; lets you break a large hard
              disk ( > 32M ) into two drives.  See Extended DOS Partition
            ■ Additional national language support:
              • Keyb replaces KEYBxx and uses the KEYBOARD.SYS data file
              • Nlsfunc installs Code Page font-switching
              • New command Chcp selects/displays current active code page
              • New drivers PRINTER.SYS and DISPLAY.SYS support fonts
              • Mode supports code page selection and switching

            ■ DOS Functions were added:
              • Fn 440cH prepare and select code page fonts
              • Fn 66H   select code page fonts (when Nlsfunc is resident)
              • Fn 67H   increase the max number of file handles
              • Fn 68H   forced update of a file to disk ('commit' a write)

  DOS 4.0 Adds some support for expanded memory and disk partitions > 32M.
          It provides a long overdue point-and-shoot DOS shell.

          Significant new DOS commands: Dosshell, Install, Mem, Switches

          Change summary:
            ■ Append is somewhat smarter; less chance of disasters
            ■ Backup automatically formats destination disk (/F not needed)
            ■ BUFFERS= (in CONFIG.SYS) can use EMS memory; I/O is faster
            ■ Del /p pauses to confirm each of a wildcard file delete
            ■ Fastopen is faster and can use EMS memory to hold data
            ■ Format /f:size accepts size in Kbytes; /v:lbl sets volume
              label
            ■ Graphics works with EGA/VGA modes; supports more printers
            ■ Mode sets keyboard repeat rate; number of lines on the screen
            ■ REM can be used in the CONFIG.SYS file (it's about time!)
            ■ Replace /u overwrites destination files older than source
            ■ Tree has been brought up to about a 1984 level of
              sophistication
            ■ DEVICE= (config cmd) device drivers added/changed:
              • Ansi.Sys can restore screen layouts other than 80x25
              • Xma2ems.Sys and Xmaem.Sys supports EMS (expanded memory)
              • Vdisk.Sys can use EMS memory

            ■ DOS Functions were added/changed:
              • Fn 33H can now return the drive number of the boot disk
              • Fn 440cH (CL=5fH/7fH) provides a means to query/set the
                screen display mode, number of rows, etc.
              • Fn 6cH is a new all-purpose file Open/Create tool.
              • INT 25H/26H provide access to logical sectors > 65535
 DOS 4.01 The stable (debugged) version of DOS 4.0.  Accept no substitute.

  DOS 5.0 was released by Microsoft, after it wrested control back from
          IBM.  This is the most significant upgrade in many years.

          Supports 2.88M diskette drives.

          Significant new DOS commands: DEVICEHIGH=, DOS=, Doskey, Edit,
          EMM386.EXE, Help, HIMEM.SYS, Loadhigh, Mirror, Qbasic, Setver,
          Undelete, Unformat

          Change summary:
            ■ Memory-management for 386+ computers, including access to
              UMBs via DOS=, DEVICEHIGH= and Loadhigh, and EMM386.EXE.
            ■ Data recovery via Mirror, Undelete and Unformat
            ■ Text editor, EDIT.COM (really part of Qbasic)
            ■ Command-line retriever, Doskey
            ■ Access to Hidden and System files, via Attrib
            ■ View sorted directories and other options in Dir command
            ■ Setver tricks apps into seeing a different DOS version
            ■ All commands accept /? to mean "show syntax"
            ■ Numerous small "quality of life" changes

            ■ DOS Functions were added/changed (note: The DOS 5.0 Tech Ref
              documents many previously-undocumented services.  This lists
              only those that are actually new with DOS 5.0.  See
              DOS Function Index - by DOS Version for a complete list).

              • Fn 1fH and 32H (Get Disk Parameter Block) are very useful.
              • Fn 3306H gets the actual DOS version (30H only gets the
                SetVer simulated version number)
              • IOCTL fns 440dH 68H (sense media type)
              • IOCTL fns 4410H, and 4411H obtain info about IOCTL support
              • Fn 4b05H is a rarely-needed variation of EXEC services.
              • Fn 5802H and 5803H are memory-support services.
              • INT 2fH: Several add-on APIs are now documented.

  DOS 6.0 is basically DOS 5.0 with an armful of bundled utility programs
          and a few minor changes to DOS itself.

          Significant new DOS commands: Choice, Dblspace, Defrag, Deltree,
          Help, InterLnk, InterSvr, Memmaker, Move, Msav, Msbackup, Msd,
          Power, Truename, VSafe.

          Change summary:
            ■ Disk compression via DoubleSpace and MRCI API.
            ■ File defragmenter, Defrag, speeds up some disk I/O
            ■ Laptop tools: Power (see APM API) and InterLink
            ■ Memory-usage optimizer, MemMaker.
            ■ CONFIG.SYS handling changes:
              Clean Boot (press F5 to skip CONFIG.SYS and AUTOEXEC.BAT)
              Interactive Boot (press F8 to verify each CONFIG.SYS command)
              MultiConfig Menus let you define sets of config options

            ■ DOS services were added/changed:
              • No new INT 21H fns defined.
              • DoubleSpace API (via INT 2fH)
              • MRCI API (via INT 2fH)
              • APM API (via INT 2fH)
              • INT 2fH 16xxH Windows 386Enh-Mode services
              • INT 2fH 17xxH Windows Clipboard access
              • INT 2fH 40xxH Windows VDD fns for VM-aware apps

  DOS 6.2 is a mildly-aerobic exercise in butt-covering.  It was released
          after the media began playing up problems with DOS 6.0,
          especially the DoubleSpace feature.  Microsoft's jump to "6.2"
          was probably prompted to make this look better than IBM's 6.1.

          Significant new DOS commands: ScanDisk

          Change summary:
            ■ DoubleSpace can automount floppy diskettes
            ■ "DoubleGuard" halts the system if it finds that a program has
              overwritten any of the DoubleSpace memory area.
            ■ DoubleSpace can uncompress a disk.
            ■ DoubleSpace can use part of the HMA (if you set BUFFERS=
              small enough).
            ■ SmartDrive now caches CD-ROMs.  Very handy.
            ■ Command /Y /CbatName single-steps through a batch file.
            ■ Clean Boot lets you bypass the normal loading of DBLSPACE.BIN
            ■ Interactive Boot steps through AUTOEXEC.BAT
            ■ ScanDisk checks the disk for bad sectors and marks them as
              bad in the FAT, thereby avoiding many potential problems with
              DoubleSpace, Defrag, at al.  It's about time.
            ■ Dir, Mem, Chkdsk, et al. display large numbers with commas.
            ■ Copy, Move, and Xcopy now prompt before overwriting a file.
              The predefined e-var COPYCMD sets the default action and
              command line options /Y or /-Y can override.

            ■ DOS interrupts and functions were added/changed:
              INT 2fH 4axxH       HMA Suballocations
              INT 2fH 4a11H 000aH select which drives are automount-enabled
              INT 2fH 4a11H 000bH query which drives are automount-enabled
              DS IOCTL 'S' Improved way to get actual fres space on
                           compressed drives
              (perhaps others; I don't have the full info right now)

█▌Compatibility▐█
  In general, higher numbered versions are compatible with lower-numbered
  versions.  Most software is written to work with DOS 2.x since that is
  still a common incarnation.  The added features of DOS 3.x and even 4.x
  are relatively insignificant, so there is little reason to develop
  software that relies on these "new" features (with the exception of
  networking applications).

  One common compatibility problem is seen on PCs with a limited amount of
  memory.  Higher numbered DOS versions often take up more RAM from the
  available pool and thus leave less room for application programs.

   Version    Date    On Disk  In Memory
   ▀▀▀▀▀▀▀  ▀▀▀▀▀▀▀▀  ▀▀▀▀▀▀▀  ▀▀▀▀▀▀▀▀▀
   DOS 1.0  08-04-81   11,551   12,144  On Disk is the size of COMMAND.COM
   DOS 1.1  05-07-82   13,279   12,400                        +IO.SYS
   DOS 2.0  03-08-83   39,424   24,800                        +MSDOS.SYS
   DOS 2.1  10-20-83   39,551   24,800
   DOS 3.0  08-14-84   58,926   37,024  In Memory as reported by CHKDSK.
   DOS 3.1  03-07-85   60,534   37,040  More RAM used with SHARE, MODE, etc.
   DOS 3.2  12-30-85   68,637   44,704  and some CONFIG.SYS directives.
   DOS 3.3  03-17-87   77,566   46,048
   DOS 4.0  06-17-88  106,431   90,736
   DOS 5.0  08-15-90  112,478   varies*
   DOS 6.0  03-10-93  131,433   varies
   DOS 6.2  09-30-93  133,323   varies

    * Starting with DOS 5.0, it is possible to load much of DOS into upper
      memory blocks, so its use of conventional memory can be as little as
      about 20K.

     With DOS 6.0+, most configurations will include 43K of RAM used by
      DoubleSpace and MRCI.  It may be in upper memory.

      Also, the On Disk size should include the 50-65K of DBLSPACE.BIN
      (though optional, the majority of systems use it).

█▌MS-DOS vs PC-DOS vs OEM Versions▐█
  In many respects, these variation of DOS are identical.  For programmers,
  there are no differences in using the DOS Functions or other facets of the
  programming interface.  OEM versions may have additional "external
  commands" (add-on utility programs), including custom hardware support,
  such as in Compaq's TAPE command.

  Other differences: MS-DOS usually includes RAMDRIVE.SYS, while PC-DOS
  supplies VDISK.SYS.  MS-DOS includes SMARTDRV.SYS (or SMARTDRV.EXE), while
  older versions of PC-DOS supply an undocumented disk cache driver named
  IBMCACHE.SYS.

  One thing to watch for is the naming convention used for the two system
  files which get executed at boot time.  IBM's file names are IbmBio.Com
  and IbmDos.Com.  Generic MS-DOS uses Io.Sys and MsDos.Sys.  This causes
  problems when you try to convert from MS-DOS to PC-DOS or vice versa
  manually (an old version of the DOS Sys command may have trouble when it
  doesn't find the filenames it expects).

  The bundled utilities diverged considerably, starting with DOS 5.

█▌Traps and Pitfalls▐█
  Most DOS system-level functions are upwardly-compatible with older
  versions, but there are several places you can't take that for granted.
  Most of the items in the following list are relatively unimportant, but it
  might save you several hours of debugging time.

  ■ DOS Fn 1bH stopped returning a pointer to the actual FAT in DOS 2.0 and
    just returns a pointer to a media descriptor byte.

  ■ DOS Fn 4fH (Find Next File) had a subtle change between DOS version 2.x
    and 3.x.  You are now required to keep DS:DX pointing to the
    information from a 4eH (Find First File) call.  DOS 2.x just assumed it
    was in the DTA.

  ■ DOS Fn 30H modifies BX and CX in DOS 3.0+

  ■ DOS Fn 38H (Country Info) returns an incompatible Country Info Block.

  ■ The three 16-bit words at the end of the BPB (used in device drivers)
    switched from being "optional" to "mandatory" with DOS 3.0.  Also, be
    aware that some non-IBM installed device drivers do NOT store the BPB
    in the boot sector of the hard disk (this only applies to hard disks
    which are not installed with ROM-Scan and thus need not have a
    partition table and are not self-booting).

  ■ Under DOS 4.0, the BPB is enlarged and the boot sector contains data
    including the volume label and a quasi-unique serial number.

  ■ Under DOS 5.0+, the SmartDrive disk cache may begin writing to disk
    asynchronously (screwing up your highly-optimized communications
    program).  Force a cache flush via fn 0dH and/or DS IOCTL 'F'.

  As of 1993, there are very few users of DOS 2.x, but you will still run
  into some DOS 3.x systems.  Most programmers feel safe writing for the
  3.0+ API, letting users with older systems fend for themselves.

  In my opinion, you should NOT employ and rely on fns that are new for
  DOS 4.0+ unless you state that on the outside of your package.  In my
  experience, there are very few DOS services that are really needed (for
  standard application programs) that have not been available since DOS 2.1.

  Exceptions: Add-on APIs, such as DoubleSpace or INT 2fH 48xxH (Doskey
  services), which you can test for and work-around when not present.

See Also: DOS Function Index - by DOS Version
          System Compatibility
                                    -♦-