Manchester Small-Scale Experimental Machine (マンチェスター・スモールスケール・イクスペリメンタル・マシーン、SSEM) は、世界初のプログラム内蔵式コンピュータ。愛称は Baby。マンチェスター大学でフレデリック・C・ウィリアムス、トム・キルバーン、Geoff Tootill(英語版) らが製作し、1948年6月21日に最初のプログラムが動作した。

このマシンは実用的なコンピュータを目指したものではなく、初期のコンピュータ用メモリであるウィリアムス管の評価用に設計されたものである。当時としては「小型で基本的」なものとして設計されたが、現代の電子式コンピュータにある基本要素は全て備えた実働する世界初のコンピュータであった。SSEMによりその設計の実現可能性が示されると、同大学では、すぐさまさらに実用的なコンピュータ Manchester Mark I を開発するプロジェクトを開始した。Mark I は、世界初の商用汎用コンピュータ Ferranti Mark 1 のプロトタイプとなった。

SSEMはワード長が32ビットで、メモリ容量は32ワードだった。最も単純化したプログラム内蔵式コンピュータとして設計されたため、ハードウェアで実装した算術演算は減算と正負の反転だけだった。他の算術演算はソフトウェアで実装した。最初にこのマシン向けに書かれた3つのプログラムのうちの1つは、2 (262,144) の最大の真の約数を求めるものだった。これは 2 − 1 から小さくなる方向に整数をひとつずつ調べていく時間のかかるプログラム(除算を持たないので、減算を繰り返し行う)で、それによってマシンの信頼性の試験も兼ねていた。このプログラムは17個の命令で構成され、正しい答えである 131,072 に到達するまでに52分かかった。その間にSSEMは命令を350万回実行したことになる(すなわち、実質的なCPU速度は1.1kIPS)。

## 背景

プログラム制御式コンピュータの世界初の設計はチャールズ・バベッジの解析機関で、1830年代のイギリスでのことである。約1世紀後の1936年、同じくイギリスの数学者アラン・チューリングは後にチューリングマシンと呼ばれるようになる概念を発表した。これは、機械的な計算の限界を考えるための理論上の概念だった。チューリングは実際のマシンを想定したわけではなく、テープに記された命令に従ってテープ上のシンボルの読み書きなどの操作を行う人を "computer" と呼んだ。チューリングは、数学の問題を解くアルゴリズムを書ける場合、チューリングマシンでそれを実行できることを証明した。

コンラート・ツーゼのZ3は、世界初のプログラム可能な完全自動式コンピュータで、二進デジタルロジックで構成されていた。ただし、チューリングマシンに存在する条件分岐の機能がなかった。1941年5月12日、ベルリンの Deutsche Versuchsanstalt für Luftfahrt(ドイツ航空研究所)の観衆の前でデモンストレーションを成功させた。Z3は外部のテープにプログラムを格納していたし、電子式というよりも電気機械式だった。1943年のColossusは世界初の電子式計算装置だが、暗号解読専用であり、汎用の機械とは言えない。

1946年のENIACは、電子式で汎用という意味で、世界初である。条件分岐も可能でチューリング完全であり、幅広い問題を解けるようプログラム可能である。しかし、そのプログラムはメモリ上に格納されるわけではなく、パッチコードやスイッチの状態で保持されていた。そのためプログラムを入れ替えるには数日を要した。チューリングやコンラート・ツーゼといった研究者もメモリをデータとプログラムの両方を格納するのに使うという考え方を研究していたが、現代のコンピュータのほとんどで使われているコンピュータ・アーキテクチャを定義したとして広く知られているのは、数学者のジョン・フォン・ノイマンである。

ノイマン型コンピュータの構築は、プログラムの格納に適したメモリデバイスを用意できるかどうかにかかっていた。第二次世界大戦時、レーダー信号の散乱を除去するという問題に対処しようとしていた研究者らが遅延線装置を開発し、その最初の応用がジョン・プレスパー・エッカートの開発した水銀遅延線であった。レーダー発信機は一定周期で短いパルスの形で電波を放出し、その反射をCRT画面に表示する。ここで興味があるのは動く標的だけであるため、静止した物体からの反射は除去するのが望ましい。このフィルタリングは、1つ前のパルスの反射と現在の反射を比較し、変化していない部分を除去すればよく、それによって動く物体のイメージだけが信号に残る。前に受信したパルスを比較のために蓄えておくために、遅延線という方式が考案された。

1945年10月、チューリングはイギリス国立物理学研究所 (NPL) に勤務するようになった。当時の軍需省内の科学者らはイギリス国内で機械による計算をすすめる国立数学研究所が必要だと結論付け、NPLに数学部門が設置された。1946年2月19日、アラン・チューリングは電子式プログラム内蔵型コンピュータの設計に関する論文を提出し、それが後に Automatic Computing Engine (ACE) と呼ばれるようになった。これは、第二次世界大戦終結後の数年間に始まったいくつかのプログラム内蔵型コンピュータ開発プロジェクトの1つである。ほぼ同じ頃、ペンシルベニア大学電気工学科ではEDVAC、ケンブリッジ大学数学研究所ではEDSACを開発しようとしていた。

