Apple DOS is the family of disk operating systems for the Apple II series of microcomputers from late 1978 through early 1983. It was superseded by ProDOS in 1983. Apple DOS has three major releases: DOS 3.1, DOS 3.2, and DOS 3.3; each one of these three releases was followed by a second, minor "bug-fix" release, but only in the case of Apple DOS 3.2 did that minor release receive its own version number, Apple DOS 3.2.1. The best-known and most-used version is Apple DOS 3.3 in the 1980 and 1983 releases. Prior to the release of Apple DOS 3.1, Apple users had to rely on Compact Cassette for data storage and retrieval, but that method was notoriously slow, inconvenient, and unreliable.
There was no Apple DOS 1 or 2, per se. Versions 0.1 through 2.8 were serially enumerated revisions during development, which might as well have been called builds 1 through 28. Apple DOS 3.0, a renamed issue of version 2.8, was never publicly released due to bugs. To the dismay of many programmers, Apple published no official documentation until release 3.2.
Apple DOS 3.1 was publicly released in June 1978, slightly more than one year after the Apple II was introduced, becoming the first disk-based operating system for any Apple computer. A bug-fix release came later, addressing a problem by means of its utility, which was used to create Apple DOS master (bootable) disks: The built-in command created disks that could be booted only on machines with at least the same amount of memory as the one that had created them. includes a self-relocating version of DOS that boots on Apples with any memory configuration.
Apple DOS 3.2 was released in 1979 to reflect changes in computer booting methods that were built into the successor of the Apple II, the Apple II Plus. New firmware included an auto-start feature which automatically found a disk controller and booted from it when the system was powered up, earning it the name "Autostart Read-only memory".
Apple DOS 3.3 was released in 1980. It improves various functions of release 3.2, while also allowing for large gains in available floppy disk storage; the newer P5A/P6A PROMs in the disk controller enabled the reading and writing of data at a higher density, so instead of 13 sectors (3.25 Kibibyte), 16 sectors (4 KiB) of data can be stored per disk track, increasing the capacity from 113.75 KB to 140 KB per disk side 16 KB of which is used by filesystem overhead and a copy of DOS, on a DOS 3.3-formatted disk, leaving 124 KB for user programs and data. DOS 3.3 is, however, not backward compatible; it cannot read or write DOS 3.2 disks. To address this problem, Apple Computer released a utility called "MUFFIN" to migrate Apple DOS 3.2 files and programs to version 3.3 disks. Apple never offered a utility to copy the other way. To migrate Apple DOS 3.3 files back to version 3.2 disks, someone wrote a "NIFFUM" utility. There are also commercial utilities (such as Copy II Plus) that can copy files from and to either format (and eventually ProDOS as well). Release 3.3 also improves the ability to switch between Integer BASIC and Applesoft BASIC, if the computer has a language card (RAM expansion) or firmware card.
Compared to modern operating systems, Apple DOS is quite primitive. The first layer of the operating system is called RWTS, which stands for "read/write track sector". This layer consists of for track seeking, sector reading and writing, and disk formatting. An API called the File Manager was built on top of this, and implements functions to open, close, read, write, delete, lock (i.e. write-protect), unlock (i.e. write-enable), and rename files, and to verify a file's structural integrity. There is also a catalog function, for listing files on the diskette, and an "init" function, which formats a disk for use with DOS, storing a copy of DOS on the first three tracks, and storing a startup program (usually called HELLO) that is auto-started when this disk is booted from. On top of the File Manager API, the main DOS routines are implemented which hook into the machine's BASIC interpreter and intercept all disk commands. It provides BLOAD, BSAVE, and BRUN for storing, loading, and running binary executables. LOAD, RUN, and SAVE are provided for BASIC programs, and an EXEC was provided for running text-based consisting of BASIC and DOS commands. Finally, four types of files exist, identified by letters in a catalog listing:
There are four additional file types; "R", "S", and an additional "A" and "B", none of which are fully supported. DOS recognizes these types for catalog listings only, and there are no direct ways to manipulate these types of files. The "R" type found some use for relocatable binary executable files. A few programs support the "S" type as data files.
Apple DOS, however, needs to accommodate varying amounts of memory installed in an Apple II from 16 KB up to 48 KB. This DOS loads itself into the highest point possible to free up lower memory for BASIC programs and graphics capabilities. In machines with 48 KB or more memory, Apple DOS occupies the region from $9600 to $BFFF (enough space for three file buffers plus 10 KB of software), but can load into a lower memory area if less system memory is available. (In comparison, ProDOS always loads into language card RAM, thus requiring at least a 64 KB machine.)
A call vector table in the region of $03D0–03FF allows programs to find DOS wherever it is loaded in the system memory. For example, if the DOS hooked into the BASIC CLI stops functioning, it can be reinitialized by calling location $03D0 (976) hence the traditional "3D0G" ("3D0 go") command to return to BASIC from the System Monitor.
Only months after the Apple II's release, Apple commissioned Microsoft to develop a much more capable BASIC interpreter known as Applesoft BASIC, capable of handling floating-point real numbers with up to nine digits of precision and base-10 exponents from -38 to +38, and with support for high-resolution graphics. While more capable, Applesoft BASIC cannot run Integer BASIC programs, causing some users to resist upgrading to it.
DOS 3.3 was released when Applesoft BASIC was standard in ROM on the Apple II Plus, so Apple designed it to support switching back and forth between the two BASIC interpreters. Integer BASIC is loaded into RAM on the language card of Apple IIs (if present) and by typing FP or INT from BASIC, the user can switch between either version.
Without third-party patches, Apple DOS can only read floppy disks running in a 5.25-inch Disk II drive and cannot access any other media, such as hard disk drives, virtual RAM drives, or 3.5-inch floppy disk drives. The structure of Apple DOS disks (particularly the free sector map, which was restricted to part of a single sector) is such that it is not possible to have more than 400 KB available at a time per drive without a major rewrite of almost all sections of the code; this is the main reason Apple abandoned this iteration of DOS in 1983, when Apple DOS was entirely replaced by ProDOS.
ProDOS retains the 16-sector low-level format of DOS 3.3 for 5.25 inch disks, but introduces a new high-level format that is suitable for devices of up to 32 Megabyte; this makes it suitable for hard disks from that era and 3.5-inch floppies. All the Apple computers from the II Plus onward can run both DOS 3.3 and ProDOS, the Plus requiring a "Language Card" memory expansion to use ProDOS; the e and later models have built-in Language Card hardware, and so can run ProDOS straight. ProDOS includes software to copy files from Apple DOS disks. However, many people who had no need for the improvements of ProDOS (and who did not like its much higher memory footprint) continued using Apple DOS or one of its clones long after 1983. The Apple convention of storing a bootable OS on every single floppy disk means that commercial software can be used no matter what OS the user owns. A program called DOS.MASTER enables users to have multiple virtual DOS 3.3 partitions on a larger ProDOS volume, which allows the use of many floppy-based DOS programs with a hard disk.
Commercial games usually did not use Apple DOS, instead having their own custom disk routines for copy protection purposes as well as performance.
0 7 e 6 d 5 c 4 b 3 a 2 9 1 8 f
0 8 1 9 2 a 3 b 4 c 5 d 6 e 7 f
When reading and decoding sector 0, then sector 8 passes by, so that sector 1, the next sector likely to be needed, will be available without waiting. When reading sector 7, two unneeded sectors, f and 0, pass by before sector 8 is available, and when reading sector 15, the drive will always have to wait an extra revolution for sector 0 on the same track. However, the sector 0 actually needed in most cases will be on the next-higher track, and that track can be arranged relative to the last one to allow the needed time to decode the just-read sector and move the head before sector 0 comes around. On average, a full track can be read in two revolutions of the disk.
Unfortunately, the early DOS File Manager subverted this efficiency by copying bytes read from or written to a file one at a time between a disk buffer and main memory, requiring more time and resulting in DOS constantly blowing revs when reading or writing files.DOS 3.3, ProDOS & Beyond v1.3 bullet 07 Jul 01 Programs became available early on to format disks with modified sector interleaves; these disks give DOS more time between sectors to copy the data, ameliorating the problem.
Later, programmers outside Apple rewrote the File Manager routines to avoid making the extra copy for most sectors of a file; RWTS was instructed to read or write sectors directly to or from main memory rather than from a disk buffer whenever a full sector was to be transferred. An early "patch" to provide this functionality was published in Call-A.P.P.L.E.. Speedups in the LOAD command of three to five times were typical.
This functionality soon appeared in commercial products, such as Pronto-DOS, Diversi-DOS, Hyper-DOS, and David-DOS, along with additional features, but it was never used in an official Apple DOS release. Similar functionality was, however, employed by Apple's successor operating system, ProDOS. The Apple IIGS-specific operating system, GS/OS, would eventually employ an even more efficient "scatter read" technique that would read any sector that happened to be passing under the read head if it was needed for the file being read.