CSOC
| Industry | Software, Operating systems |
|---|---|
| Founded | 1974 |
| Founder | Gary Kildall |
| Headquarters | United States |
| Products | CP/M, MP/M, CP/M Plus, CP/M-86, CP/M-68K, CP/M-8000 |
CP/M, an acronym initially meaning Control Program/Monitor and later reinterpreted as Control Program for Microcomputers, is a widely used operating system introduced in 1974 for Intel 8080 and 85-based microcomputer platforms. Created by Gary Kildall of Digital Research, Inc, CP/M functions as a disk operating system that manages file organization on magnetic storage devices and facilitates program loading from disks. While its earliest versions supported only single-task execution on 8-bit processors with memory capacities up to 64 kilobytes, subsequent releases incorporated multi-user support and transitioned to 16-bit processor architectures.
The design of CP/M comprises three main components: the Basic Input/Output System (BIOS), responsible for device driver management; the Basic Disk Operating System (BDOS), which oversees the file system and core system services; and the Console Command Processor (CCP), a command-line interpreter providing built-in commands.
During its peak, CP/M became the de facto standard operating system for microcomputers utilizing the S-100 bus, dominating business computing from the late 1970s through the mid-1980s. By enabling easier application portability across various hardware manufacturers, it significantly broadened both hardware and software markets. The platform also fostered software development innovation, as affordable CP/M machines empowered independent programmers and user communities to produce and distribute applications. However, CP/M’s leading position declined following the 1981 introduction of the IBM PC, which helped establish DOS as the prevailing operating system.
Early history
In 1974, Gary Kildall created CP/M as an operating system tailored for the Intel Intellec-8 development platform, utilizing an 8-inch floppy disk drive from Shugart Associates paired with a custom controller.[1] The OS was programmed in Kildall’s own language, PL/M (Programming Language for Microcomputers).[2] CP/M drew inspiration from the TOPS-10 operating system used on the DECsystem-10 mainframe, which Kildall had experience with during development.[3]
CP/M was compatible with numerous computers based on both the 8080 and Z80 processors. One of its early licensees was Gnat Computers, which secured rights to CP/M version 1.0 in 1977 for $90. Rapidly increasing demand allowed Digital Research to generate licensing revenues reaching tens of thousands.[4]
John Pierce contributed to CP/M’s evolution by developing version 2.0 in 1978 under Kildall’s leadership. In early 1979, Kathryn Strutynski joined Digital Research, initially focusing on debugging CP/M 2.0 before taking charge of development for CP/M 2.2 and CP/M Plus. Other notable early contributors included Robert Silberstein and David K. Brown.[5]
Originally abbreviated as "Control Program/Monitor",[6] the term CP/M was officially redefined as "Control Program for Microcomputers" in trademark documentation filed in November 1977.[7] This renaming aligned with naming conventions such as Kildall’s PL/M language and IBM’s CP/CMS operating system. The change supported a business strategy pursued by Kildall and his wife, alongside partner Dorothy McEwen,[8] aiming to commercialize CP/M and PL/M under the Digital Research brand. Their objective was to establish Digital Research as synonymous with "microcomputer," much like how IBM and Microsoft later positioned their brands. At this time, Intergalactic Digital Research, Inc. was renamed Digital Research, Inc.[8]
Early Achievements
By September 1981, Digital Research had distributed more than CP/M licenses, with sublicensing arrangements indicating an even wider reach. A variety of manufacturers developed CP/M-based computers targeting different sectors; InfoWorld highlighted CP/M as becoming the definitive operating system for small computers. Even companies that maintained their own proprietary operating systems, such as Heath/Zenith with HDOS, offered CP/M as an option for 8080/Z80 platforms—unlike popular 6502 CPU machines, which lacked a unified OS standard.[9] This widespread adoption was largely due to CP/M’s vast software ecosystem. For instance, the Xerox 820 incorporated CP/M to take advantage of the extensive library of available applications.[10] To address Digital Research's insufficient documentation, Xerox provided a Howard W. Sams CP/M manual,[11] as the original materials were criticized for being incomplete and poorly organized.[12]
By 1984, Columbia University had utilized CP/M’s source code to compile Kermit binaries compatible with over a dozen CP/M variants alongside generic versions.[13] CP/M was characterized as a "software bus",[14][15] facilitating interaction between multiple applications and diverse hardware through a standardized interface.[16] Software typically required only adjustments to terminal and printer control sequences to run across different machines, enhancing portability. This adaptability contributed significantly to CP/M’s widespread appeal and encouraged more extensive software development relative to brand-specific operating systems. However, certain limitations existed: some programs relied on Z80-exclusive instructions incompatible with 8080/8085 CPUs, and graphics-intensive games often bypassed the OS by using machine-specific routines to improve performance.[9]
Bill Gates pointed out that the combination of the Apple II with a Z-80 SoftCard represented the most prevalent CP/M hardware environment.[17] By 1982, Digital Research announced that CP/M had been licensed for upwards of 450 distinct computer models.[18] Prominent examples included the Altair 8800, IMSAI 8080, Osborne 1, Kaypro portable computers, and various MSX systems. The best-selling system compatible with CP/M was probably the Amstrad PCW. In the United Kingdom, CP/M operated on educational machines from Research Machines (with source code made publicly available), on the BBC Micro through a Z80 co-processor, as well as on the Amstrad CPC, Commodore 128, TRS-80, and later versions of the ZX Spectrum. Additionally, CP/M 3 served as the operating system for the NIAT handheld computer developed for A. C. Nielsen, featuring 1 MB of SSD storage.
Multi-user Capabilities
In 1979, Digital Research introduced MP/M, a multi-user variant derived from CP/M. This version enabled multiple users to access a single computer simultaneously via terminals, each with their own screen and keyboard interface. Subsequent releases extended support to processors with 16-bit architecture.
CP/M Plus
Released in 1983, CP/M Plus (also known as CP/M 3) was the final iteration of the 8-bit CP/M series, featuring a BDOS developed by David K. Brown. This version incorporated MP/M's bank-switching memory management into a single-user operating system that maintained compatibility with CP/M 2.2 applications, allowing access to memory beyond 64 KB on 8080 or Z80 processors. It introduced file date stamping and included tools such as a relocating assembler and linker. CP/M Plus was designed for the last wave of 8-bit computers, including models like the Amstrad PCW, Amstrad CPC, ZX Spectrum +3, Commodore 128, MSX systems, and the TRS-80 Model 4.
16-bit versions
Digital Research created CP/M variants tailored for 16-bit processors. The initial release was CP/M-86, developed for the Intel 8086 and launched in November 1981 under the direction of Kathryn Strutynski. To differentiate it from the original, the 8-bit version became known as CP/M-80.
Although CP/M-86 was anticipated to become the IBM PC’s default operating system, licensing discussions between Digital Research and IBM faltered. Consequently, IBM collaborated with Microsoft, which provided PC DOS based on 86-DOS. While CP/M-86 was eventually offered as an alternative following legal pressure, it never gained comparable market traction, partly due to IBM pricing CP/M-86 at $240 in contrast to PC DOS’s $40 price point.
The Digital Equipment Corporation’s Rainbow 100 competed against IBM by supporting multiple operating systems: CP/M-80 (Z80), CP/M-86, or MS-DOS (8088), even allowing simultaneous use of both CPUs. This dual-processor architecture enabled users to preserve their existing 8-bit software investments while transitioning toward the emerging 16-bit MS-DOS environment. Similar dual-CPU configurations were implemented in systems such as the CompuPro System 816 (CP/M 8-16) and Zenith Z-100.
Following CP/M-86, CP/M-68K targeted the Motorola 68000 processor. Initially developed in Pascal/MT+68k in 1982 and later converted to C, it ran on Motorola EXORmacs machines and was considered for Atari ST before Atari selected GEMDOS as its OS. CP/M-68K also operated on SORD M68 and M68MX computer systems.
During this era, CP/M-8000 was created for the Zilog Z8000 CPU used in the Olivetti M20, with its codebase written in C.
These 16-bit adaptations required recompiling applications to function on new processors. To aid this transition, Digital Research provided utilities like XLT86 that translated Intel 8080 assembly language source code into Intel 8086 assembly code, optimizing program size and adjusting calling conventions to simplify porting from CP/M-80 and MP/M-80 to their respective 16-bit versions. XLT86 was accessible on both CP/M-80 and VAX/VMS platforms.
Displacement by MS-DOS
By the early 1980s, approximately 2,000 applications existed for CP/M, positioning it as the anticipated standard OS for emerging 16-bit computers. In 1980, upon Bill Gates’ recommendation, IBM approached Digital Research to license a CP/M version for their new PC. However, negotiations collapsed over disagreements related to a non-disclosure agreement, leading IBM to contract Microsoft instead for an operating system solution.
MS-DOS retained many foundational aspects of CP/M such as file management structures and drive letter conventions (A:, B:, etc.). Its primary advancement was introducing the FAT file system, which facilitated easier porting of popular CP/M programs like WordStar and dBase. Additionally, MS-DOS capitalized on greater memory availability typical of IBM PCs (usually at least 64 KB), supporting more integrated command-line utilities and faster performance on floppy-based hardware.
Initial IBM PC peripherals like the Baby Blue expansion card enabled running legacy 8-bit CP/M software before native versions were developed. Despite this compatibility effort, industry observers in the early 1980s regarded MS-DOS as more user-friendly and efficient than CP/M. By 1984, attempts to penetrate the home computer market with CP/M largely faltered due to high software prices. By 1986, manufacturers such as Kaypro had discontinued producing CP/M-based machines in favor of MS-DOS compatible hardware. As microcomputing gravitated toward IBM-compatible platforms, CP/M rapidly lost prominence and never regained its previous dominance. Major industry publications gradually ceased coverage of CP/M products during the late 1980s.
Subsequent releases of CP/M-86 enhanced both speed and usability while achieving compatibility with MS-DOS. Reflecting these changes, CP/M-86 was rebranded as DOS Plus, which later evolved into DR-DOS.
ZCPR
ZCPR (Z80 Command Processor Replacement) was launched on 2 February 1982 as a direct substitute for the standard console command processor (CCP) developed by Digital Research. This project was driven by "The CCP Group," a collective of enthusiasts spearheaded by Richard Conn, with members including Frank Wancho, Keith Petersen, Ron Fowler, Charlie Strom, and Bob Mathias.
The initial version, ZCPR1, appeared on a disk distributed by SIG/M (Special Interest Group/Microcomputers), affiliated with the Amateur Computer Club of New Jersey. Subsequently, ZCPR2 was released on 14 February 1983 as a collection of ten disks from SIG/M and later upgraded to version 2.3. This iteration was also provided in 8080 machine code to accommodate systems based on the 8080 and 8085 processors.
To commercialize the subsequent release while maintaining free distribution, Conn teamed up with Frank Gaude to form Echelon Inc. On 14 July 1984, ZCPR3 was introduced via nine disks from SIG/M. This version could be compiled with limited features for the 8080 and operated on machines lacking a Z80 CPU. Its capabilities included command shells, aliasing, input/output redirection, flow control mechanisms, named directories, search path support, customizable menus, password protection, and integrated online help.
In January 1987, Richard Conn ended his active development of ZCPR. Echelon then brought in Jay Sage to advance the project further. Sage's contributions led to ZCPR version 3.3, which discontinued support for the 8080 processors but incorporated numerous new features and utility programs. Despite enthusiastic adoption by CP/M users, ZCPR alone was insufficient to halt the overall decline of the CP/M operating system.
Hardware model
A basic CP/M system based on 8-bit architecture required the following components:
- An ASCII-compatible computer terminal
- A microprocessor such as the Intel 8080/8085 or Zilog Z80
- NEC V20 and V30 CPUs offered 8080 emulation capabilities allowing CP/M operation on PC-DOS/MS-DOS platforms; any IBM PC clone could also run CP/M-86
- Minimum of 16 KB RAM beginning at memory address zero
- A bootstrap mechanism to load the initial disk sector
- At least one floppy disk drive
Digital Research primarily marketed CP/M supporting Intel’s 8080 Development System. Hardware manufacturers adapted it to their specific configurations. Since the Z80 processor was backward-compatible with 8080 instructions, many systems running CP/M utilized Z80-specific BIOS implementations and software optimized for that CPU.
In collaboration with Zilog and American Microsystems, Digital Research developed Personal CP/M—an operating system embedded in ROM aimed at affordable systems that might lack disk drives. Initially deployed in the Sharp MZ-800 cassette-based computer with optional disk support, Personal CP/M took advantage of enhanced Z80 instruction sets rather than maintaining full compatibility with the original 8080 design.
American Microsystems introduced the S83 microprocessor compatible with the Z80 architecture; it integrated an 8 KB ROM containing OS and BIOS code along with circuitry for dynamic RAM interfacing. The unit price was set at $32 when purchased in quantities of one thousand.
Most systems implemented a minimal ROM-based bootloader combined with bank switching or bus injection techniques to meet the requirement that boot code reside at address zero in memory; some machines necessitated manual input via front-panel controls during startup.
CP/M utilized a 7-bit ASCII character set; however, manufacturers extended this set differently—Kaypro systems applied extensions for Greek letters, Osborne computers used the eighth bit for underlining text, and WordStar employed it as an end-of-word marker. International versions frequently adhered to ISO 646 standards by substituting certain ASCII characters instead of expanding beyond the standard 7-bit range.
Components
When CP/M is operational, the operating system loaded into memory is composed of three main parts:
- Basic Input/Output System (BIOS),
- Basic Disk Operating System (BDOS),
- Console Command Processor (CCP).
The BIOS and BDOS components remain resident in memory continuously, whereas the CCP stays resident until an application replaces it, after which it automatically reloads. Standard utilities are provided as transient commands, implemented as .COM files stored on disk.
The BIOS is responsible for managing hardware devices outside the CPU and main memory, including tasks such as character input/output and reading or writing disk sectors. The BDOS oversees the CP/M file system and handles input/output abstractions like redirection. The CCP interprets user commands, executing internal commands (such as DIR and ERA) or launching executable transient commands (for example, PIP.COM or STAT.COM). Third-party software typically runs as transient commands.
Across different CP/M versions, BDOS, CCP, and standard transient commands remain largely unchanged; only the BIOS is tailored to each hardware platform.
To utilize additional memory, CP/M must be reinstalled to recognize the expanded space. The MOVCPM utility facilitates this by relocating system code to new memory addresses through modification of jump and call instructions, thereby allowing applications to access the extra memory. The OS components reside in reserved disk sectors used during booting, with a bootloader—often embedded in ROM—loading the operating system from drive A:.
By contemporary standards, CP/M is quite rudimentary due to stringent size constraints. Early iterations did not detect disk changes, which could lead to data corruption if disks were swapped without reloading directories. Later releases introduced error notifications to prevent overwriting but still required a system reboot.
The majority of CP/M’s complexity lies within BDOS, with less in the CCP and transient commands. This modular architecture enabled porting only the BIOS to new hardware platforms to support the complete OS, minimizing development efforts and contributing to CP/M’s widespread adoption. Although modern operating systems commonly use hardware abstraction layers, CP/M’s layered design was pioneering at a time when most OSs were closely tied to specific machines.
Console Command Processor
The Console Command Processor (CCP) manages keyboard input and terminal output. CP/M supports both printing and video terminals, with all commands entered through the command line. The console typically displays a prompt such as A>, indicating the current default disk drive. Users can switch the default drive by typing its letter followed by a colon (e.g., B:), which updates the prompt accordingly.
CP/M’s command-line interface was inspired by Digital Equipment Corporation’s command languages found in systems like RT-11 and OS/8. Commands consist of keywords followed by parameters separated by spaces or special characters. Internal commands are executed directly by the CCP; otherwise, it loads executable files—referred to as "transient" programs—from disk and passes any parameters along. After a transient program finishes executing, BDOS reloads the CCP if it was overwritten, freeing up additional memory for applications.
Certain commands retain legacy names; for instance, file copying uses PIP, originating from an older DEC utility. Parameter conventions differ among programs without a standardized option indicator.
Built-in CCP commands include DIR, ERA, REN, SAVE, TYPE, and USER. Transient commands encompass ASM, DDT, DUMP, ED, LOAD, MOVCPM, PIP, STAT, SUBMIT, and SYSGEN.
With CP/M Plus (Version 3), built-in commands were improved: DIR excludes SYS-attribute files; DIRSYS / DIRS list SYS files; ERASE/ERA, RENAME/REN, TYPE/TYP, and USER/USE allow changing user numbers. CP/M 3 also introduced command abbreviation support. Its transient command set expanded to include COPYSYS, DATE, DEVICE, DUMP, ED, GET, HELP, HEXCOM, INITDIR, LINK, MAC, PIP, PUT, RMAC, SET, SETDEF, SHOW, SID, SUBMIT, and XREF.
Basic Disk Operating System
The Basic Disk Operating System (BDOS) is responsible for managing core functions such as file handling, console display output, and printing tasks. Applications interact with BDOS by loading processor registers with specific function codes and parameters before invoking a fixed memory location. This stable entry point ensures software compatibility across diverse hardware platforms.
Basic Input Output System
The Basic Input Output System (BIOS) delivers essential low-level services required by the operating system, including character input/output and reading or writing disk sectors. While BDOS performs some disk buffering, it assumes a constant sector size of 128 bytes prior to CP/M version 3.0, necessitating BIOS adjustments to accommodate different disk formats.
BIOS customization plays a crucial role in managing hardware variations—ranging from built-in video displays versus terminal interfaces, various UART chipsets for serial communication, to memory-mapped I/O contrasted with 8080 I/O addressing methods. By providing fixed service entry points for functions like character I/O and disk operations, BIOS standardizes these differences. Since modem support was minimal or non-existent within BIOS, many CP/M applications incorporated user-installed overlays to facilitate serial port communications.
Applications
CP/M served as the platform for several pioneering business applications, including WordStar for word processing, dBase as a database solution, and early spreadsheet programs such as VisiCalc and SuperCalc. These titles achieved leadership positions on CP/M and competed effectively in MS-DOS markets. The programming language environment Turbo Pascal, which later evolved into Borland Delphi, and the spreadsheet program Multiplan, a forerunner to Microsoft Excel, both originated on CP/M before their MS-DOS adaptations. Additionally, AutoCAD initially launched on CP/M. A wide array of compilers and interpreters supported languages like BASIC, Turbo Pascal, FORTRAN, and PL/I—including early offerings from Microsoft.
Software distributed for CP/M often included installer utilities designed to adapt programs across different hardware platforms. For instance, Kaypro II users frequently converted software originally formatted for Xerox 820 disks to be compatible with Kaypro drives. The availability of BASIC source code was widespread, and copy protection mechanisms were generally ineffective due to CP/M’s uniform disk format standards that promoted compatibility among software titles.
Although limited graphical capabilities restricted video game development, numerous text-based games were ported to CP/M. Notable examples include Telengard, Gorillas, Hamurabi, Lunar Lander, along with interactive fiction series such as Zork and Colossal Cave Adventure. Infocom consistently released its games in CP/M format. Lifeboat Associates distributed user-created freeware like XMODEM to support reliable file transfers over modems. Another prominent native CP/M application was the outline processor KAMAS.
Transient Program Area
In the original CP/M implementations for 8080, 8085, and Z80 processors, the read/write memory segment stretching from address 0100 hexadecimal up to just before the BDOS starting address at 0006H was designated as the Transient Program Area (TPA), reserved for application execution. Although these CPUs could address up to 64 KB of memory, the actual TPA size varied depending on system architecture since portions of memory were allocated to BIOS ROMs or video memory buffers. Techniques such as bank switching allowed expansion of the TPA by temporarily replacing ROM or video memory regions. With CP/M 3.0, this concept was further extended by enabling segments of BDOS itself to reside within bank-switched memory areas.
Application Debugging
CP/M featured a Dynamic Debugging Tool known as DDT, which provided capabilities for inspecting and altering memory and program components, as well as executing programs one instruction at a time.
Resident Software
At its inception, CP/M did not support terminate-and-stay-resident (TSR) utilities similar to those in DOS. Nonetheless, developers could extend system functionality by intercepting operating system calls, resulting in commercial add-ons like SmartKey, a keyboard enhancement tool. With the arrival of CP/M 3, dynamically loadable Resident System Extensions (RSX) were introduced, allowing resident programs to operate without the need for temporary files. Additionally, third-party solutions such as RSMs (Resident System Modules) were adapted to function on CP/M 2.2 platforms.
Installation of Software
Although CP/M abstracted hardware details for disk and console input/output, most applications required installation procedures to accommodate specific peripherals including printers and terminals. Device management often depended on manufacturer-specific escape sequences—for instance, commands for printer bold text—which varied between hardware models. Installation utilities enabled users to select devices or modify these escape sequences; however, this customization had to be performed individually for each program since no unified operating system service managed peripheral devices.
For example, printer initialization codes had to be embedded directly within software. In cases such as using Wordstar with different printers—say a rapid dot-matrix and a slower daisy wheel—distinct versions of the application were necessary. Users needed to load the appropriate version matching the printer in use, requiring reloading the program when switching between devices.
Disk Formats
The 128 byte-per-sector, single-density, single-sided disk format from the IBM System/34 and IBM 3740 became the de facto standard 8-inch floppy disk format for CP/M systems. There was no universal 5.25-inch disk format for CP/M; instead, manufacturers such as Kaypro, Morrow Designs, and Osborne implemented proprietary formats. The majority of software distribution occurred on the Xerox 820 format, compatible with machines like the Kaypro II. By 1981, approximately two dozen distinct formats were prevalent enough that software vendors had to support multiple disk types to reach wider audiences. For instance, JRT Pascal was available on various 5.25-inch disks—including North Star, Osborne, Apple, Heath/Zenith hard and soft sector variants, and Superbrain—as well as an 8-inch version. Ellis Computing supported Heath formats plus sixteen other 5.25-inch variants including TRS-80 CP/M versions. Lifetree and other companies also facilitated cross-system CP/M application conversions.
Differences in format arose from system design preferences and hardware constraints. CP/M permitted customization of reserved areas, directory structures, and logical-to-physical sector mappings; however, there was no standardized approach for loading formatting parameters from disks created on disparate systems.
Nearly all CP/M machines equipped with 8-inch drives could read IBM’s single-sided, single-density format. However, compatibility with other formats depended heavily on the disk drive and controller due to diverse floppy disk types across both 8-inch and 5.25-inch sizes. Variations included sectoring methods (hard versus soft), density (single or double), number of sides, track counts ranging from 35 to 80, sector layouts and sizes, as well as interleave patterns. Disk translation utilities allowed reading disks from different machines when formats were sufficiently similar; for example, the Kaypro II could access disks from TRS-80, Osborne, IBM PC, and Epson systems. Conversely, certain formats like 80-track or hard-sectored disks remained unreadable. Apple II users were confined to Apple’s GCR format and required either native Apple-format CP/M software or serial data transfers.
This highly fragmented CP/M disk environment compelled distributors to maintain inventory of multiple disk formats or invest in duplication hardware capable of handling several types. Compared with the more uniform IBM PC disk standards, this complexity contributed significantly to CP/M’s swift decline following 1981.
Among the final notable CP/M-compatible computers was the Commodore 128 released in 1985, which incorporated a Z80 processor dedicated to CP/M alongside its primary CPU. This system necessitated either a 1571 or 1581 disk drive to read soft-sector 40-track MFM formatted disks.
The earliest computer featuring a 3.5-inch floppy drive running CP/M was the Sony SMC-70. Other models supporting CP/M with 3.5-inch disks included the Commodore 128, Bondwell-2 laptop, Micromint/Ciarcia SB-180, MSX, and TRS-80 Model 4 (via Montezuma CP/M). Applied Engineering's CP/AM for Apple II also supported both 3.5-inch floppy disks and RAM disks implemented through memory expansion cards. The Amstrad PCW originally utilized 3-inch floppy drives before transitioning to 3.5-inch media.
File system
File names adhered to the 8.3 naming convention, allowing up to eight characters, followed by a dot, and a three-letter extension that indicated the file type, such as .COM for executable files or .TXT for text documents. When entered at the command prompt, filenames were automatically converted to uppercase; however, certain applications (for example, MBASIC) generated lowercase filenames that were not easily accessible through the command line.
Disk drives were designated by letters (e.g., A, B), and file paths began with the drive letter and colon (e.g., A:FILE.TXT). If no drive prefix was specified, the system defaulted to the current drive.
File sizes were recorded in units called records, each comprising 128 bytes corresponding to disk sectors. The operating system maintained size information within the file's File Control Block (FCB). Text files typically concluded with a control-Z character (ASCII SUB, hex 1A) to signify the end-of-file, influencing how software interpreted the file data.
With the introduction of larger removable and fixed disks, disk de-blocking was implemented, which increased logical allocation block sizes from 1 KB up to 32 KB for minimal files. This adjustment sometimes resulted in inefficient use of storage space when handling numerous small files.
CP/M 2.2 did not support file modification timestamps; however, this feature was optionally available in MP/M and CP/M 3.0.
While CP/M 2.2 lacked subdirectories, it provided 16 numbered user areas to organize files. Users could switch between these areas using the "User X" command, effectively isolating files under different user numbers—USER 0 served as the default area accessible by all users, whereas other user areas kept files separate. This arrangement allowed task-based partitioning on hard drives, enabling multiple users to operate on a single machine without mixing files despite limited security controls.
Graphics
Although early S-100 systems supported graphics capabilities, CP/M did not have standardized graphics functionality until 1982 with the introduction of GSX. Due to constrained memory resources, graphics usage was rare on 8-bit CP/M machines, which primarily displayed simple ASCII art or employed custom character sets. Certain models such as the Kaypro and TRS-80 Model 4 featured block graphics accessible through assembler programming or BASIC's CHR$ function. The TRS-80 Model 4 could render graphics at 640×240 pixels when equipped with an optional high-resolution expansion board.
Official
Some organizations developed official enhancements of CP/M derived from Digital Research’s source code. An example is IMDOS for the IMSAI 8080, a clone of the Altair 8800.
Compatible
A number of independently developed CP/M-compatible operating systems appeared without utilizing Digital Research code. These include:
- Cromemco CDOS by Cromemco
- MSX-DOS, compatible with CP/M and capable of running its software
- The Epson QX-10, offering either CP/M or TPM-II/III-compatible operating systems
- The British SAM Coupé, which provided an optional Pro-DOS OS compatible with CP/M-2.2
- Amstrad/Schneider CPC 6xx and PCW series distributed with CP/M disk packs
- Husky (computer), running DEMOS—a ROM-based loader supporting numerous CP/M applications
- ZSDOS, a BDOS replacement for CP/M-80 version 2.2 developed by Harold F. Bower and Cameron W. Cotrill
- CPMish, a free and open-source CP/M 2.2-compatible OS initially created without Digital Research code; it incorporated original DR components after receiving permission from Lineo in 2022 and is maintained by David Given
- LokiOS, released in 2023 by David Kitson for the Open Spectrum Project, a CP/M 2.2-compatible OS including BIOS, BDOS, CLI source code, original DR code, and hot-swappable operating system modules
- IS-DOS for the Enterprise (computer), developed by Intelligent Software
- VT-DOS for the Videoton TV-Computer, also produced by Intelligent Software
Improvements
Certain CP/M-compatible operating systems greatly enhanced the base capabilities, with examples like the multi-processor supporting TurboDOS.
Eastern Bloc Variants
In the former Eastern Bloc, numerous CP/M-80 versions were developed under diverse titles such as SCP (), SCP/M, CP/A, CP/J, CP/KC, CP/KSOB, CP/L, CP/Z, MICRODOS, BCU880, ZOAZ, OS/M, TOS/M, ZSDOS, M/OS, COS-PSA, DOS-PSA, CSOC, CSOS, CZ-CPM, DAC, HC among others. Additionally, derivatives of CP/M-86 included SCP1700, CP/K, and K8918-OS. These operating systems were manufactured by entities like the East German VEB Robotron and other regional producers.
Enduring Influence
Several aspects of Microsoft Windows trace their roots to compatibility with MS-DOS, which itself incorporated elements from CP/M. The system of drive letters and the 8.3 filename format found in MS-DOS and early Windows versions originated in CP/M. Usage of wildcard symbols such as ? and * in Windows is derived from CP/M practices, as are reserved device filenames like "PRN:" and "CON:". In CP/M, floppy disks were assigned drives A and B; this convention extended to MS-DOS where hard drives began at C:. The ^Z control character indicating end-of-file in text documents also comes from CP/M. Many DOS commands reflect their CP/M counterparts—for instance DIR, REN/RENAME, TYPE, and ERA/ERASE. Common file extensions including .TXT and .COM continue to be widely utilized.
Between 1997 and 1998, Caldera made available CP/M 2.2 executable files and source code under an open source license. This facilitated redistribution and modification of Digital Research's CP/M and MP/M related materials through Tim Olmstead’s "The Unofficial CP/M Web site." Following Olmstead’s passing in 2001, Lineo, which acquired these assets, updated and broadened the licensing terms.
In October 2014, marking four decades since CP/M's debut, the Computer History Museum published early versions of its source code.
As of , vintage computing hobbyists alongside some niche businesses maintain development and support for systems primarily operating on CP/M 2.2.
See also
- Amstrad CP/M Plus character set
- CPMulator
- CP/NET and CP/NOS
- Cromemco DOS, an independently developed OS based on CP/M
- Eagle Computer
- IMDOS
- List of machines running CP/M
- MP/M
- MP/NET and MP/NOS
- Multiuser DOS
- Pascal/MT+
- SpeedStart CP/M
- 86-DOS
- Kenbak-1
Further reading
- Rodnay Zaks, The CP/M Handbook With MP/M, SYBEX Inc., 1980, ISBN 0-89588-048-2
- Richard Conn, ZCPR3 - The Manual, New York Zoetrope, 1985, ISBN 0-918432-59-6
- Z-System Corner: Tenth Anniversary of ZCPR, The Computer Journal, Issue 54
- The origin of CP/M's name (archived)
- Mustafa A. Katie, Intel iPDS-100 Using CP/M-Video, 2013 (archived)
- IEEE Milestone in Electrical Engineering and Computing - CP/M - Microcomputer Operating System, 1974, Computer History Museum, 2014
- Triumph of the Nerds, PBS (includes IBM's choice of Microsoft DOS over Digital Research's CP/M for IBM PC)
- CP/M FAQ, comp.os.cpm and Digital Research official FAQ
External links
- The Unofficial CP/M Website (Tim Olmstead) – features source code access
- Gaby Chaudry's CP/M and Computing History Portal – contains resources on ZCPR
- CP/M Central Page – a technical reference by John C. Elliott
- MaxFrame’s Digital Research CP/M site (archived)
- ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedKildall_1980_CPM - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedKildall_1975_BDOS - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedjohnson - ↑ ...
- ↑ ...
- ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedCPM.NYT83 - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedKildall_1993 - ↑ 8.0 8.1 Cite error: Invalid
<ref>tag; no text was provided for refs namedKildall.NYT - ↑ 9.0 9.1 Cite error: Invalid
<ref>tag; no text was provided for refs namedwilkinson19811019 - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedwise19820510 - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedmeyer19820614 - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedInfoworld 1981 - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs nameddacruz19840427 - ↑ Clarke, A.; Eaton, J. M.; David, D. Powys Lybbe (October 26, 1983). CP/M - the Software Bus: A Programmer's Companion. Sigma Press.
- ↑ Johnson, Herbert R. (July 30, 2014). "CP/M and Digital Research Inc. (DRI) History".
- ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedSwaine_1997_Entrepreneurship - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedbunnell19820203 - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedlibes198206