Hubbry Logo
MP/MMP/MMain
Open search
MP/M
Community hub
MP/M
logo
7 pages, 0 posts
0 subscribers
Be the first to start a discussion here.
Be the first to start a discussion here.
MP/M
MP/M
from Wikipedia

MP/M
DeveloperDigital Research, Inc. / Tom Rolander,[1][2][3][4] Gary Kildall, Frank Holsworth[5][6]
OS familyCP/M
Working stateDiscontinued
Source modelOriginally closed source, since open sourced
Initial release1979; 47 years ago (1979)[7][8]
Latest release2.1 / 1982; 44 years ago (1982)
Available inEnglish
Supported platforms8080, 8085, Z80, 8086, 80286
Kernel typeMonolithic kernel
Default
user interface
Command-line interface
LicenseOriginally proprietary, now BSD-like
Preceded byCP/M, CP/M-86
Succeeded byConcurrent CP/M, Concurrent CP/M-86
Official websitewww.cpm.z80.de

MP/M (Multi-Programming Monitor Control Program[8]) is a discontinued multi-user version of the CP/M operating system, created by Digital Research developer Tom Rolander in 1979.[1][7][8][9][2][3][4] It allowed multiple users to connect to a single computer, each using a separate terminal.

MP/M was a fairly advanced operating system for its era, at least on microcomputers. It included a priority-scheduled multitasking kernel (before such a name was used, the kernel was referred to as the nucleus) with memory protection, concurrent input/output (XIOS) and support for spooling and queueing. It also allowed for each user to run multiple programs, and switch between them.

MP/M platforms

[edit]

MP/M-80

[edit]

The 8-bit system required a 8080 (or Z80) CPU and a minimum of 32 KB of RAM to run, but this left little memory for user applications. In order to support reasonable setups, MP/M allowed for memory to be switched in and out of the machine's "real memory" area. So for instance a program might be loaded into a "bank" of RAM that was not addressable by the CPU, and when it was time for the program to run that bank of RAM would be "switched" to appear in low memory (typically the lower 32 or 48 KB) and thus become visible to the OS. This technique, known as bank switching was subsequently added to the single user version of CP/M with version 3.0.

One of the primary uses of MP/M, perhaps to the surprise of DRI, was as a "power user" version of CP/M for a single user. The ability to run several programs at the same time and address large amounts of memory made the system worth the extra price.

MP/M II 2.0 added file sharing capabilities in 1981,[10][11][12] MP/M II 2.1 came with extended file locking in January 1982.[10]

Versions:

  • MP/M 1.0 (1979)[13]
  • MP/M 1.1[10] (January 1980)
  • MP/M II 2.0 (July 1981,[11][12] added: file sharing)[10]
  • MP/M II 2.1 (January 1982, added: extended file locking)[10]

MP/M-86

[edit]

Like CP/M, MP/M was eventually ported to the 16-bit Intel 8086, and appeared as MP/M-86 2.0 in September 1981.[14][15][16] Main developers of the system include Francis "Frank" R. Holsworth,[5][6] later a director of marketing at Digital Research. Known revisions of MP/M-86 2.0 were dated 25 September 1981 and 5 October 1981. There also was an MP/M-86 2.1 dated 20 July 1982.[17]

MP/M-86 2.1 absorbed some of the technology of CP/M-86 1.1 (BDOS 2.2) to become Concurrent CP/M-86 3.0[nb 1] (BDOS 3.0) in late 1982,[18] which also added support for "virtual screens".[18] Kathryn Strutynski, the project manager for CP/M-86, continued as project manager for Concurrent CP/M-86. In December 1983,[19] a DOS emulator named PC-MODE became available as an optional module for Concurrent CP/M-86 3.1 (BDOS 3.1), shipping on 21 February 1984,[20] and the system was further developed into the MS-DOS compatible Concurrent DOS (BDOS 3.1 and higher).[21] This in turn continued to evolve into FlexOS and Multiuser DOS and as such is still in use in some industrial applications.

Concurrent CP/M is often abbreviated CCP/M.[22]

MP/M 8-16

[edit]

MP/M 8-16 (sometimes also referred to as MP/M-8/16[18]) was CompuPro's name for a combination of the multi-user 16-bit MP/M-86 to perform single-user, single-stream CP/M functions, along with multi-user, multi-tasking 8-bit MP/M operations[18] running on the multi-processor CompuPro System 816 [sr].[23] Later on, this system was also able to run Concurrent DOS 3.1.

MP/M-286

[edit]

In 1982, Digital Research announced plans to develop MP/M-286 to take advantage of the 16-bit Intel 80286's new memory management and protection features to run existing MP/M-86 and CP/M-86 applications.[24] This was apparently never published "as is", but was further developed into Concurrent CP/M-286,[25] which seems to have formed the basis for the later Concurrent DOS 286 in 1985[25] and FlexOS 286 in 1986.

