アポロ誘導コンピュータとDSKY | |
| 発明者 | チャールズ・スターク・ドレイパー研究所 |
|---|---|
| メーカー | レイセオン |
| 紹介された | 1966年8月 |
| 製造中止 | 1975年7月 |
| タイプ |
|
| プロセッサ | 個別シリコン 集積回路(IC) チップ ( RTLベース) |
| 頻度 | 2.048 MHz |
| メモリ | |
| ポート | DSKY、IMU、ハンド コントローラー、ランデブー レーダー (CM)、着陸レーダー (LM)、テレメトリ レシーバー、エンジン コマンド、反応制御システム |
| 消費電力 | 55 W [2] : 120 |
| 言語 | AGCアセンブリ言語 |
| 重さ | 70ポンド(32キログラム) |
| 寸法 | 24インチ×12.5インチ×6.5インチ(61cm×32cm×17cm) |
アポロ誘導コンピュータ(AGC)は、アポロ計画のために製造されたデジタルコンピュータで、アポロ司令船(CM)とアポロ月着陸船(LM)に搭載された。AGCは、宇宙船の誘導、航行、制御のための計算および電子インターフェイスを提供した。[3] AGCは、シリコン集積回路をベースにした最初のコンピュータであった。[要出典]このコンピュータの性能は、 Apple II、TRS-80、Commodore PETなど、1970年代後半の第一世代の家庭用コンピュータに匹敵した。[4]
AGC のワード長は 16 ビットで、15 のデータ ビットと 1 つのパリティ ビットがあります。AGC のソフトウェアのほとんどは、磁気コアの周囲にワイヤーを編み込んで作られたコア ロープ メモリと呼ばれる特殊な読み取り専用メモリに保存されますが、少量の読み取り/書き込みコア メモリも利用できます。
宇宙飛行士は、DSKY(「ディスプレイとキーボード」の略で、「ディスキー」と発音する)と呼ばれる数字ディスプレイとキーボードを使用してAGCと通信した。AGCとそのDSKYユーザーインターフェイスは、1960年代初頭にMIT計測研究所によってアポロ計画のために開発され、1966年に初飛行した。[5]
手術
ジェミニ計画では宇宙飛行士が操縦桿を使って手動で飛行したが、アポロ計画では月面着陸の短い時間を除いてコンピューターがほとんどの飛行を行った。[ 6]各月面飛行には2つのAGCが搭載されており、司令船とアポロ月着陸船に1つずつ搭載されていたが、地球周回ミッションだったアポロ7号と月周回ミッションに月着陸船を必要としなかったアポロ8号は例外であった。司令船のAGCは誘導、航法および制御 (GNC) システムの中心であった。月着陸船のAGCはアポロPGNCS (主要誘導、航法および制御システム) を実行しており、この頭字語はピングスと発音される。


各月面ミッションには 2 台のコンピューターが追加されました。
- サターンV型ブースター計装リング上のロケットデジタルコンピュータ(LVDC)
- 月着陸船の緊急脱出誘導システム( AGS、発音はags )。LM PGNCS が故障した場合に使用されます。AGS は月からの離陸やコマンド モジュールとのランデブーに使用できますが、着陸には使用できません。
デザイン



AGCは、チャールズ・スターク・ドレイパーの指揮の下、MIT計測研究所で設計され、ハードウェア設計はエルドン・C・ホールが主導した。[2]初期の建築設計は、JH・ラニング・ジュニア、アルバート・ホプキンス、リチャード・バティン、ラモン・アロンソ、[7] [8]ヒュー・ブレア・スミスが担当した。[9] 飛行ハードウェアはレイセオン社によって製造され、同社のハーブ・セイラー[10]も建築チームに所属していた。
クリネックらによると、チップは予想通りはんだ付けされるのではなく、基板に溶接されていた。[11]アポロガイダンスコンピュータのロジックモジュールの図面では抵抗溶接が指定されている。[12] [13]
ロジックハードウェア
1963年に惑星間監視プラットフォーム(IMP)で集積回路(IC)チップが使用された後、IC技術は後にAGCにも採用されました。[14]アポロ飛行コンピュータはシリコンICチップを使用した最初のコンピュータでした。[15]
Block I バージョンでは 4,100 個の IC が使用され、各 IC には 1 つの 3 入力NOR ゲートが含まれていましたが、後の Block II バージョン (有人飛行で使用) では約 2,800 個の IC が使用され、そのほとんどは 2 つの 3 入力 NOR ゲートと、少数の拡張器とセンス アンプで構成されていました。[16] : 27, 266 Fairchild Semiconductor製の IC は、フラット パックで抵抗器トランジスタ ロジック(RTL) を使用して実装されました。それらはワイヤ ラップによって接続され、配線はキャストエポキシ樹脂に埋め込まれました。[16] : 129
AGC全体で単一タイプのIC(デュアルNOR3)を使用することで、ダイオードトランジスタロジックとダイオードロジックゲートを組み合わせて使用したミニットマンII 誘導コンピュータという別の初期のICコンピュータ設計で問題となった問題を回避できました。[要出典] NORゲートは汎用的なロジックゲートであり、他のゲートもそこから作成できますが、使用するゲート数が多くなります。[17]
メモリ
このコンピュータには、2,048ワードの消去可能な磁気コアメモリと36,864ワードの読み取り専用 コアロープメモリがありました。[16] : 27, 90–93 両方ともサイクルタイムは11.72マイクロ秒でした。[16] : 27 メモリワード長は16ビットで、15ビットのデータと1つの奇数パリティビットでした。CPU内部の16ビットワード形式は、14ビットのデータ、1つのオーバーフロービット、および1つの符号ビット(1の補数表現)でした。[16] : 35–37
DSKYインターフェース
_used_on_F-8_DFBW_DVIDS683588.jpg/500px-Apollo_display_and_keyboard_unit_(DSKY)_used_on_F-8_DFBW_DVIDS683588.jpg)

