Software Spotlight: 86-DOS

edited March 2018 in Software Spotlights

I noticed that an 86-DOS revision 1.14 turned up on Bitsavers recently, as well as a set of early Microsoft Pascal Compilers for Seattle Computer Products machines. I've updated the downloads to match what they have.

Initially called "QDOS", 86-DOS was a "quick and dirty" disk operating system created by Tim Patterson of Seattle Computer Products for inclusion with their 8086 based S-100 systems. At the time CP/M had not yet been ported to 8086 and Microsoft ROM Basic was too limited.

86-DOS included a somewhat friendlier command interface than CP/M, incorporated a File Allocation Table similar to that used by Microsoft ROM Basic, and implemented a set of APIs designed to aid porting CP/M-80 programs.

Although it had some functional similarities to CP/M, it was written from the ground up and did not directly copy CP/M. After its success, Gary Kildall of Digital Research alleged it infringed on CP/M.

86-DOS 1.10 was purchased by Microsoft and used as the basis for IBM PC-DOS and MS-DOS.

There were different releases for different hardware-incompatible FDCs. These included Cromemco, Tarbell Electronics and North Star Computers using 8" and 5.25" disks.

The last time I checked, only the Cromemco 4FD version was supported in emulation.

Similar to CP/M, the core of 86-DOS is broken up in to two components: The Basic Input Output System, and an Operating System kernel. The BIOS could be customized to accommodate each specific computer model without the need to modify the System kernel. When it was ported to the IBM PC, much of the BIOS was placed in ROM, partially to support ROM basic.

There are some interesting notes in 86-DOS 1.14.

The system file "86dos.sys" is dated 12/11/81, and the version string contains "1.14".

A News file dated 11/24/81 states:
The documentation for this release of 86-DOS is not complete yet, we
have enclosed the documentation for version 1.0 and a few sheets
explaining new features which are necessary to know to use the system.
We hope to make a new addendum which will replace the 1.0 addendum and
all the loose sheet in a couple of weeks. Microsoft has purchased
86-DOS from us and now owns all the rights to it including the
responsibility to document it. When the final manuals from Microsoft
are available you will get copies.

There is also an interesting, addendum mainly intended to describe the differences between earlier 86-DOS 1.0 and 1.10.

                              Addendum for 86-DOS 1.1

This disk contains 86-DOS version 1.1 which is necessary to run the Microsoft
high-level language compiler or MACRO-86 assembler which you have purchased.
It also contains the newer versions of the system utilities which go with
86-DOS 1.1.  Sometime in December SCP will begin distribution of an even later
version of 86-DOS which will be fully documented and include all the features
of Microsoft's MS-DOS, IBM's Personal Computer DOS, and Lifeboat's SB-86.  The
later version will be available for a service charge (probably $25.00).

