懐かしいCP/MをSIMHシミュレータで実行

WindowsでCP/M

2017年5月、懐かしいCP/Mを使いたくなりネット検索しました。CP/Mシミュレータ、エミュレータなど数多くヒットしました。

今回は、Altair 8800 simulatorを使用しました。このシミュレータは、SIMHシミュレータを使用してi8080/Z80をシミュレートすることによりCP/Mが動作します。

Altair 8800 CP/M

Altair 8800 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)」で公開しています。

The Unofficial CP/M Web site

The Unofficial CP/M Web site


CP/Mの概要を下記に示します。

CP/M概要

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」が開発しているマルチシステムシミュレータです。

The Computer History Simulation Project

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サイトがあります。

Altair 8800 simulator

Altair 8800 simulator

このサイトから、CP/Mをインストールします。

「QUICK START FOR RUNNING CP/M」から、simulator(altairz80.zip)とCP/M2.2(cpm2.zip)をダウンロードします。

クイックスタート CP/M

クイックスタート CP/M

PCの任意のフォルダに格納します。私は、「E:\simh_cpm」フォルダに格納して展開しました。

CP/Mインストール

CP/Mインストール

Altair 8800 simulatorの実行

コマンドプロンプトを開いて、cpm2フォルダに移動して altairz80フォルダのaltairz80.exeを実行します。

CP/M起動手順

CP/M起動手順

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の起動手順をシーケンス図で書くと下記のようになります。

CP/M起動手順シーケンス図

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環境を下記に示します。

CP/Mの環境

CP/Mの環境


Aドライブ(cpm2.dsk)のディレクトリ一覧を見ます。いろいろなコマンドが格納されています。

A: ドライブのディレクトリ

A: ドライブのディレクトリ

ドキュメントにcpm2.dsk内の説明があります。


Bドライブ(app.dsk)のディレクトリ一覧を見ます。いろいろなコマンドが格納されています。

B: ドライブのディレクトリ

B: ドライブのディレクトリ

ドキュメントにapp.dsk内の説明があります。
PASCALとか、PROLOGなどの言語処理系が入っているみたいです。


Iドライブ(i.dsk)のディレクトリ一覧を見ます。ディスクは空です。

I: ドライブのフォーマット

I: ドライブのフォーマット

「xformat」コマンドで、ディスクをフォーマットします。

A>xformat i:

Iドライブは、128Byte×32セクタ×2048トラック=8MByteのハードティスクです。


Jドライブ(appleiicpm.dsk)のディレクトリ一覧を見ます。MBASICなどが入っています。

J: ドライブの内容

J: ドライブの内容

Altair 8800 simulatorのCP/M 独自コマンド

Altair 8800 simulatorのCP/Mを便利に使用するために、独自のコマンドを用意しています。

CP/M環境とSIMH環境(Windows)間で、ファイル読み込みとファイル書き込みするコマンドがあるので、Windowsでファイルを準備してCP/Mに渡すことが簡単にできます。

HALTコマンド

HALTコマンドは、HALT命令を実行するコマンドです。
HALT命令を実行すると、CP/Mを中断してシミュレータコマンド待ちとなります。

SIMH I/F HALTコマンド

SIMH I/F HALTコマンド

DDTコマンドで逆アセンブルして確かめてみます。0x0100番地がHLT命令となっています。

SIMH I/F HALTコマンドの内容

SIMH I/F HALTコマンドの内容

HDIRコマンド

HDIRコマンドは、SIMH環境のディレクトリ一覧を表示します。

SIMH I/F HDIRコマンド

SIMH I/F HDIRコマンド

Rコマンド

Rコマンドは、SIMH環境からファイルを読み込みます。

SIMH I/F Rコマンド

SIMH I/F Rコマンド

Wコマンド

Wコマンドは、SIMH環境にファイルを書き込みます。

SIMH I/F Wコマンド

SIMH I/F Wコマンド

CP/M 標準コマンド

CP/Mの標準的なコマンドは、CP/M Operating System Manual を参照してください。

CP/M Operating System Manual

CP/M Operating System Manual

 

最後に

Altair 8800 simulatorで、懐かしのCP/Mが動作しました。SIMHシミュレータ開発プロジェクトは素晴らしいです。数十年も前のシステムソフトウェアが、最新のWindows10 PCの上で動作するわけです。

PASCAL、PROLOG、BASICなどが動作するようなので使ってみたいです。また、i8080アセンブラでプログラミングしたいと思います。