AGC のユーザー インターフェイスは DSKY で、これはディスプレイとキーボードの略で、通常は「ディスキー」と発音されます。このデバイスには、一連のインジケータ ライト、数値ディスプレイ、および電卓スタイルのキーボードがあります。コマンドは、2 桁の数字、つまりVerbとNounで数値的に入力されます。Verbは実行されるアクションの種類を示し、Noun はVerb コマンドで指定されたアクションによって影響を受けるデータを指定します。
各桁は緑色(530 nm [18]と指定)の高電圧発光 7セグメントディスプレイで表示されました。これらは電気機械式リレーで駆動され、更新速度が制限されていました。3つの5桁の符号付き数字は8進数または10進数で表示することもでき、通常は宇宙船の姿勢や必要な速度変化(デルタV )などのベクトルを表示するために使用されました。データは内部的にメートル単位で保存されていましたが、米国慣用単位で表示されました。この電卓スタイルのインターフェイスは、この種のものとしては初めてのものでした。
コマンド モジュールには、AGC に接続された DSKY が 2 つあります。1 つはメイン計器パネルにあり、もう 1 つは慣性誘導プラットフォームの位置合わせに使用する六分儀の近くの下部機器ベイにあります。月着陸船には、AGC 用に DSKY が 1 つありました。AGCによって制御されるフライト ディレクター姿勢指示器(FDAI) は、DSKY の上にあるコマンド コンソールと月着陸船上にありました。
タイミング
AGC タイミング リファレンスは、2.048 MHz の水晶 クロックから得られました。このクロックは 2 で割られ、AGC が内部操作を実行するために使用する4 相 1.024 MHz クロックが生成されました。1.024 MHz クロックも 2 で割られ、マスター周波数と呼ばれる 512 kHz 信号が生成されました。この信号は、外部のアポロ宇宙船システムを同期するために使用されました。
マスター周波数はスケーラーによってさらに分割され、最初はリング カウンターを使用して 5 で分割され、102.4 kHz の信号が生成されます。次に、F1 (51.2 kHz) から F17 (0.78125 Hz) と呼ばれる 17 の連続ステージで 2 で分割されます。F10 ステージ (100 Hz) は AGC にフィードバックされ、 Pinc (後述) を使用してリアルタイム クロックとその他の非自発的カウンターを増分します。F17 ステージは、AGC がスタンバイモードで動作しているときに AGC を断続的に実行するために使用されました。
中央レジスター
AGC には、中央レジスタと呼ばれる一般的な計算用の16 ビットレジスタが4 つあります。
コア メモリには、アドレス 20 ~ 23 の 4 つの場所があり、編集場所と呼ばれています。これは、そこに保存されている内容が 1 ビット位置シフトまたは回転されて表示されるためです。ただし、1 つの場所では、7 ビット位置右にシフトして、1 ワードに 2 つパックされた 7 ビットの解釈オペコードの 1 つを抽出します。これは、ブロック I およびブロック II AGC に共通です。
その他のレジスター



