後期TX-0命令

目次

最初の拡張

次の拡張大規模拡張案

決定された拡張案

レジスタの追加命令の増加メモリの増加opr 命令フィールドの再編

詳細な命令

Store Class 命令Add Class 命令Transfer Class 命令Operate Class 命令


命令の増加

インデックス相対アドレッシングの指定も含め、命令長が 5bit になりました。

命令も大幅に増加しています。


代償として、増えたビット数の分だけメモリ空間が減っています。メモリアドレスは 13bit になりました。


実際の命令追加は、かなり後に行われたようです


1960年の改造後の命令表ではまだ命令は増えておらず、XRも記載されていません。

1961年6月の命令表だと、XR は書かれているのに使用する命令がありません。

1962年11月の新アセンブラの使用法の例では、命令が使用できるのがわかります。

少し前の9月に作られたサブルーチンでは、すでに新命令が一部使われているので、この時点では使えるようになっていたのでしょう。


どうも、1961年後半から1962年前半の間のどこかで改造され、命令が大幅に増やされたようです。

XR 相対アドレッシングも、この改造まで使えなかったのではないかと思います。


MIT の公式文書には全て番号が振られていて、情報が更新されたときには枝番がつけられる。
命令表は 1960年の M-5001-27 に始まり、1961年には M-5001-27-1 が発行されている。
しかし、次の枝番である「-2」は紛失してしまったようで公開されていない。
-3 は 1965年、-4 は 1966年だ。基本的に、6~7月に発行されている。

発行が6~7月なのは、大学がこの時期に長い夏休みに入るからだ。大改造は、大抵この期間に行われた。
だからおそらく、-2 の発行は 1962年で、これを受けて新たなアセンブラが作られ、11月に使用法の文書が発行されたのだろう。

余談になるが、文書番号36が1961年7月、37が1962年11月で、1年以上も新規の公式文書が作られていない。また、この間に発行された「枝番」は少なくとも現在収集・公開されていない。
公式文書の中から手がかりを拾って改造時期を特定するのも、現在のところ望み薄だ。


メモリの増加

それまで 4k word しかなかったメモリが、倍の 8k word に増設されました。

bit 数でいえば、13bit アドレスです。

先に書いた通り、改造により TX-0 はのメモリ空間は 13bit になっていました。つまり、この増設で最大容量に達したことになります。


メモリが 13bit なのに XR は 14bit ありますが、これは XR が負の値も表現できるようにするためです。


opr 命令フィールドの再編

具体的には、これまで別々の機能だった bit 4,5 と bit 6~8 がまとめられ、入出力用のフィールドとなりました。

もともと、bit 6~8 を使用する際は、bit 4,5 を 10 (ios機能の選択)にセットする必要がありました。ならば、全部まとめてしまえ、と言うことでしょう。


そして、ios 機能はなくなりました。周辺機器アクセスのために TX-0 が停止しなくてはならないときは、適切に停止してくれます。


これで、周辺機器アクセスの命令フィールドが、事実上 3bit から 5bit に拡張されます。

いままで使われていた周辺機器は、ios に相当する bit が 1 になっている数値に割り振られます。

つまり、互換性は保たれています。


他にも、tac,tmb,pen 命令の再編が提案されています。


これらは事実上周辺機器なのに、周辺機器ではない扱いで、専用の bit を割り振られているためです。

上に書いた 5bit の中に入れてしまえば、空いたフィールドを別の用途に使えるようになりますが、こちらは、互換性のなくなる提案です。


1960年の改造は主に opr フィールドの改造でしたが、bit4~8の再編が中心で、tac,tmb,pen 命令に関してはそのままでした。

つまり、互換性を保ったまま改造されたことになります。


詳細な命令

命令が増えたので、細かく紹介していくときりがありません。ざっくり行きます。


まず、1960年の大改造では、主に影響を受けたのは opr 命令のビットフィールドでした。

