CP/M

**CP/M**（Control Program for Microcomputers、シーピーエム）は、1970年代にデジタルリサーチ（）の創業者であるゲイリー・キルドールによって開発され、1976年に発売された、パソコン向けのシングルユーザー・シングルタスクのオペレーティングシステム (OS) である。

8ビットのCPUであるインテルの8080プロセッサ向けOSとして作られ、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を前身としている。

## 動作環境
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) といい、次のようなものがある。
; DIR
; REN
; TYPE
: それぞれ、MS-DOSの同名コマンドと同様。
; ERA
: MS-DOSのDEL (ERASE)に相当。
; SAVE
: アドレス0100hから、256バイトを1ページとして指定のページ数のメモリイメージをディスクに記録する。
; USER
: ユーザ切り替え。主に、MP/Mでユーザごとに記録されたファイルを扱うために存在する。CP/M単独ではあまり意味がない。

これ以外はトランジェントコマンドに委ねている。

### トランジェントコマンド
フロッピーディスクに実行ファイルとして記録されているコマンドをトランジェントコマンド (transient command)という。
次のようなものがある。
; STAT
: ディスクやファイルのサイズを表示する、ファイルの保護属性を表示・変更する、デバイスのリダイレクト状況を表示・変更する、など様々なシステムの状態を表示・操作する。
; PIP
: 周辺装置やディスクの間でファイルをコピーする(Peripheral Interchange Program)。DECのPDPシリーズのコマンドに由来する。
; SUBMIT
: バッチファイルを実行する。
; ED
: キャラクタ単位のラインエディタ。
; ASM
: 8080用アブソリュートアセンブラ。
; LOAD
: ASMの出力したオブジェクト（インテルHEXフォーマット）を.COMファイルに変換する。コマンド名から機能を連想しづらいことで有名。
; DUMP
: ファイルの16進ダンプツール。アセンブリソースコードが添付されており、プログラミングのサンプルでもあった。特に、ASCIIダンプがついていなかったため、この機能を追加することは定番の改造だった。
; DDT
: セルフ環境のデバッガ (Dynamic Debugging Tool)。殺虫剤のDDTにかけた命名である。
; XSUB
: バッチ処理中にコンソール入力をファイルから取得する際にSUBMITと同時に用いる。CP/M 2.x以降に用意された。
; MOVCPM
: CP/M自身の再配置ツール (move CP/M)。CP/M自身のコードは実装されたRAMの最上位に配置される。つまり、実装メモリが変わるとCP/M自身の配置を変更する必要があった。リロケータブルでない8080コードで書かれたBDOSとCCPを再配置するためのツールがMOVCPMである。各マシン向けのBIOS (Customized BIOS, CBIOS) はソースコードが供給されるのが普通だったので、インストールする人が自分で再アセンブルすることで必要なアドレスで実行できるバイナリを得られた。

パソコンメーカーが自社製品用に供給するCP/Mのパッケージには、上記以外にもフロッピーのフォーマットやコピー、ハードウェアの設定など独自コマンドが追加されていることが多かった。

なお、トランジェントコマンドがロードされるメモリ上の領域 (0100H - ) をTPA (Transient Program Area) と呼ぶ。

## リブートについて
CP/Mの特徴的な仕様の一つに、**リブート**（ウォームブート、ウォームスタート）がある。リブートとは、アプリケーションの終了、または^Cの入力により、ディスクからCCPとBDOSをロードし直してCCPのコマンドラインに戻ることをいう。他のOSのように、IPLから完全に再起動することを指すわけではない。

リブートは以下の場合に発生する。
* CP/Mのアプリケーションは、終了してOSに戻るために、0番地にジャンプする (JMP 0)。
* CCPのコマンドライン上、またはアプリケーションの動作中に、^Cを入力すると、任意にリブートすることができる。
* ディスクI/Oでエラー（BDOSエラー）が発生した際に、Abort（中断）を選ぶとリブートする。
いずれの場合も最終的に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では改善されている。

## 歴史

