Raspberry Pi2で懐かしいCP/Mを実行

CP/M on Raspberry Pi

CP/M on Raspberry Pi

Raspberry PiでCP/M

2018年9月、懐かしいCP/MをRaspberry Pi2で実行しました。

Raspberry Pi

Raspberry Pi

CP/M(Control Program for Microcomputer)は、デジタルリサーチ社が開発したIntel8080プロセッサー用のオペレーティングシステム(OS)です。1976年に発売されたので、現在(2018年)から42年も昔のOSです。

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

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

今回は、Raspberry PiでSIMHシミュレーターを実行することによりCP/Mの実行ができました。

CP/M on Raspbian

CP/M on Raspbian

SIMHとは

SIMHとは、「The Computer History Simulation Project」による移植性の高いマルチシステムシミュレーターです。

SIMH WEB

SIMH WEB

SIMH is a highly portable, multi-system simulator.

SimH (History Simulator) 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は移植性の高いマルチシステムシミュレーターです。

SimH(History Simulator)は、シミュレーションによって歴史的に重要なコンピューターハードウェアとソフトウェアシステムを復元することに関心を持つ、インターネットベースの自由な集団です。このプロジェクトの目的は、可搬性の高いシステムシミュレーターを作成し、インターネットでフリーウェアとして公開し、重要または代表的なソフトウェアの自由に入手できるコピーを公開することです。

 

コンピューター史上で貴重なソフトウェアシステムをシミュレーションによって復元することを目的としています。DEC社のPDPシリーズなど貴重なソフトウェア資産が残っていますが、ソフトウェアを実行するハードウェアは現存しなくなりました。そのソフトウェア資産を復活させるために、SIMHシステムシミュレーターが開発されました。SIMHシミュレーターは、DEC社のPDPシリーズやVAX、MITS Altair 8800(with 8080/Z80)など、いろいろなシステムが含まれます。

ソフトウェア技術者にとって触れたことも無いシステムの体験や、懐かしいシステムを利用できます。とてもすばらしいプロジェクトです。

現在の最新リリースは、SIMH (V3.10-0 RC1)updated 01-Jun-2018です。

SIMH(Altair 8800 simulator)インストール

Raspberry Pi2のOSはRaspbianです。システム情報とバージョンを下記に示します。

$ uname -a
Linux pi2 4.14.62-v7+ #1134 SMP Tue Aug 14 17:10:10 BST 2018 armv7l GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 9.4 (stretch)
Release:	9.4
Codename:	stretch

Raspberry Pi2にSIMH(Altair 8800 simulator)をインストールします。
ソースコードをダウンロードしてLinuxでビルドします。

ホームディレクトリーに~/MyHome/simh/ディレクトリーを作成して、ソースコードをダウンロードして展開します。

$ cd MyHome/simh/
$ wget -c https://github.com/simh/simh/archive/master.zip 
  :
`master.zip' に保存中
  :
YYYY-MM-DD hh:mm:ss (3.18 MB/s) - `master.zip' へ保存終了 [12828482]

