IBM 650はIBMの最初のコンピュータのひとつであり、世界初の大量生産されたコンピュータである。1953年に発表され、1954年の初出荷から生産終了の1962年までに2000システム以上が製造された。保守サポートは1969年に終了。

## 概要

650は主に科学技術計算用とされ、IBMのパンチカード機器(タビュレーティングマシンの進化した IBM 604 などの機械)のユーザーに対してまともなコンピュータへのアップグレードパスを提供する目的で設計された。同時期に科学技術計算用のIBM 701と、磁気テープ装置を基本としたビジネス用のIBM 702がリリースされたが、650が最も多く製造された。1958年までに800台が販売されたが、これは当時世界で販売されたコンピュータ全体の半分以上を占める台数である。トーマス・J・ワトソン・ジュニアはこれを「コンピュータ界のT型フォード」と称した。

2アドレス命令形式で、データもアドレスも二五進法の二進化十進表現である。メモリは磁気ドラムメモリである。比較的安価でプログラミングも単純であるため、潜水艦乗組員の能力のモデリングから高校でのプログラミング教育まで、様々な用途がここから生まれた。

## ハードウェア

基本の650システムは以下の3つの機器筐体から構成される。

- コンソールユニット (IBM 650)
- 電源ユニット (IBM 655)
- カード読取装置/パンチ装置 (IBM 533, 537)

オプション装備として以下のものがある。

- ディスク装置 (IBM 355) - ディスク装置を備えたシステムを IBM RAMAC 650 Data Processing System と呼んだ。
- カード読取装置 (IBM 543)
- カードパンチ装置 (IBM 544)
- 制御装置 (IBM 652) - 磁気テープコントローラ
- 補助装置 (IBM 653) - 磁気コアメモリ、インデックスレジスタ、浮動小数点演算機構
- 補助英字装置 (IBM 654)
- 磁気テープ装置 (IBM 727)
- 問合せ端末(IBM 838)
- Tape To Card Punch IBM 46 Model 3、Tape To Card Punch IBM 47 Model 3 - 磁気テープからパンチカードへの変換を行う装置
- 会計機 IBM 407

磁気ドラムメモリには2000個の符号付十桁のワードが格納できる(文字ならば、1ワードに5文字格納)。アドレス範囲は 0000 から 1999 で、今日の単位で言えば約8.5kBである。1959年に登場した Model 4 では磁気ドラムの容量が倍増して4,000ワードとなった。この装置は必要なデータが格納されている部分が回転によってヘッドのところに来るまで読み書きできないため、非常に低速だった(回転数は12,500rpmで、最適化した平均アクセス時間は2.5ミリ秒)。このため、各命令ワード内の二つ目のアドレスは次に実行すべき命令のアドレスを格納するようになっていた。プログラムを最適化するには、前の命令の実行時間から次の命令語を置くべきドラム上の位置を計算してアドレスを求める必要があった。"table lookup" という特殊な命令が用意されている。これは磁気ドラムの1トラック(50ワードが格納されている)の先頭ワードを比較のための値とし、その後に昇順に整列したデータが並んでいるものとして、ドラムが1回転する間に比較を行い、最初に等しいかまたは大きい値が出現したときのワードのアドレスをアキュムレータにセットする。これを使うと、1963年の1000倍高速なコンピュータの約3分の1程度の速度でテーブル比較が可能である(IBM 7040 で同じことを行うと1.5ミリ秒かかり、IBM 650 で table lookup 命令で同じことをすると5ミリ秒かかる)。高水準言語を使うと、(テーブル参照に限ると)IBM 7040 の方がずっと遅くなる。

オプションの補助装置(IBM 653)は1955年5月3日にリリースされたもので、以下の3つの機能を持っていた。

- 60ワード分の容量の磁気コアメモリ。アドレスは 9000 から 9059。小さな高速記憶装置(アクセス時間は96μ秒で、ドラムの26倍の速さ)で、テープおよびディスクの入出力バッファとして必要とされた。
- 3個の4桁サイズのインデックスレジスタ。アドレスは 8005 から 8007。ドラムメモリやコアメモリを追加したとき、それらの拡張された空間にアクセスする手段として使われた。
- 浮動小数点演算装置。8桁の仮数部と2桁の指数部の二五進法で浮動小数点数を表す。これで表せる範囲は ±0.10000000E-50 から ±0.99999999E+49 までである。

IBM 533 パンチカードリーダ/パンチ装置は、26桁の英数字を読み取ることしかできない。拡張は可能だが、最大でも50桁を超えられない。そのため1枚から最大でも10ワードまでしか読み取れない(1ワードは5文字)。

1960年に発表された IBM 7070 は「トランジスタ化した IBM 650」としてアップグレードパスを提供するよう設計されている。1959年に登場した IBM 1620 は科学技術計算分野のローエンド用である。どちらも十進方式だが、命令セットの互換性はない。

## 命令セット

