アポロ誘導コンピュータ

アポロ誘導コンピュータの最新ニュースをまとめて検索!

アポロ誘導コンピュータ(-ゆうどう-)とは、アポロ宇宙船の全航行機能を自動制御し、宇宙飛行士が飛行情報を確認/修正するためにリアルタイムで使われた組み込みシステムである(英語ではApollo Guidance Computer(AGC))。アポロ計画のためにMIT Instrumentation Laboratoryで開発された。

アポロ誘導コンピュータのユーザインタフェース部(DSKY)

目次

[編集] アポロの中のAGC

月への飛行には毎回2つのAGCを使った。ひとつは司令船でもうひとつは月着陸船で使われた。 AGC上では一次誘導/航行/制御システム(Primary Guidance, Navigation and Control System)が動作し、その頭文字をとってPGNCS(「ピングス」と発音)と省略されて呼ばれた。

各ミッションでは他にもふたつのコンピュータを使用していた。

  • サターンV型ロケットの器械リングにあるIBM製の航行コンピュータ(LDVC)
  • 月着陸船のAbort Guidance System(AGS)というTRW製の小さな機械。AGSはPGNCSの障害が発生したときに使われ、月から離陸して司令船にドッキングするまでを制御する。着陸には使えない。

[編集] 詳細

アポロ誘導コンピュータは初期の集積回路(IC)を使って作られた。 Block Iバージョンは4,100個のICを使い、それぞれのICは3入力のNORゲートをひとつ構成していた。 次のBlock IIバージョンはふたつの3入力ゲートをひとつのICで構成したものを使い、全部で5,600ゲートとなった。 ゲートはレジスタートランジスタ・ロジック(RTL)で作られていた。 ICはワイヤーラップという方法で接続されている。 ICを挿入するソケットから金属棒が出ていて、その金属棒にワイヤーを巻きつけて接続する。 金属棒とワイヤーは高圧で押し付けられ、気密結合状態となるため、一般的な半田付けよりも信頼性が高い。 配線完了後、ワイヤーはエポキシ樹脂に封入される。 すべて同じICを使うことにより、初期のICを使った他のコンピュータ(ミニットマンミサイルの誘導コンピュータ)が悩まされた問題は発生しなかった。

コンピュータのRAM磁気コアメモリ(4Kワード)でROMコアロープメモリ(32Kバイト)である。 どちらもサイクル時間は12μ秒。 メモリのワード長は16ビットで、そのうち1ビットはパリティビットである。 CPU内の16ビットワードは、14ビットデータと1ビットのオーバーフローフラグ、1ビットの符号フラグから成る。

[編集] タイミング

AGCの駆動クリスタル周波数は2.048MHzである。 クロックは分周されて4相の1.024MHzとしてAGC内で使われた。 さらにそれを分周して512KHzの信号を生成し、これをMASTER FREQUENCY(マスター周波数)と呼んだ。 この信号は外部のアポロ宇宙船のシステムを同期させるのに使われた。

MASTER FREQUENCYはさらに分周され5分の1の102.4KHzの信号が作られる。 これをさらに分周したF1(51.2KHz)からF17(0.78125KHz)の信号が作られる。 F10(100Hz)はAGCに戻され、リアルタイムクロックとPINC(後述)を使った強制カウンターをインクリメントするのに使われる。 F17はAGCがスタンバイモードの場合に定期的に動作させるのに使われた。

[編集] セントラルレジスタ

AGCは4本の16ビットレジスタを汎用的に使用した。 これをセントラルレジスタと呼ぶ。

  • A:アキュムレータ、一般に計算に使用される。
  • Z:プログラムカウンタ、次に実行すべき命令のアドレスを保持する。
  • Q:DV命令の剰余を保持する。またTC命令後のリターンアドレスを保持する。
  • LP:MP後の積の下位ビット部分を格納する。

コアメモリには4つの場所があり(アドレス20~23)、"editing locations"と呼ばれた。 ここに格納された値が自動的に1ビットシフトや1ビットローテートされる事による。 これはBlock I、Block IIに共通する。

[編集] その他のレジスタ

