初期TX-0命令
目次
opr命令詳細
というわけで、opr の全機能説明。
AC クリア
cll | CLear Left |
---|---|
clr | CLear Right |
AC を 0 でクリアします。上位(左側) 9bit と下位(右側) 9bit にわけて、それぞれクリアできます。
これは、ディスプレイ表示の際に、上位と下位をそれぞれ 横・縦座標に使用するためでしょう。
opr 命令では、同時に命令を指定できるので、両方一緒に使えば AC の全クリアとなります。
TX-0 停止
ios | In-Out Stop |
---|---|
hlt | HALt |
ios は、flexowriter の入出力を待つために使用します。
flexowriter 設備を相手にする場合、必ず同時指定しなくてはなりません。
flexowriter が応答を返すまでの間、TX-0 は停止します。
hlt は、TX-0 を無条件に停止します。
ios 「のみ」を実行することは、非推奨でした。
周辺機器を作動させずに周辺機器の終了割り込みを待てば、当然ハングアップとなるためです。
しかし、状況に応じて、「先に周辺機器を起動しておき、後で割り込みだけまつ」ということもあったようで、非推奨ではあるが絶対禁止ではなかったようです。
flexowriter 入出力
p7h | Punch 7 Hole |
---|---|
p6h | Punch 6 Hole |
p6h は、AC の bit 2,5,8,11,14,17 の 6bit を紙テープの1~6の穴としてパンチします。
p7h は、p6h に加え、7番目の穴を必ずあけます。
この6ビットの組み合わせはよく使います。Flexoriter のキーボードが LR に入力する文字コードも、このビットを使用していたことを思い出してください。
AC の 18bit すべてを出力したい場合は、1bit シフトと組み合わせて3回出力します。
ビットが飛び飛びなのはそのためです。
pnt |
---|
p6h と同じ 6bit を文字コードとみなして、Flexoriter で印字します。
これも 1bit シフトと組みあわせることで、3文字づつ印字できることになります。
r1c | Read 1 line |
---|---|
r3c | Read 3 line |
r1c は、光学パンチテープリーダーで、1列分の穴を読み込み、AC の bit 0,3,6,9,12,15 に読み込みます。
r3c では、r1c して 1bit 右シフト、を3回繰り返すのとおなじ動作をします。
p6h と使っているビットが違うのは、この後シフトを行って3列分読み込むことを前提にしているためです。
(p6h を右シフトしながら3回繰り返して作ったテープを、r3cで読み込むと、AC の内容が再現されます)
ところで、マニュアルによれば r1c は read 1 line です。
恐らく、古くは read 1 character だったのが、6bit は必ずしも「文字」ではないので、後に説明を line に変更したのだと思います。
AC シフト命令
shr | SHift Right |
---|---|
cyr | Cycle Right |
AC を 1bit 右シフト・ローテートします。
(現代ではローテート、と呼ばれる操作を、当時はサイクルと呼んでいました)
右は「下位ビット方向」なので、右シフトすると AC の内容を半分に割ったのと同じ効果を持ちます。
逆に、2倍するのは足し算で出来るため、左シフト命令はありません。
先に書いた p6h や r1c と組み合わせて、18bit を 6bit づつ3回に分けて入出力するのにもつかわれます。
ディスプレイ入出力
dis | DISplay |
---|
AC の上位9bitを横座標、下位9bitを縦座標として、ベクタースキャンディスプレイに点を表示します。
この時、ディスプレイ中央を「原点」として、9bit の下位8bit を原点からの距離、最上位ビットを符号とみなします。
結果的に、9bit あるのですが 0 と -0 は同じ位置を示すことになるため、解像度は 511×511 ドットです。
pen | PEN |
---|
ライトペン(2本ある)からの入力を、AC の最上位ビットと、その下のビットに入れます。
ライトペンが触れている周辺に、「直前に」 DIS 命令で出力を行っていれば、ビットは 1 になります。
そうでなければ 0 になります。
ライトペンは 1bit の状態を記憶しておくことができ、光が入ると 1 になります。これは、読み出すと 0 に戻ります。
そこで、ポイントされているか調べたい場合はまず読み出しを行ってライトペンの状態をクリアし、dis で点を打ってから、もう一度読み出します。
dis で描いた位置にライトペンが触れていれば、その光を読み込んで状態が変わっているはずです。
AC 内容操作
com | COMplement |
---|
AC の内容の1の補数(complement)を求め、AC に残します。
1の補数と言うのは、全ビットを反転したものです。現代でいう否定(NOT)演算です。
pad | Partial ADd |
---|
AC と MBR の間で、半加算を行い、AC に保持します。
半加算とは、繰上りの無い加算のことです。結果的には排他的論理和(XOR)になります。
ただ、この際に各桁の繰上り情報は、どこかに保持されています。
繰上り情報は、AC と MBR の論理積(AND)を取ったのち、左に1bitローテートしたものと同じです。
(繰上りだから、ローテートで1桁上に送っている
cry | partial add CaRrY |
---|
pad の直後(opr 命令としては同時)に行うことで、繰上りを処理して「全加算」を行います。
まず、繰上り情報の下位ビットから 1bit づつ、半加算後のアキュムレータの内容と共に調べます。
両方が 1 の場合は、連続繰上りが必要なため、1bit 上の繰上り情報を 1 にします。
この際、最上位ビットの1桁上は「最下位ビット」としています。
連続繰上りの処理は、AC と繰上り情報の両方が 1 の場合に限られる。
ということは、連続繰上りが生じるときは、半加算時にはその桁での繰上りはなかった、ということが保証されている。
つまり、1bit 上の繰上り情報を 1 にするとき、「すでに 1 の場合」の考慮はいらない。
レジスタ間転送
mlr | Mbr -> LR |
---|---|
lmb | Lr -> MBr |
tbr | TBR -> mbr |
amb | Ac -> MBr |
いずれもレジスタ間の転送を行います。
mlr は MBR から LR に。
lmb は LR から MBR に。
tbr は TBR から MBR に。
amb は AC から MBR に。
TBR はレジスタと言うより、18bit の入力装置です。
mlr 以外はビットフィールドを共有しているため、同時に使用できないことに注意が必要です。
tac | TAC or ac -> ac |
---|
こちらもレジスタ間転送なのですが、これだけ少し特殊です。
TAC は 18bit の入力装置ですが、この装置の ON になっているビットだけ、対応する AC のビットを 1 にします。
OFF になっている部分は AC の値がそのまま保持されます。
これは、結果として AC と TAC の論理和(OR)を AC に入れるのと同じことになります。
さて、以上が opr 命令で指定できる機能の全てです。
結構多機能ですが、これらを組み合わせることで、さらに多彩な処理が可能になります。
これらには「定番の組み合わせ」があったようで、これについてはあとで紹介します。