DEC PDP-10のOS、TWENEX(TOPS-20)を使ってみた。

最終更新日

Comments: 2

1. TWENEX とは

TWENEXとは、DECが開発したTOPS-20というPDP-10用オペレーティングシステムの俗称で、1970年代から1980年代前半にかけて、ミニコンピュータ界で成功を収めたソフトウェアです。

そのTWENEXが現役で、しかも無料で解放されているサーバがあったので、興味本意で覗いてみました。

シアトルにある SDF Public Access UNIX System, Inc. という団体が運営しているサーバで、上記 URL から “mkacct” をクリックすると、アカウントの作成が出来ます。

2. アカウントの発行

必要事項を記入すると、以下のようなメールが届きます。無料で使えるようです。

From: MINION@TWENEX.ORG
Subject: TWENEX.ORG account

LOGIN: username
PASSWORD: 00000
SERVER: twenex.org

Your account is now ready for you to use. LOGIN by using
TELNET to connect to TWENEX.ORG and typing your LOGIN name
At the @ sign. You will be prompted for your password. Once
you have logged in you can learn about the system by typing
'HELP NEW-USER'. From there you will learn how to access
basic functions of your account as well as where to find
information on advanced topics (programming, chat & games).

Thank you and remember to read, explore and enjoy!

3. telnet でアクセス

メールの情報を元に、telnet でサーバにアクセスしてみます。

$ telnet twenex.org
Trying 192.94.73.36...
Connected to twenex.org.
Escape character is '^]'.

TWENEX.ORG, PANDA TOPS-20 Monitor 7.1(21733)-4

If new, type 'new new' ..

@dyama
Job 20 on TTY61 19-May-2011 2:04AM
Previous LOGIN: 19-May-2011 12:42AM
[Job 18 also logged in under DYAMA]
Checking the BBOARD ..

WELCOME TO TWENEX.ORG

Type 'HELP NEW-USER' for a command summary
Type 'HELP GAMES' for a list of games
Type 'TOPS20' for an interactive tutorial

@

UNIXと同様、ログイン名を入力しEnterを押下すればパスワードを聞いてきますが、ここでは、「ログイン名 (スペース)パスワード」と入力しています。パスワードはエコーされません。

TWENEXのシェルでは、@がプロンプト、@@がサブコマンドを受け付けるプロンプトです。基本的な操作方法は、UNIXユーザの為のTWENEXスターターガイドなるものがあるので、そちらを参考にすればいいと思います。

UNIX と大きく違う点は、ファイルやディレクトリの表し方で、以下のようになっています。

 UNIXTWENEX
ディレクトリ/smj/lisp<SMJ.LISP>
ファイルfilenameFILENAME.EXTENTION.VERSION

パスの大文字小文字は区別しません。また、コマンドでファイル名を指定する際、最後の “.VERSION” は省略する事が出来るようです。 カレントディレクトリ以外のファイルを扱う場合は、例えば、以下のようにします。

@EDIT <DYAMA.PATH.TO>FILENAME.TXT

これで、UNIX で言うところの “emacs /dyama/path/to/filename.txt” といったところでしょうか。 このサーバでは、EDIT コマンドに、Emacs の移植版 EMACS.EXE がバインドされているみたいです。 ログイン時に自動的に読み込まれる LOGIN.CMD にその記載があります。

C-q で「スクロール待ちの次のバッファを印字」、Esc キーで「ファイルパス補完」、「directory などの長いコマンドは dir といった省略表記でも通る」という事を覚えておけば、あとは UNIX のシェルの気分で問題ないと思います。コマンドの終了は C-c ですし、EDIT は Emacs なので保存終了はもちろん C-x C-s です。

4. 簡単なプログラムを書いてみる

また、 KCC という C コンパイラセットがインストールされていたので、試しに hello,world プログラムを作ってみました。

スクリーンエディタで hello.c を編集します。

@edit hello.c

内容を確認してみます。

@type hello.c
int main()
{
    /* this is a comment */
    puts("hello,world");
    return 0;
}

ちゃんと作成できている様子です。次に KCC でバイナリを作成します。

@cc hello.c
KCC: hello
MACRO: hello

EXIT
LINK: Loading

エラーが出ませんでした。directory コマンドで、ファイルが出来たか確認してみましょう。