AGCには他にも処理の過程で使用するレジスタが存在する。

  • S:12ビットのメモリアドレスレジスタ。アドレスの下位ビットを保持
  • BANK:4ビットのメモリバンクレジスタ。アドレッシングがfixed-switchableモードのときにメモリバンク選択に使用
  • SQ:4ビットのシーケンスレジスタ。現在の命令の内容を保持
  • G:16ビットのメモリバッファレジスタ。メモリに読み書きする(した)内容
  • X:加算器への一方の入力。加算器は1の補数での計算をして、プログラムカウンタ(Z)をインクリメントする。
  • Y:加算器へのもう一方の入力
  • U:加算器の出力(X+Yの補数表現)
  • B:汎用バッファ。命令プリフェッチにも使われる。命令を実行する際、Bレジスタの上位ビットをSQレジスタにコピーし、Sレジスタに下位ビットをコピーする。
  • C:Bレジスタの異なった出力で、Bの補数表現
  • IN:4つの16ビット入力レジスタ
  • OUT:5つの16ビット出力レジスタ

[編集] 命令セット

命令フォーマットは3ビットがオペコードで12ビットがアドレスとなっている。 Block Iは11種の命令TC, CCS, INDEX, XCH, CS, TS, AD, MASK (basic), SU, MP, DV(extra)を持つ。 先頭の8個は基本命令と呼ばれ3ビットオペコードで直接指定される。 残り3個は拡張コード命令と呼ばれ、特別なINDEX命令(EXTENDと呼ぶ)の直後に実行される。

Block I AGC の命令の概要は以下のとおり。

TC (Transfer Control): 無条件分岐。サブルーチンコールにも使用

CCS (Count, Compare, and Skip): 複雑な条件分岐

INDEX: 命令のアドレス部で示されるアドレスの内容を次の命令のアドレス部に加算する

RESUME: INDEX命令の特別な場合 (INDEX 25)。 割り込みからの復帰命令

XCH (Exchange): Aレジスタの内容と指定したアドレスのメモリの内容を交換

CS (Clear and Subtract): 指定されたアドレスのメモリの内容の1の補数をAレジに格納

TS (Transfer to Storage): Aレジの内容を指定されたアドレスに格納

AD (Add): 加算

MASK: 論理積(AND)演算

MP (Multiply): 乗算

DV (Divide): 除算

SU (Subtract): 減算

[編集] メモリ

Block I AGCのメモリは1024ワードのバンクから成る。 最も低いバンク(バンク0)はRAMであり、それ以外はROMである。 各AGC命令には12ビットのアドレスフィールドがあり、下位10ビットでバンク内のアドレスを表す。 ビット11と12でバンクを表し、00がRAMバンク、01,10は2番目と3番目のバンクを示す。 11はBANKレジスタの内容でバンクを示すことを意味する。 バンク1とバンク2は常に直接使用可能であるため、"fixed-fixed"メモリと呼ばれる。 バンク3およびそれ以上のバンクは"fixed-switchable"メモリと呼ぶ。

Block I AGCは当初12KワードのROMを持っていたが、後に24Kに拡張された。 Block II は32KのROMと4KのRAMを持つ。

各メモリワードの下位15ビットがデータとして使用される。 最上位ビットはパリティビットであり、データの保護に使用される。 パリティビットはデータの内容によりパリティ生成回路で1か0に設定される。 パリティチェック回路はパリティビットとデータの内容が合っているかをチェックする。 もし合っていない場合そのメモリワードは壊れたと判断され、操作パネルのPARITY ALARMというライトが点灯する。

[編集] 割り込みと強制的カウンタ

AGCは5種類の割り込みを扱う。

  • DSRUPTはユーザディスプレイのアップデートインターバル毎に発生する
  • ERRUPTはハードウェアの障害や警告の場合に発生する
  • KEYRUPTはユーザキーボードのキーが押されたときに発生する。
  • T3RUPTはAGCのリアルタイムクロックをアップデートするタイミングで定期的に発生する。
  • UPRUPTは16ビットのアップリンクデータがAGCにロードされたときに発生する。

AGCは割り込みが発生すると、それまで実行していたプログラムの実行を中断し、短い割り込みサービスルーチンを実行して、割り込まれたプログラムに復帰する。

AGCは20個の強制カウンタを持っている。 それらはメモリの固定の場所に存在し、アップ/ダウンカウンタとシフトレジスタとして機能する。 インクリメント(PINC)、デクリメント(MINC)、シフト(SHINC)は通常の命令と命令の間に挿入されるマイクロ命令によって実行される。

割り込みはカウンタがオーバーフローしたときに発生する。 T3RUPTとDSRUPTはこのPINCオーバフローの発生をトリガーとして発生する。 URUPTはSHINCで16ビットぶんシフトしたときに発生する。

[編集] スタンバイモード

AGCはSTANDBY ALLOWEDスイッチを使ってパワーセービングモードに移行する。 このモードはAGCの電源を切り、クロックだけを発生させる。 F17信号により1.28秒に1回AGCの電源が入る。 そこでAGCはSTANDBY ALLOWEDスイッチの状態をチェックし、もしまだそのモードならば再び電源を切って次のF17信号を待つ。

