TX-0の命令(オリジナル)
TX-0 は、たった4つしか命令を持たないにもかかわらず、ちゃんとコンピューターとして動作する(チューリング完全)という、非常に興味深い特徴を持っています。
当記事では、どのようなしくみでこの離れ業が行われていたのか、詳細を解説したいと思います。
しかしながら、TX-0 は「実験的プロトタイプ」であったがゆえに、何度も改造され、命令も変更されています。
今回取り上げるのは、1958年時点のもの。作成元である MIT リンカーン研究所で不用品となり、同じ MIT の電子工学研究所(RLE)に無期限に貸し出された頃のものです。
目次
ハードウェア構造
最初に、当時のデータの扱いの「常識」を書いておきます。
当時、2進数を3桁まとめて、「8進数」として示すことが普通でした。
今のように、4bit で 16進数ではありません。
周辺機器も、8進数2桁の 6bit を単位として扱うことが普通で、これが「バイト」と呼ばれました。
現代では 8bit が 1byte ですが、当時は 6bit が 1byte です。
以下、このことを時々思い出しながら読むと、ハードウェアの構造を知るうえで助けになります。
しかし、16進数2ケタで 1byte (8bit) というのと、8進数2ケタで 1byte (6bit) というのと、2ケタで 1byte を表現しようとするところは変わっていない。
大切なのは16進か8進かではなく、ハードウェアに合わせた「読みやすい表記」をすることだ。
TX-0 の系譜を受け継ぐ PDP-7 で最初の UNIX が作られたことと、今でも UNIX で8進数を使うことが多いことは、決して無関係ではない。
(ファイルパーミッションとか、8進数で表現するでしょ?)
さて、TX-0 のハードウェアを説明しましょう。
全ての命令はハードウェアを対象に動作しますから、これを知らないと話ができません。
メモリ
まずはメモリ。TX-0 はメモリの実験機でした。
TX-0 は、18bit を1ワードとして、65536ワード(64Kワード)のメモリ空間を持っています。
これ、当時のコンピューターとしては驚くほど広大なメモリです。
後述しますが、メモリのうち最初の16ワードは特別な仕組みになっていました。
レジスタ
命令が直接演算対象とするレジスタとして、次のものがあります。
アキュムレータ(AC)
18bit で、基本的には演算は AC を対象として行われます。
メモリバッファレジスタ(MBR)
18bit で、メモリを対象とする演算では、必ずこのレジスタに内容がコピーされてから演算されます。
写真右側中央に、黒い横帯が2本あるが、上が MBR 、下が AC のビットを示すパイロットランプ。
ライブレジスタ(LR)
18bit で、主に opr 命令で使用されます。
Flexowriter のキーボードはここに接続されていて、命令開始時にキーが押されると LR の bit 2,5,8,11,14,17 の 6bit に文字コードがセットされます。また、その際は最上位ビット(0)がセットされます。
(この機能は、スイッチによって使わないようにすることもできます)
なんでデータが入る bit が飛び飛びなの? と思うかもしれませんが、後で詳細を説明します。
さらに、後述の仕組みにより、LR はメモリアドレスにマッピングすることが出来ます。
そのほか
他に、プログラムカウンタ(PC:16bit)、メモリアドレスレジスタ(MAR:16bit)、インストラクションンレジスタ(IR:2bit)がありますが、これらは内部的な動作で使用されるだけで、命令の演算対象にはなりません。
トグルスイッチ
レジスタと同じ扱いのものが2つと、メモリの一部として扱えるものが複数ありました。
トグルスイッチアキュムレータ(TAC)
18bit のトグルスイッチ(ON/OFF で固定されるスイッチ)の集まりです。
アキュムレータと名前がついていますが、入力装置です。
アキュムレータに内容をコピーする仕組みがあるため「アキュムレータ」と名付けられています。
トグルスイッチバッファレジスタ(TBR)
これもTAC と同じく、18bit のトグルスイッチです。
こちらは内容を MBR にコピーする仕組みがあります。
上が TBR で、下が TAC。
トグルスイッチストレージ(TSS)
これは、レジスタではなく、アドレスが割り振られたメモリの一部として用意されています。
16組の 18bit トグルスイッチがあります。
(左側に書かれた数字はは割り振られるメモリアドレスで、8進数で書かれています。0~7、10~17 の16個です。)
なお、ここまでの2枚の写真は、Computer History Museum の公開しているものを「引用」しています。
この16組のトグルスイッチは、メモリ先頭の16ワードと置き換えることが出来ます。
1組のトグルスイッチには、さらに2つのトグルスイッチがついています。
1つは、Core Memory select。これを ON にした場合、そのワードは純粋にコアメモリが使用され、トグルスイッチとは接続されません。
もう一つは、Live Register アドレス。これを ON にした場合、トグルスイッチはやはり無視されますが、そのアドレスはコアメモリではなく、ライブレジスタ(LR)に接続されます。
イメージとしては「LR にアドレスを割り振る」と言う感じです。16ワード全部を LR にすることだってできます。
(もちろん、同じ内容が見られます)