# TOPS-20
TOPS-20はデジタル・イクイップメント・コーポレーション(DEC)によるDECの36ビットメインフレームコンピューター用のプロプライエタリ なOSで、PDP-10向けのTOPS-10の後継OSである。ハードウェアリファレンスマニュアルには「DECsystem-10 / DECSYSTEM-20 プロセッサ」と記載された（DEC PDP-10とDECSYSTEM-20を意味している)。
TOPS-20の起源は、 BBNテクノロジーズ(BBN)のTENEXオペレーティングシステム(1969年)であり、1976年にDECから販売された。このシステムは名前の類似しているTOPS-10とはほぼ全く関係がなかったが、PA1050というTOPS-10のモニターコールをエミュレーションする機能が同梱されており、一部を除いてTOPS-10用実行ファイルをほとんど修正なしで動作させることができた。DECの方針により、DECのアプリを実行するのに必要となった場合を除いて、TOPS-10のその後の修正をフォローするためにPA1050をアップデートすることはなかった。
TOPS-20はPDP-10で当時利用可能だったOSとして、TOPS-10、ITS、WAITSなどの著名なタイムシェアリングシステムと競合関係にあった。

## TENEX
TOPS-20はBBNがDECのPDP-10用に開発したTENEXというOSをベースに開発された。TENEXはPDP-10で動作するサードパーティー製のOSとして当時最も人気があったが、DECが新たに開発した高速なKI-10版PDP-10では動作しなかった。この問題に対応するため、DECのPDP-10担当セールスマネージャはBBNからTENEXの権利を買い取り、新機種に移植するプロジェクトを立ち上げた。最終的には元のTENEXのコードはほとんど残らず、TOPS-20という名前で販売された。

## PA1050
このTOPS-20のおまけはTOPS-10のシステムコールをエミュレーションするエミュレーターに過ぎなかった。UUO (Unimplemented User Operation; 未実装ユーザー命令)と呼ばれる仕組みを利用し、TOPS-20用ではないコンパイラを実行したり、こうした言語で書かれたユーザープログラムを実行したりするのに必要だった。ユーザーアドレス空間にマップされたパッケージの名称がPA1050だった。PAまたはPATは互換の意味で、10はDECやPDP-10を意味し、50はPDP-10モデル50、10/50、1050を意味していた。
PA1050はPATと呼ばれることもあり、PA1050は特権を持たないユーザーモードのプログラムであり、JSYSコールを使って必要な時だけ動作することから、この名前は体をよく表していた。

## TOPS-20の機能
TOPS-20は以下の機能によりその特徴を最大限に活用できる。
- コマンドプロセッサEXEC.EXEを介してコマンドを入力する[2]
- マクロ言語(.MAC)からJSYS(Jump to System)を呼び出す[7][8]

EXECは主に以下の方法で機能を実現している。
- JSYS経由の呼び出しを含むコード
- GALAXYコンポーネント（スプーラなど）からのサービスの要求


### コマンドプロセッサー
TOPS-20は当時としては非常に先進的な機能があった。
- コマンド補完 [9]
- 次のような動的ヘルプ
  - ノイズワード - DIRと入力してESCapeキーを押すと次のようになる。

DIRectory (of files)
「I」と入力して<ESC>キーを押すと次のようになる。 
Information (about)
「？」を入力すると、許されるオペランドや必要なオペランドが補完される。

### コマンド
以下のコマンド一覧はTOPS-20のコマンドプロセッサによりサポートされる。 
- ACCESS
- ADVISE
- APPEND
- ARCHIVE
- ASSIGN
- ATTACH
- BACKSPACE
- BLANK
- BREAK
- BUILD
- CANCEL
- CLOSE
- COMPILE
- CONNECT
- CONTINUE
- COPY
- CREATE
- CREF
- CSAVE
- DAYTIME
- DDT
- DEASSIGN
- DEBUG
- DEFINE
- DELETE
- DEPOSIT
- DETACH
- DIRECTORY
- DISABLE
- DISCARD
- DISMOUNT
- EDIT
- ENABLE
- END-ACCESS
- EOF
- ERUN
- EXAMINE
- EXECUTE
- EXPUNGE
- FDIRECTORY
- FORK
- FREEZE
- GET
- HELP
- INFORMATION
- KEEP
- LOAD
- LOGIN
- LOGOUT
- MERGE
- MODIFY
- MOUNT
- PERUSE
- PLOT
- POP
- PRINT
- PUNCH
- PUSH
- R
- RECEIVE
- REENTER
- REFUSE
- REMARK
- RENAME
- RESET
- RETRIEVE
- REWIND
- RUN
- SAVE
- SEND
- SET
- SET HOST
- SKIP
- START
- SUBMIT
- SYSTAT
- TAKE
- TALK
- TDIRECTORY
- TERMINAL
- TRANSLATE
- TYPE
- UNATTACH
- UNDELETE
- UNKEEP
- UNLOAD
- VDIRECTORY


### JSYSの機能
JSYSは Jump to SYStemの略。オペランドにはメモリアドレスの指定もあった。TOPS-20は18ビットまたは30ビットのアドレスを使用できた。モニタコールには1つないしは2つのオペランドが必要だった。一部のコールは両方の形式をサポートした。一部のモニタコールでは指定したアドレスのうちの18ビット以上が無視された。これらのコールは18ビットのアドレスが現在のセクションを参照しているものと解釈された。
内部的には、まずGTJFN (Get Job File Number)というJSYSでファイルを識別し、次にOPENFでJFN番号を指定してファイルを開き、ファイルの内容を操作した。

## PCL（プログラム可能コマンド言語）
PCL（Programmable Command Language）はTOPS-20で動作するプログラミング言語。PCLのソースプログラムは、デフォルトでは.PCLというファイル形式で保存され、TOPS-20の拡張されたEXECでDECLAREという動詞名を使ってコンパイルでき、コンパイルしたコマンドはEXECの一部として機能した。

### PCL言語の機能
PCLには次のような機能があった： 
- フロー制御：DO While / Until、CASE / SELECT、IF-THEN-ELSE、GOTO
- 文字列操作 (length, substring, concatenation）
- システム情報へのアクセス (日付/時刻、ファイル属性、デバイス特性)


## さらに読む
- Storage Organization and Management in TENEX  ダニエル・L・マーフィー。 AFIPS Proceedings 1972年 FJCC
- KI10でのTENEXの実装  ダニエル・L・マーフィー TENEXパネルセッション NCC 1974
- Origins and Development of TOPS-20 ダニエル・L・マーフィー 1989年
- TOPS-20 User's Guide 1988.
- DECSYSTEM-20 Assembly Language Guide フランクダクルス、クリスライランド 1980年
- Running TOPS-20 V4.1 under the SIMH Emulator