AGC には、動作中に内部で使用される追加のレジスタがありました。
- S : 12ビットのメモリアドレスレジスタ、メモリアドレスの下位部分
- Bank/Fbank :固定切り替えモードでアドレス指定するときに1キロワードROM バンクを選択するための 4 ビット ROM バンク レジスタ
- Ebank : 消去可能切り替えモードでアドレス指定するときに256ワードのRAMバンクを選択するための3ビットRAMバンクレジスタ
- Sbank (スーパーバンク): Fbank の 1 ビット拡張。36 キロワード ROM の最後の 4 キロワードは Fbank だけではアクセスできないため必要。
- SQ : 4ビットシーケンスレジスタ; 現在の命令
- G : 16ビットのメモリバッファレジスタ。メモリとの間で移動するデータワードを保持します。
- X :加算器への 'x' 入力(加算器はすべて1 の補数演算を実行するために使用) またはプログラム カウンタ ( Zレジスタ)への増分
- Y : 加算器へのもう一方の入力('y')
- U : 実際にはレジスタではなく、加算器の出力(レジスタXとYの内容の1 の補数の合計)
- B : 汎用バッファレジスタ。次の命令をプリフェッチするためにも使用されます。次の命令の開始時に、Bの上位ビット(次のオペコードを含む)がSQにコピーされ、下位ビット(アドレス)がSにコピーされます。
- C : 独立したレジスタではなく、 Bレジスタの1の補数
- IN : 4つの16ビット入力レジスタ
- OUT : 5つの16ビット出力レジスタ
命令セット
命令フォーマットでは、オペコードに 3 ビット、アドレスに 12 ビットが使用されました。ブロック I には、、、、、、、 (基本)、および、、、、(追加) の 11 個の命令がありましたTC。最初の8個はCCS基本命令と呼ばれ、 3 ビットのオペコードによって直接アクセスされました。最後の 3 個は、命令の直前に
特別なタイプの命令 (と呼ばれる) を実行することによってアクセスされたため、追加コード命令と呼ばれました。INDEXXCHCSTSADMASKSUMPDVTCEXTEND
ブロック I AGC 命令は次の内容で構成されます。
TC(転送制御)- 命令によって指定されたアドレスへの無条件分岐。戻りアドレスは Q レジスタに自動的に格納されるため、この
TC命令はサブルーチン呼び出しに使用できます。 CCS(カウント、比較、スキップ)- 複雑な条件分岐命令。A レジスタには、命令で指定されたアドレスから取得したデータがロードされます。(AGC は1 の補数表記を使用するため、ゼロの表現は 2 つあります。すべてのビットがゼロに設定されている場合、これはプラス ゼロと呼ばれます。すべてのビットが 1 に設定されている場合、これはマイナス ゼロと呼ばれます。)次に、データの絶対減少値(DABS) が計算され、A レジスタに格納されます。数値がゼロより大きい場合、DABS は値を 1 減らします。数値が負の場合、減分を適用する前に補数が取られます。これが絶対値です。減少とは、「減分されるがゼロ未満ではない」ことを意味します。したがって、AGC が DABS 機能を実行すると、正の数値はプラス ゼロに向かい、負の数値も同様ですが、最初に以下の 4 方向スキップによって負であることが示されます。最後のステップは
CCS、DABS 前のレジスタ A のデータに応じて、4 方向スキップです。レジスタ A が 0 より大きい場合、 はCCS直後の最初の命令にスキップしますCCS。レジスタ A にプラスのゼロが含まれていた場合、CCSは の後の 2 番目の命令にスキップしますCCS。ゼロ未満の場合は の後の 3 番目の命令にスキップしCCS、マイナスのゼロの場合は の後の 4 番目の命令にスキップしますCCS。カウントの主な目的は、正のカウンタによって制御される通常のループを で終了しCCS、 をTCループの先頭にできるようにすることでした。これはIBM 360のと同等ですBCT。絶対値関数は、この命令に組み込むほど重要であると見なされました。この目的のためだけに使用する場合、 の後のシーケンスは*+2、*+2、 ONECCSでした。奇妙な副作用は、テストされる値が決して正にならないことがわかっている場合に- ホールが作成され、使用されることです。これは、想像以上に頻繁に発生しました。これにより、2 つのワード全体が未使用のままになり、特別委員会がこれらのホールにデータ定数を割り当てる責任がありました。TCTCADCCS INDEX- 命令で指定されたアドレスで取得されたデータを次の命令に追加します。を使用して、後続の命令のオペランドで指定されたベース アドレス
INDEXにインデックス値を加算または減算できます。 この方法は、配列とテーブル検索を実装するために使用されます。 両方のワード全体で加算が実行されるため、後続の (エクストラコード) 命令の op. コードを変更するためにも使用され、まれに両方の機能が同時に使用されます。INDEX RESUMEINDEX( 25)の特別なインスタンスINDEX。これは割り込みから戻るために使用される命令です。これにより、中断された場所から実行が再開されます。XCH(交換)- メモリの内容を A レジスタの内容と交換します。指定されたメモリ アドレスが固定 (読み取り専用) メモリ内にある場合、メモリの内容は影響を受けず、この命令は単にレジスタ A をロードします。消去可能なメモリ内にある場合、A の 16 ビットの左端をメモリの符号ビットとして保存することでオーバーフローの「修正」が行われますが、のような例外的な動作はありません
TS。 CS(クリアして減算)- 指定されたメモリ アドレスによって参照されるデータの 1 の補数をレジスタ A にロードします。
TS(保管場所へ転送)- レジスタ A を指定されたメモリ アドレスに格納します。また、 は、多精度加算/減算のキャリーを伝播するような方法でオーバーフロー
TSを検出して修正します。結果にオーバーフローがない場合 ( A の左端の 2 ビットが同じ)、特別なことは何も起こりません。オーバーフローがある場合 (これらの 2 ビットが異なる)、左端のビットが符号ビットとしてメモリに送られ、レジスタ A はそれに応じて +1 または -1 に変更され、制御は に続く 2 番目の命令にスキップします。オーバーフローが発生する可能性があるが異常なイベントの場合は常に、の後にオーバーフローなしロジックへの が続きます。オーバーフローが通常の可能性である場合 (多精度加算/減算など)、 の後にゼロ ( =固定メモリへ)が続き、次のより高い精度のワードへのキャリー (+1、0、または -1) の形成が完了します。角度は単精度、距離と速度は倍精度、経過時間は三倍精度 で保持されます。TSTSTCTSCAFCAFXCH AD(追加)- メモリの内容をレジスタ A に追加し、その結果を A に格納します。A の左端の 2 ビットは、の前後で異なる (オーバーフロー状態) 場合があります
AD。オーバーフローはイベントではなく状態であるため、中間の合計がワードの容量の 2 倍を超えない限り、2 つ以上の数値を加算するときにオーバーフローの範囲が制限されます。 MASK- レジスタ Aとメモリのビット単位 (ブール) の AND を実行し、結果をレジスタ A に格納します。
MP(掛け算)- レジスタ A の内容を参照されたメモリ アドレスのデータで乗算し、上位の積をレジスタ A に格納し、下位の積をレジスタ LP に格納します。積の各部分の符号は一致します。
DV(分ける)- レジスタ A の内容を、参照されたメモリ アドレスのデータで割ります。商をレジスタ A に格納し、剰余の絶対値をレジスタ Q に格納します。最新のマシンとは異なり、固定小数点数は分数として扱われます (符号ビットのすぐ右側に概念上の小数点があります)。そのため、除数が被除数より大きくない場合は、ゴミが生成される可能性があります。この状況に対する保護はありません。Block II AGC では、倍精度の被除数は A と L (Block II LP) で開始され、正しく符号付けされた剰余が L に渡されました。これにより、倍精度除算のサブルーチンが大幅に簡素化されました。
SU(減算)- 参照されたメモリ アドレスのデータをレジスタ A の内容から減算 (1 の補数) し、結果を A に格納します。
命令は、タイミング パルスと呼ばれる 12 ステップのグループで実装されました。タイミング パルスは、TP1 から TP12 までと名付けられました。12 個のタイミング パルスの各セットは、命令サブシーケンスと呼ばれました。TC などの単純な命令は、12 個のパルスの単一のサブシーケンスで実行されます。より複雑な命令では、複数のサブシーケンスが必要です。乗算命令 ( MP) は、8 つのサブシーケンスを使用します。最初のサブシーケンスは と呼ばれMP0、その後に と呼ばれるMP1サブシーケンスが 6 回繰り返され、最後にMP3サブシーケンスで終了します。これは、ブロック II では 3 つのサブシーケンスに削減されました。
サブシーケンス内の各タイミング パルスは、最大 5 つの制御パルスをトリガーできます。制御パルスは、レジスタの内容をバスに読み取ったり、バスからレジスタにデータを書き込んだりするなど、命令の実際の作業を実行する信号です。
メモリ