$ unzip master.zip 
Archive:  master.zip
2d35feb973a6e174e6b6deff438cd534b9218bb7
   creating: simh-master/
   :
   creating: simh-master/ALTAIR/
  inflating: simh-master/ALTAIR/altair.txt  
  inflating: simh-master/ALTAIR/altair_cpu.c  
  inflating: simh-master/ALTAIR/altair_defs.h  
  inflating: simh-master/ALTAIR/altair_dsk.c  
  inflating: simh-master/ALTAIR/altair_sio.c  
  inflating: simh-master/ALTAIR/altair_sys.c  
   creating: simh-master/AltairZ80/
  inflating: simh-master/AltairZ80/altairz80_cpu.c  
  inflating: simh-master/AltairZ80/altairz80_cpu_nommu.c  
  inflating: simh-master/AltairZ80/altairz80_defs.h  
  inflating: simh-master/AltairZ80/altairz80_doc.pdf  
  inflating: simh-master/AltairZ80/altairz80_dsk.c  
  inflating: simh-master/AltairZ80/altairz80_hdsk.c  
  inflating: simh-master/AltairZ80/altairz80_mhdsk.c  
  inflating: simh-master/AltairZ80/altairz80_net.c  
  inflating: simh-master/AltairZ80/altairz80_sio.c  
  inflating: simh-master/AltairZ80/altairz80_sys.c  
  inflating: simh-master/AltairZ80/disasm.c  
  inflating: simh-master/AltairZ80/flashwriter2.c  
  inflating: simh-master/AltairZ80/i8272.c  
  inflating: simh-master/AltairZ80/i8272.h  
  inflating: simh-master/AltairZ80/i86.h  
  inflating: simh-master/AltairZ80/i86_decode.c  
  inflating: simh-master/AltairZ80/i86_ops.c  
  inflating: simh-master/AltairZ80/i86_prim_ops.c  
  inflating: simh-master/AltairZ80/insns.h  
  inflating: simh-master/AltairZ80/insnsd.c  
  inflating: simh-master/AltairZ80/m68k.h  
  inflating: simh-master/AltairZ80/m68kconf.h  
  inflating: simh-master/AltairZ80/m68kcpu.c  
  inflating: simh-master/AltairZ80/m68kcpu.h  
  inflating: simh-master/AltairZ80/m68kdasm.c  
  inflating: simh-master/AltairZ80/m68kopac.c  
  inflating: simh-master/AltairZ80/m68kopdm.c  
  inflating: simh-master/AltairZ80/m68kopnz.c  
  inflating: simh-master/AltairZ80/m68kops.c  
  inflating: simh-master/AltairZ80/m68kops.h  
  inflating: simh-master/AltairZ80/m68ksim.c  
  inflating: simh-master/AltairZ80/m68ksim.h  
  inflating: simh-master/AltairZ80/mfdc.c  
  inflating: simh-master/AltairZ80/mfdc.h  
  inflating: simh-master/AltairZ80/n8vem.c  
  inflating: simh-master/AltairZ80/nasm.h  
  inflating: simh-master/AltairZ80/s100_64fdc.c  
  inflating: simh-master/AltairZ80/s100_adcs6.c  
  inflating: simh-master/AltairZ80/s100_disk1a.c  
  inflating: simh-master/AltairZ80/s100_disk2.c  
  inflating: simh-master/AltairZ80/s100_disk3.c  
  inflating: simh-master/AltairZ80/s100_fif.c  
  inflating: simh-master/AltairZ80/s100_hdc1001.c  
  inflating: simh-master/AltairZ80/s100_if3.c  
  inflating: simh-master/AltairZ80/s100_mdriveh.c  
  inflating: simh-master/AltairZ80/s100_mdsa.c  
  inflating: simh-master/AltairZ80/s100_mdsad.c  
  inflating: simh-master/AltairZ80/s100_scp300f.c  
  inflating: simh-master/AltairZ80/s100_selchan.c  
  inflating: simh-master/AltairZ80/s100_ss1.c  
  inflating: simh-master/AltairZ80/vfdhd.c  
  inflating: simh-master/AltairZ80/vfdhd.h  
  inflating: simh-master/AltairZ80/wd179x.c  
  inflating: simh-master/AltairZ80/wd179x.h  
   :
$

PDP11、VAX、Altairなどいろいろなプロセッサーのシミュレーターソースコードを展開しました。

展開したディレクトリーの中に、ネットワークに関するドキュメント(0readme_ethernet.txt)があります。

This file contains information about the SIMH Ethernet package.

このファイルには、SIMHイーサネットパッケージに関する情報が含まれています。

ドキュメントに従って前提条件パッケージを最初にインストールします。

$ sudo apt-get install make
$ sudo apt-get install libpcap-dev
$ sudo apt-get install bridge-utils
$ sudo apt-get install uml-utilities

 

Altair用のシミュレーター(altairz80)をビルドします。

$ ls
master.zip  simh-master

$ cd simh-master/

