IBM 305 RAMACは、世界初の二次記憶装置として可動ヘッドハードディスクドライブ(磁気ディスク記憶装置)を使用した商用コンピュータである。このシステムは1956年9月14日に発表され、その時点で米海軍と民間企業でテスト運用が開始されていた。RAMACは"Random Access Method of Accounting and Control"(会計と管理のランダムアクセス手法)の略であり、その設計はビジネスにおけるリアルタイム会計の必要性によって動機付けられたものであった。

## 歴史

米国の自動車産業で使用された最初のRAMACは、1957年にクライスラーのMOPAR事業部に設置されたものである。それはMOPARの部品在庫管理と注文処理システムの一部であった膨大なタブファイルを置き換えた。

1960年スコーバレー冬季オリンピックで、IBMは初の電子データ処理システムを提供した。このシステムには、IBM RAMAC 305コンピューター、パンチカード・データ収集、および中央印刷機能が備わっていた。

RAMACによるシステムは1000件以上構築された。 RAMACの生産は1961年に終了した。RAMACコンピュータは、1962年にIBM 1401用のIBM 1405ディスク記憶装置が導入されたときに時代遅れになり、305は1969年に廃止された。

## 概要

最初のハードディスク装置は1956年9月13日に出荷された。システムの追加機器には、カードパンチ、中央処理装置、電源装置、オペレータ用コンソール・カードリーダ装置、プリンタがあった。保存された記録への直接アクセスを可能にする手動の問い合わせステーションもあった。IBMは、このシステムで64,000枚のパンチカードに相当するデータが保管できると主張した。

305は、IBMが製造した最後の真空管式コンピュータの1つである。その重量は1トン以上あった。

IBM 350ディスクシステムは、1つの英数字の記録に8ビット(データ用に6ビット、パリティビットとして1ビット、スペースビットとして1ビット)使用し、500万文字を記憶した。24インチ (610 mm)のディスクを50枚有した。2つの独立したアクセスアームが上下に移動してディスクを選択し、内外に移動して記録トラックを選択する。アクセスアームはサーボ制御されている。1つのレコードを見つけるのに平均で600ミリ秒かかった。1950年代に改良モデルがいくつか追加された。350個のディスクストレージを搭載したIBM RAMAC 305システムは、1箇月あたり3,200ドル(2018年の物価換算で28646ドル)でリースされた。

オリジナルの305 RAMACコンピュータシステムは約9メートル×15メートルの部屋に収容することができる。350ディスク記憶装置の寸法は約1.5平方メートル (16 sq ft)である。日立グローバルストレージテクノロジーズ(IBMのハードディスクドライブ事業を買収した)調査担当副社長のCurrie Munceは、ウォール・ストリート・ジャーナルのインタビューで、RAMACのユニットは1トンを超えるため、フォークリフトで移動し、大型貨物飛行機によって輸送しなければならないと述べた。Munceによると、ドライブのストレージ容量は5メガバイト以上まで増やすことができたが、当時のIBMのマーケティング部門は、そのような大容量の製品の販売方法を知らなかったため、大容量ドライブには反対していた。

305のプログラミングは、ドラムメモリに保存される機械語命令を書くだけでなく、システム内のほぼすべてのユニット(コンピュータ自体を含む)はプラグボードコントロールパネルにワイヤジャンパを挿入することによってもプログラムされた。

## アーキテクチャ

システムアーキテクチャは、305 RAMAC Manual of Operation(305 RAMAC操作マニュアル)として文書化されている。305は、可変ワード長十進数(BCD)のキャラクタ指向のコンピュータであり、6000prmで回転し3200文字の英数字を記憶する磁気ドラムメモリを有する。データ転送中の一時記憶には、100文字のコアメモリバッファを使用した。

各文字は6ビットで表され、先頭の2ビット(下の例の"X", "O")はゾーンビットであり、残りの4ビットが数値を表す。その後ろに1ビットのパリティビット(下の例の"R")がつき、1つの文字は次の形式で表される。

命令はドラムメモリの20トラックにのみ格納でき、次のフォーマットによる10文字の固定長だった。

| フィールド位置 | 関数 |
| --- | --- |
| T1 A1 B1 | ソースオペランドアドレス-トラック、下位AB文字 |
| T2 A2 B2 | デスティネーションオペランドアドレス-トラック、下位AB文字 |
| M N | オペランドの長さ(各オペランドは指定されたトラック全体に収まっていなければならない) |
| P | プログラム終了コード。テスト条件の選択、ジャンプの実行、および入出力の開始に使用される。305のコントロールパネルのプログラミングは、実行されるアクションを決定する。 |
| Q | 制御コード。操作を変更する(オペコードと同様)。デフォルトの操作は、コピー元からコピー先へのコピーである。その他の操作は、"1" 比較、"2" フィールド比較、"3" 比較とフィールド比較、"5" アキュムレータリセット、"6" 空白転送テスト、"7" 圧縮と拡張、 "8" 拡張、 "9" 圧縮。 |
|

固定小数点データの「ワード」は、1桁から100桁までの任意のサイズにすることができる。最下位桁のXビットに符号(符号付き絶対値)を格納する。

