Calculator Apollo Guidance - Apollo Guidance Computer

Calculator Apollo Guidance
Agc view.jpg
Apollo Guidance Computer și DSKY
Inventat de Laboratorul de draperii Charles Stark
Producător Raytheon
Introdus August 1966 ; Acum 55 de ani ( 1966-08 )
Întrerupt Iulie 1975 ; Acum 46 de ani ( 1975-07 )
Tip
Calculator de ghidare avionică
Procesor Cipuri cu circuit integrat de siliciu discret (IC) ( bazate pe RTL )
Frecvență 2,048 MHz
Memorie 15-bit lungime cuvânt + 1-bit paritate,
2048 cuvinte RAM ( memorie magnetic-core ), 36.864 cuvinte ROM ( core rope memory )
Porturi DSKY, IMU, controler manual, radar de întâlnire (CM), radar de aterizare (LM), receptor de telemetrie, comandă motor, sistem de control al reacției
Consum de energie 55 W
Limba Limbaj de asamblare AGC
Greutate 70 kg (32 kg)
Dimensiuni 24 × 12,5 × 6,5 țoli (61 × 32 × 17 cm)

Orientare Computer Apollo ( AGC ) este un calculator digital produs pentru programul Apollo care a fost instalat la bordul fiecărui modul de comandă Apollo (CM) și Apollo Modulul lunar (LM). AGC a furnizat interfețe de calcul și electronice pentru îndrumare, navigare și control al navei spațiale.

AGC are o lungime de cuvânt de 16 biți , cu 15 biți de date și un bit de paritate . Majoritatea software-urilor de pe AGC sunt stocate într -o memorie specială numai de citire cunoscută sub numele de memorie de cablu de bază , creată prin țeserea firelor prin și în jurul nucleelor ​​magnetice , deși este disponibilă o cantitate mică de memorie de bază de citire / scriere .

Astronauții au comunicat cu AGC folosind un afișaj numeric și o tastatură numită DSKY (pentru „afișaj și tastatură”, pronunțat „DIS-kee”). AGC și interfața sa de utilizator DSKY au fost dezvoltate la începutul anilor 1960 pentru programul Apollo de către Laboratorul de instrumentare MIT și au zburat pentru prima dată în 1966. AGC a fost primul computer bazat pe circuite integrate din siliciu . Performanța computerului a fost comparabilă cu prima generație de computere de acasă de la sfârșitul anilor 1970, cum ar fi Apple II , TRS-80 și Commodore PET .

Operațiune

Astronauții au zburat manual Proiectul Gemeni cu bastoane de control , dar computerele au zburat cea mai mare parte a Proiectului Apollo, cu excepția unui scurt timp în timpul aterizărilor lunare. Fiecare zbor lunar transporta două AGC, câte unul în modulul de comandă și modulul lunar Apollo , cu excepția Apollo 8 care nu avea nevoie de un modul lunar pentru misiunea sa de orbită lunară. AGC din modulul de comandă a fost centrul sistemului său de ghidare, navigare și control (GNC). AGC din modulul lunar și-a rulat Apollo PGNCS (sistemul principal de ghidare, navigare și control), cu acronimul pronunțat ca pings .

Interfața de afișare și tastatură (DSKY) a computerului Apollo Guidance montat pe panoul de control al modulului de comandă, cu indicatorul de atitudine al directorului de zbor (FDAI) deasupra
Listă parțială de coduri numerice pentru verbe și substantive în computerul de orientare Apollo, tipărite pentru referință rapidă pe un panou lateral

Fiecare misiune lunară avea două computere suplimentare:

Proiecta

Circuite integrate de siliciu Flatpack în calculatorul de ghidare Apollo

AGC a fost proiectat la Laboratorul de Instrumentare MIT sub conducerea lui Charles Stark Draper , cu design hardware condus de Eldon C. Hall . Lucrările arhitecturale timpurii au venit de la JH Laning Jr. , Albert Hopkins , Richard Battin , Ramon Alonso și Hugh Blair-Smith. Hardware-ul de zbor a fost fabricat de Raytheon , al cărui Herb Thaler era, de asemenea, în echipa de arhitectură.

În urma utilizării cipurilor cu circuite integrate (IC) în Platforma de monitorizare interplanetară (IMP) în 1963, tehnologia IC a fost adoptată ulterior pentru AGC. Calculatorul de zbor Apollo a fost primul computer care a folosit cipuri de siliciu IC.

În timp ce versiunea Block I a folosit 4.100 IC-uri, fiecare conținând o singură poartă NOR cu trei intrări , versiunea ulterioară a Block II (utilizată în zborurile cu echipaj) a folosit aproximativ 2.800 IC-uri, în principal porți NOR duale cu trei intrări și un număr mai mic de expansori și sens amplificatoare. IC-urile, de la Fairchild Semiconductor , au fost implementate folosind logica rezistor-tranzistor (RTL) într-un pachet plat . Au fost conectate prin înveliș de sârmă , iar cablajul a fost apoi încorporat în plastic epoxidic turnat . Utilizarea unui singur tip de IC (dual NOR3) în întreaga AGC a evitat problemele care au afectat un alt proiect de computer IC timpuriu, computerul de ghidare Minuteman II , care a folosit un amestec de logică diodă-tranzistor și porți logice diodă . Acest lucru este posibil, deoarece porțile NOR sunt porți logice universale din care se poate face orice altă poartă, deși cu prețul utilizării mai multor porți.

