IBM 704は、IBMが1954年4月に発表した、浮動小数点数演算ハードウェアを搭載した初の量産型コンピュータである。

IBM 704 Manual of operation (下記外部リンク参照)にはこう記されている。タイプ704電子データ処理機は大規模で高速な電子計算機であり、シングルアドレス型の内蔵プログラムによって制御される。このように、当時の704は「かなり複雑な数学を扱える唯一のコンピュータ」と見なされていた。IBM 704は、アーキテクチャと実装の面で、以前のIBM 701よりも大幅に改良されていた。701と同様に、704は真空管論理回路と36ビットのバイナリワードを使用した。

701からの変更点としては、ウィリアムス管の代わりに磁気コアメモリを使用したこと、浮動小数点演算命令、15ビットアドレス指定、3つのインデックスレジスタの追加などが含まれている。これらの新機能をサポートするために、命令は完全な36ビットワードに拡張された。701と互換性のない新しい命令セットは、その後のIBM 700/7000 シリーズの科学技術計算系コンピュータの基本となった。

IBMは、704は毎秒40,000個の命令を実行でき、1秒間に最大12,000個の浮動小数点加算を実行できるとした。IBMは、1955年から1960年までに123台の704システムを販売した。

 歴史的なできごと 
プログラミング言語FORTRANとLISPは704のために最初に開発された。後にSHAREがSHARE Assembly Programとして配布したSAP assembler-Symbolic Assembly Programと同様である。

最初のコンピュータ音楽プログラムであるMUSIC-Iは、マックス・マシューズによってIBM 704で開発された。

1961–1962年、物理学者 John Larry Kelly, Jr と Carol C. Lochbaum はベル研究所で IBM 704 を使用して音声合成を行った。 これはKelly–Lochbaumモデルと呼ばれる、ソフトウェア上でデジタル化された「声道アナログ・モデル」（声道を断面積の変わる複数の音響管(acoustic tube)で表現し進行波を計算する導波管モデル＝初期のWaveguideシンセシス （物理モデル音源））で、 1961年に歌（デイジー・ベル）も歌わせている（伴奏にマックス・マシューズのプログラムを使用）。このデモンストレーションをアーサー・C・クラークが実際に聴き、『2001年宇宙の旅』でHAL 9000が同じ歌を歌うクライマックスのシーンが生まれた。

MITの数学講師であるエド・ソープは、彼のブラックジャックのゲーム理論を発展させながら、勝つ確率を調査するための研究の道具として IBM 704 を使用した。彼はFORTRANを使って研究モデルの方程式を定式化した。

MIT計算センターのIBM 704は、1957年秋に、スミソニアン天体物理観測所の Operation Moonwatch の公式トラッカーとして使用された。IBMは、スミソニアン天体物理観測所の科学者や数学者が衛星軌道の計算を行うのを支援するために、4人のスタッフ科学者を派遣した。

ロスアラモス国立研究所(LASL)は、バッチ処理を可能にするSLAMと名付けられた初期のモニターを開発した。

1959年3月12日、IBM 704は、日本の気象庁で数値予報の導入に初めて用いられたコンピューターとなった。数値予報とは、解析する大気の領域を有限個の格子点に分解し、それぞれの格子点に初期値を与えて、大気の状態を表す微分方程式を数値的に解く方法で、膨大な繰り返し計算を必要とする。そのため、計算機の構造上、繰り返し計算に便利な仕組みを多く持つIBM 704が選定された。

 レジスタ 

IBM 704 の持つレジスタは次の通りである。
 アキュムレータ×1、38ビット
 積・商レジスタ×1、36ビット
 デクリメントレジスタ×3、15ビット
デクリメントレジスタとはインデックスレジスタであり、ベースアドレスからその値を引いて実効アドレスとするため、このように呼ばれた。1命令で3つのデクリメントレジスタ全てを関与させることもできる。命令にある3ビットのタグフィールドは各ビットがそれぞれデクリメントレジスタに対応しているので、複数をONにすれば複数のデクリメントレジスタをアドレス計算に使用できる。しかし、複数のインデックス・レジスタが選択された場合、デクリメントが行われる前に、それらの内容は加算されるのではなく、一緒に加算される。この動作は、IBM 709やIBM 7090などの後の科学アーキテクチャのマシンでは、IBM 7094まで続いた。1962年に導入されたIBM 7094では、インデックス・レジスタの数を7つに増やし、一度に1つだけ選択された。またはIBM 7094の互換モードで利用可能なように残された。

 命令形式とデータ形式 