Commands

[edit]

The following list of commands are supported by the MP/M II Console Command Processor CCP:[26]

  • ABORT
  • ATTACH
  • ASM
  • CONSOLE
  • DDT
  • DIR
  • DSKRESET
  • DUMP
  • ED
  • ERA
  • ERAQ
  • GENHEX
  • GENMOD
  • GENSYS
  • LIB
  • LINK
  • LOAD
  • MPMLDR
  • MPMSTAT
  • PIP
  • PRINTER
  • PRLCOM
  • RDT
  • REN
  • RMAC
  • SCHED
  • SDIR
  • SET
  • SHOW
  • SPOOL
  • STAT
  • STOPSPL
  • SUBMIT
  • TOD
  • TYPE
  • USER
  • XREF

CP/NET, CP/NOS, MP/NET and MP/NOS

[edit]

In the early 1980s Digital Research also developed networking software named CP/NET used to connect an MP/M server with multiple CP/NET clients (named requesters) running CP/M.[27] It was originally developed by Tom Rolander.[2]

MP/NET was an MP/M system with networking allowing the MP/M system to function as both requester and server with CP/M requesters.[27]

The CP/NET clients could also be run in a diskless configuration with the system stored in ROM, then named CP/NOS (with NOS for Network Operating System). Similar, MP/NOS contained MP/M without local disk facilities. Like CP/NOS, MP/NOS performed the disk functions through the network.[27]

The system allowed to share files and printers and send electronic messages.

  • NIOS – Network I/O System[28]
  • SNIOS – Slave Network I/O System[28]
  • NDOS – Network Disk Operating System[28]

CP/NET existed in versions 1.0, 1.1 and 1.2 in versions for 8080 and Z80 processors. CP/NET-86 for 8086 was available as well.

Later incarnations were DR Net and FlexNet.

Legacy

[edit]

Caldera permitted the redistribution and modification of all original Digital Research files, including source code, related to the CP/M and MP/M families through Tim Olmstead's "The Unofficial CP/M Web site" since 1997.[29][30][31] After Olmstead's death on 12 September 2001,[32] the free distribution license was refreshed and expanded by Lineo, who had meanwhile become the owner of those Digital Research assets, on 19 October 2001.[33][34][35][36]

Notes

[edit]

References

[edit]
Revisions and contributorsEdit on WikipediaRead on Wikipedia
from Grokipedia
MP/M (Multi-Programming Monitor Control Program) is a multi-user, multi-tasking operating system developed by as an extension of the single-user CP/M, enabling concurrent program execution and resource sharing among multiple terminals on 8-bit microcomputers. Introduced in 1979 by engineer Tom Rolander at Digital Research, MP/M represented an early advancement in microcomputer operating systems by incorporating time-sharing and file-sharing mechanisms, allowing up to eight users to interact with the system simultaneously through dedicated consoles. It targeted hardware based on the Intel 8080, 8085, or Zilog Z80 microprocessors, requiring at least 32 KB of RAM, a clock/timer interrupt, and floppy disk storage, while supporting configurations with up to 16 disk drives (each up to 8 MB), 16 printers, and 16 input/output devices. The original MP/M release focused on basic multi-user support with multiprogramming at each terminal, including utilities for file management (such as directory listings via DIR and SDIR commands), password protection (up to eight characters per file or drive), and attribute settings (read-only, system, and archive flags). It maintained upward compatibility with CP/M applications, requiring minimal modifications for most programs, and introduced time-stamping for file creation, access, and updates to enhance data tracking. In 1981, Digital Research released MP/M II, an enhanced version that expanded capabilities to support up to 16 users and 400 KB of banked RAM through memory segmentation, allowing efficient allocation of up to seven user memory segments per process. This iteration included resident system processes (RSPs) and banked resident system processes (BRSs) for handling I/O operations, along with over 30 built-in utilities like PIP for file copying, ED for text editing, and SET for configuring system attributes. MP/M II also integrated with Digital Research's CP/NET networking protocol, enabling interconnection of multiple microcomputers for shared resources across a local network. Later variants included MP/M-86 (ported to the Intel 8086 processor in the early 1980s) and MP/M 8-16, which bridged 8-bit and 16-bit architectures, paving the way for successors like Concurrent CP/M-86 and Concurrent DOS. Overall, MP/M played a pivotal role in transitioning microcomputing from single-user environments to multi-user setups, influencing early networked and shared-resource systems before being superseded by more advanced 16- and 32-bit operating systems in the mid-1980s.

History and development

Origins in CP/M

