MP/M's Process Dispatcher

ingve1 pts0 comments

Inside MP/M's Process Dispatcher - by Nemanja Trifunovic

Programming at the right level

SubscribeSign in

Inside MP/M's Process Dispatcher<br>A look at internal design and source code of the most popular 8-bit multitasking OS

Nemanja Trifunovic<br>May 31, 2026

Share

MP/M, or “Multi-Programming Monitor Control Program” is usually described as a multi-tasking and multi-user version of CP/M. I never had the chance to use it myself, but having learned to program on a Z80‑based microcomputer, I was astonished that something like MP/M could even exist on such limited hardware.<br>At some point I decided to get a better understanding of MP/M’s internals - specifically the part that enables multitasking. The source code I examined is for MPM II and can be downloaded from the Digital Research Source Code web page. To make sense of the design, I also relied on the MP/M and MP/M II manuals from Tim Olmstead Memorial Digital Research CP/M Library.<br>This post is a summary of my findings.<br>Background and History

Tom Rolander1 completed his master’s degree at the University of Washington in 1976 and soon after was recruited by Intel. There he joined a team that designed and developed RMX/80, a real‑time multitasking operating system for process‑control systems. After leaving Intel and then spending some time consulting for National Semiconductors, Rolander accepted invitation from Gary Kildall to join his company Digital Research Inc. (DRI) in early 1979. Kildall himself had been consulting for Intel since 1972 and, among other things, created the programming language called PL/M.<br>At that time, DRI’s only product was an operating system for Intel 8080 compatible computers called CP/M. CP/M was very simple and flexible, which along with its low price made it the most popular OS for the 8-bit business microcomputers. By 1979, Kildall believed it was time to add support for multitasking and multiple users. One motivation was background printing; another was the fact that computer manufacturers like Altos started producing multiuser microcomputers. Adding a CP/M compatible operating system that would support them was a logical next step.<br>Tom Rolander coded MP/M 1.0 alone, including the core OS, utilities and documentation - he described the experience as “just a huge amount of fun”. Soon after, version 1.1 came out, and then in 1981 version 2.0 and finally 2.1 in early 1982.<br>The operating system was ported to 16-bit Intel architecture by another talented engineer Frank Holsworth in 1980/81 and named MP/M-86. It was followed by a line of “Concurrent” CP/M products which retained the MP/M core design and added features like MS-DOS compatibility. The last incarnation on MP/M family of operating systems was FlexOS which was designed for industrial and point-of-sale applications and outlived DRI by at least a decade.<br>Features

In the MP/M 1.0 User’s Guide, the system is described as “an upward compatible version of CP/M 2.0 with a number of added facilities”. The major additions include support for multiple users, each working on a separate terminal, and multiple tasks per user. For application programmers, MP/M introduced memory bank-switching, inter-process communication (including synchronization), and interrupts.<br>Another interesting feature not available in CP/M was resident system processes which remained in memory alongside the OS. MP/M shipped with several standard resident processes (such as the system status display), and users could write their own.<br>The system was described as providing “real-time” multitasking, which is misleading. MP/M is a cooperative multitasking system that switches tasks at system calls, interrupts, or clock‑tick events. It does not provide deterministic timing guarantees which we would expect from modern real-time systems.<br>Unlike Intel’s RMX which inspired it, MP/M was not intended for process control applications that would require real-time capabilities. It was an alternative to minicomputer time-sharing systems for use from multiple “dumb” terminals in business environment. Many of these time-sharing systems were also described as “real-time” without providing any real time guarantees, so we can assume it was just a difference in terminology.<br>Real-time definitions aside, building a preemptive multitasking system for the Intel 8080 compatible 8-bit CPUs was a real feat. The hardware offered no privilege levels, no memory protection, no thread-specific stacks, no trap instruction, no atomic primitives and only a 64‑kilobyte address space. Preemptive multitasking became a common feature on personal computers only in mid-1990s on Windows and in 2001 on Mac2.<br>As for CP/M compatibility, it was a goal that was only partially achieved. The user guide claims that only “correctly written” CP/M programs (i.e. the ones that use only officially documented system calls) would run under MP/M. In practice, programming 8-bit machines relied not only on using undocumented system routines, but even undocumented CPU...

system time multitasking real intel process

Related Articles