Systém AGS ( Abort Guidance System ) byl počítač nouzové použití v případě výpadku primárního naváděcí soustavy z lunárního modulu z Apolla . Byl navržen tak, aby byl implementován v degradovaném režimu, během fází přistání , vzletu nebo setkání měsíce na měsíční oběžné dráze . Jako záložní systém nebylo zamýšleno řídit přistání na Měsíci. Na druhou stranu to bylo schopné usnadnit kotvení na oběžné dráze.
Systém AGS byl vyvinut společností TRW , zcela odděleně od hlavního naváděcího systému ( PGNCS ) a mimo jiné od hlavního počítače ( AGC ). Jedná se o historicky první naváděcí systém, který využívá inerciální jednotku typu strapdown (tj. Bez rotujících závěsů ). Je to také jediný systém v programu Apollo, který má tuto specifičnost. I když tento design neumožňuje, aby byl tak přesný jako jeho protějšky na kardanovém kloubu, je dostačující pro optický dalekohled s asistovanou navigací ( AOT ) a setkávací radar . Hlavní výhoda strapdown spočívá v jeho nízké hmotnosti a malých rozměrech.
AGS se skládá z následujících komponent:
Použitou kalkulačkou byl MARCO 4418 o rozměrech 12,7 x 20,3 60,33 centimetrů. Jeho hmotnost byla 14,83 kg a spotřeboval 90 wattů . Díky přítomnosti standardního průměru paměťového rozhraní byl pomalejší než AGC. Některé operace však byly prováděny AGS rychleji, kvůli architektonickým rozdílům mezi těmito dvěma stroji.
Kalkulačka měla následující vlastnosti:
Kalkulačka měla následující registry :
Data se tam zapisují na bázi dvou doplňků , takže první bit registrů obvykle označuje znaménko čísla.
Na kalkulátoru instrukce byly v následující podobě:
opcode (5 bits) + index (1 bit) + adresse (12 bits)Indexový bit označuje indexované adresování . Procesor měl soubor 27 instrukcí:
ADD : obsah zadané oblasti paměti se přidá do registru A (akumulátor);
ADZ( Přidat a nula ): identické s instrukcí ADD, s resetem oblasti paměti;
SUB( Odečíst ): obsah zadané oblasti paměti se odečte od registru A (akumulátor);
SUZ( Odečíst a nula ): identické s instrukcí SUB, s resetem oblasti paměti;
MPY( Násobit ): obsah registru A se vynásobí obsahem paměti. Nejvýznamnější polovina výsledku je uložena v registru A, méně významná v registru Q;
MPR( Násobit aMPY zaokrouhlit ): identický s instrukcí , obsah registru A se zaokrouhlí přidáním 1, pokud je nejvýznamnější bit registru Q 1;
MPZ( Násobení a nula ): identické s instrukcí MPR, s resetováním paměti;
DVP( Rozdělit ): Zřetězený obsah registrů A a Q se dělí obsahem paměti. Výsledek je uložen v registru A a zaokrouhlen (pokud by zaokrouhlení nezpůsobilo přetečení paměti );
COM( Doplněk Akumulátor ): obsah registru A je nahrazen doplňkem jeho dvou. Pokud je obsah registru A kladný, nulový nebo rovný -1, nebude změněn ;
CLA( Vymazat a přidat ): paměť se zkopíruje do registru A;
CLZ( Clear, Add and Zero ): identické s CLA, s resetováním paměti;
LDQ( Načíst Q registr ): paměť je zkopírována do Q registru;
STO( Akumulátor úložiště ): obsah registru A se zkopíruje do paměti;
STQ( Store Q Register ): obsah Q registru se zkopíruje do paměti;
ALS N( Aritmetický posun vlevo ): obsah registru A je posunut doleva o N bitů;
LLS N( Long Left Shift ): zřetězený obsah registru A a posledních 17 bitů registru Q jsou posunuty doleva o N bitů. Znaménko Q registru (první bit) je vytvořeno shodně se znaménkem A registru;
LRS N( Long Right Shift ): podobný LLS, ale obsah je posunut doprava;
TRA( Přenos ): další instrukce je načtena z paměti;
TSQ( Transfer and Set Q ): obsah registru Q je nahrazen adresou větší než zadaná oblast paměti. Další instrukce je poté načtena z paměti;
TMI( Transfer on Minus Accumulator ): pokud je obsah registru A záporný, další instrukce se načte z paměti;
TOV( Transfer on Overflow ): pokud je příznak přetečení paměti vysoký, další instrukce se načte z paměti;
AXT N( Address to Index ): indexovací registr má hodnotu N;
TIX( Test Index and Transfer ): pokud je indexovací registr kladný, je snížen, pak je z paměti načtena další instrukce;
DLY( Zpoždění ): Provádění se zastaví, dokud není přijat časový signál . Další instrukce je poté načtena z paměti;
INP( Vstup ): obsah vstupního registru na zadané adrese paměti je umístěn v registru A. V závislosti na vybraném registru je vstupní registr resetován nebo ne;
OUT( Výstup ): Obsah registru A je umístěn do výstupního registru na zadané adrese paměti.