CP/M
最初の16ビット版であるCP/M-86はIntel 8086版で、続けてモトローラ68000版のCP/M-68Kがリリースされた。1982年にリリースされたオリジナル版のCP/M-68KはPascal/MT+68kで開発され、後にC言語に移植された。混乱を避けるため、オリジナルの8ビット版CP/MはCP/M-80と呼ばれるようになった。1982~1983年頃にOlivetti M20用として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の対抗馬として発売したRainbow 100は、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へ移行することが可能だった。
モトローラEXORmacsで既に動作していた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で動作するコマンドを混用することが出来た。
当時多くの人が16ビット機でもCP/Mが標準になるだろうと考えていた。1980年にIBMは、ビル・ゲイツの提案に従ってデジタルリサーチに連絡を取り、開発中のIBM PCに提供する新しいCP/Mのライセンス契約について話し合おうとした。秘密保持契約を結ぶことができずに話し合いは決裂し、IBMは代わりにマイクロソフトへOSの提供を打診した。その結果生まれたMS-DOSは間もなくCP/Mより売れるようになった。
初期バージョンのMS-DOSは基本となるコンセプトや仕組みがCP/Mと似ていた。ファイルのデータ構造が同じで、ディスクドライブにドライブレター(A:や B:など)を割り当てる形も同じだった。のは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に改名した。
1982年2月2日に公開されたZCPR (Z80 Command Processor Replacement)はデジタルリサーチ標準のコンソールコマンドプロセッサ(CPP)をそのまま置き換えるプログラムで、CCPグループと呼ばれる趣味のユーザーグループが開発した。フランク・ワンチョ、キース・ピーターセン(Simtelの管理者)、ロン・フローラー、チャーリー・ストローム、ボブ・マティアス、リチャード・コンらが開発に参加した。実際にはリチャードがこのグループを推進していた(全員電子メールで連絡を取り合っていた)。
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の衰退を止めることはできなかった。
SCP(Single User Control Program)、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/PC DOS(の前身であるシアトルコンピュータプロダクツの86-DOS)は、CP/Mをモデルとして設計されたため、さまざまな面で類似点が見られる。
ファイル名が8文字+3文字であり、拡張子でファイルの種類を区別する。実行可能ファイルの拡張子は.COMである。ワイルドカード「*」「?」がある。ワイルドカード自体はUNIX由来だが、CP/M、MS-DOSとも機能は大幅に簡略化されている。なお、CP/Mでは「ファイルマッチ」の名称を用いる。
ドライブレター、カレントドライブ、デバイス名などの概念がある。
コマンドプロンプトは「>」である(例: A>)。
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の場合はやブートセクタを書き込む必要があるため、別途論理フォーマットが必須である。
一方で、以下のような相違点(改善点)もある。
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にパス名を渡す場合には、コマンドラインスイッチと混同するおそれがないため、区切りとしてスラッシュもバックスラッシュも受け付ける。
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の商標は技術少年出版が保有する。