Differences between 86-DOS version 1.0 and 86-DOS version 1.1 (included on this
disk),  which the user must know about in order to use the new software:

    * 86-DOS no longer fits on the space reserved at the beginning of the
      disk.  86-DOS resides in an invisible file which is always the first
      file on the disk.  The boot sequence is now as follows:

      1> the boot ROM loads the first sector from the disk and jumps to the
         code loaded from that sector.
      2> the code from the first sector loads in the I/O system which
         follows the first sector in the reserved area and is typically
         eight 128-byte sectors in length.  A jump is made to the
         initialization program in the I/O system.
      3> the initialization program in the I/O system uses the disk read
         function of the I/O system to load 86-DOS from the invisible file.
      4> the initialization code then uses 86-DOS to load in the command
         interpreter, COMMAND.COM, from the disk and then jumps to it.

    * The SYS utility which copys 86-DOS from one disk to another also
      copies the invisible file, 86DOS.SYS, which contains 86-DOS.  Because
      this file must be the first file on the disk (so the I/O system can
      find it when 86-DOS is booted up), SYS can only transfer the
      operating system to a disk which is freshly CLEARed or already has a
      file (invisible or not) called 86DOS.SYS which is large enough to
      hold 86-DOS.

    * The CHKDSK utility prints the total number of files on the disk
      including invisible files.  This allows the user to check for the
      presence of invisible files such as 86DOS.SYS since the total number
      of files reported by CHKDSK will be greater that that reported by the
      DIR command.  Note:  be sure to use this new version of CHKDSK with
      86-DOS version 1.1 because old versions of CHKDSK run under 86-DOS
      version 1.1 can't "see" the invisible files and will free the disk
      space allocated to these files thus destroying them.

    * The COMMAND interpreter (COMMAND.COM) can now load executable machine
      language files with the extension .EXE (for EXEcute).  These are
      similar to .COM files but have a 512-byte preface which contains
      information on how to patch inter-segment jumps and calls within the 
      file allowing multiple-segment files to be loaded.

    * DEBUG also can load .EXE files so that they can be debugged.

    * The assembler has had some rather significant features added to it.

      The expression analyser can now perform multiplication and division
      as well as addition and subtraction.  Use "*" to multiply and "/" to
      divide.  Multiplications and divisions are performed before additions
      and subtractions.  Parentheses may be used to change this normal
      order of precedence.

      Errors messages are sent directly to the console as well as put in
      the .PRN print file so that it is not necessary to make a print file
      to find out what errors are in the source code.  Two more options
      have been added to the third letter of the drive assignment
      extention which tells the assembler what to do with the print file.

      A-O send print file to disk drive A-O
      P   send print file directly to printer (tabs are NOT expanded)
      X   send print file to console
      Y   force a second pass through the source file so that error
          messages sent to the console include the text of the source file
          line on which the error occured
      Z   no print file.  Error messages sent to the console will indicate
          what error occured and on which line, but will not include the
          text of the line in which the error occured

      The Z option is normally only used if you are assembling a file which
      probably has no errors in it (perhaps you've assembled it before and
      know it has no errors), so that incomplete error messages are of no
      consequence.  Using the Z option results in faster assembly since the
      assembler doesn't have to make a second pass through source file.

      Line numbers have been added to the print file to make it easier to
      find particular lines using the editor.

      The assembler now handles 8087 opcodes.  Complete documentation on
      this feature will be provided with the new release in December.

    * The disk initialization program (INIT.COM) has been changed so that
      the drive letters and disk formats correspond to those used by the
      operating system.  For example, with the Tarbell double-density
      controller there are no longer two different initialization programs
      INIT and DINIT for single and double-density disks.  The new INIT
      will format a double-density double-sided disk in drives E or F if
      if you have double-sided drives.  See the warning about changing
      DOSIO and INIT in the file NEWS.DOC.

Pulling together several sources, this is a list of known 86-DOS versions. It is likely that not all of these were distributed, and only a few of the early ones have survived.

    QDOS 0.10   07/--/1980 Roughly half completed version of the OS. It
                           implemented the original form of Paterson's
                           derivation of Microsoft's FAT filesystem. In
                           contrast to the earlier 8-bit FAT filesystem
                           found in Standalone Disk BASIC-86, this
                           variant already supported 12-bit table
                           elements, reduced the number of FATs from 3 to
                           2, redefined the semantics of some of the
                           reserved cluster values, and modified the disk
                           layout, so that the root directory was now
                           located between the FAT and the data area.
                           Paterson also increased the previous
                           9-character length limit to 11 characters in
                           order to support CP/M-style 8.3 filenames and
                           File Control Blocks. This variant, however,
                           still used 16-bytes directory entries and
                           therefore is not compatible with what became
                           later known as FAT12 in MS-DOS/PC DOS.
                           Possibly shipped already.
    QDOS 0.11   08/--/1980 Bug fix shipment.
    QDOS/86-DOS 0.2  08/--/1980 EDLIN added. Renamed to 86-DOS by August
    86-DOS 0.3  11/15/1980 First version licensed by SCP to Microsoft.
    86-DOS 0.33 12/--/1980 First version distributed by SCP to OEMs and
                           Microsoft as 86-DOS.
    86-DOS 0.34 12/29/1980 "General release, updating all past customers"
                           - Cleaned up release for SCP OEMs including
    86-DOS 0.42 02/25/1981 "32-byte directory entries added" - At the
                           indirect request of IBM (through Microsoft)
                           size of directory entries changed from 16 to
                           32 bytes (similar to MDOS/MIDAS) in order to
                           add support for a last-modified date stamp (2
                           bytes) and theoretical file sizes larger than
                           16 MB (4 bytes), thereby implementing the
                           earliest form of the 12-bit FAT file system
                           logically fully compatible with what became
                           known as FAT12 in MS-DOS/PC DOS later on.
                           86-DOS retained the capability to read volumes
                           written under older versions of 86-DOS up to
                           MS-DOS 1.14 at the least, whereas generic
                           MS-DOS 1.20 / PC DOS 1.1 and higher no longer
                           supported it.
    86-DOS 0.56 03/23/1981 "Variable record and sector sizes" - Support
                           for disk blocking/deblocking as requested
                           since 1981-01-15.
    86-DOS 0.60 03/27/1981 "Ctrl-C exit changes, including register save
                           on user stack" - The file DOSIO.ASM found in
                           86-DOS 1.00 mentions that it is the "I/O
                           System for 86-DOS version 0.60 and later".
    86-DOS 0.74 04/15/1981 Added device files. "Recognize I/O devices
                           with file names"
    86-DOS 0.75 04/17/1981 Bug fix. "Improve and correct buffer handling"
    86-DOS 0.76 04/23/1981 Bug fix. "Correct directory size when not 2^N
    86-DOS 0.80 04/27/1981 Added system calls. "Add console input without
                           echo, Functions 7 & 8"
    86-DOS 1.00 04/28/1981 Modified system calls. "Renumber for general