命令は元の4命令に加え、これまでに追加した3命令の合計7命令のままです。


この後、何度も改造が行われ、「入れてみたけど使い勝手が悪かった」ような命令は別の命令に変更されたりしたようです。

ここでは、1966年9月の文書を元にしています。


以下、命令 5bit を2進数で示し、命令語、英語の意味、日本語の説明を書きます。


Store Class 命令

00000stoStoreAC の内容を指定メモリに保存
00001stxStore indeXedAC の内容を相対指定メモリに保存
00010sxaStore indeX in AddressXR の内容で、指定メモリのアドレス部分のみ書き換え
00011adoADd One示されたメモリの内容を 1 増加(AC にも同じ内容が入る)
00100slrStore LRLR の内容を指定メモリに保存
00101slxStore Lr indeXedLR の内容を相対指定メモリに保存
00110stzStore Zero指定メモリの内容を 0 クリア

sto と slr 命令のビットが、拡張前と変わっていないことにご注意ください。

互換性を保ったまま拡張を行っています。


末尾が 1 のものは、基本的にインデックスレジスタ相対アドレッシングです。

ado だけは、違う命令となっています。これは、XR を使用する命令での相対アドレッシングに意味がないためです。


Add Class 命令

01000addADDAC に指定メモリの内容を加算
01001adxADd indeXedAC に相対指定メモリの内容を加算
01010ldxLoaD indeXXR に指定メモリの内容を読み込み
01011auxAugment indeXXR に指定メモリのアドレスを加算
01100llrLoad LRLR に指定メモリの内容を読み込み
01101llxLoad Lr indeXLR に相対指定メモリの内容を読み込み
01110ldaLoaD AcAC に指定メモリの内容を読み込み
01111laxLoad Ac indeXedACに相対指定メモリの内容を読み込み

add と llr 命令のビットが、拡張前と変わっていないことにご注意ください。


末尾ビットに関しては、XR 関連の命令は違う、というのは sto と同じです。

しかし、先頭 2bit が命令グループ、続く 2bit がレジスタ選択…という規則性が sto 命令の系列とそろえてあります。

なかなか美しい命令配置だと思います。


中央 2bit が 11 のものは、AC への直接ロード。

普通のコンピューターにはあって当たり前の命令ですが、TX-0 には今までありませんでした。

やはり、あった方が便利だと判断されたのでしょうね。


Transfer Class 命令

10000trnTRansfer NegativeAC が負のとき、指定アドレスに条件分岐
10001tzeTransfer ZeroAC が0のとき、指定アドレスに条件分岐
10010tsxTransfer Set indeXPC を XR に保存し、指定アドレスに無条件分岐
10011tixTransfer IndeXXR が 0 でないとき XR を1減らし、指定アドレスに分岐
10100traTransfer指定アドレスに無条件分岐。
10101trxTransfer indeXed相対指定アドレスに無条件分岐
10110tlvTransfer external Level外部入力の電圧が 0 なら分岐

さすがに、条件分岐のビット配置は sto add などと規則性が違います。

しかし、やはり互換性を保ったまま命令拡張されています。


分岐時に XR に「分岐元」アドレスを残すこともできるようになりました。

これで、分岐先で XR を使って、sxa を使ってアドレス部分の「自己書き換え」を行えば、サブルーチンからの復帰が可能になります。


tix は、XR をカウンタ変数にしたループ命令です。「ループ命令」は分岐と比べるとループに特化した「高級命令」であるため、この時代に作られていたことに驚きます。

なお、書き切れなかったので上の命令の説明には入っていませんが、XR が負の場合、符号はそのままに絶対値を減算します。…つまり、加算になります。


次ページ: Operate Class 命令


前ページ 1 2 3 次ページ

(ページ作成 2013-06-27)

前記事:初期TX-0命令     戻る     次記事:NOP 命令の誕生
トップページへ

-- share --

1000

-- follow --




- Reverse Link -