MP/M emerged as a multi-user, multi-programming extension of the CP/M operating system, developed by Digital Research to overcome the inherent limitations of CP/M's single-user design in environments requiring shared access to hardware resources, such as business offices or laboratory settings. CP/M itself was structured around three primary layers: the Basic Input/Output System (BIOS), which handled hardware-specific I/O operations; the Basic Disk Operating System (BDOS), which managed file and disk operations through standardized interfaces; and the Console Command Processor (CCP), which provided the user interface for command interpretation and execution. This modular foundation allowed Digital Research to adapt CP/M for more complex scenarios without overhauling its core architecture. The initial concept for MP/M was conceptualized in late 1978 or early 1979, closely following the release of CP/M 2.0 in 1979, which introduced enhancements in disk and memory management that paved the way for multi-user capabilities. Led by developer Tom Rolander, the system was designed to support multiple concurrent users on a single machine through time-sharing mechanisms, where the CPU and peripherals could be allocated dynamically among users connected via terminals. This addressed CP/M's restriction to one active user at a time by implementing resource allocation strategies, such as bank switching to provide each user with up to 48 KB of private memory while sharing a common 16 KB kernel, all within a total of 64 KB RAM. Digital Research's motivation stemmed from market demands for efficient shared computing, exemplified by interest from companies like Siemens seeking a multitasking OS for professional applications such as word processing across multiple terminals. Rolander single-handedly developed the first version of MP/M in 1979, including its utilities and documentation, fitting the entire OS into just 16 KB to ensure compatibility with contemporary hardware constraints. Announced that year, MP/M marked Digital Research's strategic pivot toward multi-user systems, building directly on CP/M's portable and extensible design to enable collaborative workflows in resource-limited settings.

Key releases and evolution

MP/M was developed by Tom Rolander at Digital Research in 1979, with architectural guidance from company founder Gary Kildall. The initial version, MP/M 1.0, was released that year for 8-bit systems based on the Intel 8080 processor, providing multitasking capabilities within a constrained 16 KB memory footprint. A subsequent update, MP/M 1.1, arrived in 1980. In response to user needs for better resource sharing in multi-user environments, Digital Research introduced MP/M II in 1981, enhancing multitasking with features like record and file locking to enable concurrent access without data conflicts. This version debuted as MP/M II 2.0, followed by 2.1 later that year, which refined system utilities and extended support for up to 16 users and 512 MB of storage per drive. Parallel to these 8-bit advancements, Digital Research released MP/M-86 in November 1981 as a 16-bit adaptation for the Intel 8086 processor, marking the system's evolution toward more powerful hardware while maintaining compatibility with earlier MP/M applications. However, naming inconsistencies arose, leading to a rebranding in late 1982 where MP/M-86 merged with elements of CP/M-86 to form Concurrent CP/M-86 version 3.0, emphasizing unified branding for multitasking and multi-user features. Planning for MP/M-286 began in 1982 to leverage the Intel 80286's protected mode capabilities, but the project faced delays and ultimately rebranded as Concurrent CP/M-286, which delivered limited 80286 support and fell short of initial promises for robust virtual memory and enhanced concurrency. This period reflected Digital Research's broader strategic shift from the MP/M line to the Concurrent family, driven by marketing needs to consolidate overlapping features and streamline product positioning amid growing competition in the OS market.

Architecture and design

Core components and multitasking

MP/M features a monolithic kernel design, centered on the XDOS module, which serves as the real-time nucleus responsible for process dispatching, memory management, and system timing. This kernel integrates core components such as the Console Driver, which manages input/output for up to 16 consoles through Terminal Message Processes (TMPs) using reentrant code to handle functions like console input and output. The Resident System Module (RSX) provides optional Resident System Processes (RSPs) for custom system tasks, integrated during system generation and residing in common or banked memory to extend kernel functionality. Additionally, the Banked Memory Driver supports up to eight memory segments via bank switching, with segment zero reserved for system modules, enabling process isolation without true memory protection in early implementations. Multitasking in MP/M is implemented through priority-driven scheduling, where the dispatcher selects the highest-priority ready process, employing round-robin time-sharing among processes of equal priority. The system supports up to 16 concurrent users. Processes can suspend when awaiting resources such as queues or devices and resume upon availability, tracked via status flags in process descriptors that save and restore execution states. Priority levels range from 0 (highest) to 255 (lowest, assigned to the IDLE process), adjustable by users to influence resource allocation. Dispatching occurs at system calls, interrupts, and clock ticks, typically every 1/64th second, ensuring responsive operation across multiple users. Multi-user support emulates a virtual CP/M environment for each of up to 16 users, identified by numbers 0-15, with shared access to files controlled by locking mechanisms to prevent conflicts, including modes for locked, unlocked, or read-only access via a system lock list. The Console Command Processor (CCP) serves as the command-line interface, adapted for multi-user input through TMPs, interpreting commands, loading programs or RSPs from queues, and initializing base pages with command lines at memory address 0080H. Early versions like MP/M I relied on cooperative multitasking, where processes yield control voluntarily at system calls or interrupts without preemption, potentially leading to delays if a process hogs resources. Later iterations, such as MP/M II, introduced preemptive multitasking with priority-based dispatching and non-blocking console I/O—returning immediately if no input is available—to enhance responsiveness and prevent indefinite suspensions. Isolation depends on bank switching rather than hardware-enforced memory protection, limiting robustness against errant processes in all versions.