スタンバイモードではAGCは眠っているので、PINCを実行してリアルタイムクロックをインクリメントすることができない。 その代わりとして、F17信号で起きたときにリアルタイムクロックを1.28秒ぶん進める。

スタンバイモードは慣性飛行中AGCを使わないときに電力消費を抑えるために設けられた。 しかし、実際にはAGCは飛行中ずっと使われ、スタンバイモードが使われることはなかった。

[編集] データバス

AGCは16ビットのリードバスと16ビットのライトバスを持つ。 セントラルレジスタ(A、Q、Z、LP)や他の内部レジスタの内容は制御信号によってリードバスに出力される。 リードバスとライトバスは非反転バッファでつながっているのでリードバスに出力された内容はライトバスでも観測される。 別の制御信号によりライトバスの内容がレジスタに書き込まれる。

データ転送の例:次の命令のアドレスをBレジからSレジに移動する

  1. RB(リードB)信号が送信される
  2. Bレジの内容がリードバスに出力される
  3. 次いで、それがライトバスに出力される
  4. WS(ライトS)信号が送信される
  5. ライトバス上のデータがSレジに格納される

いくつかのレジスタをリードバス上に同時に出力することができる。 これが起きるとレジスタの内容が論理和(OR)演算されたビット列がバス上に現れる。 これを使ってMASK命令(論理積)を実装している。 AGC本体はビット反転ができるので(Cレジスタ)、ドモルガンの定理に従い、

  1. ふたつのオペランドを反転(NOT)し
  2. それらをバスに同時に出力して(OR)
  3. 結果を再度反転(NOT)する

これでANDに相当することになる。

[編集] ソフトウェア

AGCのソフトウェアはAGCアセンブリ言語で書かれた。 それは単純なリアルタイムオペレーティングシステムであり、最大8個のジョブをバッチジョブスケジューリングシステム(EXEC)で走行させることができる。これにはプリエンプティブでないマルチタスクが使われる(各ジョブは定期的にEXECに制御を戻す必要がある)。 また、割り込み駆動型コンポーネントWAITLISTもあり、複数のタイマー駆動型タスクをスケジュールする。 タスクは短いスレッドからなり、実行が終了するときにWAITLISTに再び自分を再実行してもらうようスケジュールしてもらう。 あるいは、割り込み処理の中からEXECに対してもっと長いジョブの実行を指示することもできる。

EXECのジョブは優先度制御される。最も優先度の低いダミージョブは常に存在している。 ダミージョブが診断チェックを行い、COMPUTER ACTIVITYランプをグリーンに点灯させる。 ダミージョブは優先度の高いジョブがあると中断され、COMPUTER ACTIVITYランプは明るくなる。

AGCはさらに洗練されたソフトウェアインタプリタを持っていて、もっと複雑で使いやすいマシンを仮想的に実現している。 この仮想マシンは倍精度のスカラーとベクターを扱うことができる。

割り込みベースのユーザーインターフェイスルーチン群PINBALLによってキーボードとディスプレイを制御する。 PINBALLには宇宙飛行士が任意のアドレスのメモリの内容やレジスタの内容を(8進数または10進数で)表示する機能もある。 モニター相当のルーチンもあるので、定期的に特定のメモリの内容を表示させることも可能である。 ジョブを起動することもできる。PINBALLはおおざっぱに言ってしまえばUNIXのシェルと同じことができる。

[編集] ユーザーインターフェイス

ユーザーインターフェイスユニットはDSKY(ディスプレイ/キーボード)と呼ばれ、数字の列と電卓型のキーボードから成る。 コマンドは数字で入力される。 表示は高電圧エレクトロルミネセンス・ディスプレイであり、数字毎に7セグメントで表示され、それを並べて数字列を表している。 セグメントは電気機械式リレーで制御されるため、表示の更新速度が制限される(Block IIではもっと高速なシリコン制御整流器が使われている)。 3行の5桁の数字で八進数か十進数が表示される。 入力はボタン押下による。 この電卓型インターフェイスは、このタイプのものとしては世界初のディジタル制御パネルである。

司令船はふたつのDSKYを備えていた。ひとつはメイン計器パネルにあり、もうひとつは六分儀のそばに設置されて慣性誘導装置を調整するのに使われた。 月着陸船にはひとつのDSKYがAGCに接続されていた。

[編集] Block II

Block IIバージョンのAGCは1966年に設計された。 Block Iのアーキテクチャを踏襲したがRAMを1Kワードから2Kワードに拡張している。 ROMも24Kワードから36Kワードに拡張されている。 命令も11種から34種に拡張され、Block Iの入出力関連のレジスタ群が入出力チャネルに置き換えられた。 実際に最初に月まで行ったAGCはBlock IIである。 Block Iバージョンは無人飛行のアポロ4号から6号までと、事故を起こしてキャンセルされたアポロ1号に装備されていた。

Block IIでメモリと命令セットを拡張することが決定されたが、Block Iの制限の多い3ビットのオペコードと12ビットアドレスという構成が変わらなかったのは興味深い。 様々なトリックを使って命令が追加された。 例えばある特定のメモリアドレスに参照アクセスすると特定の機能が動作するなどといったことである。 実際、前述したようにアドレス25に対するINDEX命令は割り込みからの復帰を意味していた。 同様に、INDEX 17 を実行するとINHINT命令(割り込み禁止)を意味し、INDEX 16 は逆に割り込み許可(RELINT)を意味した。 他の命令は特別なINDEX命令であるEXTEND命令を使って実装された。EXTEND命令はオーバーフロービットを使って3ビットのオペコードを拡張する。 アドレス空間を拡張するためにBANK(固定)とEBANK(拡張RAM用)レジスタが使われた。ある時点でアクセスできるメモリバンクは、これらのレジスタを使わずにアクセスできる先頭の3バンクと、BANKの指すバンクとEBANKの指すバンクだけであった。 さらにBANKレジスタが指定できる範囲を超えてROMが実装されたためにSBANKレジスタが最後の4Kワードにアクセスするのに使われた。 バンクをまたがるサブルーチンコールでは、いったんfixed-fixedメモリを経由してコール元のバンクをセーブ/リストアする必要があった。

[編集] PGNCSの障害

PGNCSは最初の月への降下の際に動作不良となった。そのときAGCは1201 alarm (実行オーバーフロー - 空き領域無し) と1202 alarm (実行オーバーフロー - コアセット無し)を示していた。 どちらの場合もレーダーから不正なデータが送られてきたことが原因で、降下の間はこれを放置した。 エラーによりコンピュータ内の実行中タスクは中断されたが、レーダーの周波数データによればアボート信号が発生したのはCPUが処理しきれない頻度のデータが入ってきたためであることは明らかだった。

アポロ11号にとって幸いなことに、AGCのソフトウェアは安全に障害状態となったため、ニール・アームストロングは手動操作モードに切り替えることができた。 慣性誘導タスクは確実に動作を続行した。 過負荷の度合いは最小であった。というのはソフトウェアは十分に練られていて15%の空き時間を残すようになっていたが、毎秒6400ビットの信号がレーダーから送られてきてPINCでのカウントがほぼ15%の時間を浪費していたのである。 地上からの指示でエラーは修正され、ミッションは成功した。

[編集] その他

  1. ほぼ同時期に世界初の電卓が市場に現れている。科学技術演算ができるプログラム可能なポケット電卓が現れるのはもっと先のことであった。世界初の携帯可能なプログラム可能電卓はHP-65であり、この電卓はバックアップ用としてアポロ・ソユーズテスト計画の際にアポロ司令船に搭載された。
  2. 当時の地上用の制御用コンピュータよりも性能は劣るが、宇宙船に搭載するコンピュータは、最新鋭のものよりも信頼性重視で「枯れた技術」が好まれる。特に宇宙線による動作エラーや素子劣化を起こしにくい耐放射線性(Rad-Hard)の半導体は一般にプロセス・ルールの大きい、余り微細化しない半導体素子を用いる傾向がある。現在においても市販の最新コンピュータより「低性能」なものが搭載されるのが普通である。
  3. 日本のロケット工学博士の糸川英夫が『逆転の発想』(プレジデント社 1974年)で、アポロ11号の航法コンピュータ停止の危機に対応した様子を、機械の修理ではなく別の方法で危機を乗り切った「発想の転換」の例として、当時の様子を紹介している。

[編集] 外部リンク

AGCおよびその開発に関する文書:

AGC ハードウェア設計、特に集積回路の採用に関する文書:

AGC ソフトウェアに関する文書:

  • Delco Electronics, Apollo 15 - アポロ15号で使われたソフトウェアに関するマニュアル。ユーザーインタフェースの解説はもちろんのこと、アルゴリズムやハードウェアの制限についても説明されている。なお、500ページ以上あり、150MB以上の巨大なファイルなのでアクセスの際には注意されたい。

その他:

最終更新 2009年10月19日 (月) 15:33 (日時は個人設定で未設定ならばUTC)。
【アポロ誘導コンピュータ】変更履歴

ご利用上の注意