$ make clean
lib paths are: /lib/ /lib/arm-linux-gnueabihf/ ...
 :
 :
rm -f -r BIN/

$ make altairz80
lib paths are: /lib/ /lib/arm-linux-gnueabihf/ ...
 :
 :

$ cd BIN
$ ls
altairz80

$

./BIN/altairz80を生成しました。

Altairシミュレーターを実行するターゲットディレクトリー(~/MyHome/exAltair/)をセットアップします。生成したaltairz80をターゲットディレクトリーにコピーします。

$ mkdir ~/MyHome/exAltair/

$ cp ./BIN/altairz80 ~/MyHome/exAltair/

$ cd ~/MyHome/exAltair/

$ chmod +x ./altairz80

$

Altairシミュレーターのバイナリーの準備ができました。

CP/Mの入手

AltairでCP/Mを実行するために、CP/Mを入手します。

SIMHを使用してCP/Mが動作する「Altair 8800 simulator」を公開しているWEBサイトがあります。

Altair シミュレーター WEB

Altair シミュレーター WEB

このサイトでは、Windows用/Macintosh (OS X)用/Linux (Intel x86)用などのAltairシミュレーターのバイナリーとCP/M2.2を公開しています。

以前にWindowsでCP/Mを実行したときに利用しました。今回は、CP/M2.2だけをダウンロードします。

CP/M 2.2 イメージディスク

CP/M 2.2 イメージディスク

ターゲットディレクトリーにCP/Mをインストールします。

$ cd ~/MyHome/exAltair/

$ wget -c https://schorn.ch/cpm/zip/cpm2.zip

`cpm2.zip' に保存中
 :
  :
YYYY-MM-DD hh:mm:ss (386 KB/s) - `cpm2.zip' へ保存完了 [648142/648142]

$ ls
altairz80  cpm2.zip

$ unzip cpm2.zip 
Archive:  cpm2.zip
  inflating: 128sssd.imd             
  inflating: app.dsk                 
  inflating: appleiicpm.dsk          
  inflating: cpm2                    
  inflating: cpm2.dsk                
  inflating: cpm2_imd                
  inflating: i.dsk                   

$ ls
128sssd.imd  app.dsk         cpm2      cpm2.zip  cpm2sio
altairz80    appleiicpm.dsk  cpm2.dsk  cpm2_imd  i.dsk

$

Altair 8800 simulatorの実行

Altairシミュレーターを実行します。コマンドの引数にcpm2を指定します。

CP/M 2.2の実行

CP/M 2.2の実行

$ ./altairz80 cpm2

Altair 8800 (Z80) simulator V4.0-0 Currentが起動して、CP/M Version 2.2 が起動します。SIMHシミュレーターのバージョンは V3.10-0 RC1でしたが、V3.9の次なのでV4.0と表示されました。

カレントドライブは、Aドライブです。CP/Mのビルドインコマンドdirで、Jドライブのディレクトリーを見るとMBASICが入っています。

haltコマンドを入力すると、CP/Mの実行を終了してシミュレーターコマンドレベルになります。

A>halt

HALT instruction, PC: 00100 (HALT)
sim> 

シミュレーターコマンドで 「quit」と入力するとシミュレーターを終了し、コマンドプロンプトレベルとなります。

sim> quit
Goodbye
pi@pi2:~/MyHome/exAltair $

CP/Mのhaltコマンドでシミュレーターを終了しましたが、CP/Mコマンド入力時にCTRL+Eを入力するとCP/Mを中断してシミュレーターコマンド待ちとなります。goコマンドでCP/Mを再開します。


引数で指定したcpm2は、シミュレーターコマンドにより実行環境を設定します。
例えば、attachコマンドでディスクを割り付けて、reset cpuコマンドでリセットし、boot dskコマンドでブートします。

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

SIMHのコマンドの説明は、ここを参照してください。

ワードマスターを使う

Raspberry Pi2にTera Termからssh接続して、CP/Mを起動しています。Tera TermはVT100互換のターミナルなので、そのままワードマスターを使用できました。