Computerul avea 2048 de cuvinte de memorie ștergătoare cu miez magnetic și 36.864 cuvinte de memorie cu cablu de bază numai pentru citire . Ambele au avut timpi de ciclu de 11,72 microsecunde. Lungimea cuvântului de memorie a fost de 16 biți: 15 biți de date și un bit de paritate impar . CPU -internal 16-biți format Word a fost de 14 biți de date, un preaplin de biți, și un bit de semn ( complement cele de reprezentare).

Interfață DSKY

Unitate de interfață utilizator DSKY pentru computer Apollo
Diagrama interfeței LM DSKY

Interfața cu utilizatorul a AGC a fost DSKY , în picioare pentru ecran și o tastatură și , de obicei , pronunțat „DIS-Kee“. Are o serie de lumini indicatoare, afișaje numerice și o tastatură în stil calculator . Comenzile au fost introduse numeric, ca numere din două cifre: Verb și Substantiv . Verbul a descris tipul de acțiune care trebuie efectuată și Substantivul a specificat ce date au fost afectate de acțiunea specificată de comanda Verb.

Fiecare cifră a fost afișată printr-un afișaj electroluminiscent de înaltă tensiune cu șapte segmente de culoare verde (specificat ca 530 nm) ; acestea au fost acționate de relee electromecanice , limitând rata de actualizare. Trei numere semnate cu cinci cifre ar putea fi, de asemenea, afișate în octal sau zecimal și au fost de obicei utilizate pentru a afișa vectori precum atitudinea navei spațiale sau o schimbare de viteză necesară ( delta-V ). Deși datele au fost stocate intern în unități metrice , acestea au fost afișate ca unități obișnuite din Statele Unite . Această interfață în stil calculator a fost prima de acest gen.

Modulul de comandă are două DSKY conectate la AGC-ul său: unul situat pe panoul principal de instrumente și un al doilea situat în compartimentul inferior al echipamentului, lângă un sextant utilizat pentru alinierea platformei de ghidare inerțială . Modulul lunar avea un singur DSKY pentru AGC. Un indicator de atitudine al directorului de zbor (FDAI), controlat de AGC, a fost situat deasupra DSKY pe consola comandantului și pe LM.

Sincronizare

Referința de sincronizare AGC a venit de la un ceas de cristal de 2,048 MHz . Ceasul a fost împărțit la două pentru a produce un ceas cu patru faze de 1,024 MHz pe care AGC l-a folosit pentru a efectua operații interne. Ceasul de 1,024 MHz a fost, de asemenea, împărțit la doi pentru a produce un semnal de 512 kHz numit frecvență master ; acest semnal a fost utilizat pentru sincronizarea sistemelor de nave spațiale Apollo externe.

Frecvența master a fost împărțită în continuare printr-un scaler , mai întâi la cinci folosind un contor de sonerie pentru a produce un semnal de 102,4 kHz. Aceasta a fost apoi împărțită la două până la 17 etape succesive numite F1 (51,2 kHz) până la F17 (0,78125 Hz). Etapa F10 (100 Hz) a fost alimentată înapoi în AGC pentru a incrementa ceasul în timp real și alte contoare involuntare folosind Pinc (discutat mai jos). Etapa F17 a fost utilizată pentru a rula AGC intermitent atunci când acesta funcționa în modul de așteptare .

Registre centrale

AGC avea patru registre de 16 biți pentru uz general de calcul, denumite registre centrale :

A : Acumulator , pentru calcul generală
Z : Contorul de program - adresa instrucțiunii următoare care urmează să fie executate
Î : Restul din DVinstrucțiune și adresa de returnare după TCinstrucțiuni
LP : Produsul inferior după MPinstrucțiuni

Au existat, de asemenea, patru locații în memoria de bază, la adresele 20-23, locații de editare dublate , deoarece orice ar fi stocat acolo ar apărea deplasat sau rotit cu o poziție de un bit, cu excepția uneia care a deplasat pozițiile de șapte biți la dreapta, pentru a extrage una dintre cele șapte- bit interpretativ op. coduri care erau împachetate câte două la un cuvânt. Acest lucru a fost comun pentru AGC-urile Block I și II.

Alte registre

Prototipurile DSKY și AGC sunt expuse la Computer History Museum . AGC este deschis, prezentându-și modulele logice.
Modul logic prototip din Block I AGC
Modul logic Block II, cu circuite integrate cu pachet plat
Poarta dublă AGC cu 3 intrări NOR
Schema AGC dual 3-input NOR gate

AGC avea registre suplimentare care au fost utilizate intern în cursul funcționării:

S : Registrul de adrese de memorie pe 12 biți, porțiunea inferioară a adresei de memorie
Bank / Fbank : Registrul băncii ROM pe 4 biți, pentru a selecta banca ROM de 1  kiloword atunci când se adresează în modul comutabil fix
Ebank : Registrul de bancă RAM pe 3 biți, pentru a selecta banca RAM de 256 de cuvinte atunci când se adresează în modul de ștergere comutabilă
Sbank (super-bancă) : Extensie de 1 bit la Fbank, necesară deoarece ultimele 4 kilowords ale ROM-ului de 36 kiloword nu au putut fi accesate folosind Fbank singur
SQ : Registru de secvență pe 4 biți; instrucțiunea curentă
G : Registrul tampon de memorie pe 16 biți, pentru a păstra cuvintele de date care se deplasează către și din memorie
X : Intrarea „x” în sumator (sumatorul a fost utilizat pentru a efectua toate aritmetica complementului 1 ) sau creșterea contorului de program ( registrul Z )
Da : Cealaltă („y”) intrare în sumator
U : Nu chiar un registru, ci rezultatul sumatorului (suma complementului 1 al conținutului registrelor X și Y )
B : Registrul tampon de uz general, utilizat și pentru pre-preluarea următoarei instrucțiuni. La începutul instrucțiunii următoare, biții superioare ale B (conținând codul următor op.) Au fost copiate SQ , iar biții inferioare (adresa) au fost copiate S .
C : Nu un registru separat, ci complementul 1 al registrului B.
ÎN : Patru registre de intrare pe 16 biți
OUT : Cinci registre de ieșire pe 16 biți

Set de instructiuni

Formatul de instrucțiuni utilizat 3 biți pentru opcode , și 12 biți pentru adresă. Block Am avut 11 instrucțiuni: TC, CCS, INDEX, XCH, CS, TS, AD, și MASK( de bază), și SU, MPși DV(suplimentar). Primele opt, numite instrucțiuni de bază , au fost accesate direct de opțiunea de 3 biți. cod. Ultimele trei au fost notate ca instrucțiuni extracod, deoarece au fost accesate prin efectuarea unui tip special de TCinstrucțiune (numit EXTEND) imediat înainte de instrucțiune.

Instrucțiunile AGC Block I constau din următoarele:

TC (controlul transferului)
O ramură necondiționată la adresa specificată de instrucțiune. Adresa de returnare a fost stocată automat în registrul Q, astfel încât TCinstrucțiunea să poată fi utilizată pentru apelurile subrutine.
CCS (numărați, comparați și săriți)
O instrucțiune de ramură condițională complexă. Registrul A a fost încărcat cu date preluate de la adresa specificată de instrucțiune. (Deoarece AGC folosește notația complementară a celor , există două reprezentări ale zero. Când toți biții sunt setați la zero, aceasta se numește plus zero . Dacă toți biții sunt setați la unul, aceasta se numește minus zero .) Valoarea absolută diminuată (DABS) a datelor a fost apoi calculată și stocată în registrul A. Dacă numărul a fost mai mare decât zero, DABS scade valoarea cu 1; dacă numărul a fost negativ, acesta este completat înainte de aplicarea decrementului - aceasta este valoarea absolută. Diminuit înseamnă „decrementat, dar nu sub zero”. Prin urmare, atunci când AGC efectuează funcția DABS, numerele pozitive se vor îndrepta către plus zero, la fel și numerele negative, dar dezvăluind mai întâi negativitatea lor prin saltul în patru direcții de mai jos. Ultimul pas CCSeste un salt în patru direcții, în funcție de datele din registrul A dinaintea DABS. Dacă registrul A a fost mai mare de 0, CCStrece la prima instrucțiune imediat după CCS. Dacă registrul A conține plus zero, CCStrece la a doua instrucțiune după CCS. Mai puțin de zero provoacă un salt la a treia instrucțiune după CCS, și minus zero trece la cea de-a patra instrucțiune după CCS. Scopul principal al contelui era de a permite o buclă obișnuită, controlată de un contor pozitiv, să se încheie într - o CCSși TCla începutul buclei, echivalent cu un IBM 360 s“ BCT. Funcția de valoare absolută a fost considerată suficient de importantă pentru a fi integrată în această instrucțiune; când este utilizată numai în acest scop, secvența după a CCSfost TC* + 2, TC* + 2, ADONE. Un efect secundar curios a fost crearea și utilizarea de CCSgăuri atunci când valoarea testată a fost cunoscută a fi niciodată pozitivă, care a avut loc mai des decât s-ar putea presupune. Acest lucru a lăsat două cuvinte întregi neocupate și un comitet special a fost responsabil cu atribuirea constantelor de date acestor găuri.
INDEX
Adăugați datele recuperate la adresa specificată de instrucțiune la următoarea instrucțiune. INDEXpoate fi folosit pentru a adăuga sau scădea o valoare index la adresa de bază specificată de operandul instrucțiunii care urmează INDEX. Această metodă este utilizată pentru a implementa matrici și căutări de tabel; deoarece adăugirea a fost făcută pe ambele cuvinte întregi, a fost folosită și pentru a modifica op. cod într-o instrucțiune următoare (extracodică) și, în rare ocazii, ambele funcții simultan.
RESUME
O instanță specială de INDEX( INDEX25). Aceasta este instrucțiunea folosită pentru a reveni de la întreruperi. Aceasta determină reluarea execuției la locația întreruptă.
XCH (schimb valutar)
Schimbați conținutul memoriei cu conținutul registrului A. Dacă adresa de memorie specificată este în memorie fixă ​​(numai în citire), conținutul memoriei nu este afectat, iar această instrucțiune încarcă pur și simplu registrul A. Dacă este în memorie ștergătoare, „corecția” de depășire se realizează stocând cea mai stângă dintre cele 16 biți în A ca bit de semn în memorie, dar nu există un comportament excepțional ca cel al TS.
CS (clar și scade)
Încărcați registrul A cu complementul cu datele la care face referire adresa de memorie specificată.
TS (transfer la stocare)
Stocați registrul A la adresa de memorie specificată. TSde asemenea, detectează și corectează depășirile în așa fel încât să propage un transport pentru adunare / scădere multi-precizie. Dacă rezultatul nu are preaplin (cel mai la stânga 2 biți de A la fel), nu se întâmplă nimic special; dacă există o revărsare (acei 2 biți diferă), cel din stânga trece în memorie ca bit de semn, registrul A este schimbat în +1 sau −1 în consecință și controlul trece la a doua instrucțiune după TS. Ori de câte ori deversarea este un eveniment posibil, dar anormal, a TSfost urmat de o TCcătre logica de nu depășire; atunci când este o posibilitate normală (ca în adunarea / scăderea multi-precizie), TSeste urmat de CAFZERO ( CAF= XCHcătre memoria fixă) pentru a finaliza formarea transportului (+1, 0 sau −1) în următorul nivel superior- cuvânt de precizie. Unghiurile au fost menținute cu precizie simplă , distanțe și viteze cu precizie dublă și timpul scurs cu precizie triplă.
AD (adăuga)
Adăugați conținutul memoriei pentru a înregistra A și a stoca rezultatul în A. Cei 2 biți din stânga ai lui A pot fi diferiți (stare de revărsare) înainte și / sau după AD. Faptul că overflow-ul este mai degrabă o stare decât un eveniment iertă limite limitate de overflow atunci când se adaugă mai mult de două numere, atâta timp cât niciunul dintre totalurile intermediare nu depășește dublul capacității unui cuvânt.
MASK
Efectuați un bit-wise (boolean) și de memorie cu registrul A și stocați rezultatul în registrul A.
MP (multiplica)
Înmulțiți conținutul registrului A cu datele la adresa de memorie menționată și stocați produsul de comandă înaltă în registrul A și produsul de comandă redusă în registrul LP. Părțile produsului sunt de acord în semn.
DV (divide)
Împărțiți conținutul registrului A la datele de la adresa de memorie menționată. Stocați coeficientul în registrul A și valoarea absolută a restului în registrul Q. Spre deosebire de mașinile moderne, numerele cu punct fix au fost tratate ca fracții (punctul zecimal noțional doar la dreapta bitului de semn), astfel încât ați putea produce gunoi dacă divizorul nu a fost mai mare decât dividendul; nu exista protecție împotriva acestei situații. În blocul II AGC, un dividend cu dublă precizie a început în A și L (blocul II LP), iar restul semnat corect a fost livrat în L. Acest lucru a simplificat considerabil subrutina pentru divizarea cu dublă precizie.
SU (scădea)
Scădeți (completarea cuiva) datele de la adresa de memorie de referință din conținutul registrului A și stocați rezultatul în A.

Instrucțiunile au fost implementate în grupuri de 12 pași, numite impulsuri de sincronizare . Impulsurile de sincronizare au fost denumite TP1 până la TP12. Fiecare set de 12 impulsuri de sincronizare a fost numit o subsecvență de instrucțiuni . Instrucțiuni simple, cum ar fi TC, executate într-o singură subsecvență de 12 impulsuri. Instrucțiuni mai complexe au necesitat mai multe subsecvențe. Instrucțiunea de multiplicare ( MP) a folosit 8 subsecvențe: una inițială numită MP0, urmată de o MP1subsecvență care a fost repetată de 6 ori și apoi terminată de o MP3subsecvență. Aceasta a fost redusă la 3 subsecvențe în Blocul II.

Fiecare impuls de sincronizare dintr-o subsecvență ar putea declanșa până la 5 impulsuri de control . Impulsurile de control erau semnalele care efectuau lucrarea efectivă a instrucțiunii, cum ar fi citirea conținutului unui registru pe autobuz sau scrierea datelor din autobuz într-un registru.

Memorie

Memoria AGC a blocului I a fost organizată în bănci de 1 kiloword. Cea mai mică bancă (banca 0) a fost memoria ștearsă (RAM). Toate băncile de deasupra băncii 0 erau memorii fixe (ROM). Fiecare instrucțiune AGC avea un câmp de adresă de 12 biți. Biții inferiori (1-10) au adresat memoria din interiorul fiecărei bănci. Biții 11 și 12 au selectat banca: 00 a selectat banca de memorie ștearsă; 01 a selectat cea mai mică bancă (banca 1) de memorie fixă; 10 l-au selectat pe următorul (banca 2); și 11 au selectat registrul băncii care ar putea fi utilizat pentru a selecta orice bancă de peste 2. Băncile 1 și 2 au fost numite memorie fixă fixă , deoarece erau întotdeauna disponibile, indiferent de conținutul registrului băncii. Băncile 3 și mai sus au fost numite comutabile fix, deoarece banca selectată a fost determinată de registrul bancar.

