TOPS-20で太古のEmacsに出会う

Panda TOPS-20 distribution

最近、Panda TOPS-20 distributionというものを発見してしまったので、しばらく遊んでみようと思う。Linuxであればバイナリが同梱されているので、READMEにそって操作すればすぐ使うことができる。私はUbuntu 9.10上で実行している*1

TOPS-20の概要

TOPS-20とは、1976年リリースされたDEC System-20(PDP-10ベース)用のOSである。この日記ではold UNIXをいくつか紹介してきたが、TOPS-20(やその前身のTOPS-10、BBN TENEX*2)は当時UNIXとは対極な設計思想で作られ、AI研究者に愛されたOSだった。MITのITS(Incompatible Timesharing System)も同様な立ち位置のOSで、当時はUNIX派とITS派でいがみ合っていたらしい。ESRの「ハッカー界小史」によると、

PDP-10 ハッカーたちは、どうも Unix 集団を駆け出しの烏合の衆と見なす傾向があり、LISP と ITS のバロックで美しい複雑さに比べると、お話にならないほど原始的なツールを使っているとして見下していた。「Stone knives and bearskins!」(石刃にクマの毛皮の原始人ども!)とかれらはつぶやいたものである。

TOPS-20のシェルはコマンド名や引数の補完を機能を持っている。例えば、Emacsの起動時にターミナルの設定がおかしいとか文句言われたので、次のような設定をしてみたのだが、"TE"と入力した段階でCtrl-fを押すとコマンド名が補完されるし、"TERMINAL "の後に"?"を入力すると引数の候補が列挙される。さらに"LE"を入力した後にCtrl-fすると"LENGTH"と補完される。ちょうどCISCO IOSみたいな感じだ。

$TERMINAL LENGTH 40
$TERMINAL WIDTH 80
$TERMINAL TYPE VT100

このようにTOPS-20は、CPUパワーを犠牲にしてもユーザへの応答性をよくするように設計されたOSであった。対称的に、UNIXには過度の対話的処理を避けるという考えがある。しかし、計算機性能の向上と共にユーザビリティの向上が重要になったので、インタラクティブなUIは後のUNIXのシェルにも大きな影響を与えることになった。例えば、tcshの"t"はtenexの"t"だったりする。

TOPSのファイルシステムは階層型だけど、UNIXとは表記法が異なる。ルート(/)に相当するのがPS:で、それ以下は"."区切りでPS:のように記述する。またファイル名は「名前.拡張子.バージョン番号」という具合に最後にバージョン番号が後置されるのが特徴的である。バージョン番号は省略可能だが、ファイルを更新するたびにバージョン番号がインクリメントされる。なお履歴管理されている訳ではないと思う。

太古のEmacsとMACRO-10

ITSやTOPS-20文化から誕生したソフトウェアの代表格がEmacsである。Panda TOPS-20にはEmacsももちろん含まれている。EmacsはITS上のTECOと呼ばれるラインエディタのマクロとして実装されたのが始まりである。EmacsはTOPS-20にも移植された。余談になるが、TECOの実装もいろいろあるようだ。

最初に何を書こうか迷ったが、やはりHello worldということで、MACRO-10というマクロアセンブラを使ってみることにした。Emacsの基本的なコマンドは今のままだと思う。ただ、Ctrl-x Ctrl-cではなくCtrl-cで終了する。

TITLE HELLO WORLD
ENTRY OUTPUT
SEARCH UUOSYM

LAB:    ASCIZ   /Hello, world!
/

OUTPUT: OUTSTR LAB
        MONRT.
        END OUTPUT

上記のプログラムをhello.macという名前で保存する。loadコマンドでアセンブリ、リンクを実行し、saveコマンドで実行可能ファイルに保存する。

$load hello
MACRO: HELLO
LINK: Loading
$save
HELLO.EXE.1 Saved
$hello
Hello, world!

とりあえず操作にあたってtwenex.orgの「TWENEX Starter Guide for UNIX users」が参考になった。

*1:Snow leopardPDP-10シミュレータをコンパイルできないか試してみたがsys/mtio.hがなくてだめだった。LeopardならOKなのだろうか?

*2:PDP-10へページング機構を追加するのに合わせ、TOPS-10にいろいろ拡張をしたのがTENEX。TENEXの出来がよく人気が出たため、DECが権利を買い取って作ったのがTOPS-20。当時のハッカーの一部はTOPS-20のことをTWENEXと呼んだりもしたそうな。