WindowsでCP/M
2017年5月、懐かしいCP/Mを使いたくなりネット検索しました。CP/Mシミュレータ、エミュレータなど数多くヒットしました。
今回は、Altair 8800 simulatorを使用しました。このシミュレータは、SIMHシミュレータを使用してi8080/Z80をシミュレートすることによりCP/Mが動作します。
CP/Mとは
CP/M(Control Program for Microcomputer)は、デジタルリサーチ社が開発したインテル8080プロセッサ用のオペレーティングシステム(OS)です。
私は、1983年にZ80を使用した「基板試験システムの試作開発」で初めてCP/Mを使いました。趣味のプログラムではFM-7パソコンを使用していましたが、Z80拡張ボードを増設してFM-7でCP/M-80も使用していました。
CP/Mは、フロッピーベースで動作するOSで、当時としてはとても使いやすいOSでした。
2017年現在、CP/Mのコードやドキュメントは「非公式なCP/Mサイト(The Unofficial CP/M Web site)」で公開しています。
CP/Mの概要を下記に示します。
CP/M Systemは、下記コンポーネントから構成し、電源投入のコールドスタートでフロッピーディスクからメモリーロードします。
- BIOS(Basic Input/Output System) : ハードウェアドライバ(基本的な入出力部)
- BDOS(Basic Disk Operation System) : OS本体 (オペレーティングシステム機能)
- CCP(Console Command Processor) : シェル (コマンドラインインタプリタ)
CCPは、基本的なビルドイン・コマンド(TYPE,DIR,REN,ERAなど)を内蔵しています。トランジェントコマンド(Transient Command)は、フロッピーディスクに実行ファイルとして保存したプログラムです。ユーザーが開発したアプリケーションもトランジェントコマンドのひとつです。
メモリサイズの小さなトランジェントコマンドは、RET命令でコマンドを終了してCCPに制御を移します。メモリサイズの大きなトランジェントコマンドは、CCPやBDOSメモリ領域を上書き使用して動作し JMP 0命令でウォームブートすることにより、CCPとBDOSを再ロードしてCCPを起動します。
SIMHとは
SIMHとは、「The Computer History Simulation Project」が開発しているマルチシステムシミュレータです。
SIMH is a highly portable, multi-system simulator.
The Computer History Simulation Project is a loose Internet-based collective of people interested in restoring historically significant computer hardware and software systems by simulation.
The goal of the project is to create highly portable system simulators and to publish them as freeware on the Internet, with freely available copies of significant or representative software.【要約】
SIMHは移植性の高いマルチシステムシミュレータです。
コンピュータヒストリシミュレーションプロジェクトは、歴史的に重要なコンピュータハードウェアおよびソフトウェアシステムをシミュレーションによって復元することに関心を持つ、インターネットベースの自由な集団です。
このプロジェクトの目的は、可搬性の高いシステムシミュレータを作成し、インターネット上でフリーウェアとして公開し、重要または代表的なソフトウェアの自由に入手できるコピーを公開することです。
コンピュータ史上で貴重なソフトウェアシステムをシミュレーションによって復元することを目的としています。DEC社のPDPシリーズなど貴重なソフトウェア資産が残っていても、それを実行するハードウェアは現存しなくなりました。
そのソフトウェア資産を復活させるために、SIMHシステムシミュレータが開発されました。SIMHシミュレータは、DEC社のPDPシリーズやVAX、MITS Altair 8800(with 8080/Z80)など、いろいなシステムが含まれます。
ソフトウェア技術者にとって、触れたことも無いシステムを体験したり、懐かしいシステムを利用することができます。とてもすばらしいプロジェクトです。
現在の最新リリースは、SIMH (V3.9-0) updated 03-May-2012 です。
Altair 8800 simulatorのインストール
SIMHを使用してCP/Mが動作する「Altair 8800 simulator」を公開しているWEBサイトがあります。
このサイトから、CP/Mをインストールします。
「QUICK START FOR RUNNING CP/M」から、simulator(altairz80.zip)とCP/M2.2(cpm2.zip)をダウンロードします。
PCの任意のフォルダに格納します。私は、「E:\simh_cpm」フォルダに格納して展開しました。
Altair 8800 simulatorの実行
コマンドプロンプトを開いて、cpm2フォルダに移動して altairz80フォルダのaltairz80.exeを実行します。
E:\simh_cpm\cpm2>..\altairz80\altairz80.exe
Altair 8800 (Z80) simulatorが起動して、シミュレータコマンド待ちとなります。
「do cpm2」と入力すると、CP/M Version 2.2 が起動します。
sim> do cpm2
カレントドライブは、Aドライブです。CP/Mのビルドインコマンドdirで、Aドライブのディレクトリ一覧をみると、いろんなトランジェントコマンドがあります。
haltコマンドを入力すると、CP/Mの実行を終了してシミュレータコマンドレベルになります。
A>halt HALT instruction, PC: 00100 (HALT) sim>
シミュレータコマンドで 「quit」と入力するとシミュレータを終了して、コマンドプロンプトレベルとなります。
sim> quit Goodbye E:\simh_cpm\cpm2>
コマンドプロンプトで、「exit」と入力するとコマンドプロンプトが終了します。
E:\simh_cpm\cpm2> exit
CP/Mの起動手順をシーケンス図で書くと下記のようになります。
シミュレータコマンドのdoコマンドは、コマンドファィルの実行です。コマンドファイル cpm2は、シミュレータコマンドにより実行環境を設定します。例えば、attachコマンドでディスクを割り付けて、reset cpuコマンドでリセットして、boot dskコマンドでブートします。
altairz80.exeを実行するとき、引数にコマンドファイル cpm2を指定すると、シミュレータコマンド入力待ちにはならず直接 CP/Mを起動します。
CP/Mコマンド入力時に、CTRL+Eを入力するとCP/Mを中断してシミュレータコマンド待ちとなります。goコマンドでCP/Mを再開します。
8080/Z80がHALT命令を実行すると、CP/Mを中断してシミュレータコマンド待ちとなります。
quitコマンドで、シミュレータを終了します。
SIMHコマンド
Altair 8800 simulatorは、下記ハードウェアをシミュレートします。
- CPU : Intel 8080 CPUボードを搭載したAltair 8800 RAMの62KB、起動ROM付きの2KのEPROM
- SIO : MITS 88-2SIOデュアルシリアルインタフェースボード
- PTR : 紙テープリーダ (2SIOボードのポート2に接続)
- PTP : 紙テープパンチ (2SIOボードのポート2に接続) プリンタポートとしても機能
- DSK : MITS 88-DISKフロッピーディスクコントローラ (DSK0~DSK7 : 最大8台のドライブ)
- HDSK : 8MB容量のハードディスク(HDSK0~HDSK7 : 最大8台のドライブ)CP/Mは、I:とJ:の2つのハードディスクをサポートしています
シミュレータコマンドでCPUの設定やメモリサイズを変更することができます。
set cpu |8080|Z80|
set cpu |64k|60k|・・・|
cpm2フォルダに、CP/Mの実行環境があります。
cpm2.dsk、app.dsk、i.dsk、appleiicpm.dskは、CP/Mの仮想ドライブです。
cpm2は、コマンドファイルで下記SIMHコマンドから構成しています。
d tracks[0-7] 254 attach dsk0 cpm2.dsk attach dsk1 app.dsk attach hdsk0 i.dsk ;demo how to use other disk formats in CP/M 2 ;it will mount as drive J: attach hdsk1 appleiicpm.dsk set hdsk1 format=apple-d2 set cpu 64k set cpu noitrap set cpu z80 set cpu altairrom set cpu nonbanked reset cpu set sio ansi set sio nosleep boot dsk
CP/Mは、A~Hドライブの8つのフロッピーディスクを搭載しています。片面単密度のフロッピーディスクは、128byte/セクタ、32セクタ/トラック、77トラック/ディスクで構成しています。容量は、128byte×32×77=308Kbyteとなります。シミュレートしたフロッピーディスクは、最大254トラックをサポートしていますので、設定により容量を拡張することが可能です。
d tracks[0-7] 254
フロッピーディスクドライブ 0~7 (A~H)のトラック数を254トラックに設定します。
attach dsk0 cpm2.dsk
フロッピーディスドライブ0 (A)に、cpm2.dskを割り付けます。
attach dsk1 app.dsk
フロッピーディスドライブ1 (B)に、app.dskを割り付けます。
attach hdsk0 i.dsk
ハードディスクドライブ0 (I)に、i.dskを割り付けます。
attach hdsk1 appleiicpm.dsk set hdsk1 format=apple-d2
ハードディスクドライブ1 (J)に、appleiicpm.dskを割り付けます。そのフォーマットは、APPLE-D2 (140 kB, Apple II)です。
set cpu 64k
メモリを64KBとします。
set cpu noitrap
「set cpu |noitrap|itrap|」
- noitrap : 無効な命令コードの実行でシミュレータを停止しません。
- itrap : 無効な命令コードの実行でシミュレータを停止します。
set cpu z80
「set cpu |z80|8080|」
- z80 : Z80 CPUをシミュレートします。
- 8080 : 8080 CPUをシミュレートします。(デフォルト)
set cpu altairrom
「set cpu |altairrom|noaltairrom|」
- altairrom : 標準のAltair ROMの動作を有効にしてAltairブートします。(デフォルト)
- noaltairrom : 標準のAltair ROMの動作を無効にします。
set cpu nonbanked
「set cpu |nonbanked|nbanked|」
- nonbanked : バンクメモリサポートを無効にします。
- banked : バンクメモリサポートを有効にします。
reset cpu
CPUをリセットします。
set sio ansi
コンソール出力(SIO)のbit8をゼロにします。
set sio nosleep
キーボードステータスチェックが失敗した後はスリープしません。
boot dsk
フロッピーデイスクからブートします。
シミュレータコマンドで、「do cmp2」と入力することにより以上のようなコマンドファイルを実行してCP/Mが起動します。
CP/M 環境
「do cpm2」で起動したCP/M環境を下記に示します。
Aドライブ(cpm2.dsk)のディレクトリ一覧を見ます。いろいろなコマンドが格納されています。
ドキュメントにcpm2.dsk内の説明があります。
Bドライブ(app.dsk)のディレクトリ一覧を見ます。いろいろなコマンドが格納されています。
ドキュメントにapp.dsk内の説明があります。
PASCALとか、PROLOGなどの言語処理系が入っているみたいです。
Iドライブ(i.dsk)のディレクトリ一覧を見ます。ディスクは空です。
「xformat」コマンドで、ディスクをフォーマットします。
A>xformat i:
Iドライブは、128Byte×32セクタ×2048トラック=8MByteのハードティスクです。
Jドライブ(appleiicpm.dsk)のディレクトリ一覧を見ます。MBASICなどが入っています。
Altair 8800 simulatorのCP/M 独自コマンド
Altair 8800 simulatorのCP/Mを便利に使用するために、独自のコマンドを用意しています。
CP/M環境とSIMH環境(Windows)間で、ファイル読み込みとファイル書き込みするコマンドがあるので、Windowsでファイルを準備してCP/Mに渡すことが簡単にできます。
HALTコマンド
HALTコマンドは、HALT命令を実行するコマンドです。
HALT命令を実行すると、CP/Mを中断してシミュレータコマンド待ちとなります。
DDTコマンドで逆アセンブルして確かめてみます。0x0100番地がHLT命令となっています。
HDIRコマンド
HDIRコマンドは、SIMH環境のディレクトリ一覧を表示します。
Rコマンド
Rコマンドは、SIMH環境からファイルを読み込みます。
Wコマンド
Wコマンドは、SIMH環境にファイルを書き込みます。
CP/M 標準コマンド
CP/Mの標準的なコマンドは、CP/M Operating System Manual を参照してください。
最後に
Altair 8800 simulatorで、懐かしのCP/Mが動作しました。SIMHシミュレータ開発プロジェクトは素晴らしいです。数十年も前のシステムソフトウェアが、最新のWindows10 PCの上で動作するわけです。
PASCAL、PROLOG、BASICなどが動作するようなので使ってみたいです。また、i8080アセンブラでプログラミングしたいと思います。