Memory management and hardware support

MP/M's memory management is designed to support multi-user and multi-programming environments on limited hardware, primarily through bank switching on 8-bit systems and segmentation on 16-bit variants. The original MP/M-80 requires a minimum of 32 KB of RAM, with system overhead under 15 KB for configurations supporting two consoles and eight memory segments. Later versions, such as MP/M II, demand at least 43 KB of RAM, accommodating up to 400 KB of banked memory, while MP/M-286 extends support to 1 MB total address space. This overhead, approximately 26 KB in MP/M II, includes the kernel and essential system structures, leaving the remainder for user processes. For 8-bit systems, MP/M employs bank switching to simulate larger address spaces beyond the 64 KB limit of processors like the Intel 8080, 8085, or Zilog Z80. This technique divides memory into up to 16 segments of configurable size (typically 48 KB each), each switchable into the CPU's address space to enable concurrent user contexts without requiring expanded hardware. Bank 0 remains active at initialization and may hold allocation vectors, while switching is disabled during direct memory access (DMA) operations to prevent corruption. Hardware abstraction occurs via BIOS adaptations in the eXtended Input/Output System (XIOS), allowing portability across 8080/8085/Z80 platforms by mapping device-specific calls to standardized interfaces. The file system builds on CP/M's File Control Block (FCB) model but introduces a shared Basic Disk Operating System (BDOS) with record locking for concurrent access in multi-user scenarios. Record locking functions (e.g., lock/unlock via BDOS calls 42 and 43) use a configurable system lock table to manage locked records in files, supporting up to 262,144 records of 128 bytes per file, supporting modes like locked, unlocked, or read-only to prevent conflicts while allowing shared reads on unlocked files. This extends CP/M's sequential access paradigm to handle up to 16 drives and 32 MB file sizes. Each user process operates in a dedicated Transient Program Area (TPA) within its memory segment, starting at offset 0100H for non-relocatable code like CP/M-compatible .COM files, with the TPA size determined by the segment's configuration (up to 48 KB). A common system area, accessible to all processes, holds shared code such as the resident BDOS (~2.8 KB) and system data pages (256 bytes), including process descriptors and queues in non-banked setups. This separation ensures efficient resource sharing while isolating user execution. In 16-bit versions like MP/M-86, memory management shifts to segmentation compatible with the Intel 8086 and 80286 processors, using a Memory Segment Table to define relocatable or absolute segments, each with a base address, size (up to 64 KB), attributes, and bank number. Operating in real mode limits addressing to 1 MB via 20-bit physical addresses, with no hardware memory protection, exposing the system to crashes from errant code. Address gaps arise from non-contiguous banked segments and the 8086's segmented model, where offsets within 64 KB segments cannot span boundaries without reconfiguration, complicating contiguous access in multi-segment applications. BIOS adaptations handle hardware specifics, such as interrupt vectors for the 8086's expanded instruction set.

Versions and platforms

MP/M-80

MP/M-80 was the initial 8-bit implementation of Digital Research's multi-user operating system, designed specifically for microcomputers equipped with Intel 8080, 8085, or Zilog Z80 processors. Released in 1979 as version 1.0, it marked the first commercial multi-programming extension of CP/M, enabling concurrent operation across multiple terminals on resource-constrained hardware typical of the era. Subsequent updates included version 1.1 in 1980, which refined basic multi-user support, followed by the more advanced MP/M II series with version 2.0 in 1981 and 2.1 in 1982, introducing enhanced memory management and system stability. A core feature of MP/M-80 was its support for up to seven concurrent users, allowing multiple operators to share a single central processing unit and peripherals through time-sharing. Each user could access up to 56 KB of memory, allocated from a banked RAM configuration that segregated user programs to prevent interference while the system kernel occupied a fixed portion, typically around 26 KB. Banked I/O facilitated terminal connectivity, enabling the attachment of multiple serial consoles via hardware interfaces, which was essential for multi-user environments. This design prioritized efficient resource allocation on 8-bit systems, where total memory rarely exceeded 64 KB without expansion. System implementation relied on the SYSGEN utility for customization during installation, a process that generated a tailored system image by configuring parameters such as the number of consoles, disk drives, and memory banks. Administrators used SYSGEN to define console assignments, often mapping multiple serial ports to support asynchronous terminals, which required precise hardware setup to ensure reliable input/output polling. For instance, console configuration involved specifying baud rates and interrupt vectors to handle user interactions without halting the scheduler. This step was critical for adapting MP/M-80 to diverse hardware, including floppy or hard disk storage for shared file access. MP/M-80 found early adoption in S-100 bus systems, where it powered multi-user setups for business and educational applications, such as shared accounting or data entry terminals. These implementations typically demanded custom hardware, including multi-port serial cards or memory expansion boards, to accommodate additional consoles and prevent bottlenecks in I/O operations. The system's modularity aligned well with the S-100 standard's plug-in architecture, allowing hobbyists and small firms to build cost-effective multi-terminal configurations. Early versions, particularly 1.1, suffered from limitations in file handling, including inadequate record-level locking that could lead to concurrent access conflicts in multi-user scenarios. These issues, such as unreliable file sharing during simultaneous reads and writes, were addressed in MP/M II through the introduction of extended file locking mechanisms, which allowed processes to maintain granular control over file regions even after opening. Version 2.1 further refined this by supporting unlocked file modes and improved directory consistency, enhancing reliability for shared environments.