IBM 650 の命令は、2桁の命令コード、4桁のデータアドレス、4桁の次命令アドレスで構成される。符号は無視される。アキュムレータは20桁で、上半分の10桁と下半分の10桁ずつ別に扱われることが多い。符号は全体で1つである。磁気ドラムからデータを読み込むとディストリビュータという一種のレジスタに格納される。実行中命令はプログラムレジスタに保持される。算術演算は1桁相当の加算器を使って行う。浮動小数点演算機構や磁気コアメモリ、インデックスレジスタ、入出力装置を追加すると、命令も追加される。基本モデルには42種類の命令がある。あらゆるオプションを追加すると、全部で97命令となる。

|  |  |  |
| --- | --- | --- |
| 70 | RD | パンチカードから磁気ドラムに読み込む |
| 71 | PCH | 磁気ドラムの内容をパンチカードに出力 |
| 69 | LD | ディストリビュータ・レジスタにロード |
| 24 | STD | ディストリビュータ・レジスタの内容をストア |
| 10 | AU | アキュムレータの上半分に加算 |
| 15 | AL | アキュムレータの下半分に加算 |
| 11 | SU | アキュムレータの上半分から減算 |
| 16 | SL | アキュムレータの下半分から減算 |
| 60 | RAU | アキュムレータ全体をリセットして、上半分に加算 |
| 65 | RAL | アキュムレータ全体をリセットして、下半分に加算 |
| 61 | RSU | アキュムレータ全体をリセットして、上半分から減算 |
| 66 | RSL | アキュムレータ全体をリセットして、下半分から減算 |
| 20 | STL | アキュムレータの下半分を磁気ドラムにストア |
| 21 | STU | アキュムレータの上半分を磁気ドラムにストア。ストアされる値はアキュムレータの符号を含む。除算後の場合は、余りの符号がストアされる。 |
| 22 | STDA | アキュムレータの下から5桁目から8桁目までを指定されたアドレスの同じ位置にストアする。命令のオペランド書き換え用 |
| 23 | STIA | アキュムレータの下から1桁目から4桁目までを指定されたアドレスの同じ位置にストアする。命令のオペランド書き換え用 |
| 17 | AABL | アキュムレータの下半分に絶対値を加算 |
| 67 | RAABL | アキュムレータ全体をリセット後、下半分に絶対値を加算 |
| 18 | SABL | アキュムレータの下半分から絶対値を減算 |
| 68 | RSABL | アキュムレータ全体をリセット後、下半分から絶対値を減算 |
| 19 | MULT | 乗算、被乗数はアキュムレータの上半分、積はアキュムレータ全体 |
| 14 | DIV | 除算、アキュムレータの上半分には余り、下半分には商がセットされる |
| 64 | DIVRU | 除算後、アキュムレータの上半分、すなわち余りを消去 |
| 44 | BRNZU | アキュムレータの上半分がゼロでないとき分岐 |
| 45 | BRNZ | アキュムレータ全体がゼロでないとき分岐 |
| 46 | BRMIN | アキュムレータの符号が負のとき分岐 |
| 47 | BROV | オーバーフローが起きているとき分岐 |
| 90-99 | BRD | ディストリビュータ・レジスタの対応する桁が8なら分岐、9なら分岐しない。それ以外ならエラー。IBM 533 の制御パネルからCPUに信号を送るのに使われた。 |
| 30 | SRT | アキュムレータの内容を右シフト(データアドレスをシフトする桁数として解釈する) |
| 31 | SRD | アキュムレータの内容を右シフトすると同時に、数値としての丸めを施す。 |
| 35 | SLT | アキュムレータの内容を左シフト |
| 36 | SCT | アキュムレータの上位桁がゼロの部分を左シフトして消し去り、何桁シフトしたかを最下位2桁に書き込む。全くシフトしない場合は最下位2桁がゼロになる。最大10桁までしかシフトしないので、アキュムレータの下半分の上位桁がゼロであってもそのままとなる。 |
| 84 | TLU | テーブル参照(上述) |
| 00 | No-Op | 何もしない |
| 01 | Stop | コンソールのスイッチがstopに設定されていれば停止。さもなくば No-Op と同じ |

## ソフトウェア

ソフトウェアとしては、以下のものがあった。

- BLIS (Bell Laboratories Interpretive System) - 言語処理系。数のみの3アドレス方式
- IPL - 初期のリスト処理言語。IPL-V というバージョンが最も有名。
- SPACE (Simplified Programming Anyone Can Enjoy) - ビジネス指向の2ステップコンパイラ(下記の SOAP を経由する)
- IT (Internal Translator)
- SOAP (Symbolic Optimal Assembly Program) - 機械語に一対一対応する言語
- FOR TRANSIT - FORTRANの一種。ソースをIT(上記)に変換し、ITからSOAP(上記)に変換し、最終的にオブジェクトコードにする。
- FORTRAN
- GATE - 変数名が1文字という単純なコンパイラ
- RUNCIBLE (Revised Unified New Compiler IT Basic Language Extended)
- TASS (Technical Assembly System) - マクロアセンブラ

## 日本での設置

IBM 650は日本でも、神戸市甲南大学(1961年)などに設置された。