Block I AGC avea inițial 12 kilowords de memorie fixă, dar aceasta a fost ulterior mărită la 24 kilowords. Blocul II avea 36 kilowords de memorie fixă ​​și 2 kilowords de memorie ștearsă.

AGC a transferat date către și din memorie prin registrul G într-un proces numit ciclu de memorie . Ciclul de memorie a durat 12 impulsuri de sincronizare (11,72 μs). Ciclul a început la impulsul de sincronizare 1 (TP1) când AGC a încărcat adresa de memorie pentru a fi preluată în registrul S. Hardware-ul de memorie a preluat cuvântul de date din memorie la adresa specificată de registrul S. Cuvintele din memoria ștearsă au fost depuse în registrul G prin impulsul de sincronizare 6 (TP6); cuvintele din memoria fixă ​​erau disponibile prin impulsul de temporizare 7. Cuvântul de memorie recuperat a fost apoi disponibil în registrul G pentru accesul AGC în timpul impulsurilor de temporizare de la 7 la 10. După temporizarea impulsului 10, datele din registrul G au fost scrise înapoi în memorie.

Ciclul de memorie AGC a avut loc continuu în timpul funcționării AGC. Instrucțiunile care au nevoie de date de memorie trebuiau să le acceseze în timpul impulsurilor de sincronizare 7-10. Dacă AGC a schimbat cuvântul de memorie din registrul G, cuvântul schimbat a fost scris înapoi în memorie după temporizarea impulsului 10. În acest fel, cuvintele de date au mers în mod continuu din memorie în registrul G și apoi din nou în memorie.

Cei 15 biți inferiori ai fiecărui cuvânt de memorie dețineau instrucțiuni AGC sau date, fiecare cuvânt fiind protejat de un bit de paritate al 16-lea. Acest bit a fost setat la 1 sau 0 de un circuit generator de paritate, astfel încât un număr de 1 din fiecare cuvânt de memorie să producă întotdeauna un număr impar. Un circuit de verificare a parității a testat bitul de paritate în timpul fiecărui ciclu de memorie; dacă bitul nu se potrivește cu valoarea așteptată, se presupune că cuvântul de memorie este corupt și se aprinde o lumină a panoului de alarmă de paritate .

Întreruperi și contoare involuntare

AGC a avut cinci întreruperi vectorizate :

  • Dsrupt a fost declanșat la intervale regulate pentru a actualiza afișajul utilizatorului (DSKY).
  • Eruptul a fost generat de diverse erori hardware sau alarme.
  • Keyrupt a semnalat o apăsare de tastă de pe tastatura utilizatorului.
  • T3Rrupt a fost generat la intervale regulate de la un cronometru hardware pentru a actualiza ceasul AGC în timp real .
  • Uprupt a fost generat de fiecare dată când un cuvânt de 16 biți de date de legătură în sus a fost încărcat în AGC.

AGC a răspuns la fiecare întrerupere suspendând temporar programul curent, executând o rutină scurtă de serviciu de întrerupere și apoi reluând programul întrerupt.

AGC avea și 20 de ghișee involuntare . Acestea erau locații de memorie care funcționau ca contoare sus / jos sau registre de schimbare. Contoare ar crește, scădea sau schimba ca răspuns la intrările interne. Incrementul ( Pinc ), decrementul ( Minc ) sau schimbarea ( Shinc ) a fost gestionat de o subsecvență de microinstrucțiuni inserate între oricare două instrucțiuni regulate.

Întreruperile ar putea fi declanșate atunci când contoare se revarsă. Întreruperile T3rupt și Dsrupt au fost produse atunci când contoarele lor, conduse de un ceas hardware de 100 Hz, s-au revărsat după executarea multor subsecvențe Pinc. Întreruperea Uprupt a fost declanșată după ce contorul său, executând subsecvența Shinc, a mutat 16 biți de date de legătură în sus în AGC.

Mod de asteptare

AGC avea un mod de economisire a energiei controlat de un comutator permis de așteptare . Acest mod a oprit alimentarea AGC, cu excepția ceasului de 2.048 MHz și a scalerului. Semnalul F17 de la scaler a repornit puterea AGC și AGC la intervale de 1,28 secunde. În acest mod, AGC a efectuat funcții esențiale, a verificat comutatorul permis de așteptare și, dacă este încă activat, a oprit alimentarea și a revenit în repaus până la următorul semnal F17.

În modul de așteptare, AGC dormea ​​de cele mai multe ori; prin urmare, nu era treaz să efectuați instrucțiunile Pinc necesare pentru actualizarea ceasului în timp real al AGC la intervale de 10 ms. Pentru a compensa, una dintre funcțiile îndeplinite de AGC de fiecare dată când s-a trezit în modul de așteptare a fost să actualizeze ceasul în timp real cu 1,28 secunde.

Modul de așteptare a fost conceput pentru a reduce puterea cu 5 până la 10 W (de la 70 W) în timpul zborului la mijloc, când AGC nu era necesar. Cu toate acestea, în practică, AGC a fost lăsat activ în toate fazele misiunii și această caracteristică nu a fost niciodată folosită.