MP/M-86

MP/M-86 represented Digital Research's adaptation of the multi-user MP/M operating system to 16-bit architectures, specifically targeting the Intel 8086 processor family. Released in version 2.0 in November 1981, followed by version 2.1 in 1982, it extended the capabilities of its 8-bit predecessor by leveraging the expanded addressing of 16-bit processors. The system supported up to 16 concurrent users and a minimum of 64 KB of RAM, with configurations scalable to utilize the full 1 MB address space available on 8086-based hardware. Key enhancements in MP/M-86 focused on exploiting 16-bit architecture for improved performance and scalability. It employed a segment-based memory management model inherent to the 8086, allowing for a larger effective address space compared to the flat 64 KB limit of 8-bit systems, thereby enabling more efficient allocation for multiple processes. Input/output operations were optimized through enhanced drivers supporting 16-bit data buses, facilitating faster device interactions and better compatibility with contemporary peripherals. Unlike hybrid systems such as MP/M 8-16, MP/M-86 maintained a pure 16-bit focus, ensuring all components operated natively without 8-bit emulation overhead. The operating system primarily supported Intel 8086 and 8088 processors, with adaptations demonstrated on platforms like the IBM PC XT through community installations and modifications. By late 1982, MP/M-86 evolved directly into Concurrent CP/M-86 version 3.0, incorporating windowing capabilities for virtual consoles and enhanced compatibility with emerging DOS environments, marking a transitional step toward more advanced multitasking paradigms.

MP/M 8-16

MP/M 8-16 was a hybrid multi-user operating system developed by CompuPro as a proprietary implementation of Digital Research's MP/M-86, specifically tailored for mixed 8-bit and 16-bit processor environments, and first released in September 1982. It targeted the CompuPro System 816, a dual-processor S-100 bus computer featuring an Intel 8080/8085/Z80 8-bit CPU alongside an Intel 8086/8088 16-bit CPU, requiring minimum hardware including 256 KB of RAM, System Support 1 board, and disk interfaces for floppy or hard drives up to 40 MB. The system extended the core structure of MP/M-86 version 2.x, incorporating enhancements like the SWITCH utility for processor transitions and a shared shell, while maintaining compatibility with Digital Research's interface levels to avoid disrupting standard MP/M-86 operations. A key feature of MP/M 8-16 was its ability to execute 8-bit CP/M-80 applications alongside 16-bit [[CP/M-86]] programs simultaneously in a multi-tasking, multi-user environment supporting up to 15 terminals. This concurrency relied on inter-processor communication through the MP/M-86 kernel and a real-time monitor for resource arbitration, enabling seamless task switching between processors without halting the system. Shared memory was facilitated via 64 KB blocks dedicated to processor handoffs, with each 8-bit task allocated over 60 KB of workspace and the overall system supporting up to 1 MB of addressable user memory per process, divided into banks for efficient allocation in 4 KB increments. Cross-processor file sharing was implemented through the unified MP/M-86 file system, which included features like password protection, hierarchical directories, time/date stamping, and support for up to 16 logical drives totaling 8 GB of storage capacity. Despite its innovative design for hybrid setups, MP/M 8-16 saw limited adoption confined to CompuPro's niche S-100 ecosystem, as it demanded specialized dual-CPU hardware and could not run 8-bit software on the 16-bit processor alone. Documentation remains scarce today, primarily preserved in archived technical manuals and product catalogs from the early 1980s, with core references including the MP/M-86 User's Guide for foundational operations.

MP/M-286

