DEC社 TOPS-20を使う方法
2018年1月、歴史的に貴重なDEC社 TOPS-20を使うためにKLH10エミュレーターをLinuxにインストールして、TOPS-20を実行することができました。
TOPS-20コマンドの使用方法について調べてみます。
TOPS-20は、マルチユーザー・オペレーティング・システムで、36ビットDEC社 PDP-10(DECSYSTEM-20)メインフレーム・コンピュータ専用に設計されました。
TOPS-20のシェルコマンドの使い方などネットで調べたら、いろいろなドキュメントがありました。
- TOPS-20 Starter Guide for UNIX users
- TOPS-20 User’s Guide
- TOPS-20 Commands Reference Manual
- UNIX for TOPS-20 Users
DEC社 TOPS-20コマンドの使用方法
ネットで調べた情報から「UNIXユーザーのためのTOPS-20初心者ガイド」のポイントを要約します。
UNIXとTOPS-20のコマンドの対応を示します。
機能 | UNIX | TOPS-20 |
---|---|---|
ファイル表示 | cat | TYPE |
ファイル削除 | rm | DELETE |
ファイル保護 | chmod | SET FILE PROTECTION |
ディレクトリ一覧 | ls | DIRECTORY |
詳細ディレクトリ一覧 | ls -la | VDIRECTORY |
ディレクトリ作成 | mkdir | BUILD |
ディレクトリ移動 | cd | CONNECT |
ディレクトリ位置 | pwd | INFORMATION DIRECTORY |
ディレクトリ保護 | chmod | SET DIRECTORY PROTECTION |
特権モード実行 | sudo | ENABLE DISABLE |
コマンド行の編集と補完機能
コマンド入力時にESCキーまたはCTRL+Fを入力すると、コマンド補完を行います。「?」を入力すると、入力可能なコマンドやオプション引数の一覧を表示します。
タイプライター型端末 (LA120など)使用時
システム起動時はこのモードです。
キー | 機能 | 動作 |
---|---|---|
DELETE | 1文字削除 | x\を印字して1文字(x)削除 |
CTRL+U | 全文字削除 | XXXを印字して全文字削除 |
CTRL+W | 単語削除 | _を印字して単語削除 |
CTRL+R | 再印字 | 現在行を再印字 |
ビデオ端末型 (VT100など)使用時
TERMINALコマンドでVT100を指定します。
@TERMINAL (FEATURE OR TYPE) VT100 @
キー | 機能 | 動作 |
---|---|---|
DELETE | 1文字削除 | カーソルを1文字戻して文字削除 |
CTRL+U | 全文字削除 | 入力行を消去して全文字削除 |
CTRL+W | 単語削除 | 単語を消去して単語削除 |
プログラムの中止方法
CTRL+Cを入力すると現在実行中のプログラムを中止してターミナルをコマンド入力(モニターモード)に戻します。プログラムが端末からの入力を要求していない場合(プログラムが実行中の場合)、2つのCTRL+Cを入力する必要があります。
端末出力の制御
キー | 動作 |
---|---|
CTRL+O | 端末出力を取り消しする(プログラムの実行は継続) |
CTRL+S | 端末出力を抑止する(CTRL+Qで再開) |
CTRL+Q | 端末出力を再開する(CTRL+Sの解除) |
TOPS-20ファイルシステム
TOPS-20は高度なファイルシステムをサポートしています。PS:(プライマリストレージ)は、システムのメインデバイスです(UNIXのルートディレクトリに似ています)。
ファイル記述仕様を以下に示します。
dev:<dir>name.typ.gen;att;…;att
フィールド | 説明 |
---|---|
dev: | デバイス名 |
<dir> | ディレクトリ名 |
name | ファイル名 |
.typ | ファイルタイプ |
.gen | 世代番号 |
;att | ファイル属性 |
2種類のワイルドカードが使えます。
* | 0文字以上の任意の文字 |
% | 任意の1文字 |
ディレクトリの表記方法をTOPS-20とUNIXで対応を示します。
TOPS-20 | UNIX | 説明 |
---|---|---|
PS:<PI> | /pi | PIのホームディレクトリ |
PS:<PI.PROJ> | /pi/proj | PI直下のPROJサブディレクトリ |
DIRECTORYコマンドでディレクトリ一覧を表示することができます。
@DIRECTORY(OF FILES) TOPS20:<OPERATOR> FTS.CMD.1 HELLO.C.2 .EXE.2 .REL.2 Total of 69 pages in 4 files @
OPERATORユーザーのホームディレクトリ一覧が表示されました。
CプログラムのHELLO.Cは、世代番号が.2です。また、HELLO.Cの 実行形式プログラム(.EXE)とリロケータブルバイナリー(.REL) も存在します。
論理名の定義は、INFORMATION LOGICAL-NAMESコマンドで確認できます。
@INFORMATION (ABOUT) LOGICAL-NAMES (OF) PS: System-wide: ps: => TOPS20: @
PS:(プライマリストレージ)の論理名は、TOPS20:と定義されていました。
DIRECTORY/FILE保護機能
TOPS-20では、18ビットのPROPERTYおよびFILE保護設定が可能です。これには9bit UNIXの「アクセス許可」の機能が含まれています。ユニークなTOPS-20である追加の保護機能も備えています。
8進数 | 意味 |
---|---|
77 | FULL ACCESS |
40 | READ |
20 | WRITE/DELETE |
10 | EXECUTE |
04 | APPEND |
02 | LIST |
00 | NO ACCESS |
8進数 | 意味 |
---|---|
77 | FULL ACCESS |
40 | READ |
10 | CONNECT |
04 | BUILD |
00 | NO ACCESS |
VDIRECTORYコマンドで詳細なディレクトリ一覧を表示することができます。
@VDIRECTORY(VERBOSE, OF FILES) TOPS20:<OPERATOR> FTS.CMD.1;P777700 1 44(7) 14-Nov-2002 09:37:20 MRC HELLO.C.2;P777700 1 70(7) 2-Jan-2018 20:18:41 OPERATOR .EXE.2;P777700 66 33792(36) 2-Jan-2018 20:18:57 OPERATOR .REL.2;P777700 1 110(36) 2-Jan-2018 20:18:56 OPERATOR Total of 69 pages in 4 files @
「HELLO.C.2;P777700」のファイル属性Pは8進数を2桁ごとに区切って読みます。
77____ | ログインユーザー |
__77__ | あなたのグループのユーザー |
____00 | 他のすべてのユーザー |
ファイル保護設定は、SET FILE PROTECTIONコマンドを使用します。ディレクトリ保護設定は、SET DIRECTORY PROTECTIONコマンドを使用します。
HELLO.C のファイル保護設定を 777700 → 770000 に変更してみます。
@SET FILE PROTECTION (OF FILES) hello.c.* (TO) 770000 HELLO.C.2 [OK] @VDIRECTORY (VERBOSE, OF FILES) TOPS20:<OPERATOR> FTS.CMD.1;P777700 1 44(7) 14-Nov-2002 09:37:20 MRC HELLO.C.2;P770000 1 70(7) 2-Jan-2018 20:18:41 OPERATOR .EXE.2;P777700 66 33792(36) 2-Jan-2018 20:18:57 OPERATOR .REL.2;P777700 1 110(36) 2-Jan-2018 20:18:56 OPERATOR Total of 69 pages in 4 files @
ログインユーザーだけアクセス可能に設定しました。
ログインパスワードの変更
ログインパスワードの変更は、SET DIRECTORY PASSWORDコマンドを使用します。<login-directory-name>を指定します。OPERATORユーザーでログインするので、「<operator>」と指定します。
「古いパスワード」を入力し「新しいパスワード」入力後に「新しいパスワードを再入力」します。パスワードはエコーバックしません。
@SET DIRECTORY PASSWORD (OF DIRECTORY) <OPERATOR> Old password: New password: Retype new password: @
ユーザーモードと特権モード
ログインした状態はユーザーモードです。ユーザーモードのコマンドプロンプトは、@です。特権モードに移行するには、ENABLEコマンドを使用します。
@ENABLE (CAPABILITIES) $
特権モードのコマンドプロンプトは、$です。ユーザーモードに移行するには、DISABLEコマンドを使用します。
$DISABLE (CAPABILITIES) @
ファイルコピー
ファイルのコピーは、COPYコマンドを使用します。
@copy (FROM) heLLO.c.2 (TO) new_hellow.c HELLO.C.2 => NEW_HELLOW.C.1 [OK] @DIRECTORY TOPS20:<OPERATOR> FTS.CMD.1 HELLO.C.2 .EXE.2 .REL.2 NEW_HELLOW.C.1 Total of 70 pages in 5 files @
ファイルリネーム
ファイルのリネームは、RENAMEコマンドを使用します。
@RENAME (EXISTING FILE) new_HELLOW.C.* (TO BE) old_HELLOW.C NEW_HELLOW.C.1 => OLD_HELLOW.C.1 [OK] @DIRECTORY TOPS20:<OPERATOR> FTS.CMD.1 HELLO.C.2 .EXE.2 .REL.2 OLD_HELLOW.C.1 Total of 70 pages in 5 files @
ファイル削除
ファイルの削除は、DELETEコマンドを使用します。
@DELETE (FILES) OLD_HELLOW.C.* OLD_HELLOW.C.1 [OK] @DIRECTORY TOPS20:<OPERATOR> FTS.CMD.1 HELLO.C.2 .EXE.2 .REL.2 Total of 69 pages in 4 files @
ファイル復元
ファイルの復元は、UNDELETEコマンドを使用します。
@UNDELETE (FILES) old_HELLOW.C.* OLD_HELLOW.C.1 [OK] @DIRECTORY TOPS20:<OPERATOR> FTS.CMD.1 HELLO.C.2 .EXE.2 .REL.2 OLD_HELLOW.C.1 Total of 70 pages in 5 files @
ディレクトリ情報
ディレクトリ情報は、INFORMATION DIRECTORYコマンドを使用します。
OPERATORディレクトリの情報を調べてみます。
@INFORMATION (ABOUT) DIRECTORY (DIRECTORY NAME) <OPERATOR> Name TOPS20:<OPERATOR> Working disk storage page limit 500 Permanent disk storage page limit 500 OPERATOR IPCF INTERNET-WIZARD Number of directory 5 Account default for LOGIN - none set Last interactive login 2-Jan-2018 20:17:53 TOPS10 project-programmer number - none set @
- 作業ディスク記憶容量(Working disk)の制限は、500ページ
- 永久ディスク記憶容量(Permanent disk)の制限は、500ページ
- operatorディレクトリの下にサブディレクトリを作成するとき、ディレクトリの数を5個に制限しています。
サブディレクトリを作成するとき作業ディスクと永久ディスクの記憶容量は合計で上位ディレクトリの制限以内でなければなりません。
アカウントの作成
アカウントを作成は、BUILDコマンドでホームディレクトリを作成します。
PIというアカウントを作成します。特権モードで作成しますので、最初に ENABLEコマンドで特権モードに入ります。サブプロンプト($$)でディレクトリの属性を指定して、ENTERキーで終了します。
サブコマンド | 意味 |
---|---|
OPERATOR | OPERATOR機能を所有者に許可 |
IPCF | 所有者がすべての特権IPCF機能を実行可能 |
INTERNET-WIZARD | 所有者はINTERNET用キューを使用可能 |
PASSWORD | パスワードを指定 |
MAXIMUM-SUBDIRECTORIES | サブディレクトリの最大数 |
PROTECTION | ディレクトリ保護設定 |
LIST | 属性を確認 |
最後に DISABLEコマンドでユーザーモードに戻ります。
@ENABLE $BUILD (DIRECTORY NAME) TOPS20:<PI> [New] $$OPERATOR $$IPCF $$INTERNET-WIZARD $$PASSWORD PI123 $$MAXIMUM-SUBDIRECTORIES (ALLOWED) 5 $$PROTECTION (OF DIRECTORY) 774000 $$list Name TOPS20:<PI> Working disk storage page limit 500 Permanent disk storage page limit 500 OPERATOR IPCF INTERNET-WIZARD Number of directory 206 Account default for LOGIN - none set Protection of directory 774000 Maximum subdirectories allowed 5 TOPS10 project-programmer number - none set $$ $DISABLE @
MAXIMUM-SUBDIRECTORIESを指定しなかったら、サブディレクトリを作成することができないので注意です。
アカウント作成したPIユーザーでログインしてみます。
OPERATORユーザーをLOGOUTします。
@LOGOUT [Job 0(DET) also logged in under OPERATOR] Killed Job 1, User OPERATOR, TTY5, at 3-Jan-2018 16:48:01 Used 0:00:00 in 0:33:56
CTRL+Cを入力します。
[Caution--System is stand-alone] Panda Distribution, PANDA TOPS-20 Monitor 7.1(21733)-4 This system is for the use of authorized users only. Usage of this system may be monitored and recorded by system personnel. Anyone using this system expressly consents to such monitoring and is advised that if such monitoring reveals possible evidence of criminal activity, system personnel may provide the evidence from such monitoring to law enforcement officials.
PIユーザーでログインしてみます。
@LOGIN (USER) PI (PASSWORD) Job 1 on TTY5 3-Jan-2018 16:48:13 Last interactive login Never Last non-interactive login Never This is your first login. Welcome! To get started, type "HELP NEW-USER" when you see the EXEC prompt "@". There may some be system messages following. Respond to each (more ?) by typing the RETURN key. @
PIユーザーのディレクトリ情報を確認してみます。
OPERATORユーザーと同様な属性となっています。
@INFORMATION (ABOUT) DIRECTORY (DIRECTORY NAME) TOPS20:<PI> Name TOPS20:<PI> Working disk storage page limit 500 Permanent disk storage page limit 500 OPERATOR IPCF INTERNET-WIZARD Number of directory 206 Account default for LOGIN - none set Protection of directory 774000 Maximum subdirectories allowed 5 Last interactive login 3-Jan-2018 16:48:13 TOPS10 project-programmer number - none set @
ディレクトリ移動
ディレクトリの移動は、CONNECTコマンドを使用します。
OPERATORディレクトリに移動します。
@CONNECT (TO DIRECTORY) TOPS20:<OPERATOR> Password: @
ディレクトリ一覧を確認すると、OPERATORのディレクトリが表示されました。
@DIRECTORY TOPS20:<OPERATOR> FTS.CMD.1 HELLO.C.2 .EXE.2 .REL.2 Total of 69 pages in 4 files @
ディレクトリ作成
ディレクトリ作成は、BUILDコマンドを使用します。
PIディレクトリの下にPROJサブディレクトリを作成します。
@BUILD (DIRECTORY NAME) <PI.PROJ> [New] @@ ?Request exceeds superior directory subdirectory quota. Please fix incorrect subcommands. @@ABORT @
サブプロンプト(@@)になり、サブコマンドが入力できます。
なにも入力せずにENTERキーを押すと、?エラーとなりました。
ABORTサブコマンドで、コマンドを中止します。
?要求が上位ディレクトリのサブディレクトリクオータを超えています。
ディスク記憶容量の割り当てに問題がありそうです。
@@LISTサブコマンドで作成するディレクトリ情報を確認します。
ABORTサブコマンドで、コマンドを中止します。
@BUILD (DIRECTORY NAME) <PI.PROJ> [New] @@LIST Name <PI.PROJ> Working disk storage page limit 500 Permanent disk storage page limit 500 FILES-ONLY Account default for LOGIN - none set TOPS10 project-programmer number - none set @@ABORT
上位ディレクトリのPIが500ページあり、サブディレクトリPROJに500ページ割り付けようとしているのでエラーとなったようです。
割り付け容量を変更します。
- 作業ディスク記憶容量(Working disk)を10ページ
- 永久ディスク記憶容量(Permanent disk)を20ページ
@BUILD (DIRECTORY NAME) <PI.PROJ> [New] @@WORKING (DISK STORAGE PAGE LIMIT) 10 @@PERMANENT (DISK STORAGE PAGE LIMIT) 20 @@PROTECTION (OF DIRECTORY) 777700 @@LIST Name <PI.PROJ> Working disk storage page limit 10 Permanent disk storage page limit 20 FILES-ONLY Account default for LOGIN - none set TOPS10 project-programmer number - none set @@
無事作成できたか、DIRECORYコマンドで確認します。
@DIRECORY TOPS20:<PI> PROJ.DIRECTORY.1 Total of 0 pages in 1 file @
@VDIRECTORY (VERBOSE, OF FILES) TOPS20:<PI> PROJ.DIRECTORY.1;P20200 0 0(0) 3-Jan-2018 18:21:56 PI Total of 0 pages in 1 file @
ディレクトリ削除
ディレクトリの削除は、BUILDコマンドのサブコマンドKILLです。
@DIRECORY TOPS20:<PI> HELLOX.C.1 PROJ.DIRECTORY.1 Total of 1 page in 2 files @ @BUILD (DIRECTORY NAME) <PI.PROJ> [Old] @@KILL [Confirm] @@ @ @DIRECORY TOPS20:<PI> HELLOX.C.1 Total of 1 page in 1 file @
まとめ
TOPS-20のコマンドを調べました。概念的にはUNIXに似た点もあり、UNIXよりもユーザーフレンドリーなので使いやすいと思います。