初期TX-0命令
目次
アセンブラ
ところで、TX-0 のニーモニックはすべて3文字です。
…賢明な方はすでに気づいているかもしれませんが、6bit を1文字として、3文字で18bit。ちょうど TX-0 のワード長と一致するのです。
ぴったり一致していることが重要なので、「3文字まで認識できる」のではなく、3文字ちょうどです。
これは opr 命令で使われる定数にもいえることで、やはりすべて3文字で定義されています。
opr はアドレス部分の数値をビットフィールドとみなすことで命令を出します。
アドレスは8進数で指定します。
つまり、 cll + clr の機能を使いたいときは、次のように書きます。
opr 140000
もっとも、アセンブラなどでは、opr 命令で扱える機能のビット指定を「定数」として持っていました。
そのため、たとえば cll と clr を同時に指定したいときは、
opr cll + clr
と書けば同じ指定になります。
これをさらに推し進め、後にはアセンブラで「擬似命令」が使えるようになりました。
上の指定は、 cla という「擬似命令」に割り振られています。そのため、
opr 140000
opr cll + clr
cla
の3つの行は、同じ意味を持ちます。
定番の組み合わせは結構多かったようで、アセンブラやデバッガでは、最初から組み込みでいくつかの擬似命令を解釈できました。
後には、自分で定数定義したり、マクロ定義することで擬似命令を作り出せるアセンブラも作られています。
擬似命令
それでは、定番の組み合わせと、それに割り振られた擬似命令を紹介します。
まず、opr コマンドの「特定の1つ」を擬似命令に割り振ったものがあります。
opr cll と書くべきところを cll だけで済ませるようにする、というものです。
cll clr com shr cyr tac tbr ios は、定番だったようで擬似命令が作られていました。
この説明は、特に不要と思われますので割愛します。
ところで、先に説明が必要なことが、1つだけあります。
opr 実行時に、MBR がどうなっているか、ということ。
MBR は、メモリと演算部分の橋渡しをするためのレジスタです。しかし、opr 命令ではメモリアクセスは行われません。
そこで、opr 命令実行時には、冒頭で MBR は 0 クリアされます。
このことは、組み合わせ命令を知るうえで重要です。
では、各種ツールで共通して使われていた擬似命令を紹介します。
レジスタ操作
| cla | CLear Ac | cll + clr |
|---|
AC のビットをすべて 0 にする。
| clc | Clear and Complement | cll + clr + com |
|---|
AC のビットをすべて 1 にする。
| lr0 | LR <- 0 | mlr |
|---|
LR を 0 にする。
MBR を LR に転送しているだけです。
先に説明しましたが、opr 命令実行時には、MBR は 0 クリアされていることに注意が必要です。
| cal | Clear Ac and Lr | cll + clr + mlr |
|---|
AC と LR を 0 にする。
MBR が 0 であることに注意。
| lac | Lr -> AC | cll + clr + lmb + pad |
|---|
LR を AC に転送。
AC をクリアしてから、LR を MBR に転送。その後、MBR と AC の半加算を行っている。
| alr | Ac -> LR | amb + mlr |
|---|
AC を LR に転送。
AC を MBR に転送してから、MBR を LR に転送している。
| lpd | Lr Partial aDd | lmb + pad |
|---|
AC と LR を半加算。
LR を MBR に転送してから、AC と MBR を半加算している。
| lad | Lr Add | lmb + pad + cry |
|---|
AC と LR を加算。
LR を MBR に転送してから、AC と MBR を半加算し、繰上り処理。
| cyl | Cycle Left | amb + pad + cry |
|---|
左ローテート。
AC を MBR に転送後、AC と全加算する。つまり、AC を2倍している。
この際、opr 命令での全加算では最上位ビットの繰上りが最下位ビットに入るため、シフトではなくローテートとなる。
周辺機器操作
| dis | DISplay | ios + dis |
|---|
dis 命令は ios と共に使う必要があったため、あらかじめ組み合わせた擬似命令です。
| prt | ios + pnt |
|---|
pnt 命令は必ず ios と同時に発行する必要があるため、組み合わせた擬似命令です。
しかし、擬似命令語は pnt ではないことに注意。
実際、pnt が使われるときは cyr と組み合わされることが多いため、pnt は次の擬似命令に使われています。
| pnt | ios + pnt + cyr |
|---|
AC から1文字印字し、右ローテートします。
| pna | PriNt and clear Ac | ios + pnt + amb + pad |
|---|---|---|
| pnc | PriNt and Compliment ac | ios + pnt + com + amb + pad |
AC から1文字印刷後、AC をクリアします。
AC を MBR に転送後、AC と MBR の半加算で「AC クリア」になることに注意。(同じ値同士の XOR は、0 になる)
pnc では、0 クリアではなく、1クリア(全ビットを 1 にする)します。
| r1c | Read 1 | line cll + clr + ios + r1c |
|---|---|---|
| r3c | Read 3 | line cll + clr + ios + r3c |
AC クリア後、AC にテープリーダからのデータを読み込みます。
r1c は 6bit 、r3c は 18bit の読み込みを行います。
| r1r | Read 1 and cycle Right | cll + clr + ios + cyr |
|---|---|---|
| r1L | Read 1 and cycle Left | cll + clr + ios + r1c + amb + pad + cry |
AC クリア後、テープリーダから 6bit 読み込み、ローテートします。
r1r は右ローテート、r1L は左ローテートです。
理由は不明。数字の 1 や大文字の I と区別するためなら、他の命令では l を小文字で書いているのが不自然です。
なにか特別の理由があるのかもしれない、と考え、ここでも同じ表記とします。
| p6s | Punch Space | cll + clr + ios + p6h |
|---|
紙テープを1行分空送りします。
AC クリア後紙テープをパンチしていますが、全ビットが 0 なので何もパンチされません。
| p6h | Punch 6 Hole | ios + p6h + cyr |
|---|---|---|
| p7h | Punch 7 Hole | ios + p7h + cyr |
AC から 6bit パンチ後、右ローテートします。
p7h では、7番目の穴も開けます。
| p6a | Punch 6 hole and clear Ac | ios + p6h + cyr + amb + pad |
|---|---|---|
| p7a | Punch 7 hole and clear Ac | ios + p7h + cyr + amb + pad |
AC から 6bit パンチ後、AC をクリアします。
pna と同じ仕組み。
p7a では、7番目の穴も開けます。
以上が、よく使われていた擬似命令です。
これ以外にも状況に応じて便利な組み合わせが考えられていたようです。
TX-0 は、たった4つしか命令の無いコンピューターです。
しかし、擬似命令まで含めてみてみると、結構命令が多いことに気づくかと思います。実際、これで十分なプログラムが作られていました。
それでも、やはり命令が少ないが故の苦労は多かったようです。
そのため、しばらく後に TX-0 は大改造をされ、命令が大幅に追加になります。
…長くなりすぎましたので、今回はここまで。次回は改造後の命令についてお伝えします。
| 参考文献 | |||
| Preliminary Programming for TX-0 | Earle W. Pughe, Jr. | 1958 | MIT |
| A FUNCTIONAL DESCRIPTION OF THE TX-0 COMPUTER | JT.Gilmore,Jr. & H.P.Peterson | 1958 | MIT |
| TX-0 COMPUTER HISTORY | John A.McKenzie | 1974 | MIT |
| Computer history archive | MIT | '50s | Computer History Museum |
| TX-0 COMPUTER (AI FILM #105) | MIT | '60s | MIT CSAIL |
| その他、WEB上の各種ページ |