Autobuze de date

AGC avea o magistrală de citire pe 16 biți și o magistrală de scriere pe 16 biți. Datele din registrele centrale (A, Q, Z sau LP) sau din alte registre interne pot fi închise pe magistrala de citire cu un semnal de control. Magistrala de citire conectată la magistrala de scriere printr-un tampon care nu inversează, astfel încât orice date care apar pe magistrala de citire au apărut și pe magistrala de scriere. Alte semnale de control ar putea copia datele magistralei de scriere înapoi în registre.

Transferurile de date au funcționat astfel: Pentru a muta adresa următoarei instrucțiuni din registrul B în registrul S, a fost emis un semnal de control RB (citit B); acest lucru a făcut ca adresa să treacă de la registrul B la magistrala de citire și apoi la magistrala de scriere. Un semnal de control WS (write S) a mutat adresa din magistrala de write în registrul S.

Mai multe registre pot fi citite simultan pe magistrala de citire. Când s-a întâmplat acest lucru, datele din fiecare registru au fost incluse - SAU editate pe autobuz. Această caracteristică OR inclusivă a fost utilizată pentru a implementa instrucțiunea Mask, care a fost o operație logică ȘI . Deoarece AGC nu avea nicio abilitate nativă de a face un AND logic , dar putea face un OR logic prin magistrală și putea completa (inversa) datele prin registrul C, teorema lui De Morgan a fost utilizată pentru a implementa echivalentul unui AND logic . Acest lucru a fost realizat prin inversarea ambilor operanzi, efectuarea unui OR logic prin autobuz și apoi inversarea rezultatului.

Software

Margaret Hamilton stă lângă lista software-urilor pe care ea și echipa ei MIT le-au produs pentru proiectul Apollo .

Software-ul AGC a fost scris în limbajul de asamblare AGC și stocat pe memoria cablului . Cea mai mare parte a software-ului se afla pe memorie de cablu numai pentru citire și, prin urmare, nu a putut fi schimbată în funcțiune, dar unele părți cheie ale software-ului au fost stocate în memoria standard cu citire-scriere cu nucleu magnetic și ar putea fi suprascrise de astronauți utilizând interfața DSKY , așa cum s-a făcut la Apollo 14 .

Principiile de proiectare dezvoltate pentru AGC de MIT Instrumentation Laboratory , dirijate la sfârșitul anilor 1960 de Charles Draper , au devenit fundamentale pentru ingineria software - în special pentru proiectarea sistemelor mai fiabile care se bazau pe software asincron , planificare prioritară , testare și om-în- capacitatea de decizie în buclă . Când au fost definite cerințele de proiectare pentru AGC, software-ul și tehnicile de programare necesare nu existau, așa că a trebuit să fie proiectat de la zero.

A existat un simplu sistem de operare în timp real proiectat de J. Halcombe laning , constând din Exec , un lot de locuri de muncă de programare folosind de cooperare multi-tasking și o întrerupere eoliane planificator preempțiune numit lista de așteptare care ar putea programa mai multe de un temporizator 'sarcini'. Sarcinile erau fire scurte de execuție care se puteau reprograma pentru a fi reexecutate pe lista de așteptare sau ar putea începe o operațiune mai lungă începând o „lucrare” cu Exec. Calculatorul Apollo Guidance a fost numit „Al patrulea astronaut” pentru rolul său de a ajuta cei trei astronauți care s-au bazat pe el Neil Armstrong , Buzz Aldrin și Michael Collins .

AGC avea, de asemenea, un interpret sofisticat de software, dezvoltat de MIT Instrumentation Laboratory , care a implementat o mașină virtuală cu pseudo-instrucțiuni mai complexe și mai capabile decât AGC-ul nativ. Aceste instrucțiuni au simplificat programele de navigație. Codul interpretat, care prezintă aritmetică trigonometrică , scalară și vectorială de dublă precizie (16 și 24 biți), chiar și o MXVinstrucțiune (matrice × vectorială), ar putea fi amestecată cu codul AGC nativ. În timp ce timpul de execuție al pseudo-instrucțiunilor a fost crescut (datorită necesității de a interpreta aceste instrucțiuni în timp de execuție), interpretul a furnizat multe mai multe instrucțiuni decât AGC suportate nativ și cerințele de memorie au fost mult mai mici decât în ​​cazul adăugării acestor instrucțiuni la Limba maternă AGC care ar necesita memorie suplimentară încorporată în computer (în acel moment capacitatea memoriei era foarte scumpă). Pseudoinstrucțiunea medie a necesitat aproximativ 24 ms pentru executare. Asamblatorul, numit YUL pentru un prototip timpuriu de Crăciun Computer , a impus tranziții adecvate între codul nativ și codul interpretat.

Un set de rutine de interfață de utilizator bazate pe întreruperi, numit Pinball, a furnizat servicii de tastatură și afișare pentru joburile și sarcinile care rulează pe AGC. Un set bogat de rutine accesibile utilizatorului au fost furnizate pentru a permite operatorului (astronautului) să afișeze conținutul diverselor locații de memorie în octal sau zecimal în grupuri de 1, 2 sau 3 registre la un moment dat. Au fost furnizate rutine de monitorizare, astfel încât operatorul să poată iniția o sarcină pentru a afișa periodic conținutul anumitor locații de memorie. Locurile de muncă ar putea fi inițiate. Rutinele Pinball au efectuat echivalentul (foarte dur) al shell-ului UNIX.

