IBM 1620

**IBM 1620**は、IBMが1959年10月21日に発表した低価格「科学技術計算コンピュータ」。約2000台を生産し、1970年11月19日に販売終了となった。派生機種として IBM 1710 および IBM 1720 工業プロセス制御システムがある（工場のリアルタイムプロセス制御用として十分な信頼性を持った初めてのコンピュータ）。

固定ワード長の二進法ではなく、可変ワード長の十進法を採用し、最初に学ぶコンピュータとしては非常に魅力的だった。このためアメリカでは IBM 1620 で初めてコンピュータを体験したという学生が多かった。

磁気コアメモリのサイクルタイムは Model I では20μ秒、Model II では10μ秒である。2006年時点の一般的コンピュータの主記憶に比べると1000倍ほど時間がかかっている。

ユーザーの間では 1620 を冗談めかして *CADET*（**C**an't **A**dd, **D**oesn't **E**ven **T**ry; 足し算すらできないし試しもしない）と呼ぶ。というのも1620は加算回路を持たず、メモリ上の加算テーブルを参照して加算を実現していたからである。

## 1620のアーキテクチャ
可変ワード長の十進(BCD)コンピュータであり、メモリは20,000桁分から60,000桁分まで、20,000桁分ずつ拡張可能である。アドレスは十進5桁で表され、100,000桁分のアドレス指定が可能だが、60,000桁分以上のメモリを搭載したシステムは製造されなかった。

2桁分のメモリに一度にアクセスする（奇数番目と偶数番目の数字のペア、または1文字の英数字として扱われる）。各数字は6ビットで表され、奇数パリティの **C**heck ビット、フラグ **F**lag ビット、BCDビット 4ビットがあり、以下のようなフォーマットで並んでいる:
   C F 8 4 2 1
**F**ビットは以下のように使われる:
* 数値の最下位桁でセットされた場合、負の数値であることを示す符号ビットとなる。（符号付数値表現）
* 数値の最上位桁でセットされ、ワードの開始を示す。（ワードマーク）
* アドレスの最下位桁でセットされた場合、間接アドレス指定であることを示す。（アドレッシングモード）
* アドレスの中間3桁の*F*ビットで7本のインデックスレジスタの指定をする。（1620 II の場合）
BCDビット群は通常の数字を示す以外に3種類の特殊な値がある（これらは計算には使えない）:
   C F 8 4 2 1
       1 0 1 0  -  レコードマーク（レコード右端を示す）
       1 1 0 0  -  数字的空白（Numeric Blank、パンチカードで何もパンチされていない状態に相当）
       1 1 1 1  -  グループマーク（ディスク入出力用のレコード群の右端を示す値）

命令は固定長（12桁）で、2桁の命令コード、5桁の "Pアドレス"（通常は結果格納先を示す）、5桁の "Qアドレス"（通常は演算の引数を示し、即値のこともある）から構成される。分岐命令などでは、Pアドレスしか使わない。

固定小数点数データ「ワード」は、メモリの許す限り2桁から任意の長さまで使用可能である。

浮動小数点数データ「ワード」は、ハードウェアのオプションが必要だが、4桁から102桁まで可能である（仮数部が2から100桁、指数部が2桁）。

このマシンはプログラムが使用可能なレジスタを持たない。全ての命令はメモリからメモリへの操作である。

### アーキテクチャ上の問題点
IBM 1620のアーキテクチャは科学技術分野では非常に人気となったが、情報工学者エドガー・ダイクストラはいくつかの設計上の問題点を EWD37 "A review of the IBM 1620 data processing system" で指摘した。

ダイクストラが指摘したのは、1620 の Branch and Transmit 命令（サブルーチンコール）と Branch Back 命令（サブルーチンからの復帰）による1レベルのサブルーチンコールの問題である。復帰先アドレスをレジスタに保持する方式になっており、しかも先述の通りレジスタにプログラムからアクセスすることができない。したがって、入れ子構造にすることができず、プログラミングは極めて限定されてしまう。第二の問題はレコードマークのあるレコードを紙テープから正しく読み込めない点である。1620は紙テープの終わりを示す END OF LINE(EOL)をレコードマークに置換してメモリ上に格納する。したがって、読み込んだ内容を調べるとき、それが元々レコードマークなのかEOLだったのか区別できない。また、読み込んだデータのサイズもプログラムからは分からないようになっていた。この結果、レコードマークを含んだ内容を紙テープにパンチすることもできない（最初のレコードマークでパンチが止まってしまう）し、紙テープをコピーすることもできない。

1620を設置したところでは、可能な限り紙テープよりもパンチカードを入出力に使用した。1620の後継である IBM 1130 は全く異なる16ビットアーキテクチャとなっている。

## ソフトウェア