Roughly corresponds with the IBM PC-DOS

                           "0.90" 6/5/1981 pre-release.
    86-DOS 1.01 05/12/1981 Bug fix. "Fix bug in `STORE'"
    86-DOS 1.10 07/21/1981 Purchased by Microsoft and renamed to MS-DOS
                           on 1981-07-27, therefore the last version with
                           genuinely matching 86-DOS and MS-DOS version
                           numbers. First version known to implement the
                           'hidden' attribute. "Fatal error trapping, NUL
                           device, hidden files, date & time, RENAME fix,
                           general cleanup"

Roughly corresponds with IBM PC-DOS 1.00.

    86-DOS 1.11 09/03/1981 Don't set CURRENT BLOCK to 0 on open; fix SET
                           FILE SIZE
    86-DOS 1.12 10/09/1981 Zero high half of CURRENT BLOCK after all
                           (CP/M programs don't)
    86-DOS 1.13 10/29/1981 Fix classic "no write-through" error in buffer
    86-DOS 1.14 10/11/1981 According to Tim Paterson PC DOS 1.0 basically
                           reflects 86-DOS 1.14, other sources find a
                           match of PC DOS 1.0 with MS-DOS/86-DOS 1.10 as 
                           of 1981-07-21 more likely.

My guess is IBM DOS was intended to be updated to this level, but
instead they shipped what they already had.

It sounds like versions after 1.14 were officially "MS-DOS". Until
MS-DOS 2.0, MS-DOS maintained the same version numbering sequence as
86-DOS. This is why there is technically no known "MS-DOS 1.00".

1.20 12/31/1981 Add time to FCB; separate FAT from DPT; Kill SMALLDIR;
                Add FLUSH and MAPDEV calls; allow disk mapping in DSKCHG;
                Lots of smaller improvements
1.21 01/06/1982 HIGHMEM switch to run DOS in high memory
1.22 01/12/1982 Add VERIFY system call to enable/disable verify after write
1.23 02/11/1982 Add defaulting to parser; use variable escape character
                Don't zero extent field in IBM version (back to 1.01!)
1.24 03/01/1982 Restore fcn. 27 to 1.0 level; add fcn. 28

Corresponds with IBM PC-DOS 1.10

1.25 03/03/1982 Put marker (00) at end of directory to speed searches

Corresponds with many OEM releases

                First known official release as "MS-DOS" to OEMs
                Re-branded under OEM names such as "Z-DOS",
                "Compaq-DOS", and so on.
                Some OEMs renumbered 1.25 as "1.10" to match IBM

Info from MS-DOS 1.x source files.
86-dos version list:
DOS Timeline:

Please note that at boot, some versions may print only the COMMAND.COM version number, or an OEM revision number that intentionally differs from the DOS revision level. Do not confuse this with the version of the DOS system.

Seattle Computer Products continued to license and offer MS-DOS at least up to 2.0 for their S-100 systems.

(Note: The forum code coloring extension is totally borked, had to disable it to get this post to work at all)

Leave a Comment

BoldItalicStrikethroughOrdered listUnordered list
Align leftAlign centerAlign rightToggle HTML viewToggle full pageToggle lights
Drop image/file