Mulți dintre algoritmii de traiectorie și ghidare utilizați s-au bazat pe lucrările anterioare ale lui Richard Battin . Primul zbor al modulului de comandă a fost controlat de un pachet software numit CORONA a cărui dezvoltare a fost condusă de Alex Kosmala. Software-ul pentru misiunile lunare a constat din COLOSSUS pentru modulul de comandă, a cărui dezvoltare a fost condusă de Frederic Martin și LUMINARY pentru modulul lunar condus de George Cherry. Detaliile acestor programe au fost implementate de o echipă sub conducerea Margaret Hamilton . Hamilton a fost foarte interesat de modul în care astronauții ar interacționa cu software-ul și a prezis tipurile de erori care ar putea apărea din cauza erorii umane. În total, dezvoltarea de software a proiectului a cuprins 1400 de ani-persoană de efort, cu o forță de muncă de vârf de 350 de persoane. În 2016, Hamilton a primit Medalia prezidențială a libertății pentru rolul său în crearea software-ului de zbor.

Software-ul Apollo Guidance Computer a influențat proiectarea Skylab , Space Shuttle și a sistemelor timpurii de avioane de luptă fly-by-wire. În 2003, Ron Burkey a început un efort de a recupera codul sursă care a alimentat AGC și a construi un emulator capabil să îl ruleze, VirtualAGC. O parte din cantitatea mare de cod sursă salvată ca urmare a acestui efort a fost încărcată de un fost stagiar NASA la GitHub pe 7 iulie 2016, atrăgând o atenție semnificativă a presei.

Blocul II

O versiune Block II a AGC a fost proiectată în 1966. A păstrat arhitectura de bază Block I, dar a crescut memoria ștergabilă de la 1 la 2 kilowords. Memoria fixă ​​a fost extinsă de la 24 la 36 kilowords. Instrucțiunile au fost extinse de la 11 la 34, iar canalele I / O au fost implementate pentru a înlocui registrele I / O de la Blocul I. Versiunea Bloc II este cea care a zburat de fapt spre Lună. Blocul I a fost folosit în timpul zborurilor Apollo 4 și 6 fără echipaj și se afla la bordul nefericitului Apollo 1 .

Decizia de a extinde setul de memorie și instrucțiuni pentru Blocul II, dar de a păstra opțiunea restrictivă de trei biți a Blocului I. codul și adresa de 12 biți au avut consecințe interesante de proiectare. Au fost folosite diverse trucuri pentru a conține instrucțiuni suplimentare, cum ar fi să aveți adrese speciale de memorie care, atunci când se face referire, ar implementa o anumită funcție. De exemplu, o INDEXadresă 25 a declanșat RESUMEinstrucțiunea de a reveni dintr-o întrerupere. La fel, INDEX17 au efectuat o INHINTinstrucțiune (inhibă întreruperile), în timp ce INDEX16 le-au reactivat ( RELINT). Alte instrucțiuni au fost implementate precedându-le cu o versiune specială de TCapelat EXTEND. Spațiile de adrese au fost extinse folosind registrele Bank (fix) și Ebank (șterse), astfel încât singura memorie de orice tip care putea fi adresată la un moment dat a fost banca actuală, plus cantitatea mică de memorie fixă ​​fixă ​​și memorie ștearsă. În plus, registrul băncii putea adresa maximum 32 de kilowords, astfel încât un registru Sbank (super-bancă) era necesar pentru a accesa ultimele 4 kilowords. Toate apelurile de subrutină transbancare trebuiau inițiate din memoria fixă ​​fixă ​​prin funcții speciale pentru a restabili banca originală în timpul returnării: în esență, un sistem de indicatori îndepărtați .