ブロック I AGC メモリは、1 キロワードのバンクに編成されていました。最下位のバンク (バンク 0) は消去可能メモリ (RAM) でした。バンク 0 より上のすべてのバンクは固定メモリ (ROM) でした。各 AGC 命令には 12 ビットのアドレス フィールドがありました。下位ビット (1 ~ 10) は、各バンク内のメモリをアドレス指定しました。ビット 11 と 12 はバンクを選択しました。00 は消去可能メモリ バンクを選択し、01 は固定メモリの最下位バンク (バンク 1) を選択し、10 は次のバンク (バンク 2) を選択し、11 は2 より上の任意のバンクを選択するために使用できるバンクレジスタを選択しました。バンク 1 と 2 は、バンク レジスタの内容に関係なく常に使用可能であったため、固定固定メモリと呼ばれていました。バンク 3 以上は、選択されたバンクがバンク レジスタによって決定されるため、 固定切り替え可能と呼ばれていました。
ブロック I AGC には当初 12 キロワードの固定メモリがありましたが、後に 24 キロワードに増加されました。ブロック II には 36 キロワードの固定メモリと 2 キロワードの消去可能メモリがありました。
AGC は、メモリ サイクルと呼ばれるプロセスで、G レジスタを介してメモリとの間でデータを転送します。メモリ サイクルには 12 個のタイミング パルス (11.72 μs) が必要です。サイクルは、AGC がフェッチするメモリ アドレスを S レジスタにロードしたタイミング パルス 1 (TP1) で開始されます。メモリ ハードウェアは、S レジスタで指定されたアドレスにあるメモリからデータ ワードを取得します。消去可能メモリからのワードはタイミング パルス 6 (TP6) によって G レジスタに格納され、固定メモリからのワードはタイミング パルス 7 によって使用可能になります。取得されたメモリ ワードは、タイミング パルス 7 から 10 の間、AGC アクセスのために G レジスタで使用可能になります。タイミング パルス 10 の後、G レジスタのデータはメモリに書き戻されます。
AGC メモリ サイクルは、AGC 動作中に継続的に発生しました。メモリ データを必要とする命令は、タイミング パルス 7 ~ 10 の間にメモリにアクセスする必要がありました。AGC が G レジスタのメモリ ワードを変更した場合、変更されたワードはタイミング パルス 10 の後にメモリに書き戻されました。このように、データ ワードはメモリから G レジスタへ、そして再びメモリへ継続的に循環しました。
各メモリ ワードの下位 15 ビットには AGC 命令またはデータが格納され、各ワードは 16 番目の奇数パリティ ビットによって保護されています。このビットはパリティ ジェネレータ回路によって 1 または 0 に設定されるため、各メモリ ワードの 1 の数は常に奇数になります。パリティ チェック回路は各メモリ サイクル中にパリティ ビットをテストし、ビットが期待値と一致しない場合は、メモリ ワードが破損していると見なされ、パリティ アラームパネル ライトが点灯します。
割り込みと不本意なカウンター
AGC には 5 つのベクトル割り込みがありました。
- ユーザー ディスプレイ (DSKY) を更新するために、Dsruptが定期的にトリガーされました。
- さまざまなハードウェア障害またはアラームによってEruptが生成されました。
- Keyrupt は、ユーザーのキーボードからのキーの押下を通知しました。
- T3Rrupt は、AGC のリアルタイム クロックを更新するためにハードウェア タイマーから定期的に生成されました。
- 16 ビット ワードのアップリンク データが AGC にロードされるたびに、割り込みが発生しました。
AGC は、各割り込みに対して、現在のプログラムを一時的に中断し、短い割り込みサービス ルーチンを実行してから、中断されたプログラムを再開することで応答しました。
AGC には 20 個の非自発的カウンタもありました。これらは、アップ/ダウン カウンタまたはシフト レジスタとして機能するメモリ位置でした。カウンタは、内部入力に応じて増分、減分、またはシフトします。増分 ( Pinc )、減分 ( Minc )、またはシフト ( Shinc ) は、任意の 2 つの通常命令の間に挿入されたマイクロ命令のサブシーケンス 1 つによって処理されました。
カウンタがオーバーフローすると、割り込みがトリガーされる可能性があります。T3rupt および Dsrupt 割り込みは、100 Hz ハードウェア クロックで駆動されるカウンタが、多数の Pinc サブシーケンスを実行した後にオーバーフローすると生成されます。Uprupt 割り込みは、Shinc サブシーケンスを実行するカウンタが 16 ビットのアップリンク データを AGC にシフトした後にトリガーされます。
スタンバイモード
AGC には、スタンバイ許可スイッチによって制御される省電力モードがありました。このモードでは、2.048 MHz クロックとスケーラー以外の AGC 電源がオフになりました。スケーラーからの F17 信号により、AGC 電源と AGC が 1.28 秒間隔でオンに戻りました。このモードでは、AGC は重要な機能を実行し、スタンバイ許可スイッチをチェックし、まだ有効な場合は電源をオフにして、次の F17 信号までスリープ状態に戻りました。
スタンバイ モードでは、AGC はほとんどの時間スリープ状態でした。そのため、AGC のリアルタイム クロックを 10 ミリ秒間隔で更新するために必要な Pinc 命令を実行するために起動していませんでした。これを補うために、スタンバイ モードで起動するたびに AGC によって実行される機能の 1 つは、リアルタイム クロックを 1.28 秒更新することでした。
スタンバイ モードは、AGC が不要な中間飛行中に電力を 5 ~ 10 W (70 W から) 削減するように設計されました。ただし、実際には、AGC はミッションの全フェーズでオンのままであり、この機能は一度も使用されませんでした。
データバス
AGC には 16 ビットの読み取りバスと 16 ビットの書き込みバスがありました。中央レジスタ (A、Q、Z、または LP) またはその他の内部レジスタからのデータは、制御信号によって読み取りバスにゲートできます。読み取りバスは非反転バッファを介して書き込みバスに接続されているため、読み取りバスに表示されるデータは書き込みバスにも表示されます。その他の制御信号によって、書き込みバスのデータをレジスタにコピーできます。
データ転送は次のように動作します。次の命令のアドレスを B レジスタから S レジスタに移動するには、RB (読み取り B) 制御信号が発行されます。これにより、アドレスがレジスタ B から読み取りバスに移動し、次に書き込みバスに移動します。WS (書き込み S) 制御信号により、アドレスが書き込みバスから S レジスタに移動されます。
複数のレジスタを同時に読み取りバスに読み取ることができます。その場合、各レジスタのデータはバスに包括的ORされます。この包括的OR機能は、論理AND演算である Mask 命令を実装するために使用されました。AGC には論理AND を実行するネイティブ機能がありませんが、バスを介して論理ORを実行し、C レジスタを介してデータを補完 (反転) できるため、ド モルガンの定理を使用して論理ANDと同等のものを実装しました。これは、両方のオペランドを反転し、バスを介して論理OR を実行し、結果を反転することで実現されました。
ソフトウェア