NPLにはACEのようなマシンを構築した経験がないため、英国郵便本局研究所のトミー・フラワーズにコンタクトをとった。フラワーズは世界初のプログラム可能電子計算機 Colossus の設計者で、多忙だったためACEプロジェクトに関わることができなかったが、彼のチームはACE用の水銀遅延線をいくつか製作した。他にも通信研究所 (TRE) やケンブリッジ大学数学研究所のモーリス・ウィルクスにも支援要請があった。

NPLを所管する政府機関は、TREに製作を一任することを決定し、ACEに最高優先度をつけた。NPLの決定を受けて1946年11月22日、TREの物理学部門の監督者が訪問し、それにはTREのフレデリック・C・ウィリアムスと A. M. Uttley も同行した。ウィリアムスは遅延線への代案として、CRT記憶装置のレーダーでの応用を研究していたTREの開発グループを紹介した。ウィリアムスは既にマンチェスター大学の教授就任が決まっており、回路技術者のほとんどは原子力部門へ移籍されるところだった。TREは、一部の技術者をウィリアムスと共に大学に移すこと、そして TRE で Uttley の配下に一部技術者を移すことに合意した。

## ウィリアムス管

EDSACなどのように、水銀遅延線メモリを使って成功した初期のコンピュータは存在するが、この技術にはいくつか欠点が存在した。すなわち、水銀遅延線は重く高価であり、データにランダムにアクセスできない。さらに、データは水銀の中で一連の音波として格納されており、媒質の温度が変化すると音波の速度が変化するため、その温度は非常に注意深く制御する必要があった。ウィリアムスはベル研究所で、遅延線の代わりに陰極線管 (CRT) を使ってレーダーの不要なエコーを除去するという実験を見たことがあった。TRE在職時、1946年12月にマンチェスター大学に移る直前に、ウィリアムスはCRTに基づいた電子記憶装置ウィリアムス管を開発した。ウィリアムス管はランダムアクセス可能な世界初のデジタル記憶装置である。Manchester Small-Scale Experimental Machine (SSEM) はウィリアムス管の記憶装置としての実用性を検証すべく設計されたもので、格納したデータをコンピュータが使用するのに必要な速度で繰り返し更新できることを証明するためのものだった。

二進デジタルコンピュータで使う場合、ウィリアムス管は各メモリ位置に2つの状態のどちらかを格納し、それぞれの状態が二進数字の 0 および 1 に対応する。2つの状態を表すため、ダッシュまたはドットを表示したときに画面上のその位置に生じる正または負の電荷を利用する。この現象を二次放出と呼ぶ。ダッシュでは正の電荷、ドットでは負の電荷を生じ、いずれも画面の前に設置された検出プレートで電荷を取り出す。負の電荷が 0、正の電荷が 1 を表す。電荷は約0.2秒で消えるが、検出プレートが取り出したデータに基づいて自動的にリフレッシュすることができる。

ウィリアムス管用CRTとしては当初 CV1131 という一般に入手可能な12インチのものを使っていたが、SSEMではより小さい6インチの CV1097 を採用した。

## 開発と設計

マンチェスター大学の電気工学科に移籍すると、ウィリアムスはTREで同僚だったトム・キルバーンを呼び寄せた。2人はウィリアムス管の記憶容量を増やす作業をし、1947年秋には64×32ビットの格子状の配置で2,048ビットまで記憶できるようにし、記憶したデータを4時間保持し続けるデモンストレーションを行った。1947年9月には、TREからの出向の形で技術者 Geoff Tootill を呼び寄せた(1949年4月まで)。

マックス・ニューマンは1945年、マンチェスター大学の純粋数学の教授となっていた。第二次世界大戦中、彼はブレッチリー・パークで暗号解読を行っていて、1943年には暗号解読用計算機Colossusの開発に関与した。SSEMやその後のコンピュータ開発に直接関わることはなかったが、プロジェクトの創始者かつ熱心な支援者であり、例えばブレッチリーから金属ラックなど戦時余剰品の資材を入手するなどの手配を行った。

1948年6月にはSSEMが完成し、動作していた。長さ5.2m、高さ2.2mで、重量や約1tだった。550本の真空管(二極管が300本、五極管が250本)を使い、消費電力は3,500ワットである。算術演算装置は戦時中に広く使われていた五極管 EF50 を使って製作された。ウィリアムス管は4本使用していた。1つ目は32×32ビットワードのRAMとして使用し、2つ目は計算結果を一時的に保持するためのアキュムレータ、3つ目は現在実行中の命令とそのメモリアドレスを保持する。4つ目は記憶装置としてではなく、出力装置として機能し、他の3つのウィリアムス管の保持するビットパターンを選択して表示できる。