Block II AGC are, de asemenea, EDRUPTinstrucțiunea (numele este o contracție a lui Ed's Interrupt , după Ed Smally , programatorul care a solicitat-o). Această instrucțiune nu generează o întrerupere, ci mai degrabă efectuează două acțiuni care sunt obișnuite la întreruperea procesării. Prima acțiune, inhibă întreruperile suplimentare (și necesită o RESUMEinstrucțiune pentru a le activa din nou). În a doua acțiune, ZRUPTregistrul este încărcat cu valoarea curentă a contorului de program (Z). A fost folosit o singură dată în software-ul Apollo, pentru configurarea secvenței de terminare a ciclului DAP în pilotul automat digital al modulului lunar . Se crede că este responsabil pentru problemele de emulare a software-ului LEM AGC Luminary .

Alarme de program 1201 și 1202

DSKY și Buzz Aldrin de pe Apollo 11 Lunar Module Eagle în drum spre Lună

PGNCS a generat avertismente neprevăzute în timpul coborârii lunare a lui Apollo 11 , AGC afișând o alarmă 1202 („Executive overflow - NO CORE SETS”), apoi o alarmă 1201 („Executive overflow - NO VAC AREAS”). Răspunsul AGC la oricare dintre alarme a fost o repornire ușoară. Cauza a fost un flux rapid și constant de furturi de cicluri false din radarul de întâlnire (urmărirea modulului de comandă orbitant), lăsat în mod intenționat în timpul așteptării în timpul coborârii, în cazul în care era nevoie de un avort.

În această parte a abordării, procesorul va fi încărcat în mod normal cu aproape 85%. Furajele suplimentare de 6.400 de cicluri pe secundă au adăugat echivalentul a 13% de încărcare, lăsând suficient timp pentru ca toate sarcinile programate să se execute până la finalizare. La cinci minute de la coborâre, Buzz Aldrin a dat computerului comanda 1668 , care l-a instruit să calculeze și să afișeze periodic DELTAH (diferența dintre altitudinea detectată de radar și altitudinea calculată). 1668 a adăugat încă 10% la volumul de lucru procesorului, provocând preaplin executive și 1202 de alarmă. După ce i s-a dat „GO” din Houston, Aldrin a intrat din nou în 1668 și s-a produs o altă alarmă 1202 . La raportarea celei de-a doua alarme, Aldrin a adăugat comentariul „Se pare că va apărea când avem un 1668 în sus”. Software-ul AGC a fost proiectat cu programare prioritară și recuperat automat, ștergând sarcini cu prioritate mai mică, inclusiv sarcina de afișare 1668 , pentru a finaliza sarcinile sale critice de ghidare și control. Controlorul de îndrumare Steve Bales și echipa sa de asistență, care a inclus Jack Garman, au emis mai multe apeluri „GO”, iar aterizarea a avut succes. Pentru rolul său, Bales a primit medalia prezidențială a libertății SUA în numele întregii echipe a centrului de control și a celor trei astronauți Apollo.

Problema nu a fost o eroare de programare în AGC și nici nu a fost o eroare pilot. A fost un bug de proiectare hardware periferic care fusese deja cunoscut și documentat de inginerii Apollo 5. Cu toate acestea, deoarece problema a apărut o singură dată în timpul testării, au ajuns la concluzia că este mai sigur să zboare cu hardware-ul existent pe care l-au testat deja, decât să zboare cu un sistem radar mai nou, dar în mare parte netestat. În hardware-ul real, poziția radarului de întâlnire a fost codificată cu sincrone excitate de o sursă diferită de 800 Hz AC decât cea utilizată de computer ca referință de sincronizare. Cele două surse de 800 Hz erau blocate în frecvență, dar nu blocate în fază, iar micile variații aleatorii de fază au făcut-o să pară ca și cum antena ar fi „descuiat” rapid în poziție, chiar dacă era complet staționară. Aceste mișcări fantomă au generat seria rapidă de furturi de cicluri.

Software -ul și calculatorul lui J. Halcombe Laning au salvat misiunea de aterizare Apollo 11. Dacă nu ar fi fost proiectarea Laning, aterizarea ar fi fost întreruptă din lipsa unui computer stabil de ghidare.

Aplicații în afara Apollo

Avioane Fly By Wire. AGC DSKY este vizibil în golful avionic

AGC a constituit baza unui sistem experimental fly-by-wire (FBW) instalat într-un F-8 Crusader pentru a demonstra caracterul practic al FBW acționat de computer. AGC-ul utilizat în prima fază a programului a fost înlocuit cu o altă mașină în a doua fază, iar cercetările făcute cu privire la program au dus la dezvoltarea de sisteme fly-by-wire pentru naveta spațială . De asemenea, AGC a condus, deși indirect, la dezvoltarea de sisteme fly-by-wire pentru generația de luptători care erau în curs de dezvoltare în acel moment.

AGC a fost , de asemenea , utilizat pentru Statele Unite Marinei e profundă cufundare de salvare a vehiculului .

Lansarea codului sursă

Codul sursă originală Apollo 11 Guidance Computer a fost inițial accesibil în 2003 de Virtual AGC Project și MIT Museum . Acesta a fost transcris și digitalizat din listele originale ale codului sursă pe hârtie, realizate în anii '60. La mijlocul anului 2016, fostul stagiar NASA , Chris Garry, a încărcat codul sursă AGC pe GitHub .

Vezi si

Note

Referințe

Surse

linkuri externe

Documentație privind AGC și dezvoltarea sa
Documentarea proiectării hardware AGC și în special utilizarea noilor circuite integrate în locul tranzistoarelor
Documentarea operațiunii software AGC
  • Delco Electronics, Apollo 15 - Manual pentru software-ul CSM și LEM AGC utilizat în misiunea Apollo 15, inclusiv proceduri detaliate de interfață cu utilizatorul, explicații ale multor algoritmi subiacenți și informații hardware limitate. Rețineți că acest document are peste 500 de pagini și are o dimensiune de peste 150 de megaocteți.
  • Codul sursă pentru codul modulului de comandă (Comanche054) și codul modulului lunar (Luminary099) ca text.
  • GitHub Cod sursă complet Apollo 11 Guidance Computer (AGC) cod sursă pentru modulele de comandă și lunare.
Unele proiecte și simulatoare AGC

Povești de caracteristici