CP/M
CP/M（Control Program for Microcomputer、シーピーエム）は1970年代にデジタルリサーチ (Digital Research Inc.) の創業者ゲイリー・キルドールによって開発、1976年に発売された、パソコン用のシングルユーザー・シングルタスクのオペレーティングシステム (OS) である。
最初は8ビットのCPUであるインテルの8080プロセッサ用に作られ、8ビットのパソコン用OSとしては最も代表的な存在だった。初期に普及したバージョンはCP/M 1.4で、そののち改訂されたCP/M 2.2が広く普及した。さらに、より洗練されたCP/M 3.0 (CP/M Plus) が登場したが、既に16ビットマシンへの移行が始まっていた時期でもあり普及することはなかった。
他のプロセッサに移植されたバージョンも存在するが、単にCP/Mといえば8080プロセッサ用のもの（中でもバージョン2.2）を指す。なおマイクロソフトによってOEMされたIBMのPC DOS（及び、のちにマイクロソフト自らが直販したMS-DOS）は、CP/Mをモデルに開発されたシアトル・コンピュータ・プロダクツの86-DOS（後に "QDOS" と改名）を前身としている。
キルドールは、インテルからマイクロコンピュータ開発システム (MDS) 用の高級言語を受注。PL/I風に作られた8080用のシステム記述向け言語であるPL/M（Programming Language for Microcomputer、後のPL/M-80）コンパイラを開発した。
このPL/Mの動作環境として、キルドールがインテルに提案したフロッピーディスクベースのDOSがあった。これは採用されなかったため、後に自ら販売することにしたものがCP/Mである。インテルは後に8080/8085からの移行を支援するため、8086/8088用にPL/M-86を開発した。
CP/Mは8080マイクロプロセッサ（およびその上位互換CPU）、0番地から配置されたRAM（最小はCP/M 1.4で16KB）、最低1台の8インチフロッピーディスク装置、シリアル端末（CRTディスプレイとキーボード、あるいはASR-33のようなテレタイプ端末）があれば動作した。オプションとして、プリンタ、紙テープ読取装置・紙テープ穿孔装置、ハードディスク装置をサポートした。一般的には32KB以上、可能なら56KBくらいのRAMがあると、当時としては大規模なコンパイラなどが実行できた。
CP/Mは、シェルであるCCP (Console Command Processor)、OSの本体であるBDOS（ビードス、Basic Disk Operating System）、入出力を処理する下位プログラムの集合体であるBIOS（バイオス、Basic Input and Output System）で構成される。ハードウェア依存部分はBIOSに集中させてあるので、BIOSだけを変更することで大抵のハードウェアに移植可能となっていた。BIOSの機能はシステムの初期化、CCPのリブート（アプリ実行の終了とシェルの再起動）、コンソールなどのキャラクタデバイスのリダイレクト付入出力、フロッピーディスク/ハードディスク等の1セクタ単位の入出力だけである。
なお、BIOSという用語は一般化して普通名詞となり、PC/AT互換機の普及以降はROMに記録された低レベル入出力プログラムを指すことが多くなったが、CP/MにおけるBIOSは殆どの場合はディスクからメモリにロードされるものである。
CCPに内蔵されているコマンドをビルトインコマンド (built-in command) といい、次のようなものがある。
これ以外はトランジェントコマンドに委ねている。
フロッピーディスクに実行ファイルとして記録されているコマンドをトランジェントコマンド (transient command)という。
次のようなものがある。
パソコンメーカーが自社製品用に供給するCP/Mのパッケージには、上記以外にもフロッピーのフォーマットやコピー、ハードウェアの設定など独自コマンドが追加されていることが多かった。
なお、トランジェントコマンドがロードされるメモリ上の領域 (0100H - ) をTPA (Transient Program Area) と呼ぶ。
CP/Mは8ビットマイコン上で主要な地位を占めたため、CP/M環境で動作するプログラムが大量に発売されており、ソフトウェア開発用ソフトのみならず1バイト文字圏におけるビジネスソフトウェアも数多くあった。
ユーザ・コミュニティでのフリーソフトウェアの流通もあり、当時はPDSと呼ばれていた。当時は通信環境がまだ普及していなかったので、フロッピーによって配布するのが主流だった。CP/M UGなど、組織的にソフトの収集と配布を行なっていたユーザグループも存在した。
マイクロソフトは、当時OEM各社より発売していたマイコン用のスタンドアロンBASICとは別に、CP/M汎用のBASIC処理系としてM-BASICインタープリタ (MB80) およびコンパイラ (BASCOM) をリリースしていた。他に、マクロ機能付リロケータブルアセンブラMACRO-80やFORTRAN-80、COBOL-80なども製品ラインに存在した。
デジタルリサーチ自身は、PL/I-80、 CBASIC（ビジネス向きBASICコンパイラ）、MACとRMAC（マクロアセンブラとリロケータブル・マクロアセンブラ）、Pascal/MT+（これはMT Microsystemsから買収。Z80専用コードも生成できるコンパイラ。高速なオブジェクトコードを出力した）などを出荷した。
CP/M上でC言語の処理系として名高いものは、Leor ZolmanのBDS-C、Whitesmith、AZTEC、HITECHのCコンパイラ、日本のLSIジャパンのLSI-C80などがある。日本では、ライフボート（当時）とそのOEM供給を受けたシャープが、CP/M向けに安価な各種言語のパッケージを販売していたこともある。ラインアップとしては、FORTRAN、COBOL、LISP、LOGO、Prolog、BDS-C（サブセット）、Pascal、Forthなどが存在した。
また、統合開発環境という概念を打ち立てたボーランドのTurbo Pascalは、WordMasterライクなスクリーンエディタ、極めて高速なコンパイラと、リンカのすべてをわずか30KB程度の実行形式に組み込んで提供されていた。さらに販売価格も廉価に抑えられていたため、驚きの目で迎えられ一時代を築いた。これは以後のマイコン向け開発用ソフトウェアに影響を与え、同時にボーランド社の地位を確立した。
事務処理用のアプリケーションソフトとしては、WordStar（フルスクリーンワードプロセッサ）、WordMaster（フルスクリーンエディタ）、SuperCalc等があった。WordStar/WordMasterのカーソル移動キーバインドはダイヤモンドカーソルと呼ばれ、その使いやすさからCP/MやMS-DOSの多くのスクリーンエディタに受け継がれた。
CP/Mの特徴的な仕様の一つに、リブート（ウォームブート、ウォームスタート）がある。リブートとは、アプリケーションの終了、または^Cの入力により、ディスクからCCPとBDOSをロードし直してCCPのコマンドラインに戻ることをいう。他のOSのように、IPLから完全に再起動することを指すわけではない。
リブートは以下の場合に発生する。
いずれの場合も最終的にBIOSの先頭にジャンプし、BIOSはドライブAのディスクのシステム領域からCCPとBDOSをメモリにロードし、CCPの先頭にジャンプする。これにより、CCPのコマンドラインに戻ることになる。リブートはCP/Mの使用中に頻繁に発生するので、ドライブAにはCCPとBDOSの入ったフロッピー（通常、CP/Mの起動フロッピー）を入れておく必要がある。
CCPとBDOSをロードするのは、アプリケーションによって破壊されている可能性があるためである。
アプリケーションの動作中にはCCPは不要なので、CP/MのアプリケーションはCCPのメモリ領域を食いつぶしてもよいことになっている。さらに、滅多に存在しないが、BDOSすら利用しないアプリケーションでは、BDOSも食いつぶしてよい。そのため、アプリケーションの終了時にはCCPとBDOSをロードする必要がある。ただし、小規模なアプリケーションでは、JMP 0でなく単にRET命令でCCPに直接戻るものもある。この場合はリブートは発生しない。なお、MS-DOSにおいても、COMMAND.COMの非常駐部の再ロードという、似たような機能がある。
このようにリブートとはCP/Mにおけるきわめて基本的かつ重要な動作であるが、一方で多くのユーザーにとっては苦い思い出を呼び起こす言葉でもある。
CP/Mでは、フロッピーの入れ替えを検出すると、前のフロッピーのデータを現在のフロッピーに書き込んでしまうことを避けるため、一時的にフロッピーをリードオンリー扱いとする。これはリブートにより解消される。すなわち、CP/Mでフロッピーを入れ替えるときは、アプリケーションが動作中であればまず終了し、フロッピーを入れ替えてから^Cを押さなければならない。これを怠って、リードオンリーになってしまっているフロッピーにデータを書き込もうとすると、BDOSエラーが発生し、リブートを余儀なくされ、データは失われる。この事態に見舞われる“よくある状況”としては、フロッピーの残り記録容量が足りないことに気付かずに作業をしている際が挙げられる。こうなると、もはや通常の操作ではその作業結果を残す方法がない。救済方法としては、一旦BDOSエラーを発生させ、saveコマンドで空ディスクにメモリイメージを記録し、サードパーティー製ディスク操作ソフトを使用してその記録内容のうちトランジェントコマンド部分を削除した上ディレクトリ情報を書き換える方法がある。これは推奨された使用方法からは大きく外れた事態であり、救済に失敗することもまれではない。
これはCP/Mの重大な問題点で、この事態に陥ったときに表示される"Bdos Err On x: $R/O"（x:はドライブレター）というメッセージは、PC-9800シリーズのMS-DOSの"Int trap halt"や、Windows 3.1の一般保護例外 (GPE)、Windows 95/NTの青画面、Classic Mac OSの爆弾マークと同様に、ユーザーを恐怖と絶望におとしいれた。
この問題は、後のPersonal CP/MやCP/M Plus、CP/M-86では改善されている。
後に、16ビットCPUであるインテル8086用のCP/M-86およびモトローラMC680x0用のCP/M-68K、またザイログZ8000用のCP/M-8000が作られた。これら16ビット版と区別するために、8080用のCP/MをCP/M-80と呼ぶようになった。
しかし、CP/M-86がIBM PCに公式採用されなかったこともあり、結局MS-DOS (PC DOS) に押されて16ビット以降の世界ではマイナーな存在に終わった。
面白い特徴としては、各々トランジェントコマンドの拡張子が異なっており（CP/M-80:.COM、CP/M-86:.CMD、CP/M-68K:.68Kなど）、同一のファイルシステム内で複数のアーキテクチャ用のCP/Mを混在させることが出来た。実際の製品としては、PC-9800シリーズ用のSPARKシリーズがあり、実行を指示されたコマンドを拡張子によって区別し、8086で動作するコマンドと、Z80で動作するコマンドを混用することが出来た。
CP/Mのシリーズには、他に、Personal CP/M (P-CP/M、CP/M Ver.2.8) や、複数のプログラムを同時に走らせることができるMP/M1.1やMP/M II、コンカレントCP/M(-86)というものも存在した。Linuxの仮想コンソールのように、画面を切り替えて使う。初期のMS-DOS/PC DOS（の前身であるシアトルコンピュータプロダクツの86-DOS）は、CP/Mをモデルとして設計されたため、さまざまな面で類似点が見られる。
一方で、以下のような相違点（改善点）もある。
また、マイクロソフトがCP/M向けに出していたソフトでは、コマンドラインのスイッチはスラッシュで始まっており（例: M80 =FOO.MAC /R）、PC DOS/MS-DOS 1.xではこれがOS標準の書式として受け継がれた。
そのため、PC DOS/MS-DOS 2.xで階層ディレクトリを導入する際に、UNIXのようにパス名の区切りにスラッシュを使うことができず、バックスラッシュを使うことになった。
しかし、ASCIIのバックスラッシュはISO 646各国版で置き換えが認められており、たとえば日本のJIS X 0201では円記号になっているため、日本のPCではパス名の区切りが円記号で表示されることになった。
なお、これはコマンドラインに限った話であり、MS-DOSのシステムコールやWindows APIにパス名を渡す場合には、コマンドラインスイッチと混同するおそれがないため、区切りとしてスラッシュもバックスラッシュも受け付ける。
デジタルリサーチは1991年にノベルに買収され、さらにカルデラ（2002年SCOに改称）に売却された。現在CP/M資産は同社の子会社であるリネオが所持しており、その大半は同社の許諾を受けた「非公式なCP/Mサイト」からダウンロードすることが可能である。
現在、日本国内でのCP/Mの商標は技術少年出版が保有する。