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:


  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

  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.
  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.

- -

DOS Versions