MP/M-286 was announced by Digital Research in 1982 as an advanced iteration of the MP/M multi-user operating system, specifically tailored for the newly introduced Intel 80286 microprocessor. The system was designed to harness the 80286's protected mode capabilities, enabling genuine memory protection through multilevel schemes and supporting up to 16 MB of physical addressing, while offering virtual memory expansion to 1 GB. This represented a significant leap from earlier real-mode limitations in prior MP/M versions, aiming to facilitate more robust multi-user environments on 16-bit hardware. Central to MP/M-286's architecture were enhanced multitasking features that leveraged the 80286's segment and descriptor mechanisms for improved process isolation and resource allocation. These elements allowed for efficient context switching and protection rings to prevent interference between user sessions or applications. Compatibility with existing MP/M installations was preserved via a real-mode fallback option, permitting legacy 8086/8088 software to run alongside protected-mode tasks. The operating system targeted emerging 80286 platforms, including prototypes and early systems akin to the forthcoming IBM PC/AT, with Intel providing dedicated development hardware to Digital Research for prototyping and testing. Despite these ambitions and the existence of prototypes, MP/M-286 was never fully developed or released as a standalone product under its original designation. Development efforts were redirected amid evolving market conditions for 80286 systems, with Digital Research prioritizing the broader Concurrent OS family; by 1983, the project had been rebranded and integrated into Concurrent CP/M-286, which built upon the planned protected-mode multitasking and memory features. This evolution culminated in related releases like Concurrent DOS-286 in 1985, featuring hardware-accelerated context switching in as little as 20 μs, descriptor-based protection, and support for up to 512 KB minimum RAM (with 160 KB core requirements).

Commands and user interface

Built-in commands

MP/M's built-in commands form the primary interface for users interacting with the operating system, extending CP/M's single-user utilities to accommodate multiple concurrent users and processes across shared resources. These commands handle file operations, process management, and system status queries while enforcing user-specific access controls and resource locking to prevent conflicts in a multi-user environment. Unlike CP/M, MP/M commands incorporate console identifiers and user area specifications to manage interactions from different terminals. The ABORT command terminates a running program or process, adapting CP/M's single-process halt to MP/M's multitasking by allowing specification of a target console. Syntax: ABORT [programname] [n], where n is the console number (defaulting to the current one if omitted). For example, ABORT TYPE 1 stops the TYPE program on console 1 from another console, enabling remote process control in multi-user setups. This is essential for administrators to manage hung sessions without rebooting the system. DIR lists files in the directory of a specified drive or user area, with multi-user filters to restrict visibility to the current user's files unless overridden. Syntax: DIR [filespec] [SYS] [Gn], where [SYS] includes system files and [Gn] displays files for user n (0-15). An example is DIR B:*.TXT [G3], which shows text files for user 3 on drive B, supporting isolated file views in shared disk environments. File copying and manipulation are handled by PIP, which transfers data between drives or devices while respecting multi-user locking to avoid concurrent modifications. Syntax: PIP dest=source [options], such as [G] for global access across users or [AV] for append and verify. For instance, PIP B:=A:*.PRL [G] copies program files from drive A to B, opening source files read-only and applying system locks to prevent interference from other users. In MP/M II, enhanced locking modes (locked, unlocked, read-only) further protect shared files during transfers. TYPE displays the contents of ASCII files to the assigned console, with options for paging in multi-user scenarios where output must not overwhelm shared terminals. Syntax: TYPE filespec [PAGE], e.g., TYPE DOCUMENT.TXT [PAGE] pauses after 24 lines. Multi-user adaptations include password handling for protected files (e.g., TYPE file;XYZ) and automatic routing to the invoking console, ensuring output isolation. The STAT command queries and sets file or disk attributes, providing system status including active user loads and resource usage in multi-user contexts. Syntax: STAT filespec [attribute], such as STAT B:*.* to list sizes and read/write status for all files on drive B. It reports per-user disk space and console activity, e.g., showing logged-in users and their processes, which aids in monitoring system load without deeper kernel access. In MP/M II, STAT supports explicit attribute changes for sharing, like setting read-only to enable concurrent reads while blocking writes. Multi-user session management relies on commands like CONSOLE, which identifies the current terminal for process attachment. Syntax: CONSOLE, displaying the console number. This facilitates terminal identification in environments with multiple CRTs or teletypes. The USER command logs in or switches to a specific user area, isolating file access. Syntax: USER [n], e.g., USER 3 changes to user 3's directory context (users 0-15), enforcing privacy in shared storage. BYE logs off the current user, terminating their session and freeing resources while keeping the system running for others. Batch processing, absent pipelines in MP/M, uses SUBMIT to execute sequential commands from a .SUB file, supporting automated multi-user tasks. Syntax: SUBMIT filename.SUB, e.g., SUBMIT START.SUB runs a script of commands like DIR followed by PIP, with logging to track execution across users. MP/M II introduced refined locking via BDOS attributes in these commands, allowing explicit shared access without a dedicated SHARE utility, building on original MP/M's basic read/write protections.

