IBM 1401
歴史
[編集]アーキテクチャ
[編集]Opcode with [A-or-I-or-unit-address [B-address]] [modifier] word mark命令コード (Opcode) は1文字である。メモリアドレス︵"I" は分岐先アドレス、"A" と "B" はデータのアドレス︶と装置アドレスは3文字で表される。命令コードの修飾子 (modifier) は1文字である。以上から命令の長さは、1文字、2文字、4文字、5文字、7文字、8文字がある。多くの命令は後続文字︵通常、次の命令の命令コード︶にワードマークを必要とする。 命令一覧は、文字コードと命令コードの節を参照。 命令で使用するメモリアドレスは3文字だが、これは5文字で表されるメモリアドレスを符号化したものである。5文字アドレスの下3桁 000 から 999 までは3文字の数字ビット列を使って指定する。最上位の桁を表す文字のゾーンビットがその3桁への加算値を表しており、A なら 1000、B なら 2000、B,A なら 3000 を加算するので、0から3,999番地までを表現できる。さらに最下位の桁を表す文字のゾーンビットで、A なら 4000、B なら 8000、B,A なら 12000 を加算するので、最大16,000文字までのメモリ位置を指定できる。例えば3文字アドレス "I99" は 3000 + 999 であり、3,999番地を指している。 アドレスの真ん中の文字のゾーンビットはオプション機能のインデックスレジスタを指定するのに使用される。 A-address と B-address が指しているオペランドは、1文字、可変長フィールド、可変長レコードの場合がある。可変長フィールドを指す場合はアドレスの大きい端︵数値の場合は最下位の桁︶を指し、終端は最後の文字︵最上位の桁︶にワードマークをセットすることで示す。可変長フィールドの長さには制限がなく、メモリの許す限り長いフィールドを使用可能である。可変長フィールドを扱える命令としては、四則演算︵Add、Subtract、Multiply、Divide︶と比較命令 (Compare) と文字列転送︵変換︶命令︵Move Characters to A or B Word Mark、Move Characters and Edit︶がある。1つ以上の可変長フィールドで可変長レコードを構成できる。可変長レコードを指す場合はアドレスの大きい端を指し、フィールドはワードマーク付きの Group Mark 文字で区切り、レコード終端︵アドレスの一番小さい位置︶に Record Mark 文字を置く。Move Characters to Record or Group Mark という命令でレコードをまとめたブロックを作ることができる。 アドレスレジスタには命令実行でアクセスしたオペランドのアドレスが残るので、連続するオペランドを使って処理をする場合、アドレスを省略して連鎖させることができる。例えば、連続するデータフィールド群の加算を行うコードが "A 700,850", "A 695,845", "A 690,840" だったとする。これを連鎖させて "A 700,850", "A", "A" のようにアドレス指定を省略することができる[8]。
ブートとサンプルプログラム
[編集]IBM 1402 (パンチカード読み取り/パンチ装置)のLOADボタンが押下されると、カードがバッファ(メモリ上の 001-080 番地)に読み込まれる。このとき001番地の文字にワードマックがセットされ(カードの最初の命令を有効にする)、002-080番地のワードマークはクリアされる。先頭の命令は常に2オペランド(7文字)の Set Word Mark 命令であり、これは後続の命令コードにワードマークがなくとも実行可能で、後続の2命令にワードマークをセットできる。このようにしてカードデッキ内の命令列の実行が継続され、プログラムをメモリにロードし、ワードマークをセットし、最後にプログラムの開始アドレスに分岐する。
パンチカード1枚に収まる実用的なプログラムもある。よく使われたのは後続のカードデッキの内容をそのままプリンターに出力するプログラムや後続のカードデッキをそのままカードパンチで複写するプログラムなどである。Tom Van Vleck のウェブサイト[9]には、"HELLO WORLD" とプリンターに出力するパンチカード1枚に収まるプログラムが紹介されている。
- ,008015,022029,036043,050054,055062,063065,069080/333/M0792502F1.065HELLO WORLD
上述のようにLOADボタンを押下すると001番地(先頭の ",")から実行を開始する。"," は命令コードとしては Set Word Mark 命令である。それが7命令続いており、読み込んだ全命令にワードマークを設定する。"/" は Clear Storage 命令で、オペランド333で指定されたプリンター出力エリアの 333-300 の範囲をクリアし、次の "/" で連鎖アドレスを使って 299-200 の範囲をクリアする。次の命令コード "M" は Move Charactors to Word Mark 命令であり、079番地から250番地へワードマークまで文字列転送を行うが、これが "HELLO WORLD" をプリンター出力エリアにコピーすることになる。次の "2" が Write line 命令で印字を行い、次の "F" が Control Carriage 命令(修飾子が 1)でプリンターにページ送りをさせ、次の "." が Halt 命令となっていて停止する。065はHalt命令の番地であり、STARTボタンを押下しても停止したままとするようになっている。
ハードウェアの実装
[編集]ソフトウェア
[編集]IBM 1401 から生まれた芸術
[編集]2006年10月、アイスランド出身の前衛音楽家ヨハン・ヨハンソンが4ADから IBM 1401, A User's Manual というアルバムをリリースしている[14]。アイスランド初のコンピュータの保守技術者だった彼の父と、その友人でアイスランド初のプログラマとなった Elias Davidsson が1964年に作った曲をベースとしている。ヨハン・ヨハンソンは電子音や父が保管していた IBM 1401 が歌った歌を録音したオープンリールの録音テープなども加え、それをオーケストラ向けに書き直して長くした[15]。
1401 の文化
[編集]文字コードと命令コード
[編集]以下の表はキャラクターを辞書的順序で示したものである。
- 注: ワードマークがセットされている場合、C ビットが示されているのとは反対の値になる。その場合、C ビットはマシンが自動的に設定/チェックするので、通常はプログラマが気にする必要はない。補助制御パネルから入力する際には操作者が C ビットを気にする必要がある。プログラマはデバッグの際に素早くパッチを当てるのに補助制御パネルを使うことがあった。
BCD文字 | Print-A | Print-H | カード | BCD | 操作 | 定義その他 |
---|---|---|---|---|---|---|
空白 | C | |||||
. | . | . | 12-3-8 | BA8 21 | Halt | |
¤ | ¤ | ) | 12-4-8 | CBA84 | Clear Word Mark | Lozenge |
[ | 12-5-8 | BA84 1 | ||||
< | 12-6-8 | BA842 | Less Than | |||
12-7-8 | CBA8421 | Group Mark | ||||
& | & | + | 12 | CBA | ||
$ | $ | $ | 11-3-8 | CB 8 21 | ||
* | * | * | 11-4-8 | B 84 | ||
] | 11-5-8 | CB 84 1 | ||||
; | 11-6-8 | CB 842 | ||||
Δ | 11-7-8 | B 8421 | Delta (モード変更) | |||
- | - | - | 11 | B | ||
/ | / | / | 0-1 | C A 1 | Clear Storage | |
, | , | , | 0-3-8 | C A8 21 | Set Word Mark | |
% | % | ( | 0-4-8 | A84 | Divide | オプション機能 |
ˠ | 0-5-8 | C A84 1 | Word Separator | |||
\ | 0-6-8 | C A842 | Left Oblique | |||
⧻ | 0-7-8 | A8421 | Tape Segment Mark | |||
ƀ | ‡ | ‡ | N/A 0 |
A | カードからは読めない。 ゼロとしてパンチ。 テープでは Blank with "even-parity" | |
# | # | = | 3-8 | 8 21 | Modify Address | オプション (4000文字分以上のメモリを要する) |
@ | @ | ' | 4-8 | C 84 | Multiply | オプション機能 |
: | 5-8 | 84 1 | ||||
> | 6-8 | 842 | Greater Than | |||
√ˉ | 7-8 | C 8421 | Tape Mark | |||
? | & | & | 12-0 | CBA8 2 | Zero and Add | Plus Zero |
A | A | A | 12-1 | BA 1 | Add | |
B | B | B | 12-2 | BA 2 | Branch | |
C | C | C | 12-3 | CBA 21 | Compare | |
D | D | D | 12-4 | BA 4 | Move Numerical | (ビット) |
E | E | E | 12-5 | CBA 4 1 | Move Characters and Edit | |
F | F | F | 12-6 | CBA 42 | Control Carriage | (プリンタ) |
G | G | G | 12-7 | BA 421 | ||
H | H | H | 12-8 | BA8 | Store B-Address Register | オプション機能 |
I | I | I | 12-9 | CBA8 1 | ||
! | - | - | 11-0 | B 8 2 | Zero and Subtract | Minus Zero |
J | J | J | 11-1 | CB 1 | ||
K | K | K | 11-2 | CB 2 | Select Stacker | (カード) |
L | L | L | 11-3 | B 21 | Load Characters to Word Mark | |
M | M | M | 11-4 | CB 4 | Move Characters to Word Mark | |
N | N | N | 11-5 | B 4 1 | No Operation | |
O | O | O | 11-6 | B 42 | ||
P | P | P | 11-7 | CB 421 | Move Characters to Record or Group Mark |
オプション機能 |
Q | Q | Q | 11-8 | CB 8 | Store A-Address Register | オプション機能 |
R | R | R | 11-9 | B 8 1 | ||
‡ | ‡ | ‡ | 0-2-8 | A8 2 | Record Mark | |
S | S | S | 0-2 | C A 2 | Subtract | |
T | T | T | 0-3 | A 21 | ||
U | U | U | 0-4 | C A 4 | Control Unit | (テープ) |
V | V | V | 0-5 | A 4 1 | Branch if Word Mark and/or Zone |
|
W | W | W | 0-6 | A 42 | Branch if Bit Equal | オプション機能 |
X | X | X | 0-7 | C A 421 | Move and Insert Zeros | オプション機能 |
Y | Y | Y | 0-8 | C A8 | Move Zone | (ビット) |
Z | Z | Z | 0-9 | A8 1 | Move Characters and Suppress Zeros |
|
0 | 0 | 0 | 0 | C 8 2 | ||
1 | 1 | 1 | 1 | 1 | Read a Card | |
2 | 2 | 2 | 2 | 2 | Write a Line | |
3 | 3 | 3 | 3 | C 21 | Write and Read | |
4 | 4 | 4 | 4 | 4 | Punch a Card | |
5 | 5 | 5 | 5 | C 4 1 | Read and Punch | |
6 | 6 | 6 | 6 | C 42 | Write and Punch | |
7 | 7 | 7 | 7 | 421 | Write, Read, and Punch | |
8 | 8 | 8 | 8 | 8 | Start Read Feed | オプション機能 |
9 | 9 | 9 | 9 | C 8 1 | Start Punch Feed | オプション機能 |
注釈
[編集]- ^ 本項目では K を1000の意味で用いており、1024ではない。
出典
[編集]参考文献
[編集]- Bashe, Charles J.; Johnson, Lyle R; Palmer, John H.; Pugh, Emerson W. (1986). IBM's Early Computers. MIT. pp. 717. ISBN 0-262-02225-7 Chapter 12 Broadening the Base pages 465-494, 1401および1403開発の歴史
- IBM (April 1966) (PDF). IBM 1401 System Summary. A24-1401-1 機能概要、コンポーネント概要、コンフィギュレーションなどの説明
- IBM (April 1962) (PDF). IBM 1401 Data Processing System: Reference Manual. A24-1403-5
関連項目
[編集]外部リンク
[編集]- IBM 1401 documents on bitsavers.org
- A Century of Smart: The IBM 1401 (1959). IBM Social Media. 16 November 2009. 2009年11月17日閲覧。 2009年ニューヨーク州エンディコットで行われた1401開発者の同窓会で撮影されたビデオを編集したもの。当時の販促映画からの映像もある。
- IBM 1401 videos and sounds
- 1401s I have Known, Tom Van Vleck
- Haines, L. H. (1965). “Serial compilation and the 1401 FORTRAN compiler”. IBM Systems Journal 4 (1): 73-80. doi:10.1147/sj.41.0073 .. This article was reprinted, edited, in both editions of
- Lee, John A. N. (1967(1st), 1974(2nd)). Anatomy of a Compiler. Van Nostrand Reinhold の再編集版