データレコードは、1文字から最大100文字までの任意のサイズにすることができる。

### ドラムメモリ

ドラムメモリは、それぞれ100文字の32トラックで構成されていた。

表の凡例:

- 黄-ストレージ
- 青-算術
- 緑-入出力
- 赤-特別な機能

| トラック指定子 | ソースの機能 | ディスティネーションの機能 |
| --- | --- | --- |
| W X Y Z | 一般ストレージ | |
| 0 1 2 3 4 5 6 7 8 9 & A B C D E F G H I | 命令ストレージ、一般ストレージ | |
| L | アキュムレータの読み取り | アキュムレータに加算 |
| M | アキュムレータの読み取りと消去 | アキュムレータから減算 |
| V | 被乗数(1〜9文字)または除数(1〜9文字) | |
| N | — | 乗算(1〜11文字)  アキュムレータ0・1の乗算を2から20文字で保存する |
| P | — | 除算(オプション) |
| K | 380 パンチカード入力 | — |
| S T | — | 323 パンチカード出力 370 プリンター出力 407 プリンタ出力 |
| Q | 380 問い合わせ入出力 | |
| J | — | 350 ファイルアドレス |
| R | 350 ファイルデータ入出力 | |
| - | コアバッファ | キャラクタセレクタ |
| $ | 382 紙テープ入出力(オプション) | |
|

`L`と`M`は、10個の10文字の「アキュムレータ」を含む同じトラックを選択する。宛先Lは加算を指定し、 Mは減算を指定する(これらのアキュムレータの数値は10の補数形式で格納され、最上位桁のXビットに符号が格納されていた。各アキュムレータの符号もリレーで保持されていた。ただし、305は特別なプログラミングを必要とせずに、標準の符号付き等級フォーマットとこのフォーマットの間で自動的に変換される)。

`J`、`R`、`-`はドラム上のトラックを選択せずに、他のソースと目的地を指定する。

### ジャンプ

305の命令セットにはジャンプは含まれていない。ジャンプはコントロールパネルでプログラムする。

- 無条件ジャンプ - プログラム終了コード(Pフィールド)はコントロールパネル上のプログラム終了ハブを指定する。このプログラム終了ハブには、分配器を介してジャンプ先の命令の最初、2番目、3番目のアドレス桁を指定するプログラム開始ハブへのワイヤが挿入されている。
- 条件付きジャンプ - プログラム終了コード(Pフィールド)はコントロールパネル上のプログラム終了ハブを指定する。これには評価する条件セレクタ共通ハブへのワイヤが挿入されている。対応する2つの条件セレクタ出力ハブはワイヤが挿入され、その先はジャンプ先の操作を指定するプログラム開始ハブか、シーケンスを継続するプログラム前進ハブに接続されている。多くの条件セレクタを含む複雑な条件は、複数のプログラムエントリハブの1つをアクティブにして、1つの命令で実行するように配線できる(例えば、複数のアキュムレータの符号やゼロ状態の評価)。
- マルチウェイジャンプ - デスティネーショントラック(T2フィールド)が設定され、コントロールパネル上の適切なキャラクター選択ハブ、ジャンプする命令を指定するプログラム開始ハブ、シーケンスを継続するプログラム前進ハブのいずれかに接続されている。

### タイミング

305の全てのタイミング信号はドラムに記録されたクロックトラックから供給される。クロックトラックには、同期のための208μs間隔の816個の12μsのパルスが含まれる。

キャラクタの読み書きには96μsを要する。

305の典型的な命令にはドラムの3回転(30ms)を要する。命令をフェッチするための1回転(Iフェーズ)、ソースオペランドを読み取りそれをコアバッファにコピーするための1回転(Rフェーズ)、コアバッファからデスティネーションオペランドを書き込むための1回転(Wフェーズ)である。Pフィールド(プログラム終了コード)が空白でない場合は、リレーが選択されることを可能にするためドラムをさらに2回転させる(Dフェーズ、Pフェーズ)。Improved Processing Speedオプションを導入することにより、次の回転が始まるのを待つ代わりに3つの命令フェーズ(IRW)がすぐに続くことが可能となる。このオプションと最適化されたコード・オペランドの配置により、典型的な命令はドラムの1回転(10ms)で実行できる。

ただし、特定の命令は通常の命令の30msより長い50msを要した。例えば、乗算はドラムの6回転から19回転(60msから190ms)を要し、除算(オプション)はドラムの10回転から37回転(100msから370ms)を要する。入出力命令は、ハードウェアによって必要とされるだけのドラムの回転数の間、プロセッサをインターロックすることができる。

## ハードウェア実装

305の論理回路は、1管と2管の挿入可能なユニットとリレーで構成されていた。

## 関連周辺機器

基本システムは次のユニットで構成されていた。

- IBM 305 - 処理装置、磁気プロセスドラム、磁気コアレジスタ、電子論理・演算回路
- IBM 350 - ディスク記憶装置
- IBM 370 - プリンタ
- IBM 323 - カードパンチ
- IBM 380 - コンソール、カードリーダ、IBM 電子タイプライターモデルB1
- IBM 340 - 電源機構