Console and console driver operations

The Console Driver (CD) in MP/M serves as the primary interface for managing multiple user consoles, supporting up to 16 consoles connected via serial ports or other hardware interfaces on compatible systems. It handles input and output operations for text-based terminals, typically dumb terminals connected via RS-232 interfaces, ensuring efficient communication in a multi-user environment. The CD operates within the eXtended Input/Output System (XIOS), which provides low-level access to hardware devices, and is customized during the system generation (SYSGEN) process to assign specific ports and configure the number of active consoles. Console operations emphasize responsiveness through interrupt-driven I/O, where input is buffered per console using dedicated queues and 256-byte process descriptors that include stacks and buffers for each Terminal Message Process (TMP). For instance, the READ CONSOLE BUFFER function (BDOS Function 10) allows line editing with control characters like rubout or Ctrl-C, while asynchronous input is managed via FLAG WAIT and FLAG SET calls for interrupt systems. Output is queued to prevent overlaps, with polling mechanisms ensuring orderly transmission to devices; in polled configurations common to early setups, the system checks console status via CONST before proceeding. These mechanisms support up to 16 consoles but are limited to ASCII text handling, with the high-order bit zeroed for compatibility. The Master Console, designated as console #0, functions as the privileged interface for the system operator, displaying initialization details like the configuration table and memory map upon boot. It enables exclusive access to commands such as BOOT or RESET, which invoke BIOS entry points for system initialization or warm boot without hardware reconfiguration. During SYSGEN, operators specify port assignments (e.g., data ports at addresses like 0F6h for RS-232) and the maximum number of consoles, typically starting with 2-4 in early implementations on platforms like the Intel MDS-800. Early MP/M versions relied on polled I/O due to simpler hardware, lacking graphical support and restricting operations to text-only interactions, which could introduce delays in high-concurrency scenarios but ensured reliability on 8-bit systems.

Networking extensions

CP/NET and CP/NOS

CP/NET was a network operating system developed by Digital Research to interconnect multiple CP/M-based microcomputers, enabling resource sharing in a distributed environment. Released around 1981, it extended the CP/M architecture by introducing networked access to peripherals and files, primarily targeting 8080, 8085, and Z80 processors. The system operated through a server-requester model, where dedicated server nodes managed shared resources and requester nodes initiated access requests, maintaining compatibility with standard CP/M applications via extended Basic Disk Operating System (BDOS) calls. Key features of CP/NET included file and printer sharing across networked nodes, allowing up to 63 requesters to connect to a single server for operations such as reading, writing, and printing. It supported dynamic login and logoff tracking to manage active connections, with error handling integrated into the CP/M framework to report network-specific issues like timeouts or access denials. The architecture separated logical network functions from physical hardware, using modules like the Network Disk Operating System (NDOS) for request processing and the Server Network I/O System (SNIOS) for communication. This design facilitated scalability in small office or educational settings, where multiple single-user workstations could share expensive disk drives or printers without dedicated hardware. CP/NET supported various hardware interfaces, including RS-232 serial links for point-to-point or multidrop topologies and Ethernet-like networks such as the Corvus OMNINET, which used twisted-pair cabling at 1 Mbps. These configurations required additional network adapters, like ULCnet connectors or intelligent controllers, and were implemented with either polling or interrupt-driven I/O to minimize overhead on the host CPU. Servers typically ran under MP/M II for multi-user support, while requesters used standard CP/M 2.2, ensuring seamless integration where MP/M hosts could serve CP/M clients through shared BDOS functions without modifying application code. CP/NOS served as an enhanced variant of CP/NET tailored for standalone servers and diskless requester stations, providing a lightweight environment for nodes without local storage. It included a bootstrap loader that fit within 4K of ROM or PROM, enabling diskless booting over the network by initializing a skeletal CP/M system with console, printer, and logical disk functions routed through the server. This allowed diskless microcomputers to function as full requesters, accessing remote files and peripherals as if they were local, and was particularly useful for thin-client setups in resource-constrained networks. CP/NOS maintained the same server-requester paradigm as CP/NET, with servers under MP/M II handling I/O requests via extended network protocols.

MP/NET and MP/NOS