IBM は 1620 に以下のようなソフトウェアを供給した:

; 1620 Symbolic Programming System (SPS)
: アセンブラ。
; FORTRAN、FORTRAN II
: FORTRAN II は、40,000桁分以上のメモリを必要とする。これらは使い方が複雑だった。そのため、サードパーティ製のFORTRANがいくつか開発されており、ライス大学のプログラマ Bob Richardson が開発した FLAG (FORTRAN Load-and-Go) などがある。こちらはメモリ上に常駐し、連続してソースコードを受け付けてコンパイルすることができた。
; GOTRAN
: 単純なインタプリタ式のFORTRAN。こちらの使い方はずっと単純である。ただし、FORTRANの完全な実装ではない。
; Monitor I と Monitor II
: ディスクオペレーティングシステム。この上でディスクベースの SPS と FORTRAN II が動作する。また、ディスクユーティリティプログラムも含まれている。どちらのシステムも20,000桁以上のメモリをそれ自体が必要とし、当然ながら1311磁気ディスク装置を必要とする。

IBM 1620 関連のマニュアル類はPDF形式でアーカイブされている。

## ハードウェアの実装
1620 の論理回路の大部分は resistor-transistor logic (RTL) であり、ドリフト型トランジスタ（1957年にハーバート・クレーマーが発明）を高速化のために使用していた（IBMはこれを *SDTRL* と呼んでいた）。

回路は2.5×4.5インチ (38×114mm) の紙エポキシプリント基板に片面実装されている。この基板には16ピンの金メッキエッジ・コネクタがあり、IBMはこれを *SMS*(標準モジュラーシステム)カードと呼んだ。1枚のカード上の回路は74シリーズ標準ロジックIC程度である。

基板はラック上のソケットに挿入される。これをIBMは「ゲート」と称した。基本構成で以下のようなゲートを備えていた:
* ゲートA - 前方に蝶番があって開いて保守する形である。ゲートBの後ろにある。
* ゲートB - 後方に蝶番があって開いて保守する形である。
* ゲートC - 後方に引き出して保守する形。コンソールタイプライタのインタフェース。主にリレー回路。
* ゲートD - 後方に引き出して保守する形。標準入出力インタフェース。

1620では2種類の磁気コアメモリを使用している:
; 主メモリ
: 20,000、40,000、60,000桁。12ビット単位にアクセスし奇数番桁と偶数番桁のペアを格納。1ビットプレーンを12枚でモジュールを構成し、1ないし3モジュール。プレーンには10,000個のコアがある。
; メモリアドレスレジスタストレージ(MARS)メモリ
: ワード単位のアドレス指定。16ワードまで（基本構成では8ワードまで使用）。1ワード読み込み、複数ワードクリア/書き込み。1ワードは24ビットで、5桁格納。1プレーン、384個のコア。

ハードウェア実装の異なる2つの機種がある:
; IBM 1620 I
: ALUを持たず、磁気コアメモリ上のテーブルを参照して計算を行う。加減算には100桁分のメモリを使用し、乗算には200桁分のメモリを使用したテーブルを用意している。基本構成では除算はソフトウェアで実現しているが、減算を自動的に繰り返すハードウェアオプションもある。除算オプションと浮動小数点オプションは同時に装備できない。クロック速度は1MHz。
; IBM 1620 II
: ALUを持ち、加減算をハードウェアで実現。乗算は依然としてメモリ上のテーブル参照で行う。加減算用のテーブルに使用していたメモリは新たにインデックスレジスタとして使用。クロック速度は2MHz。

## 開発の経緯
### 小規模科学技術計算向けコンピュータ
1958年、IBMはニューヨーク州ポキプシーの研究所に小型科学技術計算市場についての研究チームを立ち上げた。当初のメンバーは、Wayne Winger（マネージャ）、Robert C. Jackson、William H. Rhodes である。

#### 要求仕様と設計
この市場での競争相手は Librascope  と Bendix G-15 で、いずれも磁気ドラムメモリマシンだった。当時IBMの最も小型のマシンは IBM 650 で、固定ワード長の十進マシンで、やはり磁気ドラムメモリを採用していた。これらはいずれも真空管を使っている。IBMはこの領域では何ら新しいことを提供できないと結論付けられた。競争を有利に運ぶにはIBMが大型コンピュータの領域で開発した技術を利用する必要があったが、同時に価格を抑える必要があった。

この目標に対して、チームは以下の要求事項を定義した:
* 磁気コアメモリを使用する。
* 命令セットを限定する。
** 除算や浮動小数点演算は用意せず、サブルーチンを使用する。
* 可能な限りハードウェアを論理的機能で置き換える。
** 演算回路を持たず、コアメモリ上にテーブルを用意する。
* 高価な入出力部は必要最小限とする。
** パンチカードではなく紙テープを基本とする。
** プリンタは使わず、コンソールのタイプライタを使用する。

