IBM - SSEC
目次
周辺装置
SSEC には、非常に多くの周辺装置が接続されていました。
しかし、当時の周辺装置は非常に遅いものです。
IBM 603 の内部は真空管なので高速ですが、SSEC の記憶装置はリレーでした。真空管と比べると10倍以上遅いです。
さらに、紙テープ、パンチカード、タイプライタ…遅いものばかり。
マーク1では、計算装置が歯車で、紙テープやパンチカードからデータを読み込めました。
しかし、実はこれすらも「速度の違い」が問題となり、データを直接扱えません。
マーク1ではこのため、命令の組み合わせに制限があり、周辺機器から直接乗除算器にデータを送ったりはできませんでした。
SSEC は、この点が改良されています。
IBM 603 にデータを入出力する「バス」には、一度データを蓄えるための、真空管による記憶装置が付けられていたのです。
データは必ず真空管に蓄えられ、IBM 603 は高速な真空管しか相手にしない。これで、速度の違い問題は解決です。
この真空管記憶装置は、一時記憶としても使えました。
演算中の一時的な数値などは、わざわざ遅いリレー記憶に置く必要はないのです。
さて、これで速度の問題は解消されるため、SSEC には非常に多くの「周辺装置」がつなげられていました。
すべての装置は「10進数で20桁」に揃えられています。
既に書いている「リレー記憶」が150本。
固定値の指示用の、「プラグ記憶」。
配線を差し替えて、固定値を表現できます。10本あります。
マーク1にも存在した「ダイヤル」もあります。ただし、こちらは20桁分を2つだけ。
紙テープ装置は、なんと30台も。10台がセットになっていて、そのセットごとに「テープパンチャ(穿孔機)」もあります(計3台)。
COPMUTER HISTORY MUSEUMのアーカイブから引用。
右側に縦にセットされているのが紙テープ。ループにしたものを、10本セットできる。
左側の開いた扉の中に見えるのが、テープパンチャ。上にロール紙が用意されている。
IBM ですから、パンチカードもあります。カードリーダーは2台、パンチャは4台。
出力用にプリンタが2台。
そして、特徴的なのが「表引き装置」。
マーク1の、対数、累乗、三角関数の装置を、もっと汎用的にしたものです。
紙テープに「表」をパンチしておき、表引きして結果を返せます。
全部で 100,000 桁のデータを記録し、平均1秒で検索を完了した、と資料にあります。
先ほどの紙テープ装置と読み取り部は同じだが、36台が並んでいる。
ここに、三角関数などの「表」を入れて置き、検索して答えを出す。
とにかく、どんな計算にでも対応してみせる。
そのために、考えうる限りの装置を全部取り付けた感じです。
マーク1には、いくつか特殊な記憶装置がありました。
倍精度演算とか、符号によって条件停止、などが実現できる特殊なものです。
SSEC では、そのような特殊な記憶装置は用意されていません。
しかし、プラグボードで少し配線を変えるだけで、すぐにそのような「特殊な記憶装置」に出来るように設計されていました。
マーク1を超えて、IBM の威信を示す必要がありました。
ENIAC の技術担当だったエッカートは、SSEC を「向こうにあるなんだか大きな怪物。とても正しく動くとは思えない」と言っています。
とにかく、つぎはぎだらけの巨大マシンでした。
プログラム
さて、これでやっと、SSEC の名前の由来である「手順選択」の説明ができます。
プログラムの命令20桁のうち、最後の2桁は「次に命令を読み込む装置の番号」でした。
先に書いたように、紙テープの読み取り装置は30台もあります。
セットする紙テープは、必ず「先頭と末尾を糊付けし、ループさせる」ようになっていました。
マーク1では、紙テープが許す限り、いくらでも長いプログラムが作れます。
しかし、SSEC ではこの「ループ」のサイズがある程度決められていたため、1本のプログラムのサイズにも制限があります。
その制限の回避のために、30台もの読み取り装置が用意されているのです。
サブルーチン
ループしたプログラムテープは、1つの「サブルーチン」を意味します。
現代的には、サブルーチンを呼び出す際は、現在実行している命令の位置をスタックに記憶します。
しかし、SSEC では物理的に「紙テープの読み取り位置」が決まるため、記憶の必要はありません。
メインプログラムからサブルーチンが呼び出され、実行されます。
サブルーチンの最後では、「メインプログラムのテープ装置に戻る」ように指示されます。
これで、問題なく先ほどの続きからメインプログラムが実行されます。
もう一度同じサブルーチンを呼び出した場合、テープはループしているため、またサブルーチンの最初から実行が行われます。
ちゃんと、繰り返し呼び出し可能なサブルーチンとして機能しているのです。
条件停止
さて、サブルーチンの最後に「元のテープ装置に戻る」指示が無かったらどうなるでしょう?
紙テープは物理的に先頭に戻り、プログラムは永久ループに入ります。
これで、一応繰り返し処理も作れることにはなりますが…どこかで繰り返しから抜けないと、正常な処理とは言えませんね。
SSEC には、「条件停止命令」がありました。
2つの値を比較し、大きい場合、または小さい場合に、処理を停止します。
ループの終わりにこの命令を入れて置き、ループが終了するときには「停止」してしまう、というのがループを抜け出す、もっとも簡単な方法です。
プログラマは、実行中はマシンの傍で待機していて、停止したら「命令読み取り装置をメインルーチンに手動で変更」したのちに、実行を再開する必要がありました。
SSEC の初期プログラマの一人であった、ジョン・バッカスは、「SSEC は3分に一度止まった」と証言しています。
この言葉は、SSEC が不安定なマシンだったという意味ではなく、条件停止が多用されたという意味でしょう。