AGCソフトウェアはAGCアセンブリ言語で書かれ、ロープメモリに保存されていました。ソフトウェアの大部分は読み取り専用のロープメモリに保存されていたため、動作中に変更することはできませんでした[20]が、ソフトウェアのいくつかの重要な部分は標準の読み書き可能な磁気コアメモリに保存されており、アポロ14号で行われたように、宇宙飛行士がDSKYインターフェイスを使用して上書きすることができました。
J. ハルコム・レーン[21]が設計したシンプルなリアルタイムオペレーティングシステムは、協調型マルチタスクを使用したバッチジョブスケジューリングの「Exec」[22]と、タイマー駆動の「タスク」をスケジュールする「Waitlist」と呼ばれる割り込み駆動のプリエンプティブスケジューラで構成され、コンピュータを制御しました。タスクは短い実行スレッドであり、Waitlist で再実行するように再スケジュールすることも、Exec で「ジョブ」を開始してより長い操作を開始することもできます。計算はメートル法を使用して行われましたが、ディスプレイの読み取りはフィート、フィート/秒、海里の単位で行われました。これはアポロ宇宙飛行士が慣れ親しんだ単位です。[23]
AGC には、 MIT 計測研究所によって開発された高度なソフトウェア インタープリタがあり、ネイティブ AGC よりも複雑で高機能な疑似命令を備えた仮想マシンを実装していました。これらの命令により、ナビゲーション プログラムが簡素化されました。倍精度三角関数、スカラーおよびベクトル演算 (16 ビットと 24 ビット)、さらにはMXV(行列 × ベクトル) 命令を備えたインタープリタ コードは、ネイティブ AGC コードと混在させることができました。疑似命令の実行時間は増加しましたが (実行時にこれらの命令を解釈する必要があるため)、インタープリタは AGC がネイティブでサポートするよりもはるかに多くの命令を提供し、メモリ要件は、コンピューターに追加のメモリを組み込む必要がある AGC ネイティブ言語にこれらの命令を追加する場合よりもはるかに低くなりました ( 1960 年代のメモリは非常に高価でした)。平均的な疑似命令の実行には約 24 ミリ秒かかりました。初期のプロトタイプのクリスマス コンピューターにちなんでYULと名付けられたアセンブラ[24]は、ネイティブ コードとインタープリタ コード間の適切な遷移を強制しました。
「ピンボール」と呼ばれる割り込み駆動型のユーザー インターフェイス ルーチンのセットは、AGC で実行されているジョブとタスクにキーボードと表示サービスを提供しました。宇宙飛行士がさまざまなメモリ位置の内容を1、2、または 3 つのレジスタのグループごとに8 進数または 10 進数で表示できるように、ユーザーがアクセスできるルーチンのセットが提供されました。オペレーターが特定のメモリ位置の内容を定期的に再表示するタスクを開始できるように、「モニター」ルーチンが提供されました。ジョブを開始できました。
1960年代後半にチャールズ・ドレイパーが指揮したMIT計測研究所でAGC用に開発された設計原理は、ソフトウェア工学、特に非同期ソフトウェア、優先スケジューリング、テスト、人間参加型の意思決定能力に依存するより信頼性の高いシステムの設計の基礎となった。 [25] AGCの設計要件が定義されたとき、必要なソフトウェアとプログラミング手法は存在していなかったため、ゼロから設計する必要がありました。使用された軌道および誘導アルゴリズムの多くは、リチャード・バッティンによる以前の研究に基づいていました。[21]最初の司令船の飛行は、アレックス・コスマラが開発を主導したCORONAと呼ばれるソフトウェアパッケージによって制御されました。月面ミッション用のソフトウェアは、フレデリック・マーティンが開発を主導した司令船用のCOLOSSUSと、ジョージ・チェリーが開発[27]ハミルトンは宇宙飛行士がソフトウェアとどのようにやり取りするかに非常に興味を持っており、人為的ミスによって発生する可能性のあるエラーの種類を予測しました。[22] [27]プロジェクトのソフトウェア開発には合計1400人年の労力がかかり、ピーク時には350人の従業員がいました。[21] 2016年、ハミルトンは飛行ソフトウェアの作成における役割により大統領自由勲章を受賞しました。
アポロ誘導コンピュータソフトウェアは、スカイラブ、スペースシャトル、初期のフライ・バイ・ワイヤ戦闘機システムの設計に影響を与えました。 [28] [29]
アポロ誘導コンピュータは、ニール・アームストロング、バズ・オルドリン、マイケル・コリンズの3人の宇宙飛行士を支援したため、「第4の宇宙飛行士」と呼ばれています。[30]
ブロック II
AGC のブロック II バージョンは 1966 年に設計されました。基本的なブロック I アーキテクチャは保持されていましたが、消去可能なメモリが 1 キロワードから 2 キロワードに増加されました。固定メモリは 24 キロワードから 36 キロワードに拡張されました。命令は 11 から 34 に拡張され、ブロック I の I/O レジスタを置き換えるために I/O チャネルが実装されました。実際に月まで飛行したのはブロック II バージョンです。ブロック I は無人アポロ 4 号と6 号の飛行中に使用され、不運なアポロ 1 号にも搭載されました。
ブロック II のメモリと命令セットを拡張する一方で、ブロック I の制限的な 3 ビットのオペコードと 12 ビットのアドレスを保持するという決定は、興味深い設計上の結果をもたらした。参照されると特定の機能を実装する特別なメモリ アドレスを持つなど、追加の命令を詰め込むためにさまざまなトリックが採用された。たとえば、INDEXアドレス 25 への命令はRESUME、割り込みから戻る命令をトリガーした。同様に、INDEX17 はINHINT命令 (割り込み禁止) を実行し、INDEX16 はそれらを再度有効にした ( )。その他の命令は、と呼ばれるRELINT特別なバージョンの をその前に配置することで実装された。アドレス空間は、Bank (固定) レジスタと Ebank (消去可能) レジスタを使用することで拡張されたため、特定の時点でアドレス指定できるメモリは、どちらのタイプでも現在のバンクと、少量の固定-固定メモリと消去可能メモリだけになった。さらに、バンク レジスタは最大 32 キロワードをアドレス指定できるため、最後の 4 キロワードにアクセスするには Sbank (スーパー バンク) レジスタが必要だった。バンク間サブルーチン呼び出しはすべて、戻り時に元のバンクを復元するための特別な関数を介して固定固定メモリから開始する必要がありました。これは基本的に、far ポインターのシステムです。
TCEXTEND
Block II AGCにはEDRUPT命令もあります(この名前は、この命令を要求したプログラマーのEd Smallyにちなんで、Ed's InterruptRESUMEを短縮したものです)。この命令は割り込みを生成せず、割り込み処理に共通する2つのアクションを実行します。最初のアクションは、それ以上の割り込みを禁止します(再び割り込みを有効にするには命令が必要です)。2番目のアクションでは、レジスタにプログラムカウンタ(Z)の現在の値がロードされます。この命令は、アポロソフトウェアで月着陸船ZRUPTのデジタルオートパイロットのDAPサイクル終了シーケンスを設定するために一度だけ使用されました。[31] LEM AGC Luminaryソフトウェアのエミュレーションの問題の原因であると考えられています。
1201および1202プログラムアラーム
.jpg/500px-AS11-36-5391_(21710608621).jpg)
アポロ11号の月面降下中にPGNCSは予期せぬ警告を発し、AGCは1202アラーム(「エグゼクティブオーバーフロー - コアセットなし」)[32]、次に1201アラーム(「エグゼクティブオーバーフロー - 真空エリアなし」)を表示した。[33] [要出典]どちらのアラームに対してもAGCはソフトリスタートで応答した。原因は、ランデブーレーダー(軌道上の司令船を追跡)からの偽のサイクルスティールの急速で安定した流れであり、降下中に中止が必要な場合に備えて意図的にスタンバイ状態にしておいた。[34] [35]
アプローチのこの部分では、プロセッサは通常、ほぼ 85% の負荷がかかります。1 秒あたり 6,400 サイクル スチールの追加により、13% の負荷が追加され、スケジュールされたすべてのタスクが完了するまでの時間が残りました。降下開始から 5 分後、バズ オルドリンはコンピュータにコマンド1668 を与え、定期的に DELTAH (レーダーで感知された高度と計算された高度の差) を計算して表示するように指示しました。[注 1] 1668により、プロセッサの作業負荷がさらに 10% 増加し、実行オーバーフローと1202アラームが発生しました。ヒューストンから「GO」を受け取った後、オルドリンは再び1668を入力し、別の1202アラームが発生しました。2 回目のアラームを報告する際、オルドリンは「 1668 が起動しているときに起動するようです」というコメントを追加しました。 AGCソフトウェアは優先スケジュールで設計されており、1668表示タスクを含む優先度の低いタスクを削除して自動的に回復し、重要な誘導および制御タスクを完了しました。誘導管制官のスティーブ・ベイルズとジャック・ガーマンを含むサポートチームは数回の「GO」コールを発行し、着陸は成功しました。[36]
この問題はAGCのプログラミングエラーでもパイロットのミスでもなかった。これは周辺ハードウェア設計のバグであり、アポロ5号のエンジニアによって既に知られ、文書化されていた。[37]しかし、テスト中に問題が一度しか発生しなかったため、彼らは、新しいがほとんどテストされていないレーダーシステムで飛行するよりも、既にテスト済みの既存のハードウェアで飛行する方が安全であると結論付けた。実際のハードウェアでは、ランデブーレーダーの位置は、コンピューターがタイミングリファレンスとして使用しているものとは異なる800Hz ACソースによって励起された同期信号でエンコードされていた。2つの800Hzソースは周波数がロックされていたが位相はロックされておらず、小さなランダム位相変動により、アンテナが完全に静止しているにもかかわらず、位置が急速に「ディザリング」しているように見えた。これらの幻覚的な動きにより、一連のサイクルスティールが急速に発生した。
J.ハルコム・レーニングのソフトウェアとコンピュータ設計は、アポロ11号の着陸ミッションを救った。レーニングの設計がなかったら、安定した誘導コンピュータが不足していたため、着陸は中止されていただろう。[37] [38]
アポロ以外のアプリケーション