ワードマスターのコマンドは、ここを参照してください。

WMの実行

WMの実行

A>wm
MicroPro WORDMASTER release 5.55A serial # KF2222KF
 COPYRIGHT (C) 1978  MICROPRO INTERNATIONAL CORPORATION

NO FILE NAME

A>

CTRL+Jで、HELP画面を表示します。

WM ヘルプ

WM ヘルプ

WindowsでCP/Mを実行したときは、DOSコマンドプロンプトからCP/Mを起動していました。VT100互換のターミナルから接続するために、SIOの設定でコンソールIOをTelnet接続ポート23経由にしました。

今回はVT100互換のターミナルでLinuxに接続してCP/Mを実行したため、SIOの設定は不要となったわけです。

ネットワークからCP/Mを使う

SIOを設定して、コンソールIOをTelnet接続ポート23経由にします。シミュレーターコマンドcpm2sioを作成します。

$ cat cpm2sio
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
attach sio 23
boot dsk

cpm2sioを引数に与えてAltairシミュレーターを実行します。

$ ./altairz80 cpm2sio
CP/Mコンソール SIO割り付け 失敗

CP/Mコンソール SIO割り付け 失敗

$ ./altairz80 cpm2sio

Altair 8800 (Z80) simulator V4.0-0 Current        git commit id: 2d35feb9
Sockets: bind error 13 - Permission denied
cpm2sio-17> attach sio 23
Can't open network port: 23

64K CP/M Version 2.2 (SIMH ALTAIR 8800, BIOS V1.27, 2 HD, 02-May-2009)

A>
   ← CTRL+Eを押して中断
Simulation stopped, PC: 0F3FA (RRA)
sim> quit
Goodbye

コマンド「attach sio 23」でエラーが発生しました。アクセス権限(Permission denied)でエラーとなり、ネットワークOpenに失敗しました。
CP/Mがコンソールで起動したので、CTRL+Eで中断し、quitコマンドで終了します。

アクセス権限が無いというエラーなので、管理者権限で実行してみます。

CP/Mコンソール SIO割り付け 成功

CP/Mコンソール SIO割り付け 成功

 

$ sudo ./altairz80 cpm2sio

Altair 8800 (Z80) simulator V4.0-0 Current        git commit id: 2d35feb9
cpm2sio-17> attach sio 23
Listening on port 23

ネットワークのポート23待ちとなりました。

Tera TermからTelnet接続します。

Tera Term テレネット接続

Tera Term テレネット接続

接続先(IPアドレス)は、Raspberry Piのホスト名を指定します。

CP/M SIO接続

CP/M SIO接続

Connected to the Altair 8800 (Z80) simulator SIO device, line 0


64K CP/M Version 2.2 (SIMH ALTAIR 8800, BIOS V1.27, 2 HD, 02-May-2009)

A>

ネットワークからCP/Mに接続しました。

CP/Mはhaltコマンドにより停止します。

A> halt
CP/M SIO接続 HALT

CP/M SIO接続 HALT

$ sudo ./altairz80 cpm2sio

Altair 8800 (Z80) simulator V4.0-0 Current        git commit id: 2d35feb9
cpm2sio-17> attach sio 23
Listening on port 23

 → telnetでCP/M実行

HALT instruction, PC: 00100 (HALT)
sim>

シミュレーターが停止しました。

この様子を下記に示します。

CP/M Telnet接続 概要図

CP/M Telnet接続 概要図

最後に

Raspberry Pi2にSIMH(Altair 8800 simulator)をインストールして、懐かしのCP/Mが動作しました。

昔CP/Mを使用したときは、RS-232CでターミナルとCP/M PCを接続していました。現在では、RS-232Cの代わりにtelnet接続してRaspberry Piで動作するCP/Mをネットワークから使用できるようになったわけです。

もう少し、遊んでみようと思います。

関連するブログ

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

懐かしのワードマスターをCP/Mシミュレータで使う

CP/Mシミュレータで懐かしのインテル8080アセンブラを使う