WWIの命令と画面
目次
Flip-Flop reset 命令
フリップフロップレジスタをリセットします。
…と、突然書いても意味が分からないでしょう。WWI のメモリはコアメモリで準備されましたが、ほんの一部のアドレスには、真空管で作ったフリップフロップ回路が接続されていました。
真空管フリップフロップは、コアメモリよりも高速に動作します。…が、そんなことは回路の目的ではなく、真空管だと電球のように電気が通っているのが「見える」ため、数値を目で見ることができるのです。
このため、この真空管メモリはテスト用に使われていたようです。この部分を「フリップフロップレジスタ」と呼んでいました。
どうも、そのフリップフロップレジスタをリセットする回路があったようで、どのフリップフロップレジスタをセットするかも(おそらくスイッチなどで)選べたようです。
そして、リセット命令一発で、すべてのフリップフロップレジスタをリセットできます。
…どうも、よくわかりません。メモリの一部なのだから、単純に 0 を書き込むのではダメなのでしょうか?
この命令は、その後どうなったのか扱いがわかりません。1952年初頭の命令セットには載っているのですが、その後(1954年ごろと思われる)に作られた命令一覧表には載っていません。
前の節で書いた通り、周辺機器にはインジケーターランプも接続されていました。ここにデータを送り込むことでデータが目視できるようになりました。こうなると、同じ目的で用意されていたフリップフロップレジスタは不要になっただろう、と容易に想像がつきます。
ただ、この命令の命令番号である「1」が別の命令で使われた形跡はありません。なので、単に無意味になったので使われなくなっただけで、命令そのものは残っていた可能性もあります。
(詳細不明ですが、ここでは、廃止されたものとして扱います。)
rs | 00001 | ReSet | Flip-Flopリセット |
---|
チェック命令
WWI には、各種チェック機構が備わっています。
当時としては電子デバイスの信頼性が低く、故障などに備え自己チェック機能を備えさせたものです。
たとえば、16bit のメインバスでデータを移動させるとき、目的とするメモリやアキュムレータと一緒に、「チェックレジスタ」にデータが送られます。そして、書き込んだはずのメモリなどとチェックレジスタの内容が後で調べられ、違っていたら「アラーム」を鳴らして人に注意を促し、停止します。
この仕組みは、チェック以外にも使われます。現代でいうところの「例外」ですが、ゼロで除算したり、磁気ドラムから読み込んだ値のパリティチェックに失敗したり、周辺機器の応答が得られずタイムアウトしたり、いろいろな理由でアラームを鳴らして停止します。
そして、プログラム中でも、積極的に「値のチェック」を行う方法が準備されました。メモリ内容とアキュムレータの内容を比較し、違っていたらアラームを鳴らして停止します。
ck | 01011 | ChecK register | メモリチェック |
---|
ビット演算命令
1952年末時点での命令一覧には載っておらず、その後作られたと思われる命令が2つあります。
この2つの命令は、製作時期不明の簡単な命令一覧表に記載がありました。簡単な表なので詳細な動作は不明なのですが、おそらく、ビット演算命令と思われます。
Sum Digit は、現代的な用語でいえばビットごとの「論理和」、Multiply Digit は「論理積」です。
sd | 00110 | Sum Digit | 論理和 |
---|---|---|---|
md | 11111 | Multiply Digit | 論理積 |
謎の命令
ほぼすべての命令を解説し終わりましたが、一つだけ、謎の命令が残っています。
1952年初頭の書類には、この命令はありません。1952年8月の書類には使用しているのが確認されます。しかし、1952年末の書類では「廃止された」と書かれているのです。
わざわざ命令を追加しておきながら、1年もたたないうちに廃止されたこの命令は、いったい何なのでしょう?
使用例が少なすぎて、この命令がどのような動作をしたか類推できません。ただ、乱暴な推定をすると…おそらく「何もしない命令」だったのではないかと思われます。
現代的な NOP 命令、というのとも違います。NOP は何もしないことを「保証」する命令なのですが、ri 命令の使用例を見ると、プログラムの流れの「届かない」データ中にしか置かれていないのです。もし実行されたら何が起こるかわかりません。
まぁ、それは怖すぎるので「何もしない」回路がつけられていたのではないかと推定しているのですが。
なぜそんな命令が作られたか、という話は長くなりそうなので、さらに別ページに書きます。
ri | 00000 | R? I? | 動作不明 |
---|