命令形式にはタイプAとタイプBの2種類がある。ほとんどの命令はタイプB形式である。

タイプAの命令形式は、「プレフィックス」3ビット、「デクリメント」15ビット、「タグ」3ビット、「アドレス」15ビットから構成される。プレフィックス部は命令の種類を指定する。デクリメント部は命令結果を修飾する即値を格納するか、命令の種類指定に使われる。タグ部はデクリメントレジスタを指定し、指定されたインデックスレジスタの内容がアドレスから引かれて実効アドレスとなる。アドレス部はアドレスか即値オペランドを格納している。タグフィールドで指定したデクリメントレジスタの内容に基づいて条件分岐する命令もある。プレフィックスの2ビット目と3ビット目が共にゼロの場合、タイプBと判断されるため、タイプAの命令は6種類しかない。しかもSTRという命令（バイナリで101）は IBM 709 で初めて実装されており、704 では5種類のタイプA命令しかなかった。

タイプBの命令形式は、12ビットの命令コード（うち2ビット目と3ビット目は常にゼロ）、2ビットのフラグフィールド、4ビットの未使用フィールド、3ビットのタグフィールド、15ビットのアドレスフィールドから構成される。

 固定小数点数が二進の符号+絶対値形式で格納された。 
 単精度浮動小数点数は、符号ビット、8ビット指数(エクセス128)、27ビット仮数で構成される。 
 文字は6ビットで表され（BCDの一種）、1ワードに6文字が格納される。

命令セットは、データ形式をタイプA命令と同じフィールド (接頭辞、デクリメント、タグ、アドレス) に暗黙のうちに細分化している。Store Tag命令はIBM 704には実装されていなかったが、ワードの残りの部分を変更することなく、データワード内のこれらのフィールドをそれぞれ変更する命令が存在した。

LISPの最初の実装では、アドレスとデクリメントフィールドをCONSセルの実装に使用し、リンクされたリストの先頭と末尾をそれぞれ格納している。LISPの原始関数 CAR と CDR はそれぞれ「Contents of Address part of Register number」と「Contents of Decrement part of Register number」のフィールドに由来する。

「contents of address register」と「contents of decrement register」の略とされることもあるが、IBM 704 にはユーザーがアクセスできるアドレスレジスタは存在しない。

 メモリと周辺機器 
IBM 704には、パンチカードリーダー1台、アルファベットプリンタ1台、721パンチカードレコーダー1台、IBM 727磁気テープユニット5台と753テープコントロールユニット1台、733磁気ドラムリーダー＆レコーダー1台、および737磁気コアストレージユニット1台の制御装置が含まれている。重量は約19,466ポンド(9.7ショートトン、8.8トン)。

704本体には、36個の制御スイッチやボタン、36個のデータ入力スイッチ (レジスタ内の各ビットに対応) を備えた制御コンソールが付属していた。この制御コンソールでは、基本的にはスイッチを使ってレジスタのバイナリ値を設定し、現代のLEDによく似た小さなネオン管のパターンで表示されるレジスタのバイナリ状態を表示することだけができる。コンピュータとの人間の対話では、プログラムはコンソールではなく、最初にパンチングカードに入力され、人間が読める出力はプリンタに送られる。

陰極線管出力レコーダーも利用可能で、人間が見るために20秒という非常に長い蛍光体持続時間を備えた21インチのベクターディスプレイで、7インチディスプレイは大型ディスプレイと同じ信号を受信するが、付属のカメラで撮影するように設計された蛍光体の輝度が急速に減衰するよう設計されたため高速であった。

737磁気コア記憶装置は、RAMとして4,096個の36ビットワード (18,432バイト相当) を搭載している。727磁気テープユニットは、1リールあたり500万文字以上の6ビット文字を記録した。

 参照項目 

 GM-NAA I/O
 真空管式コンピュータ一覧