内部コードネームは **CADET**とされた。"**C**omputer with **AD**vanced **E**conomic **T**echnology"（先進の経済的技術によるコンピュータ）の略であるという者もいるが、同時期に開発された IBM 1401 のコードネームが **SPACE** であったことから **Space Cadet**（宇宙飛行訓練生）の連想ではないかという者もいる。

#### プロトタイプ
チームにはさらに Anne Deckman、Kelly B. Day、William Florac、James Brenza が加わった。CADET のプロトタイプは1959年春に完成した。

一方、カリフォルニア州サンノゼでも同種の提案書に関して作業が行われていた。IBMは両者を競わせ、ポキプシーの案が採用されることとなった。採用理由は「サンノゼ版は完成形で拡張性がなく、ポキプシー版は各種拡張が可能。拡張できないマシンは推奨できない」ということであった。

経営陣は磁気コアメモリをこのような小型マシンに収められるという点に確信を持てなかった。そこで代替案として磁気ドラムメモリの設計も並行して行われた。製品検査部門での受け入れ試験でコアメモリの障害が何度も発生し、経営陣の悪い予感が当たったように思われた。しかし、冷却用のファンに問題があってノイズが障害を起こしていたことが判明し、磁気コアメモリの問題は解決した。結局、その後何の問題も発生せず、磁気ドラムメモリの設計は不要となった。

#### サンノゼでの生産
1959年10月22日の IBM 1620 発表に続いて、IBM内部の組織改編の結果、IBM 1620 はポキプシーのデータ処理部門（大型メインフレーム部門）からサンノゼの汎用製品部門（小型コンピュータとサポート製品部門）に移管されることになった。

サンノゼに移管されると、**CADET** は "**C**an't **A**dd, **D**oesn't **E**ven **T**ry"（足し算もできず、試してもみない）の略と冗談交じりに言われた。これはユーザーにも知れ渡ることとなった。

### レベル毎の実装
* モデルI 
** レベルA: プロトタイプ。このレベルだけが垂直な制御パネルである。サンノゼに移管された後で設計が変更され、角度のついた制御パネルになった。
** レベルB: 最初の製品版。アルミニウムそのままのパネルを使用。後のバージョンは白く塗装された。
** レベルC: パンチカードリーダーとパンチが導入された。
** レベルD: ディスク装置が接続可能となった。そのための回路は新たなゲートJに格納された。
** レベルE: 浮動小数点オプションが導入された。
** レベルF: 
** レベルG: モデルII向けカードを使って回路がコンパクトになっている。そのため、ゲートJで構成されていた回路がゲートAとゲートBに収まるようになった。割り込みオプションを導入。
** レベルH: 割り込みオプションを強化。
* モデルII: (レベルに関する情報がない)
* モデルIII: System/360に集中するため開発途中でキャンセルとなった。

### 関連特許
* アメリカ合衆国特許第3,049,295号 - Multiplying Computer
* アメリカ合衆国特許第3,328,767号 - Compact Data Lookup Table
* アメリカ合衆国特許第3,199,085号 - Computer with Table Lookup Arithmetic Unit Feature
* アメリカ合衆国特許第3,239,654号 - Dividing Computer

## 周辺装置

以下のような周辺機器が使用可能である。
* IBM 1621 - 紙テープ読取装置
* IBM 1622 - パンチカードリーダ/パンチ
* IBM 1624 - 紙テープパンチ（1621の内部に設置）
* IBM 1626 - プロッタ-制御装置
* IBM 1627 - プロッター
* IBM 1311 - 磁気ディスク装置
* IBM 1443 - ラインプリンター
* IBM 1405 - 磁気ディスク装置（RPQ、すなわち個別対応で接続可能）

## 主な使用例
IBM 1620 model II はNASA本部（ワシントンD.C.）でジェミニ宇宙船とアジェナ標的機をテザーで結んだときの挙動の3次元シミュレーションに使われた。当時、宇宙空間で2つの物体をテザー（ロープ）で結んだときの安全性が不明だった。また、同じコンピュータがジェミニ計画の軌道シミュレーションにも使われた。これらのシミュレーションは夜間に行われ、翌朝結果を解析するという手順だった。

## 映画やテレビに登場した例
映画『地球爆破作戦』に登場するコンピュータ「コロッサス」は、廃棄された1620のフロントパネルを流用して作られた。

## 注釈

## 出典

## 外部リンク

* IBM 1620 restoration project
* 1620 Data Processing System
* IBM 1620 documents bitsavers.org
* IBM 1620 Simulator Applet (IBM 1620 再建プロジェクトの一部)