CP/M
CP/M(Control Program for Microcomputers、シーピーエム)は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を前身としている。
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) といい、次のようなものがある。
それぞれ、MS-DOSの同名コマンドと同様。
MS-DOSのDEL (ERASE)に相当。
アドレス0100hから、256バイトを1ページとして指定のページ数のメモリイメージをディスクに記録する。
ユーザ切り替え。主に、MP/Mでユーザごとに記録されたファイルを扱うために存在する。CP/M単独ではあまり意味がない。
これ以外はトランジェントコマンドに委ねている。
フロッピーディスクに実行ファイルとして記録されているコマンドをトランジェントコマンド (transient command)という。
次のようなものがある。
ディスクやファイルのサイズを表示する、ファイルの保護属性を表示・変更する、デバイスのリダイレクト状況を表示・変更する、など様々なシステムの状態を表示・操作する。
周辺装置やディスクの間でファイルをコピーする(Peripheral Interchange Program)。DECのPDPシリーズのコマンドに由来する。
バッチファイルを実行する。
キャラクタ単位のラインエディタ。
8080用アブソリュートアセンブラ。
ASMの出力したオブジェクト(インテルHEXフォーマット)を.COMファイルに変換する。コマンド名から機能を連想しづらいことで有名。
ファイルの16進ダンプツール。アセンブリソースコードが添付されており、プログラミングのサンプルでもあった。特に、ASCIIダンプがついていなかったため、この機能を追加することは定番の改造だった。
セルフ環境のデバッガ (Dynamic Debugging Tool)。殺虫剤のDDTにかけた命名である。
バッチ処理中にコンソール入力をファイルから取得する際にSUBMITと同時に用いる。CP/M 2.x以降に用意された。
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の特徴的な仕様の一つに、リブート(ウォームブート、ウォームスタート)通常のコールド・スタートに対してこう呼ばれるようになった。があるなお、国産機の多く(NEC PC等)は更に通常の電源断からの再起動を「コールドリスタート」、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では改善されている。
キルドールは、インテルからマイクロコンピュータ開発システム (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インチフロッピーディスクドライブを独自のfloppy disk controllerで接続していた。キルドールは自分で開発したマイクロプロセッサ用のプログラミング言語である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というオペレーティングシステムがあり、キルドールはNaval Postgraduate School(NPS)で働いている時にこれを使っていた。
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対応システムはAmstrad PCWだと考えられている。イギリスではリサーチマシーンズ社の教育用コンピュータで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フォーマットと名付けてソフトを提供し、この上でプログラムを実行させた。
グラフィック機能は標準化されておらずコンピュータゲームのサポートは限定的であったものの、Telengard、Gorillas (video game)、Hamurabi (video game)、Lunar Lander (video game series)、初期のテキストアドベンチャーであるゾークシリーズやコロッサル・ケーブ・アドベンチャーなどのテキストベースのゲームが移植された。テキストアドベンチャーに強いインフォコムはCP/Mで定期的にゲームをリリースしていた数少ない開発会社だった。
ユーザ・コミュニティでのフリーソフトウェアの流通もあり、当時はPDSと呼ばれていた。当時は通信環境がまだ普及しておらず、フロッピーで配布するのが主流だった。CP/M UGなど、組織的にソフトの収集と配布を行なっていたユーザグループも存在した。Lifeboat Associatesはユーザーが開発したフリーソフトウェアを集めて配布した。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、Epson QX-10などのディスクを読めた。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方式のディスクが読み書きできるディスクドライブのCommodore 1571かCommodore 1581が必須だった。
始めて3.5インチフロッピーを採用したSony SMC-70ではCP/M 2.2が動作した。
コモドール128、ラップトップのBondwell-2、Micromint/Ciarcia SB-180、MSX、TRS-80 Model 4 (Montezuma CP/M 2.2が動作)なども3.5インチディスク版のCP/Mが動作した。Amstrad PCWは当初3インチフロッピーでCP/Mが動作し、後に3.5インチフロッピーへ切り替えた。
S-100バス(アルテアバス)に対応したグラフィックシステムは存在していたが、CP/Mは1982年にGSX (Graphics System Extension)をリリースするまでグラフィック機能を全くサポートしていなかった。当時は使用できるメモリが非常に限られており、8ビットのCP/Mでグラフィック機能が一般的になることは無かった。ほとんどの機種ではテキストモードでアスキーアートにより図表を表示するか、機種依存文字を使う事しかできなかった。KayproシリーズやTRS-80 Model 4などの一部の機種は絵文字をサポートしており、アセンブラで直接ハードウェアを叩くか、BASICからCHR$コマンドを使ってアクセスすることができた。Model 4はオプションのハイレゾリューションボードで640×240ドットのグラフィックを表示できた。
1979年にマルチユーザーに対応したCP/Mがリリースされた。MP/Mは複数のユーザーが1台のコンピューターに接続でき、ユーザーはディスプレイとキーボードを備えた端末が個別に与えられた。後のバージョンは16ビットCPUで動作した。
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ビットCPU用のCP/Mも存在した。