IBM 650

280px|thumb|IBM 650の前面パネルの裏側
280px|thumb|ノルウェーの最初の IBM 650 (1959)。"EMMA" と呼ばれていた。CPU（右）、入出力装置（中央）、パンチカードソータ（左）。（オスロ、ノルウェー科学技術博物館）
IBM 650（アイビーエムろくごーまる）IBM 650 installationはIBMの最初のコンピュータのひとつであり、世界初の大量生産されたコンピュータであるIBM 650 Assembly。1953年に発表され、1954年の初出荷から生産終了の1962年までに2000システム以上が製造された。保守サポートは1969年に終了。

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

2アドレス命令形式で、データもアドレスも二五進法の二進化十進表現である「二五進法」で解説されている方式とは異なり、7ビットを2ビットと5ビットに分け、2ビット部分では "10" が 5 "01" が 0 を意味し、残る5ビットは各ビット位置が 0 から 4 までの数に対応している。従って、どの数であっても必ず2ビットがONになっている。。メモリは磁気ドラムメモリである。比較的安価でプログラミングも単純であるため、潜水艦乗組員の能力のモデリングから高校でのプログラミング教育まで、様々な用途がここから生まれた。

 ハードウェア 
基本の650システムは以下の3つの機器筐体から構成される。
 コンソールユニット (IBM 650IBM 650 Console Unit)
 電源ユニット (IBM 655IBM 655 Power Unit)
 カード読取装置/パンチ装置 (IBM 533, 537IBM 537 Card Read Punch)
オプション装備として以下のものがある。
 ディスク装置 (IBM 355IBM 355 Disk Storage) - ディスク装置を備えたシステムを IBM RAMAC 650 Data Processing System と呼んだ。
 カード読取装置 (IBM 543)
 カードパンチ装置 (IBM 544)
 制御装置 (IBM 652IBM 652 Control Unit) - 磁気テープコントローラ
 補助装置 (IBM 653IBM 653 Auxiliary Unit) - 磁気コアメモリ、インデックスレジスタ、浮動小数点演算機構
 補助英字装置 (IBM 654)
 磁気テープ装置 (IBM 727)
 問合せ端末(IBM 838IBM 838 Inquiry Station)
 Tape To Card Punch IBM 46 Model 3、Tape To Card Punch IBM 47 Model 3 - 磁気テープからパンチカードへの変換を行う装置
 会計機 IBM 407

磁気ドラムメモリIBM 650 Magnetic Drumには2000個の符号付十桁のワードが格納できる（文字ならば、1ワードに5文字格納）。アドレス範囲は 0000 から 1999 で、今日の単位で言えば約8.5kBである各ワードは符号付10桁の十進数を表現できるので、233が約85億（10桁）である。符号を考慮すると234、すなわち約170億となる。従って IBM 650 の各ワードは少なくとも現代的な意味での34ビットの情報を格納できる。2000×34=68000ビットとなるので、8で割ると8500バイトとなり、約8.5kBという記述になった。1024単位なら 8.3KiB である。。1959年に登場した Model 4 では磁気ドラムの容量が倍増して4,000ワードとなったIBM 640 Model 4 announcement。この装置は必要なデータが格納されている部分が回転によってヘッドのところに来るまで読み書きできないため、非常に低速だった（回転数は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命令となるhttp://www.bitsavers.org/pdf/ibm/650/24-5003-0_CPU_Extensions.pdf "IBM 650 DATA PROCESSING SYSTEM BULLETIN"。

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

 ソフトウェア 
ソフトウェアとしては、以下のものがあった。
 BLIS (Bell Laboratories Interpretive System)J. Paul Morrison, Flow-Based Programming: A New Approach to Application Development, van Nostrand Reinhold, 1994, ISBN 0-442-01771-5 - 言語処理系。数のみの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年）などに設置された。大学計算センター事始め(b)　――各大学HPCセンターの始まり――（HPC、2019年）]

 注釈 

 出典 

 参考文献 




  - ドナルド・クヌースは The Art of Computer Programming の献辞に IBM 650 を挙げている。
 IBM Archives: Workhorse of Modern Industry: The IBM 650

 外部リンク 
  - 40ページに渡り、IBM 650 の顧客、用途、仕様、コストなどの調査結果が記載されている。
 The IBM 650 at Columbia University
 An IBM 650 Simulator written in Python
 An IBM 650 Simulator
 History Galore at IBM Museum.
 IBM 650 documents at Bitsavers.org (PDFファイル群)
 IBM 650 assembler and byte code interpreters

IBM 0650
IBM 0650
Category:1950年代のコンピュータ
Category:初期のコンピュータ
Category:真空管式コンピュータ
Category:アセンブリ言語