MP/NET served as the primary networking extension for MP/M, building upon the foundational CP/NET architecture to accommodate MP/M's multi-user environment. Released in the early 1980s, it enabled interconnections among multiple MP/M systems, allowing them to share peripherals such as disks, consoles, and printers in a network of multi-user nodes, with MP/M machines functioning as both requesters and servers. It also supported connections from CP/M-80 workstations to MP/M servers for compatibility. Per-user authentication was handled through utilities like LOGIN and LOGOFF, which established and terminated sessions between requesters and servers, ensuring secure multi-user interactions. A core component of MP/NET was the Network DOS (NDOS), which provided transparent file access by supporting network File Control Blocks (FCBs) and reconciling discrepancies in file system operations between CP/M-80 and MP/M II, such as record locking and user areas. The system utilized a byte-count-oriented data-link protocol with structured message formats, including fields for function types, destination IDs, and source IDs, to manage data transmission over various media, including custom serial connections via RS-232C. MP/NET integrated seamlessly with MP/M II to enable file locking and sharing over networks, supporting configurations where MP/M systems could function as both requesters and servers. MP/NOS complemented MP/NET as the diskless network operating system variant for MP/M servers, embedding the real-time nucleus of MP/M without local storage facilities and routing all disk functions through the network. Released in the early 1980s, this allowed for efficient resource sharing, including consoles and files, among interconnected MP/M nodes, promoting a distributed multi-user setup where workstations could boot from ROM and rely entirely on server resources. Like MP/NET, MP/NOS supported arbitrary network protocols to enable flexible topologies, from point-to-point serial links to more advanced configurations, emphasizing MP/M's multi-terminal and multiprogramming capabilities in networked environments.

Legacy and influence

Open-sourcing and preservation

In 2001, Lineo, Inc., which had acquired rights to Digital Research's legacy software, granted a new open-source license to the Unofficial CP/M Web Site, enabling the public release and unrestricted use of source code for various Digital Research products, including MP/M II. This followed earlier efforts by Caldera International, which in 1997 and 1998 released binaries and partial source code for CP/M versions as part of its OpenDOS project, providing initial access to related Digital Research materials. The MP/M II source code, comprising approximately 864 KB primarily in 8080 assembler for the OS kernel and PL/M for utilities, became freely downloadable from the site. Preservation efforts have ensured MP/M's availability through archival resources such as the Unofficial CP/M Web Site (cpm.z80.de) and Bitsavers.org, which host disk images, binaries, and scanned manuals. Key documents include the MP/M II System Implementor's Guide (August 1982) and MP/M II User's Guide (March 1981), offering detailed technical specifications for implementation and operation. These repositories support historical research and hobbyist reconstruction without commercial restrictions under the Lineo license. MP/M runs on emulators like SIMH, which simulates Z80-based systems including multi-terminal configurations (up to 4 consoles in standard setup, more with modifications), and Z80pack, a cross-development package for UNIX-like environments that emulates CP/M variants including MP/M with hardware-specific options. Hobbyists have created modern adaptations, such as ports to x86 architectures via Z80pack for running on contemporary hardware. Post-2020 community projects on GitHub, like adaptations of MP/M II for the RC2014 modular Z80 computer or RCBus platforms, demonstrate ongoing efforts to port and enhance the OS for retrocomputing setups.

Impact on later operating systems

MP/M's multi-user and multitasking architecture directly influenced Digital Research's subsequent operating systems, particularly through its evolution into Concurrent CP/M and later Concurrent DOS. Released in 1983, Concurrent DOS incorporated MP/M's time-sharing kernel with added MS-DOS compatibility, enabling multitasking of both CP/M and DOS applications in a single-user or multi-user environment on 8086-based systems. This merger of MP/M's multiprogramming capabilities with emerging PC standards allowed Digital Research to bridge legacy CP/M software with the growing MS-DOS ecosystem, though it remained niche due to the rapid dominance of IBM PC-compatible hardware post-1983. The influence extended to FlexOS in the mid-1980s, a protected-mode derivative of Concurrent DOS 286 designed for real-time embedded applications. FlexOS adopted MP/M's multi-user features, enhancing them with 80286 memory protection for fault-tolerant systems in industrial and point-of-sale environments, such as IBM's 4690 OS for retail terminals. This lineage contributed to specialized OS variants still in use today, demonstrating MP/M's role in enabling robust, multi-tasking foundations for non-general-purpose computing. Indirectly, MP/M's design impacted DR-DOS and Novell NetWare through shared Digital Research heritage. DR-DOS, introduced in 1988, derived its multitasking extensions from Concurrent DOS code, incorporating MP/M-inspired multiprogramming for enhanced single-tasking DOS environments with features like FAT32 support. Following Novell's 1991 acquisition of Digital Research for $80 million, NetWare integrated DR-DOS variants as bootloaders and maintenance platforms, leveraging these multi-user roots for server operations in early networked systems. MP/M's time-sharing model pioneered multi-user capabilities on microcomputers, prefiguring Unix-like environments by supporting multiple terminals on affordable hardware, as seen in 1980s OEM deployments like Altos Computer Systems' Z80-based multi-user setups. However, its potential in the 286 era was largely unrealized, overshadowed by MS-DOS's market dominance and the shift toward single-user PC paradigms, limiting broader adoption despite contributions to Digital Research's pre-acquisition ecosystem.

References

Add your contribution
Related Hubs
User Avatar
No comments yet.