RAM内の32ビットワードにはプログラムの命令またはデータを格納できる。命令は、0番から12番のビットがオペランドのメモリアドレスを表し、13番から15番のビットが実行すべき演算を指定する。残りの16ビットは使われていない。SSEMは1オペランド型のアーキテクチャであり、演算のもう一方のオペランドはアキュムレータを暗黙のうちに使う。したがって、プログラムの命令にはもう一方のオペランドとしてメモリ内のデータのアドレスを1つだけ指定する。

メモリ内のワードの読み出し、書き込み、リフレッシュはいずれも360マイクロ秒で行う。1つの命令の実行にはその4倍の時間がかかり、命令実行レートは1秒当たり約700命令となる。主記憶装置は定期的にリフレッシュされており、32ワードあるので、それを順次読み込んでリフレッシュするのに20ミリ秒かかった。

SSEMでは負数を表現するのに2の補数を使っており、現代のコンピュータと同じである。その場合、最上位ビットが符号を表し、ゼロなら正の数、1なら負の数となる。そのため、32ビットワードで表現できる整数の範囲は −2 から +2 − 1 まで(−2,147,483,648 から +2,147,483,647)である。

## プログラミング

SSEMの命令セットは3ビットで識別されるので、最大8種類 (2) の命令が存在する。最近の表現とは異なり、記憶装置上は最下位ビットが左になるよう配置されている。したがって "1" であれば、ビットは "100" となる。

SSEMの命令セット

| 二進コード | ニーモニック表現 | 操作・演算 |
| --- | --- | --- |
| 000 | JMP S | 指定されたメモリアドレスの命令にジャンプする(絶対無条件ジャンプ) |
| 100 | JRP S | 指定されたメモリアドレスにアキュムレータの値を加算したアドレスの命令にジャンプする(相対無条件ジャンプ) |
| 010 | LDN S | 指定されたメモリアドレスにある数を取り出し、符号を反転させ、アキュムレータに格納する。 |
| 110 | STO S | アキュムレータにある数を指定されたメモリアドレスに格納する。 |
| 001 または  101 | SUB S | 指定されたメモリアドレスにある数をアキュムレータにある数から引き、減算結果をアキュムレータに格納する。 |
| 011 | CMP | アキュムレータにある値が負であれば、次の命令をスキップする(実行しない)。 |
| 111 | STP | 停止する。 |
| 1. ↑  命令の解釈は回路を節約するため、必要な部分しか行わない。 | | |

負とか減算といった命令が多いのは、算術演算を行う回路として減算および符号の反転しか用意できなかったためである。加算は減算を使って容易に実現可能であるため、加算器は当初不要と見なされていた。x+y は −(−x−y) と計算でき、2つの数の加算は4命令を要する。

プログラムは二進数形式でワード単位にメモリに設定する。32個のスイッチが入力機器として用意されていて、スイッチの状態によってワードの対応するビットを0または1に設定する。SSEMには紙テープ装置などの入力機器はなかった。

### 最初のプログラム

SSEMでは3つのプログラムが書かれた。1つ目はキルバーンが作成した17個の命令からなるもので、1948年6月21日に動作したことが確認されている。2 (262,144) の最大の真の約数を探すプログラムであり、2 − 1 から順に小さくなる方向に整数を調べていく。除算は除数を繰り返し減算することで実装されていた。SSEMは答え (131,072) を得るまでに350万命令を実行し、52分かかった。17個の命令以外に8ワードをデータの一時記憶に使ったので、プログラムの大きさは25ワードということになる。

Geoff Tootill はこのプログラムの改良版を翌月に書き、1948年9月にマックス・ニューマンの招きでマンチェスター大学に移籍することになったアラン・チューリングが同年7月中ごろに3つめのプログラムを送ってきた(長除法を使ったバージョン)。チューリングは同大学で設立されていた王立協会計算機研究所の副所長に就任してウィリアムスやキルバーンとともに働くこととなった。

## その後の開発

ウィリアムスとキルバーンはSSEMに関する報告をネイチャー誌に送り、1948年9月にそれが掲載された。SSEMによるデモンストレーションが成功したため、より実用的なコンピュータ Manchester Mark I の製作が1948年8月から始まり、1949年4月には動作開始している。そして、それをベースとして世界初の商用汎用コンピュータ Ferranti Mark 1 が開発された。

1998年、世界初のプログラムが動作してから50周年を記念して、SSEMの実働するレプリカが製作された。現在はマンチェスター産業科学博物館に展示されており、実際に動作させるデモンストレーションを定期的に行っている。2008年、SSEMの全体を写した写真がマンチェスター大学で見つかった。1948年12月15日に学生だった Alec Robinson が撮影したもので、1949年6月の The Illustrated London News という新聞に掲載された写真である。