初期TX-0命令
目次
周辺機器
これ以外のハードウェアとして、次のような周辺機器がありました。
Flexowriter
テレタイプ端末です。見た目はタイプライターですが、キーボードと印字部分は直接つながってはおらず、両方ともコンピューター制御できます。
文字コードは 6bit で示されます。
高速光学テープリーダ(PETR: Photo Electoric Tape Reader)
flexowriter 標準7穴テープを読み込みます。7つの穴のうち6つを使って 1byte を表し、3列を読み込むことで1ワードの読み込みとします。
紙テープパンチャ
標準7穴テープに穴をあけ、データを記録します。
ディスプレイ
完成直後(1956)には TX-0 には装備されておらず、翌年(1957)取り付けられたもの。
ただし、取り付ける計画自体は当初からあったようですし、RLE に貸与された時点ではすでについていたため、ここでは「オリジナル」の周辺機器として扱います。
7インチ四方で、解像度は 511*511 のベクターディスプレイが接続されていました。
ライトペン
こちらも完成直後にはなく、2年後(1958)に取り付けられたもの。こちらは SAGE 計画で使用された「ライトガン」を取り付けてみた、というもので、当初計画にはなかったようです。
しかし、こちらもオリジナル周辺機器とします。
カメラ
1958 年時点では「近いうちに装備予定」となっているのですが、結局この後も取り付けられなかったようです。
WWI と同じく、ディスプレイ撮影用だったようです。
4つの命令
概要説明でも書きましたが、TX-0 の命令は 2bit で示される命令と、16bit で示されるアドレスの組で指示します。
命令が 2bit で示されるというのは、命令が4つしかない、ということ。
その 2bit を2進数で表したものと命令、その意味を書くと…
00 | sto | STOre | ACの内容を指定メモリに保存する |
---|---|---|---|
01 | add | ADD | ACに指定メモリの内容を加算する(結果はACに残る) |
10 | trn | TRansfer Negative | ACの最上位ビット(bit0)が 1 のとき、指定したアドレスに処理を移す(条件分岐) |
11 | opr | OPeRate | アドレス部分のビットに対応した内部回路を駆動する |
通常の CPU には、AC に値を読み込む命令があるものですが、ありません。
AC をクリアしてから加算命令を使えば同じ意味になるためです。
では AC をクリアするのはどうやるのかと言えば、opr 命令を使います。
opr は、アドレス指定部分のビットを使って命令を出す命令です。
ビットフィールドによる指定になっているため、複数の命令を同時に指定できます。
同時に指定された命令は、内部で決められた順序で実行されます。
(VLIW のような同時実行ではありません)
opr のビットフィールドと命令は次のようになっています。
--1 --- --- --- --- --- cll CLear Left
--- 1-- --- --- --- --- clr Clear Right
--- -10 --- --- --- --- ios In-Out Stop
--- --- 111 --- --- --- p7h Punch 7th Hole
--- --- 110 --- --- --- p6h Punch 6th Hole
--- --- 100 --- --- --- pnt PriNT character
--- --- 001 --- --- --- r1c Read 1 line
--- --- 011 --- --- --- r3c Read 3 line
--- --- 010 --- --- --- dis DISplay
--- --- --- --1 --- 0-- pen read light PEN 1 and 2
--- --- --- --0 --- 1-- tac TAC or AC -> AC
--- --- --- --- 1-- --- com COMpliment
--- --- --- --- --- -01 amb AC -> MBR
--- --- --- --- --- -11 tbr TBR -> MBR
--- --- --- 01- --- --- mlr MBR -> LR
--- --- --- --- --- -10 lmb LR -> MBR
--- --- --- --- -1- --- pad Partial ADd
--- --- --- 10- --- --- shr SHfit Right
--- --- --- 11- --- --- cyr CYcle Right
--- --- --- --- --1 --- cry Partial ADd CaRrY
--- -11 --- --- --- --- hlt HaLT
同じ bit を使用するものが離れて書いてあったりして読みにくいのですが、これは、「実行される順」です。上の命令の方が先に処理されます。
当時の資料では、処理順序を 0.6 とか 1.2 と言うような数値で示しています。
TX-0 では、opr 命令は「命令フェッチ・解釈フェイズ」と「実行フェイズ」の2フェイズで動作しました。そして、1フェイズは8クロックで動作していました。
0.6 は「最初のフェイズの 6クロック目」に実行される、と言う意味です。同様に 1.2 は「2番目のフェイズの2クロック目」に実行されます。
同じビットを共有している場合は、それらの命令を同時に処理することはできません。
たとえば、3ビット使用している P7H ~DIS の列。これらはすべて Flexowiter を使用する命令なので、Flexowriter 側の制約により、もともと同時に使用することはできません。
同時に使用「してはいけない」ものを、使用「できない」ように命令が作られているのです。
…dis は? これはディスプレイ表示で、Flexowriter とは無関係。
後からディスプレイを追加したので、無理やりねじ込んだようです。
1 が r1c 、3 が r3c 、6 が p6h 、7 が p7h と、シャレている。
それがそのまま「3bit の最上位ビットが 1 だと 出力、0 だと入力」となっているのも素晴らしい。
dis はこの意味でも、やっぱり例外なのだけど。
同様に PEN 命令も不自然な位置にあります。
8進数単位で見ると、2bit 使用する命令の「あまり」の部分におしこめられたうえ、かなり離れた他の機能と同時に使えないようになっています。
これも、後から追加したために、余っているビットを無理やり使ったのでしょう。