Software Spotlight: 86-DOS
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.
https://winworldpc.com/product/86-dos/100
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 1980. 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 Microsoft. 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 entries" 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 release"
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 handling 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 PC-DOS.
references:
Info from MS-DOS 1.x source files.
86-dos version list: https://en.wikipedia.org/wiki/86-DOS
DOS Timeline: https://en.wikipedia.org/wiki/Timeline_of_DOS_operating_systems
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)