VM/370 CEマシンで楽しめること – 大規模コンピュータで楽しむ
Fun things to do with your VM/370 CE machine – Fun with big computers (rbanffy.github.io)
要約
この記事は、エミュレートされたメインフレームOSであるVM/370コミュニティエディション(CE)のセットアップと使用方法を解説しています。Docker経由でのインストール、3270ターミナルでの接続、BASICやFORTRANなどの古典的なプログラミング言語の実行、ファイルシステムのナビゲーション、ファイルのアップロード、ゲームのプレイ、ユーザー管理について詳述しています。このガイドは、ビンテージコンピューティング環境を探求したい初心者向けの実際的な手順を提供します。
全文翻訳
VM/370 CEマシンで楽しめること
VM/370 CEメインフレームで何ができるか?
このページでは、VM370コミュニティエディションOSが稼働しているマシン(エミュレートされているか否か)があることを前提とします。入手方法はいくつかあり、最も魅力的なもの、あるいは最も手間のかからないものを選ぶと良いでしょう。
コミュニティエディションは、IBMがライセンス制限なしでリリースした最後のVM/370をベースに、大幅な改善と修正が施されたものです。これらの改善と修正は、オリジナルのOSリリース以降、様々な方法で開発・公開されてきました。Linuxと比較するなら、VM/370 R6(CEのベースとなっているリリース)はLinusが自室から公開したLinux 1.0のようなもので、VM/370 CEは最新のFedora(お気に入りの最大主義ディストリビューションを入れてください)のようなものです。R6には存在しなかった多くの機能や、当時SFと呼ばれたであろう機能もいくつか備えています。実行できるマシンがシングルCPUと16MBのメモリ(IBMはこれを「ストレージ」と呼びます)に限定されているにもかかわらず、非常に高機能です。
Dockerで実行する
これを実行する最も簡単な方法は、Dockerをインストールすることです。インストール方法はプラットフォームによって異なりますので、ここでは触れません。ちなみに、Dockerは一つの選択肢に過ぎません。代わりにPodmanを使うこともできます。Podmanには便利な機能があり、Dockerのように振る舞うことができるため、両方で同じコマンドを使用できます。準備ができたら、シェルコマンドを発行するだけで独自の機械を持つことができます。
docker run -it --name vm370 -p 3270:3270 rbanffy/vm370ce
これにより、マシンが起動し、ターミナルにマシンのコンソールが表示されます。
使用しているコンテナイメージは、VM/370コミュニティエディションチームの優れた作業に基づいています。彼らのリリースはvm370.orgで確認できます。コミュニティエディションは、オープンソースまたはパブリックドメインのソフトウェアのみを実行します。
メインフレームを入手するその他の選択肢
もしあなたが、実際のIBMメインフレームを所有しているほどクールな組織で働いているなら、オペレーションチームがネストされたVM/370コミュニティエディションを実行する小さなVMを提供してくれるか確認してみてください。IBMメインフレームは伝説的な後方互換性を持っており、環境を起動するのに技術的な問題はないはずです。しかし、多くのプロセス上の障害があるかもしれませんので、慎重に進み、良い言い訳を用意しておきましょう。「楽しいことをしている」というのは通用しません。試したことがありますが、うまくいきませんでした。
中古のメインフレームのもう一つの入手先はeBayや地元のIT資産処分会社ですが、真面目な話、専用の電源ラインや設置スペースの確保といった手間は望まないでしょう。そして、実機を入手した場合、z/VM、z/OS、そしてかなりモダンなLinuxを実行するための有効なライセンスも手に入るかもしれません。これらは非常に高価で、セットアップ、そして多くの場合、修理にも専門知識が必要です(これらのマシンを廃止する人々は、ケーブルを切断する方が速いため、ケーブルを切断する際に接続を解除するのを怠ることがよくあります)。
3270ターミナル
IBMメインフレームは画面指向のターミナルを使用します。これは、ウェブブラウザとほぼ同じように機能しました。メインフレームはフォームのある画面を送信し、あなたはフォームのフィールドに情報を入力し、ターミナルはその情報をメインフレームに送り返し、サイクルを再開します。これがHTMLフォームの動作方法に似ていると思ったら、その通りです。しかし、これは1990年代半ばではなく、1960年代後半のことでした。
私たちの例では、最新のUnixライクな環境(Linuxを含む)で利用可能なx3270エミュレータを使用します。
x3270を起動し、ホストに接続します。お使いのコンピュータで実行している場合は、「localhost:3270」になります。私は自分のマシンを小さなクラスタで実行しているので、ターミナルをクラスタのエントリポイントに向けます。
これで準備ができたので、楽しむことができます。
ログイン
通常の操作では、CMSUSER VMにログインするか、名前を変更した場合は自分のVMにログインします。デフォルトのパスワードは「CMSUSER」です。
バナースクリーンでENTERキーを押します。
[画像: VM/370 CE]
画面がクリアされます。次にlogon cmsuserと入力できます。
[画像: logon cmsuser]
そしてパスワード「cmsuser」を入力します。
[画像: enter password]
予想通り、パスワードは表示されません。赤いカーソルがそれを意味します。
LOGON CMSUSER CMSUSERと入力してログインすることもできます。ユーザー名の後にパスワードを入力しますが、これはユーザー名とパスワードが同じであること以上に私をぞっとさせます。VM/370が発明された当時、侵入は現在よりもずっと問題ではありませんでした。VM/370メインフレームをインターネットに直接公開しないでください。
[画像: logged on]
これでログインできました。裏では多くのことが行われています。CP、つまり「コントロールプログラム」がVM/370に仮想マシンを作成するように要求し、その仮想マシンはCMSオペレーティングシステムで起動されました。これから見るコマンドは、特に断りがない限りCMSコマンドです。再度ENTERキーを押すと、「PROFILE EXEC」というプログラムが実行されます。
[画像: profile-exec]
これを調べることができます。「PROFILE EXEC」は、名前が「PROFILE」でタイプが「EXEC」(スクリプト)であることを意味します。ファイルのコンテンツを表示するには、次のようにします。
TYPE PROFILE EXEC
[画像: type profile exec]
Unixとは異なり、コマンドとファイル名は大文字小文字を区別しないため、どちらで入力しても構いません。ただし、誤ってファイルを上書きしないように注意してください。
ほとんどのターミナルとは異なり、3270はスクロールしません。画面がいっぱいになったら、PA2キー(キーボードにはありませんので探さないでください)を押す必要があります。PA2はターミナルをクリアし、メインフレームから次のページのテキストを受信します。x3270ではPA2はAlt-2です。c3270ではControl-Cです。
PROFILE EXECのカスタマイズ
現在のPROFILE EXECは情報量の多いウェルカムメッセージを表示しますが、これは後でいつでも読めます。このメッセージをプロファイルから削除しましょう。そのために、EDITエディタを少し使います。
EDIT PROFILE EXEC
[画像: edit profile exec]
次に12行下に移動する必要があります。コマンドスペースは画面の下部にあり、緑色のカーソルがあります。DOWN 12と入力します。これにより、削除したい行にハイライトが移動します。次にDELETEコマンドを使用します。
[画像: deleting a line]
ファイルを保存して終了するには、FILEと入力します。右下にあるMOREプロンプトが表示されます。これは、続行するためにPA2キー(Alt-2)を押す必要があることを示しています。3270ターミナルは画面指向(1960年代のウェブブラウザを想像してください)であり、スクロールしないため、次のページを要求する必要があります。これにより、画面上の情報を編集し、編集した情報を送信したときにのみコンピュータ(この場合はメインフレーム)が注意を払うようになります。ターミナルを使用する他のほとんどのコンピュータは、各キーストロークを個別に処理する必要があります。
この変更を行うと、ログイン時にウェルカムメッセージは表示されなくなります。再度表示したい場合は、TYPE WELCOME MESSAGE Uと入力してみてください。
BASICプログラムの実行
ヴィンテージコンピュータにBASICインタプリタがなければ、それは何でしょうか?
最も基本的なBASICプログラムから始めましょう:Hello World。
ターミナルで次のように入力します。
EDIT HELLO BASIC
「basic」は接尾辞ではなくタイプであることに注意してください。これはファイルの個別のパラメータです。ファイルのタイプはファイルのプロパティであり、強制的に変更されない限り、そのまま保持されます。
[画像: Edit hello basic]
Enterキー(または送信)を押すと、EDITプログラムに入ります。表面上はUnixのviとよく似ています。簡潔で、使いにくく、時には直感的ではありません。終了方法を推測するのも難しいです。類似点はそれくらいです。
[画像: Empty editor]
プログラムの入力を開始しましょう。
10 print 'hello world'
Enterキーを押すと、行が入力されたことがわかります。大文字に変換されました(一番上の行にある「CASE=U」を見てください)。ファイルを保存してエディタを終了しましょう。「file」と入力してEnterキーを押します。
[画像: A very short program]
一番下の行に「MORE…」という注意書きが表示されます。これは、ターミナルがそれ以上の出力を表示する前に待機していることを意味します。PA2キー(x3270の場合はAlt-2)を押すと、EDITを終了したことがわかります。
これでプログラムを実行できます。
BASIC HELLO
画面の上部にコマンド(「basic hello」)が表示され(EDIT終了を示すメッセージの後)、次に表示するように指示したメッセージ「HELLO WORLD」、そしてプログラムの実行に使用されたCPU時間と所要時間を示す行が表示されます。
[画像: Program output]
FORTRANについて少し
VM/370 CEには、いくつかのHello Worldプログラムが付属しています。現在表示されているディスクにあるファイルを一覧表示するには、DIRコマンド(これもバニラVMに追加された機能です)を使用できます。BASICで自分で入力しましたが、CとFORTRANのものがそれぞれ1つずつあります。FORTRANのものを表示してみましょう。
TYPE HELLO FORTRAN
[画像: dir and type]
そのFORTRANプログラムをコンパイルしてみましょう(実行できるように)
コンパイルするには、次を実行します。
FORTRAN HELLO
コンピュータは次のように出力します。
FORTRAN IV (G) COMPILATION COMPLETE.
Ready; T=0.84/2.59 23:39:34
メッセージについて言及する時期が来ました。プログラムが0.84秒のCPU時間を使用し、完了までに2.59秒かかったことを示しています。また、コンピュータの時刻も示しています。
プログラムをコンパイルした後、2つの新しいファイルが出現したことに気づいたかもしれません。
HELLO LISTING A1 F 120 19 3 01/09/26 23:39 CMS191
HELLO TEXT A1 F 80 14 2 01/09/26 23:39 CMS191
最初のファイルは整形されたリストで、昔はパンチカードと一緒に提出されていました。当時の大型プリンターに合わせて132列用にフォーマットされています。
FORTRAN IV G LEVEL 21 MAIN DATE = 26009 TIME = 23.39.33 PAGE 0001
0001 WRITE(6,1) HEL00010
0002 1 FORMAT('HELLO WORLD FROM FORTRAN') HEL00020
0003 STOP HEL00030
0004 END HEL00040
FORTRAN IV G LEVEL 21 MAIN DATE = 26009 TIME = 23.39.33 PAGE 0002
SUBPROGRAMS CALLED
SYMBOL LOCATION SYMBOL LOCATION SYMBOL LOCATION SYMBOL LOCATION SYMBOL LOCATION
IBCOM# 90
FORMAT STATEMENT MAP
SYMBOL LOCATION SYMBOL LOCATION SYMBOL LOCATION SYMBOL LOCATION SYMBOL LOCATION
1 94
*OPTIONS IN EFFECT* ID,EBCDIC,SOURCE,NOLIST,NODECK,LOAD,MAP
*OPTIONS IN EFFECT* NAME = MAIN , LINECNT = 60
*STATISTICS* SOURCE STATEMENTS = 4,PROGRAM SIZE = 298
*STATISTICS* NO DIAGNOSTICS GENERATED
もう一つはテキストであると述べていますが、それは嘘のようです。
[画像: type hello text]
コンパイルしたばかりのFortranプログラムを実行するには、次のようにします。
LOAD HELLO ( START
これが何を意味するか見てみましょう。
[画像: help load]
つまり、LOADは1つ以上の再配置可能なオブジェクトコード、つまりTEXTファイルをロードします(それは嘘だとわかっていました!)。したがって、LOADにHELLO TEXTファイルをロードするように求めており、それにSTARTオプションを渡しています(コードを実行するため)。
LOAD HELLO ( START
Execution begins...
Ready; T=1.23/3.90 00:09:54
何も起こらなかったように見えます。しかし、実際には起こりました。新しいファイルがあります。
FILE FT06F001 A1 V 24 1 1 01/10/26 0:09 CMS191
これを見てみましょう。
[画像: file ft06f001]
プログラムは実行され、出力はこの奇妙な名前のファイルに入りました。これはWRITEステートメントの最初のパラメータです。WRITE(6,1)は、行ラベル1で定義されたフォーマットを使用してファイル6に書き込むことを意味します。ファイルタイプの真ん中にある「6」も見えます。ファイル6の出力をターミナルにリダイレクトできます。
FILEDEF 6 TERMINAL
[画像: ELLO WORLD]
これでプログラムはターミナルに出力されます。最初の文字が欠けているのは興味深い問題です。なぜこれが起こるのか、私自身も現在のメインフレームの専門家もわかりません。現在の最善の推測は、行プリンターによって解釈される行の最初の文字が原因であるということです。これは私自身も完全には理解していない秘術的な知識です。ターミナルに出力する「正しい」方法は、当時のソースコードで見られるように、出力文字列の最初の列にスペースを入れることです。システムがファイルに出力する場合、出力が処理され、プリンターによって抑制される最初の文字は抑制されます。
リダイレクトに使用した魔法は何だったのでしょうか?FILEDEFが何をするか見てみましょう。HELP FILEDEFを実行します。
FILEDEF CMS Transient command
Use the FILEDEF command to establish data definitions for OS ddnames, to define
files to be copied with the MOVEFILE command, or to override default file
definitions made by the assembler and the OS language processors. The format
of the FILEDEF command is:
+----------+------------------------------------------------------------------+
| FIledef | ddname nn * device |
| | |
| | device:
| | Terminal [(optionA optionD[)]] |
| | PRinter [(optionD[)]] |
| | PUnch [(optionD[)]] |
| | Reader [(optionD[)]] |
| | DISK [FILE|fn ddname|ft [A1|fm]] [DSN ?|q1 q2 ...] |
| | [(optionA optionB[)]] |
| | DUMMY [(optionA[)]] |
| | TAPn [(optionA optionC[)]] |
| | CLEAR |
| | optionA:
| | BLOCK|BLKSIZE nnnnn CHANGE|NOCHANGE LRECL nnnnn |
| | PERM RECFM a |
| | optionB:
| | CONCAT DISP MOD DSORG PS|PO|DA|IS |
| | KEYLEN nnn LIMCT nnn MEMBER name |
| | OPTCD a XTENT 50|nnnnn |
| | optionC:
| | 7TRACK|9TRACK TRTCH a DEN den |
| | optionD:
| | UPCASE|LOWCASE |
+----------+------------------------------------------------------------------+
where:
ddname | nn | *
is the name by which the file is referred to in your program. OS
ddname syntax rules should be followed. If a number nn is specified,
it is translated to a FORTRAN data definition name of FTnnF001. An
asterisk (*) may be specified with the CLEAR operand to indicate that
all file definitions not entered with the PERM option should be
cleared.
Devices:
Terminal is your terminal (terminal I/O must not be blocked). Terminal input
will be truncated to the console input buffer length of 130
characters.
...など。Fortranはデフォルトでファイル「6」として定義されているものに出力します。これは最終的に「FILE FT06F001」になります。これは、プログラムが実行されるときに、入力や出力が構成によって指定されていたバッチ処理の方法に関連しています。これはJCL(Job Control Language)と呼ばれる言語で行われました。プログラムがターミナルで対話形式で実行されることはまれで、ターミナルを持つことさえ、ほとんどのプログラマーが持っていない贅沢と考えられていました。彼らは、誰かがタイプし、パンチカードに変換し、コンパイラにフィードする特別なフォームでコードを提出していました。
独自のプログラムの実行
使用できるコードはたくさんあります。例えば、IBM System/360 Operating System FORTRAN IV Programmer’s Guideには例があります。primes.fortranをこのリポジトリにコピーしました。
C PRIME NUMBER PROBLEM
C FROM IBM System/360 Operating System FORTRAN IV Programmers Guide
C https://bitsavers.org/pdf/ibm/360/fortran/
C GC28-6817-4_OS360_FORTRAN_IV_G_and_H_Programmers_Guide_197309.pdf
C page 108
C Modified for brevity from 1 to 1000 to 1 to 100
100 WRITE (6,8)
8 FORMAT (52H FOLLOWING IS A LIST OF PRIME NUMBERS FROM 1 TO 100 /
X 119X,1H1/19X,1H2/19X,1H3)
101 I=5
3 A=I
102 A=SQRT(A)
103 J=A
104 DO 1 K=3,J,2
105 L=I/K
106 IF(L*K-I)1,2,4
1 CONTINUE
107 WRITE (6,5)I
5 FORMAT (I20)
2 I=I+2
108 IF(100-I)7,4,3
4 WRITE (6,9)
9 FORMAT (14H PROGRAM ERROR)
7 WRITE (6,6)
6 FORMAT (31H THIS IS THE END OF THE PROGRAM)
109 STOP
END
アップロードする際は、パンチカードが80文字だったため、固定長で80文字であることを確認してください。忘れると、親切なエラーメッセージが表示されます。
FILE 'PRIMES FORTRAN' IS NOT FIXED, 80 CHAR. RECORDS.
次のようにアップロードします。
[画像: upload primes]
これで、ファイルが固定長80文字幅(フォーマット列のF 80)になったことがわかります。
Filename Filetype Fm Format Recs Blocks Date Time Label
...
PRIMES FORTRAN A1 F 80 27 3 01/11/26 14:47 CMS191
これでコンパイルして実行できます。
[画像: load primes ( start]
ここでも、出力の開始部分にいくつかの奇妙な点が見られます。
[画像: load primes ( start]
…しかし、プログラムが正常に完了したことがわかります。
その他の興味深い言語
PL/I
PL/Iはメインフレームで人気があり、現在でも使用されている別の言語です。他の最近の言語のユーザーが慣れているものに、はるかに近いです。外部ファイルのインクルード、条件付きコンパイル、コード生成ループを可能にするCライクなプリプロセッサも含まれています。
コンパイラを呼び出すには、次を使用します。
PLI FILENAME1 [FILENAME2 ... FILENAMEn]
これにより、指定されたすべてのファイルがコンパイルされます。コンパイラには多くのオプションがあるため、コンパイラの組み込みヘルプを読むことをお勧めします。いつものように、次のように入力します。
HELP PLI
REXX
RexxはIBMメインフレームの「グルー言語」です。シンプルで使いやすく、インタプリタ型です。REXXプログラムを書くには、テキストエディタを使用します。ファイルタイプEXECを使用するとコマンドラインから呼び出せるようになりますが、REXXプログラムとして認識させるためには、最初の行は/*と*/で区切られたコメントである必要があります。言語自体は、行番号がなくなった後のBASICの後期バージョンを思い出させます。
/* REXX program to display the first 20 prime numbers */
count = 0
num = 2
DO WHILE count < 20
IF is_prime(num) THEN DO
SAY num
count = count + 1
END
num = num + 1
END
EXIT
is_prime:
PROCEDURE
ARG n
IF n < 2 THEN
RETURN 0
DO divisor = 2 TO TRUNC(SQRT(n))
IF n // divisor = 0 THEN
RETURN 0
END
RETURN 1
C
Pascal
ALGOL
これは興味深い。ALGOLという名前のログインなしのVMがあります。[TBA]
ディスクのナビゲーション
VM370CEディストリビューションには多くのディスクがあります。すぐにアクセスできるディスクを確認できます。CMSUSERとしてログインした場合、LISTFILE(「LIST」に省略しました)コマンドを使用して、デフォルトディスクにあるファイルを表示できます。CMSでは、コマンドを省略できます。実際のコマンドはLISTFILEですが、LISTは十分に便利です。
[画像: list]
持っているディスクを確認するには、QUERY DISKを使用します(queryも省略可能で、Qだけでコンピュータが何を求めているかを理解できます)。
[画像: query disk]
ディスクにあるものを一覧表示するには、LISTFILE * * [disk]を使用します。最初の「*」はすべてのファイル名を表示するワイルドカードで、2番目はすべてのタイプ用です。CP/M、MS-DOS、またはUnixのワイルドカードに慣れている場合、これらは同じようには動作しません。
3番目のパラメータはディスクです。
[画像: list * * a]
したがって、LISTFILEとLISTFILE * * Aの出力を調べると、ディスクAから開始したことがわかります。この場合、Aはディスク191のショートカットです(メインフレームは常に多くのディスクを持つように設計されており、私たちのエミュレートされたマシン—最大構成の4381—はほとんどの企業が購入できたものよりも、あるいは当時のコンピュータルームに収まったものよりも多く持っています)。この場合、191はディスクの「アドレス」であり、ディスクが仮想マシンにどのように接続されているかを示します。ディスクには6文字のラベル(メインフレームのスラングでは「VOLSER」)もあります。Aは「CMS190」です。
他のディスクも確認してみましょう。
[画像: D, E, F, and G are empty]
ディスクD、E、F、Gは空です。これは、QUERY DISKの出力を注意深く見ていれば驚くことではありません。ディスクにはファイルがゼロで、5ブロック(0%に丸められています)を使用していると明確に示されています。
ディスクS(または190、または)もあります。172個のファイルがあり、すべてをリストするには数ページかかります。リストには多くの興味深いファイルがあります。このディスクにはシステムユーティリティが含まれています。ACCESS、EDIT、QUERY、SET、SORT、GLOBAL、そして私たちが以前に見たり、OSが提供するもののように見えるもの(ラベルが「CMSDSK」なので、驚くことではありません)があります。バイナリプログラムはタイプ「MODULE」のようです。それを覚えておきましょう。SのタイプMODULEのすべてのファイルをリストしてみてください。
DIR * MODULE S
[画像: dir * module s]
CMSはフラットファイルシステムを提供しているため、サブディレクトリを持つことはできません。これは、UnixやWindowsシステムに慣れており、それらを使用してファイルを整理しているユーザーにとっては大きな違いです。もう一つの違いは、Windowsユーザー(そしてそれ以前のCP/Mユーザー)にはより馴染み深いかもしれませんが、システムはUnixシステムの単一ルート階層ではなく、複数のボリュームを公開します。
最後に、より微妙な違いは、「現在の」ディスクというものが存在しないことです。ディスク文字を指定しない場合、ファイルはAとして解釈されます。これはあなたの「ホーム」です。別のディスクに「変更」することは決してなく、常に明示的に言及する必要があります。
プレーンなVM/370は、CMSシステムファイルをディスクSにマッピングします。実行しているコミュニティエディションでは、OSはドライブSにあり、OSの追加機能はディスクYにあります。ディスクUにはユーティリティが含まれています。
マシンへのファイルのアップロード(そしてゲームをプレイする)
この例では、h390-vmグループのgroups.ioで利用可能なGAMES.VMARCファイルを使用します。メインフレームにファイルをアップロードする最も簡単な方法は、x3270アプリを使用することです。ファイルメニューで「ファイル転送」を選択します。
[画像: File Transfer Dialog]
VMARCファイル(.zipまたは.tar.bz2のようなもの)をアップロードするため、バイナリ転送を選択します。ファイルはディスクDに保存されます。
[画像: Transfer is happening]
性能の低いRaspberry Pi Zero WでHerculesを実行している場合、時間がかかることがあります。常識的なコンピュータでローカルインスタンスを実行すれば、はるかに速いと想定されます。転送が完了すると、新しいダイアログが表示されて通知されます。
[画像: Transfer complete]
次に、VMARCファイルを開く方法を理解する必要があります。幸いなことに、VM370CEには非常に包括的なヘルプシステムがあります。ターミナルで次のように入力します。
HELP VMARC
[画像: VMARC Help]
ファイルのコンテンツを一覧表示するのが最初の良いステップでしょう。
VMARC LIST GAMES VMARC D
[画像: List archive contents]
ゲームを1つ取り出してみましょう。
VMARC UNPACK GAMES VMARC D TICTOE MODULE D
ありました!
[画像: Extracting one file]
次に実行したいです。
TICTOE
…そして動作しました!
[画像: tictoe]
ほとんどの人が知っているように、三目並べ(そして地球規模の熱核戦争)で唯一の勝利の道は、プレイしないことです。他のゲームははるかに興味深いです。
その他のゲーム
入手しやすい他の2つのゲームアーカイブは、GithubのVM-370-Gamesリポジトリにあります。ファイルをデスクトップにダウンロードしてVM/370マシンに送信すると、次のようになります。
Filename Filetype Fm Format Recs Blocks Date Time Label
VM86F155 VMARC D1 V 80 15578 1597 01/03/26 1:20 CMS192
ZORK VMARC D1 V 80 8865 909 01/03/26 0:37 CMS192
最初のVM86F155には、探求・修正できるBASICゲームがたくさん含まれています(EDITの使い方がわかれば)。
ZORKのコードはFORTRANで書かれており、GENZORKというプログラムがありますが、失敗します(おそらくディスクBで実行する必要があるかもしれません)。
[画像: GENZORK ABEND'ing]
もし解決したら教えてください。
[Solution TBA]
これでCMSUSERでの作業は終わりなので、マシンからログオフします。
[画像: logoff]
ユーザーの追加
毎回CMSUSERとしてログインするのは楽しくありません。自分で何かを行うための適切な権限を持つユーザーが必要になります。私の場合、「RBANFFY」というユーザーを作成したいです。
他のプラットフォームから来た人にとっての最初の驚きは、ユーザーを作成するのではなく、VMを作成し、そのVMにログインすることです。ユーザーを作成せずにユーザーを作成することもできますが、それは実際には望むものではありません。ユーザーとVMは同じ方法で定義され、USERキーワードを使用します。
[画像: One does not simply add a user to TSO]
VMの作成は少し複雑です。例えば、ストレージを割り当ててフォーマットするなど、多くのことを行う必要があります。これは後で扱うことにします。
それまでの間、CMSUSERのVMを希望の名前に変更し(パスワードも変更する)、その方法を説明します。まずMAINT(MAINT VMにログインすることを意味します)としてログインすることから始めます。
[画像: logon maint]
システムについて多くの興味深いことや、EDITエディタの新しいコマンドをいくつか学びます。
USER DIRECTの編集
まず、このVMで利用可能なディスクを確認します。
いくつかのディスクを他のVMと共有していることに注意してください。これは、WindowsやLinuxの方法でVMを使用することに慣れている人には直感的ではありません。VM/370(およびその派生)では、VMはファイルシステムを共有できますが、ディスク自体を共有するわけではありません。リモートファイルシステムのマウントと考えてくださいが、リモートサーバーはありません。これはハイパーバイザー内で行われます。CMSDSK、MNT29D、MNT19Eのボリュームを他のユーザー(CMSUSERとしてログインしたときに確認しました)と共有しています。
[画像: MAINT's disks]
調べたいファイルはUSER DIRECTです。まず、どこにあるかを見つけましょう。アクセスできるすべてのボリュームでUSER DIRECTという名前のファイルを一覧表示するには、LISTFILE USER DIRECT *を使用します。ターミナルには次のようなものが表示されます。
LISTFILE USER DIRECT *
USER DIRECT A1
Ready; T=0.07/0.13 12:20:46
したがって、ファイルはデフォルトディスク(A)にあることがわかります。これはボリュームMNT191です。これを編集しましょう。ターミナルでEDIT USER DIRECTを実行します。
[画像: Editing USER DIRECT]
一番上の行は、作業中のファイルとモードを示しています。
EDIT USER DIRECT A1 F 80 ZONE= 1- 72 VERFY= 1- 72 CASE=U TRUNC= 72
これは、USER DIRECTファイルがあり、A(今は1を無視してください)にあり、80列の固定行長ファイル(F 80)であり、入力するすべてが大文字に変換されること(CASE=U)を示しています。また、パンチカードでカードを識別するために使用されていたTRUNC= 72とも表示されています(ファイル内の行)。
ナビゲートするには、EDITのupおよびdownコマンドを使用できます。数字を続けると、その操作がその回数繰り返されます。迷った場合は、topまたはbottomを使用してファイルの先頭または末尾に移動できます。DOWN 14を実行しましょう。
[画像: The first VM defined]
これがVMを定義する方法です。ここではユーザーと呼ばれているため、混乱するかもしれません。一部のVMは自動的に起動しますが、他のVMはLOGON時にのみ起動し(LOGOFF時にシャットダウンします)、これらの最初の定義は、コメントが説明しているように、ユーザーの定義を容易にするために作成されており、自分でログインすることはできません。
ファイルは、ASSISTユーザーを見るとさらに興味深くなります。LOCATE ASSISTを実行します。
[画像: locate assist]
注: ALGOLユーザーも興味深いですが、今は触れません。
ここでは、ディスク定義の前にいくつかのコマンドが表示されます。これらは、ユーザーがCMSオペレーティング環境にログインすることを示しています(IPLは「Initial Program Load」の略で、他のシステムでは「ブート」と呼ばれるものです)。次に、コンソールがどのように使用されるか(デバイス009のIBM 3215コンソールのようなもの)を設定します。また、カードリーダー/パンチャー(00Cおよび00Dに接続されたIBM 2540)とプリンター(IBM 1403)も設定します。
USER ASSIST ASSIST 15M 16M G
IPL CMS
CONSOLE 009 3215
SPOOL 00C 2540 READ A
SPOOL 00D 2540 PUNCH A
SPOOL 00E 1403 A
注: 最初の行は、ユーザー名(
ASSISS)、パスワード(はい、プレーンテキストで)、およびマシンに割り当てるメモリ量を示しています。
次に、名前を変更したいユーザーを見てみましょう。EDITでCMSUSERを検索します。
USER CMSUSER CMSUSER 15M 16M G
IPL CMS
CONSOLE 009 3215
SPOOL 00E 1403 A
SPOOL 00C 2540 READ *
SPOOL 00D 2540 PUNCH A
LINK MAINT 190 190 RR
LINK MAINT 19D 19D RR
LINK MAINT 19E 19E RR
* cuu type adr num volser mode readpw writepw multpw
MDISK 191 3350 001 115 VM50U0 MR ALL WRITE MULT
MDISK 192 3350 116 115 VM50U0 MR ALL WRITE MULT
MDISK 193 3350 231 115 VM50U0 MR ALL WRITE MULT
MDISK 194 3350 346 115 VM50U0 MR ALL WRITE MULT
MDISK 195 3350 461 094 VM50U0 MR ALL WRITE MULT
次に、2番目のx3270ウィンドウを開き、CMSUSERとしてログインします。
LOGON CMSUSER CMSUSER
DASD 190 LINKED R/O; R/W BY MAINT; R/O BY 004 USERS
DASD 19D LINKED R/O; R/W BY MAINT; R/O BY 002 USERS
DASD 19E LINKED R/O; R/W BY MAINT; R/O BY 004 USERS
LOGON AT 13:10:22 GMT MONDAY 01/19/26
VM Community Edition V1 R1.2
これらは、カードリーダー/パンチャーとプリンターが追加された後にLINKコマンドで言及されている3つのディスクです。これらはMAINTユーザーからリンクされています。
そこにいる間に、QUERY DISKを実行します。
Label CUU M Stat Cyl Type Blksize Files Blks Used-(%) Blks Left Blk Total
CMS191 191 A R/W 115 3350 800 7 111-00 65420 65531
CMS192 192 D R/W 115 3350 800 0 5-00 65526 65531
CMS193 193 E R/W 115 3350 800 0 5-00 65526 65531
CMS194 194 F R/W 115 3350 800 0 5-00 65526 65531
CMS195 195 G R/W 94 3350 800 0 5-00 53575 53580
CMSDSK 190 S R/O 59 3350 800 172 19537-58 14093 33630
MNT29D 19D U/S R/O 30 3350 800 407 6242-37 10858 17100
MNT19E 19E Y/S R/O 70 3350 800 710 28263-71 11637 39900
Ready; T=0.13/0.82 13:19:36
最初の5つのディスクは、USER DIRECTのMDISK行で定義されているものです。最後の3つはMAINからLINKされたものです。
変更を保存してEDITを終了するには、FILEコマンドを使用します。変更を保存せずに終了するには、QUITを使用します。続行するにはターミナルをクリアする必要があります(右下にある「MORE…」メッセージ)。x3270ではPA2(ターミナルをクリアする)はAlt-2です。
もう一つ興味深いファイルがあります。これは、すべてのディスクパーティション、それらのパーティションを使用するユーザー、接続されているCUU、およびシリンダーの開始と終了を一覧にした包括的なリストです。すべてのエントリはこのようになっています。
VOLUME USERID CUU DEVTYPE START END SIZE
GCCBRX $ALLOC$ 110 3350 00000 00000 00001
00001 00050 00050 GAP
MAINTC 293 3350 00051 00100 00050
MAINTC 191 3350 00101 00150 00050
MAINTC 394 3350 00151 00200 00050
MAINTC 194 3350 00201 00250 00050
MAINTC 395 3350 00251 00300 00050
MAINTC 393 3350 00301 00350 00050
MAINTC 193 3350 00351 00400 00050
MAINTC 493 3350 00401 00450 00050
MAINTC 19C 3350 00451 00500 00050
MAINTC 195 3350 00501 00550 00050
MAINTC 295 3350 00551 00551 00001
新しいユーザー(またはVM)を作成することは、ここでカバーするには私の手に余る作業になります。新しいディスクの追加、パーティションの作成、ファイルシステムの作成、そしてそれらを構成に追加する必要があります。さらに重要なことに、自信を持って実行できるようになる前に、多くのことを学ぶ必要があります。
したがって、新しいユーザーを作成する代わりに、CMSUSERのユーザー名とパスワードを変更します(パスワードは8文字を超えられず、大文字小文字を区別しません)。これは1970年代の方法であったことを覚えておいてください。最新のメインフレームははるかに安全に保護されています。
私用、妻用、子供用のユーザーを持つという私の計画は、また別の日に持ち越しになります。
USERディレクトリの更新
[TBA]
TYPEを使用せずにファイルを表示する
TYPEは良いコマンドですが(CP/MやMS-DOSの経験者なら覚えているでしょう)、VM/370 CEにはフルスクリーンのファイルビューアがバンドルされています。
[TBA]
その他のテキストエディタの使用
これまではEDITを使用してきました。これはIBMのVM/370 R6に付属しているエディタで、当時のビデオで見かけるものかもしれませんが、もっと使いやすいものがもう一つあります:EE。
ターミナルで次のように入力します。
EE PROFILE EXEC
[画像: calling the ee editor]
EEの使用
EE PROFILE EXECと入力するとエディタが起動し、この場合はPROFILE EXECファイルがロードされた状態になります。
[画像: the ee editor]
EEはよりモダンなエディタで、ISPFのような現在のツールのように動作します。良い点の一つは、コマンドが左側にあることです(等号で埋められた領域)。カーソルを上に移動し、いずれかに「i3」と入力します。
[画像: i3]
Enterキーを押すと、EEが3行挿入されたことがわかります(このコンテキストではiと3がその意味だからです)。
新しいテキストを入力したり、画面上のテキストを変更したりするには、カーソルをそこに移動して入力を開始するだけです。
[画像: adding text]
これをPROFILE EXECファイルに残しておきたくないので、これらの3行を削除します。
[画像: d3]
これでファイルは開始時と同じ状態になりました。一番下の紫色の行に注意して、F3キーを押してEEを終了します。
騙されました!F3はファイルを変更したため機能しません(EEは内容がディスク上の内容と同じであると認識しません)。Vimの:q!のように、「QQuit」コマンドを使用して終了します。
他のメインフレームとの通信
他の実行中のHerculesインスタンスへのディスクのマウント
Herculesは共有デバイスサーバーモードでUIなしで実行できます。このモードでは、起動でき、環境をIPLする必要はありません。
[詳細 TBA]
VM370でのTCP/IPネットワーキング
[TBA]
印刷
仮想プリンターへの印刷
Herculesはプリンターをローカルファイルにルーティングすることをサポートしています。MVT 3.8jのパッケージ版では、1403ラインプリンターがprt/prt00f.txtファイルにマッピングされており、VM/370には2つの1403プリンターがあり、io/print1.listingとio/print2.listingにマッピングされています。コンテナイメージでは、これらのファイルはホストに直接公開されていないため、コンテナフォルダを自分でホストにマッピングする必要があります。
実際のプリンターへの印刷
[TBA]
「通常の」ターミナルの使用
印刷ターミナル(画面ベースではない)経由でのアクセスを有効にする。
その他のソフトウェアの入手先
https://www.vm.ibm.com/download/packages/# https://vmworkshop.org/HENSLER/
その他のリソース
https://www.leeandmelindavarian.com/Melinda/
© 2025-2026 Ricardo Bánffy