出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/11/01 09:07 UTC 版)
IBM 650(アイビーエムろくごーまる)[1]はIBMの最初のコンピュータのひとつであり、世界初の大量生産されたコンピュータである[2]。1953年に発表され、1954年の初出荷から生産終了の1962年までに2000システム以上が製造された。保守サポートは1969年に終了。
650は主に科学技術計算用とされ、IBMのパンチカード機器(タビュレーティングマシンの進化した IBM 604 などの機械)のユーザーに対してまともなコンピュータへのアップグレードパスを提供する目的で設計された[3]。同時期に科学技術計算用のIBM 701と、磁気テープ装置を基本としたビジネス用のIBM 702がリリースされたが、650が最も多く製造された。1958年までに800台が販売されたが、これは当時世界で販売されたコンピュータ全体の半分以上を占める台数である。トーマス・J・ワトソン・ジュニアはこれを「コンピュータ界のT型フォード」と称した[4]。
2アドレス命令形式で、データもアドレスも二五進法の二進化十進表現である[※ 1]。メモリは磁気ドラムメモリである。比較的安価でプログラミングも単純であるため、潜水艦乗組員の能力のモデリング[5]から高校でのプログラミング教育まで、様々な用途がここから生まれた。
基本の650システムは以下の3つの機器筐体から構成される。
オプション装備として以下のものがある。
磁気ドラムメモリ[13]には2000個の符号付十桁のワードが格納できる(文字ならば、1ワードに5文字格納)。アドレス範囲は 0000 から 1999 で、今日の単位で言えば約8.5kBである[※ 2]。1959年に登場した Model 4 では磁気ドラムの容量が倍増して4,000ワードとなった[14]。この装置は必要なデータが格納されている部分が回転によってヘッドのところに来るまで読み書きできないため、非常に低速だった(回転数は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つの機能を持っていた。
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命令となる[15]。
| 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 と同じ |
ソフトウェアとしては、以下のものがあった。
IBM 650は日本でも、神戸市甲南大学(1961年)などに設置された。[21]