Inovace AGC verze Block II, chyby 1201 a 1202
Kapitoly článků
Block II
Krátce se zmiňme i o tom, co jsme dosud nazývali „novější verzí AGC“, tedy variantě Block II. Ta byla navržena v roce 1966 a zachovávala základní prvky původní Block I architektury. K nim přidávala zvětšenou mazací paměť z 1 na 2 kibislova. Pevná paměť byla rozšířena z 24 na 36 kibislov, instrukce rozšířeny z 11 na 34 a namísto původních I/O registrů byly implementovány elegantnější I/O kanály. Block I byl nasazen v prvotních misích jako Apollo 4 a 6 (bez lidské posádky), na Měsíc se podívala již varianta Block II.
Rozhodnutí rozšířit paměť a instrukční sadu pro Block II, ale zachovat restriktivní 3bitový operační kód a 12bitové adresování přineslo některé zajímavé důsledky z hlediska designu. Pro volání dodatečných funkcí se například používala finta se speciálními adresami paměti, které, když byly odkazovány, implementovaly danou funkci. Například INDEX na adresu 23 spouštěl RESUME instrukci pro návrat z přerušení. Podobně INDEX 17 prováděl instrukci INHINT (inhibit interrupts - zabránění přerušení), zatímco INDEX 16 je znovu spouštěl (RELINT - re-enable interrupts).
Jiné instrukce byly implementovány tak, že jim předcházela speciální varianta INDEXu zvaná EXTEND, která aritmeticky modifikovala 3bitový operační kód přidáním bitu přetečení, který instrukci rozšiřoval. Adresní prostory byly rozšířeny zapojením Bank (fixní) a Ebank (mazatelný) registrů, pouze paměť jednoho typu, který byl adresován v daném čase, byla skutečně použitou bankou (plus malá část fixní-fixní a mazatelné paměti). Z důvodu rozšíření bankového registru na 36kibislov byla implementována již zmíněná část Sbank (super-bank), která zpřístupňovala 4 horní kibislova nad původní architekturou adresovatelnými 32. Všechna subrutinní volání nad bankami musela být inicializována z fixní-fixní paměti speciálními funkcemi.
A zajímavost na závěr: Block II AGC má tajemné a velmi slabě dokumentované přerušení EDRUPT, které snad má znamenat Edův Interrupt a odkazovat na Eda Smallyho, programátora, který si toto rozšíření vyžádal.
PGNCS problém
Vraťme se krátce k chybovým hláškám při přistání Apolla 11, 1201 a 1202. Za ty zodpovídal Primary Guidance, Navigation and Control System alias PGNCS. První alarm 1201 značil "executive owerflow - no vacant areas", 1202 pak "executive overflow - no core sets". V obou případech šlo o chyby vyvolané falešnými údaji z přibližovacího radaru, který byl během sestupu zanechán svému osudu. Jakmile samostatný přistávací radar zachytil povrch měsíce, AGC začal zpracovávat i data z přibližovacího radaru, došlo k několika těmto přetečením, protože do systému prostě proudilo více údajů, než byl schopen v reálném čase zpracovávat. Přetečení automaticky přerušovala běh aktuální úlohy, ale i tak dostával AGC stále příliš mnoho dat z obou radarů.
Naštěstí pro Apollo 11 spouštěl software v AGC ochrannou rutinu a zbavoval se úloh s nízkou prioritou. Kriticky důležité naváděcí úlohy tak běžely dále, úroveň přetížení počítače totiž nebyla závratná. Posádka, jak již zaznělo, dostala instrukce tyto chyby ignorovat, což se projevilo jako správné rozhodnutí, ale v náporu několika málo vteřin se museli operátoři Bílého týmu rozhodovat pod velkým tlakem.
Problém nebyl přitom způsoben ani programovou chybou v AGC, ani astronauty. Byla to procedurální a simulační chyba. V simulátoru byli astronauti cvičení přepnout přibližovací radar (zajišťující spojení Eagla s Columbií) na automatiku. Nicméně v simulátoru nebylo žádné propojení AGC s běžícím radarem (na Zemi při testech logicky žádný přistávací radar neběžel, pouze se AGC předávaly simulované hodnoty), takže během testů na Zemi nebylo možné toto zjistit ani simulovat.