### 始まりとCP/Mの全盛期
キルドールは、インテルからマイクロコンピュータ開発システム (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を開発した。

ゲイリー・キルドールが1974年に開発したオリジナルのCP/Mは、インテルIntellec-8開発システム用に開発されたもので、シュガートアソシエイツの8インチフロッピーディスクドライブを独自ので接続していた。キルドールは自分で開発したマイクロプロセッサ用のプログラミング言語であるPL/Mで記述した。キルドールはメインフレームコンピュータのDECsystem-10を開発に使用したことがあり、そのOSであるTOPS-10の影響を大きく受けていた。

#### 名称
CP/Mは元々Control Program/Monitorの略称で、OSが起動する前の小さな内蔵モニターを意味していた。しかし商品化のため1977年11月に商標登録した際にはControl Program for Microcomputersの略であるとされた。CP/Mの名前は当時流行していたスタイルに従ったもので、例えばキルドールが開発したプログラミング言語はPL/Mであり、プライムコンピュータが開発したプログラミング言語はPL/P (Programming Language for Prime)で、いずれもIBMのPL/Iからインスパイアされた。またIBMにはCP/CMSというオペレーティングシステムがあり、キルドールは海軍大学院で働いている時にこれを使っていた。

CP/Mの名前の変遷は、キルドールと、キルドールの妻であり共同経営者でもあるドロシー・マキュアンが、キルドールの個人的なプロジェクトに過ぎなかったCP/Mと、インテルと契約していたPL/Mをビジネスに変えるための努力の一環だった。IBMとマイクロソフトが後にパソコンの代名詞となったように、デジタルリサーチがマイクロコンピュータの代名詞となることをキルドールは意識していた。

インターギャラクティック・デジタルリサーチは後にデジタルリサーチへと社名変更の登記手続きを行った。

#### 互換性
1981年9月までにデジタルリサーチは25万本のCP/Mを販売していた。InfoWorldによるとこれにはサブライセンスが含まれておらず実際のマーケットシェアはさらに大きいとされた。様々な企業が様々なCP/Mマシンを販売した。InfoWorldは「CP/Mがマイクロコンピュータ用のオペレーティングシステムとしてその地位を確実に確立しつつある」と述べた。非常に多くのアプリケーションがあったため多くのコンピュータメーカーがCP/Mをサポートした。ゼロックスは「文字通り数千本のアプリケーションがあるのにこれをサポートしないのは賢い選択とは言えない」としてXerox 820に対応した。デジタルリサーチのマニュアルは1982年にInfoWorldから批判されるほど酷く、ゼロックスはハワード・サムが執筆したCP/Mマニュアルを同社の製品に同梱した。1984年までにコロンビア大学はファイル転送プロトコルのカーミットを1つのソースコードから複数のCP/M機用のバイナリを出力できるようにしており、またどのCP/M機でも動作する汎用版も開発した。このオペレーティングシステムは複数のプログラムが異なるハードウェアと標準的な方法で通信でき、自らをソフトウェア・バスと呼んだ。一部の例外を除き、CP/Mに記述されたプログラムは他のマシンでも動作する互換性があり、エスケープシーケンスだけを使ってコンソールやプリンタを制御することが互換性を維持するために求められた。この互換性の高さがCP/Mの普及を促し、特定のハードウェアだけで動作するソフトウェアよりもCP/M上で動作するソフトウェアがより多く開発されるようになった。Z80の拡張命令を用いた一部のプログラムは8080や8085で動作しなかった。またグラフィック処理にも互換性の問題があり、特にゲームや映像ソフトはパフォーマンスを稼ぐためにOSやBIOSを経由せず直接ハードウェアにアクセスすることが普通だった(初期のDOS機にも共通の問題があった)。

ビル・ゲイツによるとApple IIシリーズとZ-80 SoftCardの組み合わせはCP/Mの動作環境として当時最も普及していた。Altair 8800、IMSAI 8080、Osborne 1、Kaypro luggable、MSXなど、非常に多くの機種で動作した。最も多く売れたCP/M対応システムはだと考えられている。イギリスではリサーチマシーンズ社の教育用コンピュータでCP/Mが動作し、CP/Mのソースコードが教育用として添付されたほか、Z80コプロセッサを搭載したBBCマイクロでも動作した。さらにアムストラッドCPCシリーズ、コモドール128、TRS-80、ZXスペクトラムの後期モデルでも動作した。ACニールセン用に開発された、1MBのSSDメモリを搭載した携帯用マシンであるNIATでもCP/M 3が動作した。

#### アプリケーション

CP/Mは8ビットマイコン市場で広く普及したため、CP/M環境で動作するプログラムが大量に発売されており、ソフトウェア開発用ソフトのみならず1バイト文字圏におけるビジネスソフトウェアも数多くあった。

ワードプロセッサとして初めて広く普及したWordStarと、フルスクリーンエディタのWordMaster、マイクロコンピュータ用として初期に人気を博したデータベースのdBaseは、いずれも元々はCP/M用に開発された。WordStar/WordMasterのカーソル移動キーバインドはダイヤモンドカーソルと呼ばれ、その使いやすさからCP/MやMS-DOSの多くのスクリーンエディタに受け継がれた。初期のアウトラインプロセッサであるKAMAS(Knowledge and Mind Amplification System)と、その廉価版であるOut-Think(マクロ機能が削除され8080/V20互換として再設計された)もまたCP/M用に開発され、後にMS-DOSへ移植された。Delphiの祖先であるTurbo Pascalや、Microsoft Excelの祖先であるMultiplanもCP/Mでリリースされた後にMS-DOSへ移植された。世界初の表計算ソフトであるVisiCalcはCP/M用に作られた。SorcimはCP/M用の表計算ソフトSuperCalcを開発し、CP/M上ではデファクトスタンダードになった。SuperCalcはMS-DOSの表計算ソフト業界にも参入した。AutodeskはAutoCADをCP/Mでリリースした。

BASICやFORTRANなど当時主流のプログラミング言語を利用できた。マイクロソフトは、当時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程度の実行形式に組み込んで提供されていた。さらに販売価格も廉価に抑えられていたため、驚きの目で迎えられ一時代を築いた。これは以後のマイコン向け開発用ソフトウェアに影響を与え、同時にボーランド社の地位を確立した。

CP/M用のソフトは様々な機種に対応するためにインストーラーが付属することが多かった。BASICで開発されたプログラムは簡単にソースコードを見ることができ、コピープロテクトはほとんど無意味だった。Kaypro IIの開発者はXerox 820フォーマットを採用し、Kayproフォーマットと名付けてソフトを提供し、この上でプログラムを実行させた。

グラフィック機能は標準化されておらずコンピュータゲームのサポートは限定的であったものの、**'、**'、**'、**'、初期のテキストアドベンチャーであるゾークシリーズや*[[コロッサル・ケーブ・アドベンチャー]]*などのテキストベースのゲームが移植された。テキストアドベンチャーに強いインフォコムはCP/Mで定期的にゲームをリリースしていた数少ない開発会社だった。

ユーザ・コミュニティでのフリーソフトウェアの流通もあり、当時はPDSと呼ばれていた。当時は通信環境がまだ普及しておらず、フロッピーで配布するのが主流だった。CP/M UGなど、組織的にソフトの収集と配布を行なっていたユーザグループも存在した。はユーザーが開発したフリーソフトウェアを集めて配布した。XMODEMはそうしたフリーウェアの初期の作品の1つで、電話からモデムを使って安定的にファイルを転送できた。

#### ディスクフォーマット
CP/Mの公式な標準フォーマットはIBM System/34やIBM 3740で使われた片面単密度フォーマットの8インチディスクだった。非公式な5.25インチディスクもあり、フォーマットにはKaypro、Morrow Designs、Osborneなどの種類があった。*InfoWorld*は1981年9月に、ソフトウェアメーカーがサポートすべき主なフォーマットは20種類以上あると考えていると推測した。例えばJRT PascalはNorth Star、Osborne、Apple、Heathなどのフォーマットで5.25インチディスクのハードセクタ版やソフトセクタ版をリリースし、Superbrainに8インチ版をリリースした。Ellis ComputingもHeathの両フォーマットや、2つのTRS-80用CP/Mの改変版を含む16種類の5.25インチフォーマットでリリースした。

一部のフォーマットは普及したが他のフォーマットは普及しなかった。最も多くのソフトが採用したのはXerox 820フォーマットで、Kaypro IIなどの他のコンピュータも対応していた。CP/Mが利用されていた時代は5.25インチディスクのフォーマットが1社に統一されるということは無く、基本的にハードメーカーが異なればフォーマットに互換性がなかった。ソフト自体はどのマシンで動作しても、ソフトメーカーはハード毎にメディアを分けてソフトを販売しなければならなかった。Kayproなど一部のメーカーのディスクドライブは、自社の製品でも機種が変わると互換性がない事すらあった。こうした状況によりフォーマット変換プログラムが流行し、混乱を軽減させる一助になったほか、カーミットなどの通信プロトコルによりどのCP/M機にもあるシリアルポートを使ってプログラムやデータを転送することもできた。

様々なフォーマットがハードの特徴や設計者の一存により選ばれた。CP/Mはディスクの予約領域やディレクトリ領域のサイズを指定でき、CP/Mのアプリケーションから見える論理セクタとディスク上の実際の配置である物理セクタのマッピングなどを指定可能だった。各システムはこれらのパラメーターを用いて様々なカスタマイズを加えることができたが、一度設定を決めた後は、どのような設定のディスクであるのかを調べる標準的な方法がなかった。CP/Mの時代は8インチ、5.25インチ共に様々なフロッピーディスクのフォーマットが存在しており、異なるCP/Mマシンの互換性は採用したディスクドライブのタイプやコントローラーに依存した。ディスクはハードセクタ方式とソフトセクタ方式があり、単密度や倍密度、片面や両面、35トラック、40トラック、77トラック、80トラック、セクタのレイアウト、サイズ、インターリーブなどの様々な違いがあった。異なるマシン用のディスクを読むために変換プログラムを使用できたが、これもまたディスクのタイプやコントローラーに依存した。1982年頃にはソフトセクタ、片面、40トラックの5.25インチディスクがCP/Mソフトの配布用として最も普及したフォーマットとなり、Apple II、TRS-80、Osborne 1、Kaypro II、IBM PCなど当時主流だったマシンのほとんどが採用した。変換プログラムはタイプが近いディスクドライブ用のフォーマットを読むことを可能にした。例えばKaypro IIはTRS-80、Osborne、IBM PC、などのディスクを読めた。80トラックのような他のフォーマットや、ハードセクタ方式のディスクは全く読めなかった。Epson QX-10などが採用した両面ディスクは半分だけデータを読むことができた。Apple IIはAppleのGCRフォーマットだけしか読めず他社のフォーマットを読めなかったため、Appleフォーマット版のCP/Mソフトを入手するか、またはシリアルポートで転送するしかなかった。

CP/M市場によるディスクフォーマットの断片化は、複数のフォーマットに対応したディスクの在庫を抱えたり、複数のフォーマットに対応したディスクコピー装置を購入したりすることをソフトメーカーに強いた一方で、IBM PCはディスクが規格化されて統一されており、1981年以降にCP/Mが急速に市場を失う要因となった。

1985年に発売されたコモドール128は末期に発売されたCP/M機で、6502ベースのCPUを採用しながら、CP/MをサポートするためにZ80も搭載していた。CP/Mを使うには、ソフトセクタ40トラックMFM方式のディスクが読み書きできるディスクドライブのかが必須だった。

始めて3.5インチフロッピーを採用したではCP/M 2.2が動作した。

コモドール128、ラップトップの、Micromint/Ciarcia SB-180、MSX、 (Montezuma CP/M 2.2が動作)なども3.5インチディスク版のCP/Mが動作した。は当初3インチフロッピーでCP/Mが動作し、後に3.5インチフロッピーへ切り替えた。

#### グラフィック
S-100バス(アルテアバス)に対応したグラフィックシステムは存在していたが、CP/Mは1982年にGSX (Graphics System Extension)をリリースするまでグラフィック機能を全くサポートしていなかった。当時は使用できるメモリが非常に限られており、8ビットのCP/Mでグラフィック機能が一般的になることは無かった。ほとんどの機種ではテキストモードでアスキーアートにより図表を表示するか、機種依存文字を使う事しかできなかった。Kayproシリーズやなどの一部の機種は絵文字をサポートしており、アセンブラで直接ハードウェアを叩くか、BASICからCHR$コマンドを使ってアクセスすることができた。Model 4はオプションのハイレゾリューションボードで640×240ドットのグラフィックを表示できた。

### マルチユーザー
1979年にマルチユーザーに対応したCP/Mがリリースされた。MP/Mは複数のユーザーが1台のコンピューターに接続でき、ユーザーはディスプレイとキーボードを備えた端末が個別に与えられた。後のバージョンは16ビットCPUで動作した。

### CP/M Plus

1983年にリリースされた8ビット版CP/Mの最終版はバージョン3で、CP/M Plusと呼ばれた。CP/M 2.2のアプリケーションと互換性があるMP/Mが持つバンク切り替えによるメモリ管理機能を、MP/Mのシングルユーザー、シングルタスク版という形で導入した。これによりCP/M 3では8080やZ80でも64KB以上のメモリを扱うことができた。ファイルにタイムスタンプを付けるようシステムを設定できた。またアセンブラとリンカが付属した。CP/M 3は、アムストラッドPCW、アムストラッドCPC、ZXスペクトラム+3、コモドール128、MSX、ラジオシャックのTRS-80モデル4など、8ビットマイコンの最後の世代で利用できた。

### 16ビット版

16ビットCPU用のCP/Mも存在した。

最初の16ビット版であるCP/M-86はIntel 8086版で、続けてモトローラ68000版の**[[CP/M-68K]]**がリリースされた。1982年にリリースされたオリジナル版のCP/M-68Kはで開発され、後にC言語に移植された。混乱を避けるため、オリジナルの8ビット版CP/Mは**CP/M-80**と呼ばれるようになった。1982～1983年頃に用としてZ8000で動作する**[[CP/M-8000]]**がC言語で開発された。

CP/M-86はIBM PCの標準OSとなることが期待されていたが、デジタルリサーチとIBMは開発や契約の話をまとめることができなかった。IBMはマイクロソフトに白羽の矢を立て、マイクロソフトは86-DOSをもとにPC DOSを開発して提供した。デジタルリサーチはIBMに対して提訴すると脅し、CP/M-86もIBM PCで利用できるようになったが、マイクロソフトを超えることはできなかった。IBMの設定価格はPC DOSが$40だったのに対してCP/M-86は$240で、その大きな差に顧客は驚かされた。

DECがIBMの対抗馬として発売したは、Z80を使ったCP/M-80と、8088を使ったCP/M-86及びMS-DOSが付属し、CP/M-86とCP/M-80を同時に使用できた。Z80と8088は並列で動作した。Rainbowでは8ビット版CP/Mの大量のソフトウェア資産を続けて利用しながら、16ビットのMS-DOSへ移行することが可能だった。

モトローラで既に動作していたCP/M-68KはAtari STに搭載されて出荷されるはずだったが、アタリはGEMDOSという新しいDOSを使うことに決めた。CP/M-68KはSORDのM68とM68MXでも使われた。

16ビット版CP/Mのアプリケーションは新CPU向けに再コンパイルが必要で、もしアプリケーションがアセンブラで記述されている場合は、ゲイリー・キルドールが1981年に開発したトランスレーターのXLT86を使い、8080用のASMファイルを8086用のA86ファイルに変換した。8080のレジスタがどのように使われているのかを分析し、関数呼び出しを正しく理解して、CP/M-80やMP/M-80用に書かれたアプリケーションを自動的にCP/M-86やMP/M-86用アプリケーションへコードを最適化しつつ変換することができた。XLAT86はそれ自身がPL/I-80で記述されており、CP/M-80だけでなくDEC VMS (VAX 11/750用と11/780用)でも動作した。

アーキテクチャの種類ごとに各々トランジェントコマンドの拡張子が異なっており（CP/M-80:.COM、CP/M-86:.CMD、CP/M-68K:.68Kなど）、同一のファイルシステム内で複数のアーキテクチャ用のCP/Mを混在させることが出来た。実際の製品としては、PC-9800シリーズ用のSPARKシリーズがあり、実行を指示されたコマンドを拡張子によって区別し、8086で動作するコマンドと、Z80で動作するコマンドを混用することが出来た。

### MS-DOSとの競争
当時多くの人が16ビット機でもCP/Mが標準になるだろうと考えていた。1980年にIBMは、ビル・ゲイツの提案に従ってデジタルリサーチに連絡を取り、開発中のIBM PCに提供する新しいCP/Mのライセンス契約について話し合おうとした。秘密保持契約を結ぶことができずに話し合いは決裂し、IBMは代わりにマイクロソフトへOSの提供を打診した。その結果生まれたMS-DOSは間もなくCP/Mより売れるようになった。

初期バージョンのMS-DOSは基本となるコンセプトや仕組みがCP/Mと似ていた。ファイルのデータ構造が同じで、ディスクドライブにドライブレター(`A:`や `B:`など)を割り当てる形も同じだった。ファイルシステムのFATはCP/Mと比べてMS-DOSが最も違う所だった。全体的に大きな違いがないことから、WordStarやdBaseなどのCP/Mの人気ソフトウェアを簡単に移植できた。一方でCP/Mにあった、ユーザーごとにディスクの領域を分割する機能はMS-DOSに採用されることはなかった。IBM PCは一部を除いて64KB以上のメモリを利用できた一方で、CP/Mは16KBのメモリで動作するよう設計されていたため、MS-DOSは多くのメモリを使ってCOMMAND.COMの内蔵コマンドを増やすことができ、フロッピーディスクからコマンドを読む必要が減ることで処理が速くなり、OSのフロッピーをアプリケーションやデータファイルのフロッピーに変えても操作できることが増えて使いやすくなった。

8ビット版CP/Mのソフトが利用できるSoftCardのような拡張ボードがIBM PC用にすぐにリリースされたが、マイコン市場がIBM互換機市場に移るにつれてCP/Mのシェアは急速に小さくなり、以前のようなCP/Mブームが再び訪れることはなかった。マイコン業界誌最大手の*[[バイト (雑誌)|Byte]]*誌は、IBM PCがリリースされると1年も経たないうちにCP/M関連商品の記事を事実上扱わなくなった。1983年にはS-100ボードの広告がわずかにあり、CP/Mソフトの記事も数件あったが、1987年には全く見られなくなった。1984年に*InfoWorld*が掲載した記事では、企業に普及したCP/Mを一般家庭に広めようとする努力は失敗に終わり、CP/Mソフトは個人で買うには高すぎたとし、1986年にはこれまで他社が次々にCP/Mから撤退する中でCP/M用の周辺機器やソフトのリリースを長く続けていたKayproがついに8ビット版CP/M用のソフト開発を中止してMS-DOS互換機の開発販売に集中するという記事が掲載された。

後期バージョンのCP/M-86はパフォーマンスや使い勝手で大幅な進化を遂げた。マルチユーザー版のMP/Mからマルチプロセスなどの機能をマージしてコンカレントCP/Mとなり、Linuxの仮想コンソールのように画面を切り替えて複数のアプリケーションを使用することができるようになった。MS-DOSとの互換性が実現してDOS Plusと改名され、さらにDR-DOSと改名された。一方MP/MもDR-DOSから逆マージされ、マルチユーザーDOSに改名した。

### ZCPR
1982年2月2日に公開されたZCPR (Z80 Command Processor Replacement)はデジタルリサーチ標準のコンソールコマンドプロセッサ(CCP)をそのまま置き換えるプログラムで、CCPグループと呼ばれる趣味のユーザーグループが開発した。フランク・ワンチョ、キース・ピーターセン(の管理者)、ロン・フローラー、チャーリー・ストローム、ボブ・マティアス、リチャード・コンらが開発に参加した。実際にはリチャードがこのグループを推進していた(全員電子メールで連絡を取り合っていた)。

ZCPR1はニュージャージーにあるアマチュアコンピュータークラブのパソコン通信掲示板SIG/M(Special Interest Group/Microcomputers)のメンバー間でディスクを直接手渡しする形で配布された。

ZCPR2は1983年2月14日に公開された。SIG/Mでディスク10枚組のパッケージでリリースされた。ZCPR2は2.3にバージョンアップし、8080版もリリースされ、8080や8085でZCPR2が使えるようになった。

ZCPR3は1984年7月14日のパリ祭の日にSIG/Mからディスク9枚組のパッケージでリリースされた。ZCPR3のソースコードは一部機能を制限することで8080用としてビルドすることができ、Z80ではない機種でも実行できた。

1987年1月にリチャード・コンがZCPRの開発から撤退し、ZCPRを個人的に3.1へバージョンアップしていた実績のあるジェイ・セージにエシュロンは開発の継続を頼んだ。結果的にZCPR 3.3がリリースされた。ZCPR 3.3は8080系CPUをサポートせず、大きな機能拡張もなかった。

ZCPRバージョン3には以下の機能があった。

* シェル
* エイリアス
* I/Oリダイレクト
* フロー処理
* 名前付きディレクトリ
* 検索パス
* カスタムメニュー
* パスワード
* オンラインヘルプ

ZCPR3.3はまた使い勝手を大幅に改善する数多くのユーティリティがフルセットで付いてきた。当時CP/Mユーザーから熱烈な歓迎を受けたが、ZCPRだけではCP/Mの衰退を止めることはできなかった。

### 旧東ヨーロッパの派生版CP/M

SCP()、SCP/M、CP/A、CP/KC、CP/L、CP/KSOB、CP/Z、MICRODOS、BCU880、ZOAZ、OS/M、TOS/M、ZSDOS、M/OS、COS-PSA、 DOS-PSA、CSOC、CSOS、CZ-CPMなど、旧東ヨーロッパには非常に多くの派生版CP/M-80が存在した。またSCP1700、CP/K、K8918-OSなどのCP/M-86の派生版も存在した。旧東ドイツのロボトロンなどが開発していた。

## 日本での状況
* 日本電気 (NEC) のPC-8000シリーズ/PC-8800シリーズ、シャープのMZシリーズ/X1シリーズなど、Z80プロセッサ搭載の8ビットパソコンに移植されたCP/Mのパッケージが、ハードメーカーやサードパーティーから提供されていた。特にシャープ自ら供給したX1シリーズ用のものは完成度が高く、しかも安価だった。
* NECのワープロ専用機、文豪ミニ5シリーズは、特定のキーを押しながら電源を入れるとCP/M-80が起動し、パソコンとして利用することができた。
* ソニーのSMCシリーズのうち、SMC-777は、CP/M 1.4ベースのSONY FILERというOSを標準搭載した。SMC-70, SMC-70G は、別売りではあったが事実上、CP/M 2.2が標準OSとして利用されていた。
* 6809プロセッサを採用した富士通のFMシリーズでも、オプションのZ80ボードを搭載することでCP/Mが動作する。ワープロ専用機MY OASYSでも同等のボードが提供されていた。
* シャープのMZ-2500版はPersonal CP/Mの名前で提供された。
* MSXに提供されたMSX-DOSは、外見はMS-DOS、中身はCP/MとでもいうべきOSで、CP/Mのソフトがおおむね動作した。
* CP/M-86は、日本語化されたものが三菱電機MULTI 16、富士通FM-11EX/BS、FM-16β/πなどに標準採用された他、NECのPC-9800シリーズにも提供されていた。三菱電機とアスキーによるCP/M-86の日本語化の過程で三菱電機側の提案で策定されたのがシフトJISである。
* 68000プロセッサ用のCP/M-68Kは各社製パソコンに対応する68000搭載拡張CPUボード向けに提供された他、ソードの68000とZ80をデュアル搭載するM68およびシャープX68000に提供された。また、X68000の標準添付OSであるHuman68k上で動作するCP/M-68kエミュレータが2社から発売された。
* 一部機種には、CP/M PlusやコンカンレントCP/M-86も提供されていた。
* 日本でCD-ROMにて初めてCP/Mシリーズを提供していたのは、LASER 5であった。このCP/MはNEC PC-8801MC2等を使用して実機に導入可能なものである。

## MS-DOSとの比較

初期のMS-DOS/PC DOS（の前身であるシアトルコンピュータプロダクツの86-DOS）は、CP/Mをモデルとして設計されたため、さまざまな面で類似点が見られる。
* ファイル名が8文字+3文字であり、拡張子でファイルの種類を区別する。実行可能ファイルの拡張子は.COMである。ワイルドカード「*」「?」がある。ワイルドカード自体はUNIX由来だが、CP/M、MS-DOSとも機能は大幅に簡略化されている。なお、CP/Mでは「ファイルマッチ」の名称を用いる。
* ドライブレター、カレントドライブ、デバイス名などの概念がある。
* コマンドプロンプトは「&gt;」である（例: A&gt;）。
* DIR、REN、TYPEなどのビルトインコマンドがある。
* ^Sで出力の一時停止、^Cでアプリケーションの中断、^Pでプリンタ出力の切り替えを行う。これもUNIX系のシェル環境由来の機能である。
* CP/MのCCP、BDOS、BIOSの三層構造は、MS-DOSではCOMMAND.COM、MSDOS.SYS、IO.SYS（PC DOSではCOMMAND.COM、IBMDOS.COM、IBMBIO.COM）となる。
* システムコールの機能や呼び出し方法、アプリケーションのメモリ配置、コマンドライン引数の渡し方などが酷似している。通常、MS-DOSでシステムコールを利用する場合には「INT 21H」のソフトウェア割り込みを利用するという大原則があるが、「CALL 5H」でもそのまま動作するようになっていた。アセンブラのソースファイルをMS-DOSへ転送後、レジスターの名称を置換するだけで動作するプログラムもある。
* ファイルを削除すると、ディレクトリエントリの先頭バイトがE5Hになる。
:このE5Hという値は、当時フロッピーを物理フォーマットする際に書き込まれた値に由来する。つまり、物理フォーマット後に論理フォーマットする必要がないように設計されている。ただし、MS-DOSの場合はFATやブートセクタを書き込む必要があるため、別途論理フォーマットが必須である。

一方で、以下のような相違点（改善点）もある。
* CP/Mでファイルを削除するERA (ERASE) コマンドに相当するMS-DOSのコマンドは、DEL (DELETE) である。ただしERASEという別名も使用可能。
* CP/MのDIRコマンドは、MS-DOSのDIR/Wに相当する出力形式しかない。ファイルの詳細を知るにはSTATコマンドを使う。
* CP/MのRENコマンドは「REN 新ファイル名 = 旧ファイル名」と書き、さらにMS-DOSのそれとは引数の順序が逆である。
* CP/MではファイルのコピーはトランジェントコマンドのPIPを必要としたが、MS-DOSでは内部コマンドのCOPYで行える。引数の順序もRENコマンドと同様に逆になる。
* CP/Mでは前述したようなフロッピー入れ替えにまつわる問題があるが、MS-DOSではそのようなことはない。
* CP/Mではバッチファイル(.SUB)の実行にはトランジェントコマンドのSUBMITを必要としたが、MS-DOSではCOMMAND.COM自身がバッチファイル実行機能を持っている。
* CP/MではCCPなどのOS構成要素はディスク上の専用領域に格納されるが、MS-DOSではCOMMAND.COMについては通常のファイルと同様の方法で格納されるようになった。
* CP/MのディスクI/Oの基本単位は128バイトであり、ファイルサイズも128バイト単位である。これは、標準メディアが8インチ単密度フロッピー（セクタサイズ128バイト）だったことによる。一方、MS-DOSのディスクI/Oは128/256/512/1024バイトなどの単位で行え、ファイルサイズもバイト単位でとることができる。
* CP/Mのファイルシステムではファイルの配置情報がディレクトリと一体化しており、大きなファイルがあるとディレクトリエントリをいくつも消費するという問題があったが、MS-DOSではFATとして独立している。

また、マイクロソフトが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にパス名を渡す場合には、コマンドラインスイッチと混同するおそれがないため、区切りとしてスラッシュもバックスラッシュも受け付ける。

## CP/MとDOSのソースコード比較
2016年に、ザイドマン・コンサルティングのボッブ・ザイドマンは、デジタルリサーチが開発したCP/Mとティム・パターソンが開発し、長年前者のコードを基にしたと疑われたDOSのソースコードを比較し、初版のDOSのソースコードがCP/Mのソースコード基にしたかを調べた。

DOSとCP/Mのコマンドを比べると、一致するものは極僅かである。DOSとOS/8のコマンドの間には、DOSとCP/Mの間よりも共通コマンドが多くある。当該コマンドは全て動作を直接表す英単語となることが原因である。

しかし、両OSのシステムコールを分析すると、DOSにあるシステムコールは、明らかにCP/Mのシステムコールを真似るものであることがわかる。同じ機能を表す同じ数字がいくつもあることから、ティム・パターソンがDOSを開発した時にCP/Mの説明書を参考にしたことは明らかである。

ザイドマンの結論は、DOSはCP/Mのコードを一切基にしていないとのことであるものの、システムコールの多くの部分が真似られた。

## 現状
デジタルリサーチは1991年にノベルに買収され、さらにカルデラ（2002年SCOに改称）に売却された。現在CP/M資産は同社の子会社であるリネオが所持しており、その大半は同社の許諾を受けた「非公式なCP/Mサイト」からダウンロードすることが可能である。

現在、日本国内でのCP/Mの商標は技術少年出版が保有する。

## 脚注

### 注釈

### 出典

## 参考文献
* 

## 関連項目
* Intel 8080
* MSX-DOS
* MZ-2500
* SMC-777
* CP/M-86
* MS-DOS
* Human68k
* OS-9
* ケイプロ
* 文豪 - NECのワープロ専用機。ミニ5シリーズでは、CP/M上でワープロソフトウェアが動作していた。

## 外部リンク
* The Unofficial CP/M Web site