SSEC のプログラム方法
SSECはプログラム可能だった、と聞けば、やはり気になるのはプログラム方法について。
いわゆるコンピューターではない機械をプログラムするとは、いったいどういう感じなのか。
もちろん、現代でいえば機械語レベルでプログラムを組みます。
ハードウェアの知識は必須なのですが、このハードウェアが現代と全然違います。
目次
IBM - SSEC(別記事)
高速化のために(別記事)
SSECの周辺装置(別記事)
再訂正・NOP命令の誕生(別記事)
全体構造
既に書いた話の繰り返しになりますが、確認の意味も含めて全体構成をざっと書いていきます。
まず、全体構造図をご覧ください。(クリックで拡大します)
中央上にある、A B と書いてある部分は「命令記憶装置」です。詳細後述。
その左側に ES1~ES8 が並んでいるのが、Electoronic Storage。「レジスタ」と呼ぶことにします。
命令記憶装置とレジスタの間の下に縦に書かれているのが、演算回路。IBM 603 相当の部分です。
演算回路は、基本的にレジスタとデータをやり取りします。
レジスタの左側に Pilot Units とあるのは、全体制御部分。主にバスを制御します。
SSEC では、レジスタの準備が整ったことが「次の動作」を起こすタイミングです。いわゆるクロック信号は存在しない、非同期式です。
Pilot Unit は、各所からの信号を受けてレジスタの準備が整ったことを確認し、各所に信号を伝えます。
Pilot Unit の下に縦に並ぶのは、シーケンス制御回路。命令を解釈し、Pilot Unit や演算回路に指示を出します。
下に横方向に書かれたブロックも、その一部です。
再び中央に戻り…中央から右側は、基本的に「周辺機器」。
In/Out 8本づつのバスが並び、各種機器とレジスタ、命令保持回路を繋ぎます。
(In/Out は、演算回路から見た方向ではなく、周辺機器から見た方向を意味します。演算装置から見ると、読出しは Out 、書き込みは In のバスを通ります)
右端上から順に、リレー記憶 150本、プリンタ2台、表引き装置36台(6セット)、プラグ記憶10台、紙テープ装置3バンク(30台)、紙テープ穿孔機3台。そして、中央下に制御卓と、「ダイヤル記憶」が記されています。
改めて説明しましょう。
SSEC の周辺機器は、BCD で10進数20桁を扱います。リレーや紙テープで構成され、遅いです。
一方、演算回路は真空管で構成され、高速です。速度が違いすぎて、そのままでは接続できません。
そこで、真空管で作られたレジスタが間に入り、仲介します。
この際、16本もあるバスを利用して、レジスタ・周辺機器間のアクセスは並行して行われます。
これにより、少しでも演算回路の高速性を活かせるようにしています。
レジスタは、「内部と外部を繋ぐ」のが第一の目的であることを忘れないでください。
現代のレジスタのように、自由にデータ置場として使うことはできません。
ただし、制限を守ったうえでなら、外部アクセスのためのデータの一時保持としてではなく、「高速にアクセスできるデータ置場として」使えます。
外部装置に同時アクセスできるように、バスが8本ありました。
1本のバス「セット」は、20桁の数値を扱うため、80本の電線で構成されます。
これが16本ですから、電線は1280本。
これはデータバスに相当するもので、これとは別にアドレスに相当する「機器選択」のための信号線がありました。
SSEC は IBM のショールームの壁面を使って設置されましたが、SSEC の部屋は数段の階段を上って入るようになっています。
実は、床下に配線を隠すためでした。
COMPUTER HISTORY MUSEUM より引用。
初回に紹介したもの(コロンビア大学より引用)と同じだけど、こちらの画像は手前の段差まで描かれている。
床はパネルごとに簡単に持ち上げられるようになっており、必要に応じて配線にアクセスできます。
現代でも使われる、いわゆる「OAフロア」の初期の例です。
SSEC の内の各所には、プラグボードが設置されていました。
たとえば、これで「装置」内の接続を変更できました。
たとえば、リレー記憶の一部をプラグ記憶に変更し、符号のみ書き換え可能にする、という例が特許書面に出てきます。
装置番号は3桁ですが、命令を読み込む装置は2桁で設定します(詳細後述)。
この対応付けもプラグボードで行われました。
右上に 00~99 の「命令格納装置」プラグがあり、その下にテープ装置、左側にリレー記憶が並んでいる。
プラグで接続することで、命令装置番号 01 / 02 をテープ装置 1 / 10 に、命令装置番号 52 / 53 をリレー記憶 152 / 153 に割り振っている。
SSEC は、基本的に紙テープで命令を与えるが、リレー記憶から命令を読むこともできた。
「プラグ記憶」装置は、プラグそのもので「固定数値」を表現しました。現代の ROM に相当します。
プリンタや表引き装置の設定もプラグで変更しました。
もう、いたるところプラグだらけ。
そして、実はこの「プラグの差し替え」もプログラムの一部なのです。
SSEC は紙テープでプログラムを与えられましたが、そのプログラムは前提として「適切な配線」を必要としていました。
ENIAC の「プラグのみでプログラム」に比べればはるかに扱いやすく、柔軟になっているのですが、「プログラム内蔵型」には程遠い状態でした。
データ表現
プログラム方法の前に、データの表現方法を書いておきましょう。
これは、プログラムをするうえで非常に重要な概念です。
以前の記事で「データは5桁」と書きましたが、この中は3つのフィールドに分かれています。
SSEC で使われたフィールドの呼び名で、由来は説明されていません。
恐らくは、recive (信号を受け取る機器)、bus、sign/shift のようです。
周辺機器番号(r)
データは、すべてどこかの「周辺機器」に入っています。
周辺機器には番号が与えられています。これは、いまでいえばメモリのアドレスのようなものです。
周辺機器番号は3桁でした。
たとえば、010~159 はリレー記憶装置(150本)を意味しています。
でも、このアドレスだけではデータは表現できません。