WWIの命令と画面
目次
完成後の追加命令群
ここまでにも、完成後の追加命令は書いてきました。ただし、それは算術命令などの「命令群」に対して追加された場合。
計画時には純粋に「数学的、工学的に」設計されたのでしょうが、実際に動き始めると実務上の問題も考えなくてはなりません。ここ以降に登場するのは、そうした「ごちゃごちゃとした」命令たちです。
周辺機器制御命令
WWI には、さまざまな機器が接続されました。
当初はそれほど機器の数が多くなかったため、それぞれの機器への入出力のための、専用命令が準備されたようです。
周辺機器は、英語で Equipment 。e はよく使われる文字なので、q がニーモニックの先頭に使われています。
周辺機器、というとプリンタやディスクが思い浮かべられますが、演算を便利にする追加回路なども、こうした命令で制御されたようです。
しかし、接続機器が増えるにつれ、各機器ごとに専用命令を割り振る、という方法は破綻しました。統一的な I/O 命令が作られ、周辺機器への接続は I/Oポートを介して行うことになります。
その際、追加演算回路など一部の命令は、別のニーモニックが割り振られ「正式な命令」に昇格しています。
実は、この命令群のほとんどの命令が、使い方がわかりません。
1952年初頭のサブルーチンプログラム集には、qp と qr しか出てきません。qp は頻繁に使われるので使い方が想像できるのですが、qr は1度しか出てこないため詳細不明です。
それ以外の命令については、1952年末の書類で、「廃止命令一覧」に載っているだけです。
使い方のわかっている qp 命令について、少し解説しておきます。
これは printer (flexowriter というテレタイプ)で印字する命令です。ただし、使い方が非常にややこしいです。
- プリンタに対するパラメータは2つ。プリンタの状態(おそらく、シフトや印字色)の指定と、文字コードの指定です。同じ文字コードでも、プリンタ状態で印字される文字は異なります。(大文字と小文字の切り替えなど)
- qp 命令は、シフト命令と同じく、アドレスを受け取りません。変わりに、アドレス部分の数値でプリンタ状態を指定します。
おそらくビットによる指定で、128 のビットを立てるのは必須のようです。 - アキュムレータで文字コードを指定します。下位 6bit が文字コードとして使用されます。
- 印字後、アキュムレータを 6bit 右シフトすることができます。これにより、qp 命令を連続させることで、2文字を連続して印字できます。
この指定はアドレス部分の上位ビットで行うようですが詳細は不明です。ニーモニック上は qp 128 sl のように、最後に sl を付けます。
(右シフトなのになぜ sl なのか、パラメータの由来は不明) - 文字コードとキャラクタの対応は不明です。0 から 9 が 45 36 39 3 21 33 43 15 13 49 になっているのは確認できています。qp 命令廃止後の文字コード表は発見できたのですが、この表とも違うようです。
(flexowriter はメーカーからたくさんの機種が発売されており、文字コードは機種ごとに違いました。また、類似のプリンタは他社からも発売されていましたが、やはり文字コードが違いました。まだ ASCII コード制定前の話です)
qp | 11111 | eQuipment Print | flexowriter で印字 |
---|---|---|---|
qr | 11110 | eQuipment Read | flexowriter から読み込み |
qe | 01101 | eQuipment Exchange | のちに ex 命令に変更 |
qd | 00000 | eQuipment Difference | のちに dm 命令に変更 |
ql | 000100 | eQuipment Left | のちに clc 命令に変更 |
ql* | 000101 | eQuipment Left | のちに clh 命令に変更 |
qd | 00111 | eQuipment D? | 詳細不明。Drum? |
qf | 10111 | eQuipment F? | 詳細不明。 |
qh | 00110 | eQuipment H? | 詳細不明。 |
qs | 01100 | eQuipment S? | 詳細不明。Scope? |
I/O 命令
1952年の6月の文書で、「9月には周辺機器の制御命令を変更するよ」という通知が出ています。
この際に作られたのが、以下に挙げる5命令です。
ただし、この文章では si rd rc の3命令が9月、bi bo の2命令は「後で」実装すると書かれているのみです。bi bo の実装時期は、1952年末の文書によれば「1953年1月」でした。
おそらくは、前節に挙げた「q?」命令は、制御命令変更時にすべて廃止になったはずです。
基本操作は、機器の選択(si)命令(つまり、I/Oポート指定)と、読み(rd)書き(rc)命令です。
機器の選択は番号で行い、一般に8進数3桁で決められていました。1桁目が機器の種類、2桁目が同じ機器が複数ある場合の番号、3桁目が機能選択、というのが一般ルールになっていますが、機器によって細かな違いは生じます。
たとえば、磁気テープドライブは「種類1」です。4台ありましたが、この「番号3」に、2番目の命令である「正方向にテープを送って読み込み」を指示するときは、8進数で 132 と書くことになります。
機器とモードを選択後は、読み書き命令でアクセスを行います。読み書き命令ではアドレスは無視され、アキュムレータの内容を書いたり、アキュムレータに読み込んだりします。
必要性があり、後で機能が変更されたようだ。I/O 関連なので、メモリ内容のデータは「無視」するデバイスも当然あり、互換性は確保される。
後に追加された bi bo 命令は、ブロック単位での読み書きです。この命令では、指定されたアドレスから連続したメモリで、アキュムレータで指定された数のデータを読み書きします。
演算ユニットの外部に、直接メモリを扱うユニット(いわゆる DMA 転送器)を置き、そのユニットを起動させる命令だったのかもしれない。そして、DMA 転送中は演算ユニットが停止する、と考えると、メモリ・マトリックス・ユニットによって動作している WWI の動作ともつじつまが合うし、命令の説明文が納得できる。
接続されていた機器は、時期によっても違いますし、同じ機器でも改良され、全然違うアクセス方法になっている場合もあります。
しかし、次のような機器が接続されていたようです。
- CRT(オシロスコープ)
- 磁気ドラム装置
- 磁気テープ装置
- プリンタ(電動タイプライタ)
- 紙テープ読み取り機
- 紙テープ穿孔機
- タイミングレジスタ(1/60 ごとにインクリメントする 21bit レジスタ)
- インジケーター(並べられた豆電球)
- カメラ(CRT撮影用)
- ライトガン(ライトペン)
オシロスコープについては、興味深いので後述します。
si | 00000 | Select In-out unit | 周辺機器選択 |
---|---|---|---|
rd | 00011 | ReaD | 1word 読み出し |
rc | 00101 | ReCord | 1word 書き込み |
bi | 00010 | Block In | ブロック読み込み |
bo | 00100 | Block Out | ブロック書き込み |