@dir

TOPS20:<DYAMA>;
HELLO.C.5
     .EXE.5 ; ← ちゃんと出来ている。
     .REL.5
LOGIN.CMD.3
[--QUEUED-MAIL--].RETRANSMIT.1

Total of 46 pages in 5 files

バイナリの作成に成功した模様です。

ファイル・リストの表示の仕方がやはり面白いですね。同名別拡張子のファイル名は省略されるようです。拡張子ベースのオペレーションがDOSっぽいです。
さて、いよいよ実行してみます。UNIXで言うと「カレントディレクトリはパスに入っている」ので、相対/絶対パスでバイナリを指定する必要はありません。

@hello.exe
hello,world

ちゃんと動いた。楽しい。

デモ用のオモチャではなく、ちゃんと稼動していたシステムらしく、”help cc” とすると manpage のような関数リファレンスやライブラリの解説がしっかり出てきます。

5. ウェブサイトを公開してみる

スターターガイドに `How can I host a website here? (ここでウェブサイトを公開するには?)’ という項があったので、それに従ってやってみる事にしました。

まず、ウェブページ公開用のディレクトリを作成します。

@build <dyama.html>
[New]
@@

新規ビルドモードでサブプロンプト(@@)に入ります。ここで ? とタイプすると、サブコマンド一覧が表示されるようです。UNIX でいうパーミッションやクォータ設定などを行い、通常プロンプトに抜けるようです。

試しに、何もせずに抜けようとします。

@@ ; ← 何もせずに抜けようとEnterキーを押す
?Request exceeds superior directory permanent quota.
Please fix incorrect subcommands.

クォータの設定で怒られているらしく、サブプロンプトから抜けてくれません。
LIST コマンドでディレクトリの状態を確認します。

@@list
Name <dyama.html>
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

どうも working~(作業ディスク領域)が permanent~(永続的ディスク領域)未満にならないとダメっぽいようです。という事で、ヘルプで目についた PERMANENT と WORKING を適当に実行してみましょう。

@@working 20
@@permanent 40
@@list
Name <dyama.html>
Working disk storage page limit 20 ; ← 変わった !
Permanent disk storage page limit 40 ; ← ワーイ
FILES-ONLY
Account default for LOGIN - none set
TOPS10 project-programmer number - none set

@@ ; ← 何もせずに抜ける
@ ; ← 抜けた !

無事にメインプロンプトに戻れたので、ちゃんと出来ているか確認してみます。

@dir

TOPS20:<DYAMA>;
HELLO.C.5
     .EXE.5
     .REL.5
HTML.DIRECTORY.1 ; ← ちゃんと出来ている。
LOGIN.CMD.3
[--QUEUED-MAIL--].RETRANSMIT.1

Total of 46 pages in 6 files

ディレクトリが作成できたので、今度は index.html を作ります。

[bash]

[/bash]

@edit <dyama.html>index.html
@type <dyama.html>index.html
Hello, This is dyama's page on TWENEX/TOPS-20.

スターターガイドによると、この状態で “http://twenex.org/~dyama/index.html” にアクセスするとホスティングされているのが確認できるような事が書いてありますが、出来ませんでした。最初はアクセス権の問題かと思って

@set directory protection <dyama.html> 777777

なんて事もやってみてましたが、ダメ。ドキュメントが古いのかと思って、twenex.org の HTTP ポートにアクセスしてみると、やはりポートは閉じられていました。残念。

余談ですが、上のように長ったらしいコマンドは、

@set di prot <dyama.html> 777777

と省略する事も出来ます。また、「”set” まで入力したんだけれども、次は何を書くんだっけ?」という時には、その場で ? キーを押下すれば幸せになれます。同様に、「”set directory” まで(ry」というケースでも有効です。

6. 誰かいるかな?

FINGER コマンドで、ログイン中のユーザ一覧と作業内容を表示する事も出来ます。

User Personal name Job Subsys Idle TTY Console location
ATTILA Sean Levy 7 MM 18 44 *******.freeshe: YMRL
BIACHE Biache 14 FTPSRT *:** 47 Internet NVT
16 FTPSRT *:** 51 Internet NVT
DYAMA D.Yamaguchi 18 FINGER 57 [00.000.000.00]
EJEET feckin ejeet 8 EXEC *:**. 46 000-000-000-00.pool.ukrtel.net
13 EXEC *:**. Detached
GERRYK Gerry Kavanagh 12 BBOARD *:** 53 [000.000.000.00]
HEIMDALL Andi Chorley 15 EXEC *:**. 54 [00.000.000.000]
17 HELP *:** 55 [00.000.000.000]
NICHOLAS Nicholas Accad 9 EXEC *:**. 45 Internet NVT
TILT TILT 19 EXEC 55. 60 *******.freeshell.org
WSGAC Wojciech Gac 3 HELP 8:22 56 [00.000.000.00]
10 HELP *:** 50 [00.000.000.000]
11 HELP *:** 52 [00.000.000.000]

意外とログインユーザが多くてびっくり。 TALK や MAIL コマンドもあるので、この人らとチャットしたりメールしたりする事も出来そう。

7. ログアウト

ログアウトするには、LOGOUT コマンドを用いましょう。

@logout
Killed Job 18, User DYAMA, TTY57, at 00-May-2011 00:00:00
Used 0:00:00 in 00:00:00

昔のシステムらしく、ログアウト時に利用時間を印字してくれます。サーバの利用は時間課金が基本でしたので、携帯電話で通話した後に通話時間を表示してくれるように、請求金額の目安になったんでしょう。

8. リンク

TWENEX/TOPS-20 や PDP-10 についてのマニュアルやリファレンスは下記にあります。

※ 2020/07/02 度重なるブログ移転・ブログシステムのアップデートにより崩れた記事を校正。

佐世保のシステムエンジニアです。詳しいプロフィールやこのブログについてはこちらをご覧ください。

2件のフィードバック

  1. SDFのサービスでは、通常は有料会員にならないとWebサイトを持て
    ないので、HTMLがブラウザで見えなかったんだと思いますよ。

  2. kayuさん

    コメントありがとうございます。

    https://sdf.org/ の方はこのブログを書いた当時から有料ユーザーで、SDF のメインのサービスである NetBSD サーバーは使っていますが、TWENEX は博物館的な意味合いで稼働させている別ホスト・別サービスでした。

    運営は SDF であっても、別サービスなので、アカウント情報も独立していて、「sdf.org の有料会員であれば twenex.org 上で WWW ホスティングも可能」という訳ではありませんでした。

    当時は本文中にもあるとおり、`telnet twenex.org` でアクセスできていて、80番ポートは閉じられていました。

    2018年現在は、telnet しようとすると

    $ telnet twenex.org
    Trying 205.166.94.36…
    Connected to twenex.org.
    Escape character is ‘^]’.
    Debian GNU/Linux 9

    Welcome to TWENEX.ORG!

    We no longer accept unencrypted TELNET sessions.
    Please connect using Secure Shell (SSH)

    example: ‘ssh twenex@sdf.org

    Connection closed by foreign host.

    という感じで弾かれますね。逆に 80 番ポートは開かれ、https://twenex.org にアクセスすると https://sdf.org/twenex にリダイレクトするようになっています。

    http://wiki.twenex.org/tutorials:access

    によると、現在は sdf.org の内部ネットワークからしかアクセスできないようです。

    そこで、`ssh twenex@sdf.org` してみると Connection timed out。
    さらに、`ssh sdf.org` して自分のアカウントでログインして twenex に su すると、

    dyama@sdf:~$ su twenex
    Trying 205.166.94.130…
    ^C
    dyama@sdf:~$ ping 205.166.94.130
    PING 205.166.94.130 (205.166.94.130): 48 data bytes
    ping: sendto: Host is down
    ping: sendto: Host is down
    ping: sendto: Host is down
    ping: sendto: Host is down
    ping: sendto: Host is down
    ping: sendto: Host is down
    ping: sendto: Host is down
    ping: sendto: Host is down
    ^C
    —-205.166.94.130 PING Statistics—-
    10 packets transmitted, 0 packets received, 100.0% packet loss
    dyama@sdf:~$

    といった具合です。どうやらもう息をしてないみたい。
    sdf.org 上で `last twenex` したら1分間に何度もログイン・ログアウトした形跡があるので、落とされている(or 落としている)のかもしれません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください