アポロ誘導コンピュータ
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命令は割り込みからの復帰を意味していた。
AGCは、F-8クルセイダーを使ったフライ・バイ・ワイヤシステム実証実験機でも使われた。AGCは計画の第一段階で使われ、第二段階では別のシステムに置換されている。この研究成果がスペースシャトルのフライ・バイ・ワイヤ・システム開発に生かされた。また間接的には、当時開発されていた次世代戦闘機のフライ・バイ・ワイヤ・システムの開発にも貢献している。
AGCはアメリカ海軍の深海救難艇でも使われた。
AGCは16ビットのリードバスと16ビットのライトバスを持つ。セントラルレジスタ(A、Q、Z、LP)や他の内部レジスタの内容は制御信号によってリードバスに出力される。リードバスとライトバスは非反転バッファでつながっているのでリードバスに出力された内容はライトバスでも観測される。別の制御信号によりライトバスの内容がレジスタに書き込まれる。
データ転送の例:次の命令のアドレスをBレジスタからSレジスタに移動する。
RB(リードB)信号を送信
Bレジスタの内容をリードバスに出力
次いで、それがライトバスに出力される
WS(ライトS)信号を送信
ライトバス上のデータをSレジスタに格納
いくつかのレジスタをリードバス上に同時に出力することができる。これが起きるとレジスタの内容が論理和(OR)演算されたビット列がバス上に現れる。これを使ってMASK命令(論理積)を実装している。AGC本体はビット反転ができるので(Cレジスタ)、ド・モルガンの定理に従い、
ふたつのオペランドを反転(NOT)し
それらをバスに同時に出力して(OR)
結果を再度反転(NOT)する
これでANDに相当することになる。
命令フォーマットは3ビットがオペコードで12ビットがアドレスとなっている。Block Iは11種の命令、TC, CCS, INDEX, XCH, CS, TS, AD, MASK(基本)と SU, MP, DV(拡張)を持つ。先頭の8個は基本命令と呼ばれ3ビットオペコードで直接指定される。残り3個は拡張コード命令と呼ばれ、特別なINDEX命令(EXTENDと呼ぶ)の直後に実行される。
Block I AGC の命令の概要は以下のとおり。
Aレジスタが0より大きい場合、CCS命令の直後の命令にスキップする(つまりスキップしない)。Aレジスタが正のゼロの場合、CCS命令から2つめの命令にスキップする。Aレジスタが負すなわちゼロより小さい場合、CCS命令から3つめの命令へスキップする。Aレジスタが負のゼロの場合、CCS命令から4つめの命令へスキップする。この命令の第一の用途は正の値のカウンタで制御されるループを形成することであり、CCS命令でループ終了を判断し、TC命令でループの先頭に戻る。ちょうど IBM 360 のBCT命令と等価である。絶対値を求める命令としても重要である。その場合、CCSの後に TC *+2, TC *+2, AD ONE と命令を続ける。奇妙な副次効果として CCS-holes と呼ばれるものがある。評価する値が決して正にならないと判っている場合、2ワードが決して実行されないことになるので、その2ワードにデータを配置できることになっている。