簡単なプログラムの入力

ここでは、イニシャルオーダー R0 で読み込むための プログラムの入力方法について述べる。 プログラムの内容は、アキュムレータの内容を 0 から 1 つずつ増やしてゆくというもので、 入力済みのものを配布物中に"Example.ptr"として入れてある。

プログラム

アドレス 命令
116: 0c=0r
0c: 0
1 1
0t: 0a=0r
0a: p 2
1 al c
2 jl 1a
jl a.

入力の方法

一般的に、アドレスの項が「数字のみ」(":" 無し)の部分では、 アドレスは入力しない。 命令中の間の空白は入力しない。 行の区切りには","を入力する。

最後の行の "jl a." は、 イニシャルオーダーに「a から開始せよ」 と指示するものであり、 記憶装置(の "jl 1a" に引き続く領域)には書き込まれない。

具体的には、次の文字列をテレプリンターのキーボードから入力する。 物理キーボードとの対応は「操作マニュアル」の通り。 "," の後に適宜 CR/LF を入れてもよい。

116:0c=0r,0c:0,1,0t:0a=0r,0a:p2,alc,jl1a,jla.

"SAVE" ボタンを押して保存する。

打ち間違えた場合、そのテープを読取機にセットして、 READ, READ ONE を使って読み込みつつ、間違えた部分を SKIP で飛ばしてキーボードから打ち込む、 という手順により修正したテープを作成することができる。 (スクリーンエディタに比べて修正に手間がかかることは 間違いない。)

実行の手順

テープ読取機に R0 をセットし、Initial Load で読み込む。 テープ読取機に今作ったテープをセットし、 Free Run をオンにし、Clear Start で R0 を走らせる。 テープの読み込みが終わると、アキュムレータのインジケータが 動き始める(はず)。

プログラムの解説

PC-1 の命令セット等については パラメトロン電子計算機PC-1について 参照。 R0 の詳しい利用法については Instruction for use of the basic input routine R0 参照。

ここでは、上のプログラムに沿って簡単な解説を与える。

"116:" により、入力を行うアドレスを 116 に設定するとともに、 相対アドレスの原点を 116 とする。 (この 116 という値は、R0 および数値読み込みルーチン R1 が 115 までを使用することによる。) 相対アドレスはパラメータ "r" で表され、 0r, 1r, 2r などと(しかるべき位置で)書くと 116, 117, 118 などを表すようになる(再び設定するまでは)。 "0c=0r" は、パラメータ c を 0r (=116)に等しく置くという、 イニシャルオーダーへの指示。 パラメータには特殊な意味を持つもの( r, t, l など)以外の アルファベット(とその他のいくつかの文字)が使用できる。

"0c:0,1" により、0c(=116)番地から短語(18 ビットの語) 0, 1 を格納する。 これは長語(36 ビットの語)の 1 として用いている。

"0t:0a=0r" により、現在格納している番地(118)を相対アドレスの原点とし、 パラメータ a をそれに等しく置く。 "t" は次に格納する番地を保持するパラメータであるが、 事情により "0a=0t" だとうまくいかない。

"0a:" により、以降の命令を 118 番地から格納して行く。 "p 2" は、2 番地からの短語をアキュムレータの上半分に転送し、 下半分をクリアする、という命令。 R0 を用いる場合、2 番地に 0 が入っていることになっており、 アキュムレータをクリアしたい場合にはこのようにしたようである。 なお、PC-1 は多くの点で EDSAC を参考にしているが、 「アキュムレータを払って値をロードする」命令がある点は EDSAC との相違点である。 EDSAC では「記憶装置に格納してアキュムレータを払う」方式だった。

"al c" は、アキュムレータに 0c(=118) 番地の長語を加える命令。 すなわち、アキュムレータの内容を一つ増やす。 PC-1(や EDSAC にならった多くの計算機)では、 即値を利用する命令はシフト命令などのみであるのでこのようにする (インクリメントなども無い)。

"jl 1a" で 1a(=119)番地にジャンプする。

"jl a." は、直ちに 0a(=118)番地にジャンプせよ、という イニシャルオーダーへの指示(ピリオドが大事)。