Recent from talks
Nothing was collected or created yet.
Apple ProDOS
View on WikipediaThis article needs additional citations for verification. (November 2009) |
| ProDOS 8 | |
|---|---|
A floppy disk catalog in ProDOS 8 v2.0.3 | |
| Developer | Apple Computer |
| Written in | Assembly language |
| OS family | SOS |
| Working state | Discontinued |
| Source model | Closed source (but version 1.7)[1] |
| Initial release | October 1983 |
| Final release | 2.0.3 / May 6, 1993 |
| Available in | English |
| Supported platforms | Apple II |
| Kernel type | Monolithic kernel |
| Default user interface | primarily text user interface |
| License | Apple Software License Agreement |
| ProDOS 16 | |
|---|---|
ProDOS 16 v1.6 - running an earlier version of the Apple IIGS Finder | |
| Developer | Apple Computer |
| OS family | SOS |
| Working state | Discontinued |
| Source model | Closed source |
| Initial release | September 1986 |
| Latest release | 1.6 / June 14, 1988 |
| Available in | English |
| Supported platforms | Apple IIGS |
| Kernel type | Monolithic kernel |
| License | Apple Software License Agreement |
ProDOS is the name of two similar operating systems for the Apple II line of personal computer. The original ProDOS, renamed ProDOS 8 in version 1.2, is the last official operating system usable by all 8-bit Apple II computers, and was distributed from 1983 to 1993.[citation needed] The other, ProDOS 16, was a stop-gap solution for the 16-bit Apple IIGS that was replaced by GS/OS within two years.[2]
ProDOS was marketed by Apple as meaning Professional Disk Operating System, and became the most popular operating system for the Apple II 10 months after its release in January 1983.[3]
Background
[edit]ProDOS was released to address shortcomings in the earlier Apple operating system (called simply DOS), which was beginning to show its age.
Apple DOS only has built-in support for 5.25" floppy disks and requires patches to use peripheral devices such as hard disk drives and non-Disk-II floppy disk drives, including 3.5" floppy drives. ProDOS adds a standard method of accessing ROM-based drivers on expansion cards for disk devices, expands the maximum volume size from about 400 kilobytes to 32 megabytes, introduces support for hierarchical subdirectories (a vital feature for organizing a hard disk's storage space), and supports RAM disks on machines with 128 KB or more of memory. ProDOS addresses problems with handling hardware interrupts, and includes a well-defined and documented programming and expansion interface, which Apple DOS had always lacked. Although ProDOS also includes support for a real-time clock (RTC), this support went largely unused until the release of the Apple IIGS, the first in the Apple II series to include an RTC on board. Third-party clocks were available for the II Plus, IIe, and IIc, however. ProDOS shipped with a built-in clock driver for the Thunderware Thunderclock, which was a common real-time clock card in Apple II+ and IIe systems; other clock hardware required replacing the Thunderclock driver with a driver for the other clock.
ProDOS, unlike earlier Apple DOS versions, has its developmental roots in SOS, the operating system for the ill-fated Apple III computer released in 1980. Pre-release documentation for ProDOS (including early editions of Beneath Apple ProDOS) documented SOS error codes, notably one for switched disks, that ProDOS itself could never generate. Its disk format and programming interface are completely different from those of Apple DOS, and ProDOS cannot read or write DOS 3.3 disks except by means of a conversion utility; while the low-level track-and-sector format of DOS 3.3 disks was retained for 5.25-inch disks, the high-level arrangement of files and directories is completely different. For this reason, most machine-language programs that run under Apple DOS will not work under ProDOS. However, most BASIC programs work, though they sometimes require minor changes. A third-party program called DOS.MASTER enables users to have multiple virtual DOS 3.3 partitions on a larger ProDOS volume.
With the release of ProDOS came the end of support for Integer BASIC and the original Apple II model, which had long since been effectively supplanted by Applesoft BASIC and the Apple II Plus. Whereas DOS 3.3 always loads built-in support for BASIC programming, under ProDOS this job is given to a separate system program called BASIC.SYSTEM, which one launches to run and write Applesoft BASIC programs. BASIC itself continued to be built into the Apple ROMs; BASIC.SYSTEM is merely a command interpreter enhancement that allows BASIC programs to access ProDOS by means of the same "Control-D" text output they had used under DOS 3.3. BASIC.SYSTEM alone requires about as much memory as the whole of DOS 3.3. Since the ProDOS kernel itself is stowed away in the "Language Card" RAM, the usable amount of RAM for BASIC programmers remains the same under ProDOS as it had been under DOS 3.3.
Despite ProDOS's many advantages, many users and programmers resisted it for a time because of their investment in learning the ins and outs of Apple DOS and in Apple-DOS-based software and data formats. A contributing reason was that ProDOS allows only 15 characters in a filename compared to Apple DOS's 30. But Apple's integrated software package AppleWorks, released in 1984, proved a compelling reason to switch, and by the end of 1985 few new software products were being released for the older operating system. Apple IIs continued to be able to boot the older DOS (even the Apple IIGS can boot the older DOS floppies) but as 3.5" floppies and hard disks became more prevalent, most users spent the bulk of their time in ProDOS.
The Apple IIe, also released in 1983, was the first Apple II computer to have 64 KB of memory built in. For a while, Apple shipped both DOS 3.3 and ProDOS with new computers.
The original ProDOS was renamed ProDOS 8 when ProDOS 16 was released to support the 16-bit Apple IIGS computer, although ProDOS 16 (which was 8-bit at its core) was soon replaced by GS/OS.
Requirements
[edit]All editions of ProDOS require an Apple II or compatible.
ProDOS 8 requires 64 KB of memory to run. The original ProDOS (8) 1.0 through 1.0.2 requires only 48 KB for the kernel, but nearly all programs, including the BASIC.SYSTEM needed to use Applesoft BASIC, require 64 KB, making a 48 KB system useless for ProDOS as a practical matter, and support for 48 KB machines was removed in version 1.1.
ProDOS 8 version 2.x requires a 65C02 or later (65802, 65816) CPU. ProDOS 8 2.x runs in 64 KB, but the utility programs on the system disk require 128 KB. Systems with a 6502 CPU instead of a 65C02 must use ProDOS 8 versions prior to version 2.0.
ProDOS 16 requires an Apple IIGS.
Unlicensed Apple II clones
[edit]With the release of ProDOS version 1.01 and higher, a check was added to see if it was running on an official Apple-manufactured computer. If the word "Apple" is found in the computer's ROM firmware, ProDOS will load up as normal. If anything else is found (e.g. "Golden", "Franklin", "Elite") ProDOS refuses to run, locking up at the boot splash screen. This measure was taken by Apple Computer to discourage use of unlicensed Apple II clones. It is still possible to run newer versions of ProDOS on clones by applying a small byte patch to a given version of ProDOS. Some users go as far as replacing their physical ROM chip(s) with an illegally copied version of Apple's own ROM, or a custom patched ROM with "Apple" added in the name.
Disk support
[edit]ProDOS 8 natively supports Disk II-compatible floppy drives, a RAM drive of approximately 59 KB on computers having 128 KB or more RAM, and block devices whose controllers support the Pascal firmware protocol, a standardized method of accepting block reads and writes originally introduced for use with the UCSD p-System. This latter category includes 3.5" floppy drives and hard drives. Custom block device drivers can be hooked into the OS as well.
File system
[edit]ProDOS uses the same file system as the earlier Apple SOS for the Apple III. The SOS/ProDOS file system is native to Apple SOS, ProDOS 8, ProDOS 16, and GS/OS. Some classic Mac OS versions also come with a file system translator to handle this file system.
A volume is allocated in 512-byte blocks. (5.25" floppy disks are still formatted using 256-byte sectors, as this is the format required by the controller ROM to boot the disk. ProDOS simply treats pairs of 256-byte sectors as a single block on such drives.) A volume can have a capacity of up to 32 megabytes, and each file can be up to 16 megabytes. Each volume (floppy disk or hard drive partition) has a "volume name", a filename which is used as the base directory name; having two volumes with the same volume name can result in conflicts. If necessary, ProDOS searches all available drives to find a named volume. Subdirectories are supported, and the concept of a "prefix" (working directory or current path) was provided to make working with subdirectories easier.
File, directory, and volume names can be 1 to 15 characters, starting with a letter, then containing more letters, digits or periods. Each file entry also contains the 16-bit (2-byte) pointer to the block containing the beginning of the file (or its block index); a 16-bit block count; a 24-bit (3-byte) file size; an 8-bit (1-byte) filetype; a 16-bit auxiliary type (the meaning of which depends upon the filetype); creation and modification timestamps; and data related to how the file is stored on the volume. Sparse files are supported, but files are never "sparsified" by removing zero-filled blocks. The volume header contains similar information as relevant to volumes.
Directories (including the root directory) are sequentially indexed, with each block starting with the address of the previous block (or zero if none) and the subsequent block (or zero if none). The root directory on most disks is initialized to 4 blocks, allowing 51 entries (excluding the volume header). It never changes in size, except by manual intervention with special tools. Subdirectories begin at one block, and grow automatically as needed.
Normal files are progressively indexed. Single-block files (under 513 bytes) have no index block; the directory entry points directly to the block of file data. Files with between 2 and 256 blocks (513 bytes to 128 KB) of data have a single index block, to which the directory entry points, which contains a list of up to 256 data block addresses. Larger files have a master index block containing a list of up to 256 index block addresses. When the Apple IIgs was introduced, a new storage format was introduced for files with two forks, as was typical for IIgs system and program files; the directory entry points to an informational block that tells the computer the storage format of the two forks. These files cannot be read or written natively by ProDOS 8, though the volume itself remains compatible.
The volume has a bitmap of used blocks. Other than this, there is no central file allocation table.
A ProDOS 8 volume formatted by Apple's tools has a boot sector that supports booting both ProDOS and SOS depending on what computer it is booted on. Block 0 is the Apple II boot block and block 1 boots SOS. This allows a disk to be used to boot on either Apple II or Apple III computers by putting both operating system kernels in the top directory: the Apple II boot sector looks for the file PRODOS and the Apple III boot sector looks for the file SOS.KERNEL.[4] Third-party formatting utilities often did not provide the SOS boot block, and some would even mark block 1 available for user data.
ProDOS has no kernel support for other file systems. If necessary, a conversion utility on the main system disk is used to transfer files individually between ProDOS and older Apple DOS 3.3 disks. Because they use a different low-level disk format than DOS 3.3 and ProDOS, transferring data from DOS 3.2 disks to ProDOS is a two-step process using a DOS 3.3 disk as an intermediary (utilizing the DOS 3.3 utility MUFFIN or similar).
See also
[edit]References
[edit]- ^ "Apple ][ ProDOS 1.7 Operating System Source Listing" (PDF). Apple. Retrieved 25 February 2024.
- ^ Weyhrich, Steven (2001-07-07). "Chapter 15: DOS 3.3, ProDOS & Beyond". Apple II History. Archived from the original on 2008-09-17. Retrieved 2003-06-27.
- ^ "History of DOS 3.3 and ProDOS". Archived from the original on 2013-06-06. Retrieved 2013-08-28.
- ^ Weyhrich, Steven (2001-07-07). "Chapter 15: DOS 3.3, ProDOS & Beyond". Apple II History. Archived from the original on 2008-09-17. Retrieved 2003-06-27. Weyhrich source: Hunter, Skillman (February 1985). "Road Maps To Apple II Disks: DOS 3.3, CP/M, Pascal, and ProDOS". Call-A.P.P.L.E. Renton, Washington: Apple Pugetsound Program Library Exchange: 10–21. ISSN 8755-4909. OCLC 8898855.
- Notes
- Don Worth and Pieter Lechner. Beneath Apple ProDOS. Quality Software, Chatsworth, California, 1984. ISBN 0-912985-05-4
External links
[edit]- Apple II History: DOS 3.3, ProDOS & Beyond
- Apple II Information Reference - Apple2.info - ProDOS 8 Technical Reference Manual, wiki formatted, with FAQs, compatibility guides, etc.
- ProDOS 8 Technical Reference Manual - HTML formatted
- Apple II System Disk 4.0.2 - Apple II System Disk 4.0.2, with ProDOS 8 2.0.3 and the system utilities, as an 800K DiskCopy format image
- Apple Operating Systems Archived 2019-11-22 at the Wayback Machine - DOS, ProDOS 8, GS/OS, Basic.System
Apple ProDOS
View on GrokipediaHistory and Development
Origins and Initial Release
The development of ProDOS originated in 1981 at Apple Computer, Inc., as an internal project to address the shortcomings of Apple DOS 3.3, which had been the standard operating system for the Apple II since 1980.[4] Drawing inspiration from the Sophisticated Operating System (SOS), the hierarchical file system originally developed for the Apple III in 1980, ProDOS aimed to enable support for disk volumes far larger than the 140 KB capacity limit of DOS 3.3 single-sided 5.25-inch floppy disks.[2][4] Key motivations included the introduction of subdirectory structures for better file organization amid growing software complexity and the anticipation of enhanced hardware like the Apple IIe, introduced in January 1983 with expanded memory and peripherals that demanded a more robust OS.[4] The project faced significant hurdles, including delays from shifting priorities at Apple and skepticism from management focused on the Macintosh division, but persisted through the efforts of Apple II division engineer Dick Huston, who championed its necessity in presentations to executives like Mike Markkula.[4] By 1982–1983, development intensified to create a unified system compatible with both Apple II and Apple III hardware, leveraging SOS's block-based file structure while optimizing for the 6502 processor.[4] ProDOS 1.0 was officially released in October 1983, distributed as a standalone product to Apple dealers after final board approval, and quickly became the foundation for future Apple II software ecosystems.[4] Initial adoption was hampered by its lack of backward compatibility with DOS 3.3-formatted disks, necessitating data conversion utilities and prompting third-party developers to rewrite applications, though this transition ultimately enabled volumes up to 32 MB and improved performance.[4]Evolution and Version History
Following the initial release of ProDOS 1.0 in October 1983, version 1.1 arrived in August 1984, primarily addressing bug fixes such as modifications to the Machine Language Interface (MLI) layout and updates to the machine ID for compatibility with the Apple IIc and enhanced Apple IIe models.[9] It also removed support for 48K booting, incremented the kernel version identifier, and enhanced support for slot 3/80-column cards while fixing bugs related to /RAM disk access and reducing its maximum size.[9] A minor update, ProDOS 1.1.1, followed in September 1984, resolving a Disk II driver bug and prioritizing slot 3 80-column cards.[10] Subsequent releases in the mid-1980s refined compatibility and added features for evolving hardware. ProDOS 8 1.2, released in September 1986 and marking the rename to distinguish it from the new 16-bit variant, introduced an Apple IIGS clock driver, initial network support, fixes for RAM disk bugs, and the ATINIT file execution feature during boot.[9] Versions 1.3 (January 1987) and 1.4 (April 1987) improved Disk II phase reset handling, index block deallocation, and added support for UniDisk 3.5-inch drives, while removing unstable instructions and enhancing the Disk II driver; 1.4 also included a skeleton for AppleTalk networking, though it was non-functional.[9] ProDOS 8 1.5, released in April 1988, formalized network support through the ProDOS Filing Interface (PFI) and improved compatibility with the Apple IIc Plus.[9] Later iterations, including 1.6 (June 1988), 1.7 (August 1988), 1.8 (June 1989), and 1.9 (August 1990), addressed further refinements such as PFI pointer corrections, bitmap counting bugs, slot 3 handling, destroy operation issues, online call improvements, IIgs video mode support, 80-column selector addition, and removal of the mandatory SYSTEM file requirement.[10][9] The evolution continued with ProDOS 8 2.0 in January 1992, enhancing 8-bit compatibility for the Apple IIGS and other models requiring the 65C02 processor, including support for more than two SmartPort devices, improved prefix handling, sparse file truncation fixes, enhanced quit codes, and updated IIgs clock drivers.[9] This version introduced slot remapping capabilities for greater hardware flexibility and compatibility layers allowing DOS 3.3 file access.[9] ProDOS 8 2.0.1, shipping with Apple IIGS System Software 6.0 in March 1992, further optimized these features.[11] The final official 8-bit release, ProDOS 8 2.0.3, came on May 6, 1993, marking the end of Apple's active development for the Apple II line.[12] Parallel to these 8-bit advancements, ProDOS transitioned toward 16-bit systems with the introduction of ProDOS 16 in September 1986 alongside the Apple IIGS, providing 16-bit application support while maintaining disk format compatibility with ProDOS 8.[13] ProDOS 16 was succeeded by GS/OS starting in 1988 as part of Apple IIGS System Software versions 4.0 through 6.0, integrating advanced features like foreign file system support, multitasking, and graphical interfaces while fully supplanting earlier 16-bit operations.[13] Post-Apple development saw unofficial enhancements, such as ProDOS 8 2.4 released by developer John Brooks on September 15, 2016—the first major update in 23 years—adding modern compatibility features like extended date handling for systems beyond 2000 and support for older Apple II models including the original 1977 Integer ROM version.[12] Subsequent releases included 2.4.3 on December 30, 2023, which extended date support to 2028 via updated Thunderclock drivers, fixed bugs in cataloging and disk handling, and improved compatibility across all Apple II models.[14][15] This milestone preserved the operating system's viability for contemporary retro computing enthusiasts.[12]System Architecture
Core Components and Design Principles
Apple ProDOS, the Professional Disk Operating System for the Apple II series, is structured around a kernel that handles fundamental system operations, including memory management, interrupt processing, and the execution of built-in programs such as MONITOR for debugging and AUTOSTART for automatic program loading upon boot.[16] Block device drivers form another essential component, providing an abstraction layer for storage devices by managing input/output operations through interrupt-driven mechanisms, which allow efficient handling of disk accesses without constant CPU polling.[16] System programs like PREFIX complement these by enabling path handling and default directory management, while utilities such as FILER support broader file and volume operations, collectively forming a modular toolkit for user interaction with the file system.[16] The design of ProDOS draws heavily from the Sophisticated Operating System (SOS) of the Apple III, adopting its hierarchical, volume-based file organization to enable structured data storage across multiple directories and disks.[3] This approach emphasizes random access to files, supporting variable-length records and operations like reading or writing specific blocks, which contrasts with purely sequential access models and facilitates more flexible data manipulation on 8-bit hardware.[16] Implemented entirely in 6502 assembly language, ProDOS optimizes for the Apple II's processor by using compact, efficient code that minimizes overhead in resource-constrained environments.[16] Modularity is a cornerstone principle, achieved through relocatable code segments that can be loaded dynamically and an interrupt-driven I/O model that decouples timing-sensitive operations from the main program flow.[16] This separation extends to distinguishing the file system logic from the hardware abstraction layer, primarily via the Machine Language Interface, allowing drivers to handle device-specific details while the core maintains portability across compatible hardware.[16] ProDOS supports simultaneous access to up to 14 volumes, enhancing its capability for multi-disk environments without compromising core efficiency.[16][13]Machine Language Interface (MLI)
The Machine Language Interface (MLI) serves as the primary application programming interface (API) in ProDOS 8, enabling machine-language programs to interact with the file system, devices, and other system resources in a consistent and interruptible manner.[17] It acts as an abstraction layer between applications and the underlying disk drivers, allowing operations such as file creation, reading, and directory management without direct hardware access. The MLI is invoked through a single entry point at address $BF00, typically using a JSR instruction, which dispatches calls to the appropriate handlers within the ProDOS kernel.[17] This design ensures that programs can perform disk I/O efficiently while ProDOS handles buffering, error recovery, and resource allocation transparently. To issue an MLI call, the accumulator (A register) is loaded with the call number (a one-byte value identifying the operation), and the X register points to a parameter block in memory that contains input parameters and space for output results.[17] The parameter block begins with a one-byte count of parameters, followed by two-byte pointers or values (low byte first), allowing flexible data passing without relying on the stack or zero page extensively. Upon completion, the carry flag is cleared and the accumulator set to $00 for success; otherwise, the carry flag is set and the accumulator holds an error code, such as $00 for no error, $27 for an I/O error, or $46 for file not found.[17][18] This structure supports reentrancy and interrupt safety, as the MLI restores modified registers and zero-page locations before returning. Key MLI calls cover essential file and device operations. For file management, calls include CREATE (C1) to remove a file and reclaim its blocks, and RENAME (C4), which retrieves details like file type, size, and access permissions, and SET_FILE_INFO (C8) to obtain a reference number for a file, READ (CB) for data transfer with buffer management, and CLOSE (C5) to query mounted volumes and their status, and low-level block access via READ_BLOCK ($80) and WRITE_BLOCK ($81).[17] In its evolution for the Apple IIGS, ProDOS 16 extends the MLI with 16-bit addressing to support the 65C816 processor's native mode, expanding the addressable memory to 16 MB and enabling larger files up to 16 MB in size.[19] Calls now use a JSL instruction to the entry point at E1), with four-byte pointers in parameter blocks to accommodate the extended space, while maintaining compatibility with ProDOS 8 calls through emulation mode. Interrupt handling is enhanced via ALLOC_INTERRUPT ($31) and DEALLOC_INTERRUPT ($32), allowing up to 16 user-defined handlers vectored at $0003FE, with the system ensuring non-reentrancy through a busy flag and returning error $07 if a call is interrupted. Timeouts are implicitly managed by the interrupt scheduler, which dispatches unclaimed interrupts as fatal errors to prevent indefinite hangs.[19]Hardware Requirements and Compatibility
Minimum Hardware Specifications
ProDOS requires a 6502 microprocessor operating at 1 MHz, as standard in the Apple II family of computers.[20] Full utilization of ProDOS features, such as efficient access to auxiliary memory for file buffers and extended operations, necessitates an Apple IIe or later model, which provides dedicated auxiliary RAM banks.[16] The operating system demands a minimum of 64 KB of RAM for reliable operation, including loading the kernel and supporting basic file access; while early versions like ProDOS 1.0 could initialize on 48 KB systems, this configuration severely restricts functionality and is incompatible with most applications.[20] An additional 64 KB is recommended for practical use with software, enabling larger file buffers and multitasking. ROM requirements include Applesoft BASIC for interpreted programming or the system monitor for machine-language interfacing, with the Apple II and II+ models needing a language card to achieve the necessary memory expansion.[16] Essential peripherals consist of at least one 5.25-inch floppy disk drive compatible with the Disk II controller, typically installed in slot 6 for booting.[20] Later iterations of ProDOS, starting from version 1.3, incorporate support for hard disk drives through the SmartPort interface, allowing connection via expansion cards in designated slots like slot 5.[16] On older Apple II and II+ systems equipped with a language card for 64 KB RAM, ProDOS offers compatibility with core features including hierarchical directories, though access is slower due to lack of auxiliary memory banking. Volumes on 5.25-inch floppy disks are restricted to approximately 140 KB, similar to DOS 3.3, but larger capacities are possible with hard drives and RAM disks.[16]Compatibility with Apple II Variants and Clones
ProDOS offered full compatibility with the Apple IIe and subsequent models in the Apple II lineup. Introduced in 1983, the Apple IIe supported ProDOS natively with its standard 64 KB of RAM, enabling seamless operation of the operating system's hierarchical file structure and machine language interface without additional hardware beyond a compatible disk drive.[4] The Apple IIc, released in 1984 as a portable variant, also provided complete support for ProDOS, incorporating built-in peripherals like a joystick port and modem that integrated directly with the OS's device handling capabilities.[4] On the Apple IIGS, launched in 1986, ProDOS functionality was enhanced through GS/OS, a 16-bit derivative that extended ProDOS 8's features to leverage the IIGS's advanced 3.6 MHz 65C816 processor and up to 8 MB of RAM, while maintaining backward compatibility for 8-bit applications.[4] Support for earlier models like the Apple II+ was more limited, requiring workarounds such as a language card to expand RAM to 64 KB and specific boot loaders to initialize the system.[16] These configurations allowed partial functionality, but later ProDOS versions optimized for the 65C02 processor—standard in the IIe and beyond—performed better on upgraded II+ systems, though without the full feature set of native hardware.[16] Unlicensed Apple II clones, particularly those from Asian manufacturers like the Franklin Ace series, faced significant incompatibility with ProDOS due to differences in ROM firmware that deviated from Apple's specifications.[21] Starting with version 1.01, ProDOS incorporated a ROM checksum verification to detect non-Apple hardware, preventing boot on clones to protect intellectual property; this mechanism was refined in ProDOS 1.3 released in 1984 for improved detection accuracy.[21] Apple's 1982 lawsuit against Franklin Computer Corp. underscored these IP concerns, alleging copyright infringement of ROM code and operating system elements like DOS 3.3, which set legal precedents influencing the challenges of porting ProDOS to unauthorized hardware.[22] To address these barriers, third-party developers created patches that bypassed the ROM checks, such as the widely circulated Franklin patch, enabling ProDOS to run on clones like the Ace by modifying the checksum test in the boot code.[21] In mixed environments, utilities like Copy II Plus served as translators, allowing file transfers between DOS 3.3-formatted disks—common on clones—and ProDOS volumes, facilitating software compatibility without full OS migration.[23] Compatibility issues with international clones persisted into the 1990s, particularly in markets like Eastern Europe and Asia where systems such as the Pravetz and Laser 128 proliferated, often requiring custom firmware modifications to support later ProDOS updates like version 1.9 released in 1990.[24] These regional variants highlighted ongoing challenges in global adoption, as Apple's enforcement focused on U.S. markets, leaving international users reliant on community-driven solutions amid declining official support.[24]Disk and Storage Support
Supported Disk Formats and Capacities
ProDOS primarily supports 5.25-inch soft-sectored floppy disks compatible with the Disk II drive, utilizing a 16-sector format that provides a capacity of 280 blocks, or 143 kilobytes, for single-sided disks.[25] Later versions, such as ProDOS 1.3, introduced support for extended-density 3.5-inch drives like the UniDisk 3.5, enabling double-sided 800-kilobyte disks formatted with 1,600 blocks.[9] These formats represent a significant expansion over Apple DOS 3.3, which was limited to single-sided 140-kilobyte 5.25-inch disks with a flat structure and track/sector-based organization that made managing large files less efficient due to sequential access requirements.[25] All ProDOS volumes employ a fixed logical block size of 512 bytes, allowing for random access to data and enabling larger, non-sequential files compared to DOS 3.3's 256-byte sectors and track-based organization.[25] The maximum volume capacity is 65,535 blocks, equivalent to just under 32 megabytes, achieved through support for hard disks via interfaces like SCSI or the SmartPort standard.[25] For example, ProFile hard drives and compatible controllers adhere to these limits, with volumes partitioned to fit within the block addressing scheme.[25]| Disk Type | Format Details | Capacity (Blocks) | Total Capacity | Notes |
|---|---|---|---|---|
| 5.25-inch Single-Sided (Disk II) | 16 sectors/track, soft-sectored | 280 | 143 KB | Standard for early Apple II models; 4 blocks for directory, 1 for bitmap.[25] |
| 5.25-inch Double-Sided | 16 sectors/track per side | 560 | 286 KB | Supported via compatible double-sided drives.[25] |
| 3.5-inch Extended Density | 16 sectors/track, double-sided (ProDOS 1.3+) | 1,600 | 800 KB | Requires compatible controller such as the UniDisk 3.5 interface; supported on Apple II+ , IIe, and later models with appropriate hardware.[9] |
| Hard Disk (SCSI/SmartPort) | Variable, block-based | Up to 65,535 | <32 MB | Intelligent controllers support multiple volumes; max per volume.[25] |
Disk Management Operations
ProDOS handles disk mounting through the ONLINE machine language interface (MLI) call ($C5), which detects inserted disks, catalogs their volumes, and returns details such as slot number, drive number, and volume name into a user-provided buffer.[17] When invoked with unit number 0, the call scans all available drives and populates a 256-byte buffer with information on up to 16 mounted volumes; for a specific drive, a 16-byte buffer suffices.[20] The volume directory header, located in block 2 of the disk, contains metadata including a pointer to the volume bitmap, which tracks block usage across the volume with one bit per 512-byte block (0 indicating allocated, 1 indicating free). The bitmap is allocated in blocks following the directory, typically starting at block 6.[20] Core disk input/output operations in ProDOS occur at the block level through dedicated MLI calls that interface with device drivers. The READ_BLOCK call ($80) retrieves a single 512-byte block from the specified unit number (encoding slot and drive) into a user buffer, while the WRITE_BLOCK call ($81) performs the reverse, transferring data from the buffer to the disk.[17] These calls abstract the underlying track-and-sector geometry, allowing drivers for floppy, hard, or RAM disks to manage physical access; for instance, a standard 140 KB 5.25-inch disk comprises 280 blocks.[20] Error recovery is implemented in the device drivers, which typically attempt multiple retries on read/write failures before returning an I/O error code ($27) via the accumulator; write-protected media trigger error $2B.[17] ProDOS supports up to 16 concurrent drives or volumes through an array of Volume Control Blocks (VCBs) in memory, enabling seamless access across slots 1–7 and drives 1–2, with unit numbers distinguishing them.[20] Maintenance tasks in ProDOS focus on ensuring volume integrity and resource availability at the system level. Bad blocks are managed by creating a dedicated bad block file (storage type $01, file type $01) that lists defective blocks, allowing the volume bitmap to spare them during allocation and prevent future use; this sparing mechanism relies on the driver's ability to remap or skip affected areas.[20] Volume repair involves scanning the directory and bitmap to recover orphaned data, typically facilitated by system utilities that invoke MLI calls to reconstruct file entries, though ProDOS itself provides no automated repair routine.[16] Ejection and offline procedures are handled implicitly: removing a disk triggers error $2E (disk switched), invalidating the associated VCB and requiring re-mounting via ONLINE; no explicit OFFLINE call exists, but flushing buffers before removal ensures data consistency.[17] Advanced disk management in later versions extends to networked and partitioned storage. Starting with ProDOS 8 version 1.5, network volume support is provided through the ProDOS Filing Interface (PFI), which treats AppleTalk servers as "phantom devices" accessible via the FIListSessions MLI call ($42), listing sessions with unit numbers, volume names, and IDs for transparent integration with local volumes.[26] For hard disks, partitioning divides the physical medium into multiple independent ProDOS volumes (each limited to 32 MB), managed by controller-specific drivers like those for the ProFile hard drive, where each partition functions as a distinct unit addressable by its own VCB and bitmap.[20]File System
Hierarchical Structure and Volume Organization
ProDOS employs a hierarchical file system organized in a tree-like structure, where each volume maintains a root directory that serves as the top-level container for files and subdirectories. Subdirectories can be nested within the root or other subdirectories, forming branches up to 15 levels deep, which allows for organized storage beyond the limitations of flat file systems. Directory entries are linked through key blocks, which are the initial 512-byte allocation units for directories and files, containing pointers to subsequent data or index blocks as needed to accommodate growing content. The core organization of directories relies on 512-byte blocks, each capable of holding multiple directory entries of fixed 39-byte length, including fields for the file or subdirectory name (up to 15 alphanumeric characters or periods, starting with a letter), file type (one byte), storage type (one byte indicating seed, sapling, or extended formats), auxiliary type (two bytes for additional classification), and date/time stamps for creation and last modification. Subdirectories can support up to 255 entries, limited by the index block structure that allows dynamic expansion across multiple blocks, while the root directory of a volume is capped at 51 entries due to reserved space in the volume header block. This design facilitates efficient navigation and allocation, with each directory treated as a special file type ($0F) whose key block header specifies parameters like entry length ($27) and entries per block ($0D, or 13).[27] Volumes are managed as independent units, each beginning with a bitmap block for free space tracking, followed by the root directory in block 2, enabling seamless organization across disks or partitions up to 32 MB in capacity. Navigation is aided by the system global page at memory location BFFF, where BFD3 specifically holds the current prefix stack—a buffer for partial pathnames up to 64 characters total, including slashes—allowing users and programs to set prefixes for relative addressing without full paths. ProDOS supports file forks modeled after Mac OS conventions, with standard files using a single data fork but extended formats (storage type $05) accommodating separate data and resource forks for Apple IIGS compatibility, where resources store elements like icons or code segments.[28] In contrast to the flat, single-catalog structure of DOS 3.3, which confines all files to one level with up to 105 entries per volume, ProDOS's hierarchical approach enables nested folders for better organization of complex projects, though it limits filenames to 15 characters compared to DOS 3.3's 30-character allowance.[29] This nested capability reduces search times for large collections by leveraging directory-specific indexing rather than scanning an entire volume catalog.File Attributes, Types, and Access Methods
In ProDOS, files are characterized by several key attributes stored within directory entries, which dictate their organization, accessibility, and metadata. Storage types classify files based on their size and structure: seedling files ($1) for small files fitting in a single 512-byte block; sapling files ($2) for medium-sized files using up to 256 contiguous data blocks with an index block; tree files ($3), also known as keyed files, for larger files employing a multi-level tree of up to 128 index blocks pointing to 256 data blocks each; and directory files ($D) for hierarchical organization.[30][13] These attributes are set during file creation via the Machine Language Interface (MLI) CREATE call and can be queried or modified using GET_FILE_INFO and SET_FILE_INFO calls.[30] Additionally, ProDOS records creation and modification dates for each file, formatted as packed binary values including month, day, year, hour, minute, and second, stored in 4 bytes each within the directory entry.[13] File types in ProDOS are identified by a single-byte code, enabling applications to recognize and handle files appropriately without inspecting content. Common examples include TXT (hex $04) for plain text files, BIN (hex $06) for binary executables, FF) for system files, and $DIR (hex $0F) for subdirectories.[13] An auxiliary type, a 2-byte field, provides further subtype information, such as record length for text files or load addresses for binary files, allowing finer-grained categorization.[30][13] In ProDOS 16, extended to support the Apple IIGS, files may include resource forks—separate streams for structured data like icons or menus—identified by storage type $5 and managed alongside the primary data fork.[13] Access to files in ProDOS occurs through reference numbers (refnums), unique identifiers assigned by the OPEN MLI call (function $C0 in ProDOS 8 or equivalent in ProDOS 16), limiting up to 8 concurrent open files in ProDOS 8 but allowing more in later implementations.[30][13] Files support both sequential and random access: sequential access reads or writes data linearly from the current position to the end-of-file (EOF) marker, while random access positions to specific blocks using the tree structure for efficient retrieval in sapling and tree files.[30] Positioning is controlled via mark and release bytes in MLI calls like GET_MARK/SET_MARK and GET_EOF/SET_EOF, where the mark indicates the current byte offset (up to 32 MB in ProDOS 8) and EOF defines the file's logical end, automatically adjusting during writes.[13] ProDOS lacks robust built-in permissions but uses an access byte to enforce basic security, with bits controlling read ($01), write ($02), rename ($40), and destroy ($80) privileges; clearing write, rename, and destroy bits effectively locks the file against modifications.[13] Locking is implemented via the SET_FILE_INFO call, which updates the access byte and prevents operations like writing or deletion, returning error $0A ("file locked") on violations; the auxiliary type can also store custom flags for application-specific protection.[30][13] In ProDOS 16 under GS/OS, these mechanisms extend to resource forks, maintaining separate EOF and access controls for each.[13]| Storage Type | Code | Description | Typical Use |
|---|---|---|---|
| Seedling | $1 | Single-block file | Small data files |
| Sapling | $2 | Indexed contiguous blocks | Medium executables |
| Tree (Keyed) | $3 | Multi-level indexed tree | Large files |
| Directory | $D | Linked list of entries | Folders |
| Extended | $5 | Data + resource forks (ProDOS 16) | IIGS applications |