AGCは、コンピューター駆動のフライ・バイ・ワイヤ(FBW)の実用性を実証するためにF-8クルセイダーに搭載された実験的なフライ・バイ・ワイヤシステムの基礎となった。プログラムの第1フェーズで使用されたAGCは第2フェーズで別の機械に置き換えられ、プログラムの研究はスペースシャトルのフライ・バイ・ワイヤシステムの開発につながった。AGCはまた、間接的ではあるが、当時開発されていた戦闘機のフライ・バイ・ワイヤシステムの開発にもつながった。[39]
ソースコードリリース
2003年、ロン・バーキーはアポロ誘導コンピュータ(AGC)のソースコードを復元し、機能するエミュレーターを構築することを目的とした仮想AGCプロジェクトを開始しました。 [40] [41]このプロジェクトの一環として、1960年代のハードコピーから転写されデジタル化された元のコード[42]が、仮想AGCプロジェクトとMIT博物館を通じて公開されました。[43]この取り組みは、2016年半ばに元NASAインターンのクリス・ギャリーがコードをGitHubにアップロードし、メディアで大きな話題を呼んだことで再び注目を集めました。[44] [45] [46]
参照
- アポロ PGNCS - アポロ主要誘導航法システム
- スペースシャトルで使用されたAP-101 (IBM S/360 由来) コンピュータ
- ジェミニ誘導コンピュータ
- コンピュータハードウェアの歴史
注記
- ^ より具体的には、動詞 16 は AGC に名詞(この場合は 68、DELTAH) を 1 秒あたり約 2 回印刷するように指示します。Aldrin がこれを知っていれば、単純な0668 (DELTAH を計算して 1 回表示) ではシステムに約 5% の負荷しか追加されず、ENTER が押されたときに 1 回だけ実行されることになります。
参考文献
- ^ プログラマーズマニュアル、ブロック 2 AGC アセンブリ言語、2018 年 8 月 27 日取得
- ^ ab Hall, Eldon C. (1996)、「月への旅:アポロ誘導コンピュータの歴史」、米国バージニア州レストン:AIAA、p. 196、ISBN 1-56347-185-X
- ^ Interbartolo, Michael (2009 年 1 月). 「アポロの誘導、航法、制御ハードウェアの概要」(PDF)。
- ^ 「アポロの飛行コンピューターはどのようにして人類を月まで行き帰還させたのか?」 2017年3月11日。
- ^ James E. Tomayko (1988). 「アポロ誘導コンピュータ: ハードウェア」。宇宙飛行におけるコンピュータ: NASAの経験。NASA。2023年12月29日時点のオリジナルよりアーカイブ。
- ^ Agle, DC (1998年9月). 「Flying the Gusmobile」. Air & Space . 2018年12月15日閲覧。
- ^ 「Ramon Alonso の紹介」、AGC History Project (Caltech アーカイブ、元のサイトは閉鎖)、MIT、2001 年 7 月 27 日、 2009 年 8 月 30 日閲覧
- ^ 「ラモン・アロンソのインタビュー(スペイン語)」、ラモン・アロンソ、エル・アルヘンティーノ・ケ・レヴォ・ア・ラ・アポロ11・ア・ラ・ルナ、ディアリオ・ラ・ナシオン、2010年3月7日
- ^ 「ヒュー・ブレア=スミスの伝記」、AGC History Project(Caltech アーカイブ、オリジナルサイトは閉鎖)、MIT、2002 年 1 月、 2009 年 8 月 30 日閲覧
- ^ 「Herb Thaler introduction」、AGC History Project (Caltech アーカイブ、元のサイトは閉鎖)、MIT、2001 年 9 月 14 日、2009 年 8 月 30 日閲覧
- ^ Kurinec, Santosh K; Indovina, Mark; McNulty, Karl; Seitz, Matthew (2021). 「歴史の再現: 1969 年にアポロ 11 号で月面に載ったチップの作成」(PDF)。ロチェスター工科大学。p. 9 。2023 年8 月 29 日閲覧。
- ^ 「ロジック モジュール アセンブリ NO. A1-A16」。MIT 計測研究所。1963 年 7 月 11 日。p. シート 1/2、注 2。
- ^ 「抵抗溶接電子回路モジュールおよびアセンブリのプロセス制御と製造に関するアポロ要件」Archive.org。NASA。1963年5月22日。 2024年2月19日閲覧。
- ^ Butrica, Andrew J. (2015). 「第3章: 集積回路の製造におけるNASAの役割」。Dick, Steven J. (編) 宇宙飛行の社会的影響に関する歴史的研究(PDF)。NASA。pp . 149–250。ISBN 978-1-62683-027-1。
- ^ 「アポロ誘導コンピュータと最初のシリコンチップ」。国立航空宇宙博物館。スミソニアン協会。2015年10月14日。 2019年9月1日閲覧。
- ^ abcde Hall, Eldon C. (1972). アポロ計画におけるMITの役割:契約NAS 9-163およびNAS 94065に関する最終報告書(PDF)。マサチューセッツ州ケンブリッジ:MIT 。 2021年6月15日閲覧。
- ^ Peirce, CS (1880-81年冬の原稿)、「A Boolian Algebra with One Constant」、1933年Collected Papers v. 4、段落12-20に掲載。1989年にWritings of Charles S. Peirce v. 4、pp. 218-221に再版、Google [1]。Roberts, Don D. (2009)、 The Existential Graphs of Charles S. Peirce 、p. 131を参照。
- ^ 「アポロDSKYパネルの再点灯:全容」YouTube。2021年7月27日。
- ^ Weinstock, Maia (2016-08-17). 「MITの風景: マーガレット・ハミルトンのアポロ・コード」. MITニュース. 2016年8月17日閲覧。
- ^ ミンデル2008、154、157頁。
- ^ abc Hoag, David (1976 年 9 月)。「アポロ搭載誘導、航行、制御の歴史」(PDF)。チャールズ・スターク・ドレイパー研究所。
- ^ ミンデル2008、149ページより。
- ^ 「月面着陸」。英国メートル法協会。2018年10月18日。
- ^ 「ヒュー・ブレア・スミスの紹介」、AGC History Project(Caltech アーカイブ、オリジナルサイトは閉鎖)、MIT、2001 年 11 月 30 日、 2010 年 3 月 21 日閲覧
- ^ 「NASAがアポロのエンジニアを表彰」(プレスリリース)2003年9月3日。
- ^ 「仮想AGC Luminaryページ」。
- ^ ab Harvey IV、Harry Gould (2015年10月13日)。「彼女のコードは人類を月に送り込み、ソフトウェアそのものを発明した」WIRED 。 2018年11月25日閲覧。
- ^ 「マーガレット・ハミルトンについて」NASA論理設計局。2010年2月3日。
- ^ AJS Rayl. 「NASAのエンジニアと科学者 - 夢を現実に変える」。2016年5月16日時点のオリジナルよりアーカイブ。
- ^ フォン、ケビン(2019年)。「月まで13分:エピソード5 4人目の宇宙飛行士」。bbc.co.uk。BBCワールドサービス。
- ^オブライエン、フランク(2010-06-25)。アポロ誘導コンピュータ :アーキテクチャと操作。Springer Science & Business Media。ISBN 978-1-4419-0877-3。
- ^ コリンズ、マイケル、オルドリン、エドウィン (1975)、エドガー・M・コートライト (編)、「黄色の警告灯」、NASA SP-350、アポロ月探査、ワシントン DC: NASA、pp. 第 11.4 章、ISBN 978-0486471754、 2009年8月30日取得
- ^ “クリスギャリー/アポロ 11 号”. GitHub 。2016 年 7 月 17 日に取得。
- ^ Adler, Peter (1998)、Jones, Eric M. (ed.)、「Apollo 11 Program Alarms」、Apollo 11 Lunar Surface Journal、NASA 、 2009年9月1日閲覧
- ^ Martin, Fred H. (1994 年 7 月)、Jones, Eric M. (編)、「Apollo 11 : 25 Years Later」、Apollo 11 Lunar Surface Journal、NASA 、 2009 年 9 月 1 日取得
- ^ Cortright, Edgar M. 編 (1975)、「The Lunar Module Computer」、Apollo 11 Lunar Surface Journal、NASA 、2010 年 2 月 4 日閲覧
- ^ ab Eyles, Don (2004 年 2 月 6 日)、「月着陸船誘導コンピュータの物語」、第 27 回年次誘導制御会議、コロラド州ブレッケンリッジ: アメリカ宇宙航行学会
- ^ ウィット、スティーブン(2019年6月24日)。「アポロ11号:制御不能のミッション」。Wired。サンフランシスコ:コンデナスト・パブリケーションズ。 2019年9月18日閲覧。
- ^ Tomayko, James E. (2000)、「NASA SP-2000-4224 — Computers Take Flight: A History of NASA's Pioneering Digital Fly-By-Wire Project」(PDF)、NASA History Series、ワシントン DC: NASA 、2009 年 9 月 1 日取得
- ^ Burkey, Ron. 「VirtualAGC」. iBiblio . 2021年4月10日閲覧。
- ^ 「AGC ソースコードコレクション on Github, kept by iBiblio」。GitHub 。 2021年5月7日時点のオリジナルよりアーカイブ。代替URL
- ^ 「Apollo ソースコードのアーカイブと参照」www.softwareheritage.org . 2021 年 9 月 9 日閲覧。
- ^ 「仮想AGCホームページ」。ibiblio.org 。 2021年9月9日閲覧。
- ^ コリンズ、キース(2016年7月9日)。「アメリカを月へ導いたコードがGitHubに公開された。まるで1960年代のタイムカプセルだ」Quartz 。 2016年8月19日閲覧。
- ^ Garry, Chris. 「コマンドモジュールと月着陸船用のオリジナルのアポロ11号誘導コンピューター(AGC)ソースコード」。GitHub 。 2021年4月12日時点のオリジナルよりアーカイブ。代替URL
- ^ 「アポロ11号のソースコードがGitHubに公開」Engadget 2016年7月10日2021年9月9日閲覧。
出典
- ミンデル、デビッド A. (2008)。デジタルアポロ:宇宙飛行における人間と機械。マサチューセッツ州ケンブリッジ:MIT プレス。ISBN 978-0-262-26668-0。
外部リンク
- AGCとその開発に関する文書
- AGC4 メモ #9、ブロック II 命令 – 命令セットの事実上の公式文書として機能した悪名高いメモ
- 宇宙飛行におけるコンピューター: NASA の経験 – James Tomayko 著 (第 2 章、パート 5、アポロ誘導コンピューター: ハードウェア)
- コンピューターが飛び立つ – ジェームズ・トマイコ著
- アポロ誘導コンピュータ - ユーザーの視点 ( PDF ) - アポロ計画の宇宙飛行士、デビッド・スコット著
- 月着陸船姿勢制御装置アセンブリ入力処理 ( PDF ) – José Portillo Lugo 著、技術史
- MIT AGCプロジェクト – 包括的な文書アーカイブ付き
- 月着陸船誘導コンピュータ用の Luminary ソフトウェア ソース コード リスト。(622 MB)
- コマンドモジュール誘導コンピュータ用の Colossus ソフトウェア ソース コード リスト。(nb. 83 MB)
- 国立航空宇宙博物館のAGCブロックIとDsky
- エルドン・ホールの月への旅への注釈 - AGCシステムプログラマーが、エドの割り込みの詳細を含むAGCの開発のいくつかの不明瞭な詳細について説明します。
- AGCハードウェア設計、特にトランジスタの代わりに新しい集積回路を使用する方法についての文書化
- AGC 集積回路パッケージ
- アポロ誘導コンピュータの集積回路
- AGCソフトウェア操作のドキュメント
- Delco Electronics、アポロ 15 - アポロ 15 ミッションで使用された CSM および LEM AGC ソフトウェアのマニュアル。詳細なユーザー インターフェイス手順、多くの基礎アルゴリズムの説明、限定的なハードウェア情報などが含まれています。このドキュメントは 500 ページ以上あり、サイズは 150 MB を超えます。
- コマンドモジュールコード (Comanche054) と月着陸船コード (Luminary099) のソースコードをテキストとして提供します。
- GitHub 完全なソース コード コマンド モジュールと月着陸船用のオリジナルの Apollo 11 誘導コンピューター (AGC) ソース コード。
- AGCベースのプロジェクトとシミュレーター
- AGC レプリカ – John Pultorak 氏が自宅の地下室に Block I AGC のハードウェア レプリカを構築するという成功したプロジェクト。ミラー サイト: AGC レプリカ。
- 仮想 AGC ホームページ – Ronald Burkey の AGC シミュレーター、および Colossus (CSM) と Luminary (LEM) SW のソース コードとバイナリ コードの回復。
- Moonjs – Virtual AGC をベースにした Web ベースの AGC シミュレーター。
- Eagle Lander 3D は、AGC と DSKY が動作するシェアウェアの月着陸船シミュレーターです (Windows のみ)。
- AGC、45年ぶりに再始動 – youtube
特集記事
- アポロのためのコンピューター(1965) MITサイエンス レポーター – youtube
- 月への道を切り開く(BBCニュース)
- 修復作業員らが月着陸船誘導コンピューターの稼働再開を目指す(ウォール・ストリート・ジャーナル)
- アポロ用コンピューターのビデオ – youtube
