Navigacioni Komjuter Apollo-a
- Apollo Guidance Computer (AGC) -

Apollo Guidance Computer (AGC) je prvi prepoznatljivi moderni embedded sistem, koji radi u realnom vremenu, da bi piloti-astronauti prikupili i pribavili informacije o letu, i za automatsku kontrolu svih navigacionih funkcija Apollo letilice. On je razvijen za Apollo program u MIT Instrumentacionoj Laboratoriji pod vođstvom Charles Stark Draper-a, sa hardverom čiji je dizajn vodio Eldon C. Hall. Na osnovu MIT dokumenata, rani radovi na arhitekturi potiču od J. H. Laning Jr., Albert Hopkins-a, Ramon Alonso-a i Hugh Blair-Smith-a. Pravi hardver su napravili u Raytheon-u, čiji je deo tima za arhitekturu bio Herb Thaler.


 
1. AGC u Apollo-u

Svaki let na mesec je imao dva AGC-a, po jedan u komandnom i lunarnom modulu. AGC je gonio Primarno Navođenje, Navigacioni i Kontrolni sistem svake letilice, Nazvan akronimom PGNCS (tačnije "pings").

Svaka misija na mesec je takođe imala dva dodatna kompjutera:
  • Kompjuter letenja na Saturn V buster instrumentacionom kolu nazvan Launch Vehicle Digital Computer (LVDC) - serijski kompjuter napravljen u IBM Federal Systems Division.
  • Malu mašinu u Sistemu za odbacivanje putanje lunarnog modula (Abort Guidance System) (AGS), napravljen u TRW, koji bi bio korišten u slučaju otkazivanja PGNCS. AGS bi mogao biti korišten i za uzletanje sa meseca, i za spajanje sa komandnim modulom, ali ne i za sletanje.

Apollo Navigacioni Kompjuter
 
2. Opis

Kompjuter leta Apollo-a je bio prvi koji je koristio integralna kola (IC). Blok I verzija koristi 4,100 IC-a, a svaki IC je imao jedan 3-ulazni NOR gejt. Kasnija Blok II verzija koristi dvostruki 3-ulazni NOR gejt u ravnom pakovanju, sve zajedno oko 5,600 gejtova. Gejtovi su napravljeni upotrebom tranzistorsko-otporne logike (RTL). Oni su međusobno spojeni tehnikom zvanom wire wrap (ovijeno žicom), u kojoj su kola stavljena u podnožja, podnožja imaju kvadratne stubiće, a žica je omotana oko tih stubića. Ivice stubića su nagrižene žicom koja je utisnuta pritiskom od tone po kvadratnom inču, prouzrokujući vrlo bliske spojeve koji su pouzdanije nego lemljene PC ploče. Ožičavanje je potom ubačeno u livenu epoksi plastiku. Odluka o upotrebi ovog IC dizajna u potpunosti je izbegla probleme u AGC-u i ona je odredila budući prvi IC kompjuterski dizajn, Minuteman II kompjuter za navođenje.

RAM kompjutera je bio memorija sa magnetnim jezgrom (4K word) a ROM je bio implementiran kao feritna memorija (32K word). Obe su imale takt od 12 milisekundi. Memorijska reč je bila dužine 16 bita; 15 bita i 1 neparni paritet bit. CPU-ov interni 16-bitni format reči bio je 14 bita podataka, 1 bit prekoračenja i 1 bit znaka (prva komplementna reprezentacija).

 
2.1. Merenje vremena (Timing)

AGC je kontrolisan taktom kristalnog oscilatora od 2.048MHz. Takt je deljen sa dva da bi se dobio četvorofazni takt od 1.024MHz koji je AGC koristio za izvršavanje internih operacija. Takt od 1.024 MHz je takođe deljen sa dva da bi se dobilo signal od 512kHz tkzv. MASTER FREKVENCIJA; ovaj signal je upotrebljen za sinhronizaciju spoljašnjih sistema Apollo letilice.

MASTER FREKVENCIJA je posle deljena preko SKALER-a, prvo sa pet, upotrebom kružnog brojača, da bi se dobio 102.4kHz signal. Ovaj je potom deljen sa dva preko 17 postupnih faza nazvanih F1 (51.2kHz) do F17 (0.78125Hz). Faza F10 (100Hz) je vraćana nazad u AGC za povećanje takta realnog vremena i u druge slučajne brojače upotrebom PINC-a (objašnjen kasnije). F17 faza se koristila da povremeno pokrene AGC kad je radio u STANDBY modu.

 
2.2 Centralni registri

AGC je imao četiri 16-bitna registra za opštu računarsku upotrebu. Oni su zvani "centralni registri":
  • A: akumulator, korišćen za opšta izračunavanja
  • Z: programski brojač, sadržao je adresu sledeće instrukcije za izvršavanje
  • Q: korišten za zadršku ostatka u DV instrukciji, i zadršku povratne adrese nakon TC instrukcije
  • LP: Korišten za zadršku manjeg proizvoda nakon MP instrukcije
Postoje takođe i četiri lokacije u jezgru memorije, na adresi 20-23, duplirane "spremne lokacije" jer kad god je podatak tu upamćen on se pojavljuje pomeren ili rotiran za jednu poziciju. Ovo je bilo uobičajeno i za Blok I i Blok II AGC-ove.

 
2.3 Drugi registri

AGC je imao dodatne registre koji su korišteni interno u okviru operacije. To su:
  • S: 12-bitni memorijski adresni registar, koji je držao niži deo memorijske adrese
  • BANK: 4-bit memorijski registar banke, koji je birao memorijsku banku kada je adresiranje bilo u fiksno-promenljivom modu
  • SQ: 4-bit sekventni registar, koji je držao trenutnu instrukciju
  • G: 16-bit memorijski buffer-registar, koji je pridržavao word-podatke koji se kreću od i ka memoriji
  • X: korišten za pridržavanje jednog ili dva ulaza u ADDER; ADDER je korišten za izvršavanje svih prvo-komplementnih aritmetika, i za uvećanje programskog brojača (Z registar)
  • Y: korišten za pridržavanje vrednosti drugih ulaza za ADDER
  • U: nije zapravo registar, već izlaz ADDER-a (prvo-komplementna suma sadržaja registra X i Y)
  • B: buffer-registar opšte namene, takođe korišten za pred-zahvatanje sledeće instrukcije. Na početku sledeće instrukcione sekvence, viši bitovi od B (sadrže naredni op kod) se kopiraju u SQ, a niži bitovi (adrese) se kopiraju u S.
  • C: nije odvojeni registar, već drugi izlaz iz B registra, sadrži prvi-kopmlement sadržaja B
  • IN: četiri 16-bitni ulazni registar
  • OUT: pet 16-bitnih izlaznih registara
 
2.4. Instrukcioni set

Instrukcioni set je 3 bita za opkod, 12 bita za adresu. Blok I je imao 11 instrukcija: TC, CCS, INDEX, XCH, CS, TS, AD, i MASK (osnovni), i SU,MP, i DV (dodatni). Prvih osam, nazvane "osnovne instrukcije", su direktno pristupale 3-bitnom opkodu. Poslednje tri su obeležavane kao "extrakod instrukcije" jer se njima pristupalo izvršavanjem specijalnog tipa INDEX instrukcije (zvane EXTEND) neposredno pre instrukcije.

Block I AGC instrukcije su se sastojale od:
TC (Transfer Control): Bezuslovan skok na adresu koju odredi instrukcija. Povratna adresa se automatski pamti u Q registru, pa se TC instrukcija može koristiti za pozive podrutina.

CCS (Count, Compare, and Skip): Kompleksna uslovna skok instrukcija. A registar je učitan sa podacima povratno dobijenim sa adrese naznačene od instrukcije. (Pošto AGC koristi prvo-komplementnu notaciju, postoji dve predstavke nule. Kad su svi bitovi postavljeni na nulu, to se zove "plus zero", Ako su svi bitovi postavljeni na jedan, onda se to zove "minus zero".) "Diminished Absolute Value (DABS)" (umanjena apsolutna vrednost) podataka se potom izračunava i skladišti u A registar. Ako je broj veći od nule, DABS umanjuje vrednost za jedan; ako je broj negativan, on se komplementira pre primene umanjenja - to je deo "apsolutne vrednosti". "Umanjen" znači "smanjen ali ne ispod nule". Stoga, kada AGC izvrši DABS funkciju, pozitivni brojevi će biti ispred plus zero , i tako će negativni brojevi prvo ustanoviti njihovu negativnost preko četvorostrukog pod-skakanja. Konačni korak u CCS je četvorostruko preskakanje, zavisno od podataka u registru A pre DABS-a. Ako registar A sadrži plus zero, CCS preskače na drugu instrukciju posle CCS-a. Manje od nula prouzrokuje skok na treću instrukciju nakon CCS-a, a minus zero skače na četvrtu instrukciju posle CCS-a. Osnovna primena "odbroj" dela bila je da se omogući obična petlja, koju je kontrolisao pozitivni brojač, do kraja i CCS i TC na početak petlje, ekvivalentno IBM 360-ovom BCT registru. Funkcija "Apsolutna vrednost" smatrana je dovoljno važnom da bude ugrađena unutar te instrukcije; kad je korišćena samo za ovu svrhu, sekvenca nakon CCS bila je TC*+2, TC*+2, AD ONE. Ozbiljan iskorak bilo je stvaranje i upotreba "CCS-rupa" kada je vrednost bila testirana i poznato da nikad neće biti pozitivna, što se događalo mnogo češće nego što možete pretpostaviti. To ostavlja cele dve reči nezauzete, a specijalan komitet je bio odgovoran za dodelu podataka konstanti ovim rupama.

INDEX: Dodaje povratne podatke adresi određenoj od strane instrukcije sledećoj instrukciji. INDEX može biti korišten za sabiranje ili oduzimanje indeksne vrednosti od bazne adrese navedenoj od strane operanda instrukcije koju prati INDEX. Ovaj metod je korišten za ubacivanje nizova i lookup tabela; obzirom da je sabiranje urađeno nad obema celim rečima, ono je takođe korišćeno za menjanje opkoda u narednim (extrakod) instrukcijama, i u retkim slučajevima na dve funkcije istovremeno.

RESUME: Specijalna instanca INDEX-a (INDEX 25). Ovo je instrukcija korištena za vraćanje iz prekida (interrupt). On prouzrokuje izvršenje obnavljanja na lokaciji prekida.

XCH (Exchange): Razmena sadržaja memorije sa sadržajem A registra. Ako je navedena memorijska adresa u fiksnoj (read-only) memoriji, sadržaj memorije nije ugrožen, a ova instrukcija jednostavno puni registar A. Ako je brišuća memorija, "korekcija" prekoračenja je postignuta pamćenjem krajnje levog od 16 bita u A registru kao bit znaka u memoriji, ali ovde nema vanrednog ponašanja kao kod TS.

CS (Clear and Subtract): Puni A registar sa prvo-komplementnim podacima na koje se referiše navedena memorijska adresa.

TS (Transfer to Storage): Skladišti registar A pri navedenoj memorijskoj adresi. TS takođe detektuje, i ispravlja, prekoračenja tako da se množenje prenosi na multi-tačna (multi-precision) sabiranja/oduzimanja. Ako rezultat nema prekoračenje (krajnje leva 2 bita A registra su ista), ništa se specijalno ne događa; ako postoji prekoračenje (ta 2 bita se razlikuju), onaj krajnje levi ide u memoriju kao bit znaka, registar A je promenjen u +1 odnosno -1, a kontrola preskače na drugu instrukciju koja prati TS. Kadgod je prekoračenje verovatno, ali ne i nenormalan događaj, TS je praćen sa TC na ne-prekoračivoj logici; kada je to normalna verovatnoća (kao kod multi-tačnog sabiranja/oduzimanja), TS se praćen sa CAF ZERO (CAF = XCH ka fiksnoj memoriji) da bi završio oblikovanje prenosa (+1, 0 ili -1) na sledeću reč više-tačnosti. Uglovi su zadržani u jednostrukoj tačnosti, razdaljine i ubrazanje u duploj tačnosti, a proteklo vreme u trostrukoj tačnosti.

AD (Add): Sabira sadržaj memorije i registra A i u njega skladišti rezultat. 2 krajnje leva bita od A mogu se razlikovati (stanje prekoračenja) pre i/ili nakon AD. Činjenica da je prekoračenje stanje pre nego događaj, on nije toliko striktan prema granicama prekoračenja pri sabiranju dva broja, dogod nijedan od totalnih međuproizvoda ne prelazi dvostruki kapacitet reči.

MASK: Izvršava bit-ovno (boolean) AND-iranje memorije sa A registrom i skladišti rezultat u registar A.

MP (Multiply): Množi sadržaj A registra sa podacima na referisanoj memorijskoj adresi i skladišti proizvod višeg-reda u registar A a proizvod nižeg-reda u registar LP. Delovi proizvoda se slažu u znaku.

DV (Divide): Deljenje sadržaja A registra sa podacima na referisanoj memorijskoj adresi. Skladišti količnik u A registar a apsolutnu vrednost ostatka u Q registar. Za razliku od modernih mašina, brojevi sa fiksnim zarezom se tretiraju ka frakcije (zamišljena decimalna tačka je odmah desno od bita znaka). pa tako možete napraviti neupotrebljivu vrednost ako delilac nije manji od delitelja; ne postoji zaštita od ove situacije. U Blok II AGC-u, delilac duple-tačnosti počiva u A i L (Blok II LP), a ispravno označen ostatak je isporučen L-u. To značajno pojednostavljuje podrutinu za deljenje duple-tačnosti.

SU (Subtract): Oduzima (prvog komplementa) podatke na referisanoj memorijskoj adresi od sadržaja A registra i skladišti rezultat u A.
Instrukcije koje su implementirane u grupama od 12 koraka, nazivaju se vremensko impulsni (timing pulse). Vremenski impulsi su ovde nazvani TP1 do TP12. Svaki set od 12 vremenskih impulsa je nazvan instrukciona podsekvenca. Prosta instrukcija, poput TC, izvršava se u jednoj podsekvenci od 12 impulsa. Kompleksnije instrukcije zahtevaju nekoliko podsekvenci. instrukcija množenja (MP) koristi 8 podsekvenci: onu inicijalnu zovemo MP0, praćena je sa MP1 podsekvencom koja se ponavlja 6 puta, i na kraju se završava sa MP3 podsekvencom. Ovo je smanjeno na 3 podsekvence u Blok II.

Svaki vremenski impuls u sekvenci može okinuti do 5 kontrolnih impulsa. Kontrolni impulsi bi bili oni signali koji su pravi rad instrukcje, kao što je čitanje sadržaja registra na bus-u, ili upis podataka sa bus-a u registar.

 
2.5. Memorija

Blok I AGC memorija je organizovana u banke sa 1024 reči. Najniža banka (bank 0) je brisajuća memorija (RAM). Sve banke iznad bank 0 bi bile fiksna memorija (ROM). Svaka AGC instrukcija je imala 12-bitno adresno polje. Niži bitovi (1-10) adresiraju memoriju unutar svake banke. Bitovi 11 i 12 biraju banku: 00 odabira brisajuću memorijsku banku; 01 odabira najnižu banku (bank 1) fiksne memorije; 10 odabira sledeću (bank 2); a 11 odabira BANK registar koji može da posluži za odabir bilo koje banke iznad Banke 2. Banke 1 i 2 se nazivaju "fiksno-fiksna" memorija, zato što su stalno dostupne, zavisno od sadržaja BANK registra, Banke 2 i iznad se nazivaju "fiksno-prebacujuće" jer je birana banka određena od strane BANK registra.

Block I AGC inicijalno je imao 12K reči fiksne memorije, ali je to kasnije uvećano na 24k. Blok II je imao 32k fiksne memorije i 4k brisajuće memorije.

AGC prosle đuje podatke ka i iz memorije preko G registra u procesu zvanom " memorijski ciklus". Memorijski ciklus uzima 12 vremenskih impulsa (11.71 milisekunde). Ciklus počinje pri vremenskom pulsu 1 (TP1) kada AGC učita memorijsku adresu koja se unosi u S registar. Memorijski hardver pronalazi reč podatka iz memorije na adresi navedenoj od strane S registra. Reči iz brisajuće memorije se skladište u G registar kod vremenskog impulsa 6 (TP6); reči iz fiksne memmorije su dostupne kod vemenskog impulsa 7. Pronađena memorijska reč je potom dostupna u G registru za AGC pristup tokom vremenskih impulsa 7 do 10. Nakon vremenskog impulsa 10, podaci u G registru se upisuju nazad u memoriju.

AGC memorijski ciklus se događa neprekidno tokom rada AGC-a. Instrukcije zahtevaju memorijske podatke i treba da im pristupe tokom vremenskih impulsa 7-10. Ako je AGC promenio memorijsku reč u G registru, promenjena reč se upisuje nazad u G registar i ponovo nazad u memoriju.

Nižih 15 bita svake memorijske reči drže AGC instrukcije ili podatke. Svaka reč je zaštićena 16-tim "neparnim bitom". Ovj bit je postavljen na 1 ili 0 od strane kola generatora parnosti pa će brojanje prvog u svakoj memorijskoj reči uvek rezultirati neparnim brojem. Kolo provere parnosti testira bit parnosti tokom svakog memorijskog ciklusa: ako se bit nije podudario sa očekivanom vrednošću, pretpostavlja se da je memorijska reč oštećena i zasija svetlo na panelu PARITY ALARM.

 
2.6. Interupti i slučajni brojači (involuntary counters)

AGC je imao pet vektorskih interupta. DSRUPT se okidao u pravilnim intervalima da bi obnovio korisnički displej (DSKY). ERRUPT je generisan od raznog hardvera ili alarma. KEYRUPT signalizira pritisnut taster sa korisničkog interfejsa. T3RUPT je genrisan u pravilnim intervalima iz hardverskog tajmera za obnavljanje AGC-ovog takta realnog vremena. UPRUPT je generisan svaki put kad se 16-bitna reč uplink podataka učita u AGC. AGC odgovara na svaki interupt privremeno odgađajući trenutni program, izvršavajući kratku uslužnu interupt rutinu, a potom obnavlja prekinuti program.

AGC je takođe imao 20 slučajnih brojača. Oni su bili memorijske lokacije koje su funkcionisale kao up/down brojači, ili pomerački registri. Brojači će uvećati, umanjiti ili pomeriti kao odgovor na interne ulaze. Uvećanje (PINC), umanjenje (MINC) ili pomeraj (SHINC) je upravljan sa jednom sekvencom mikroinstrukcije ubačene između bilo koje dve regularne instrukcije.

Interupti mogu biti okinuti kad brojač prekorači. T3RUPT i DSRUPT interupti se dobijaju kada njihovi brojači, pogonjeni 100Hz-nim hardverskim taktom, prekorače nakon izvršavanja mnogo PINC podsekvenci. UPRUPT interupt je okinut nakon što njegov brojač, izvršavajući SHINC podsekvencu, pomeri 16 bita uplink podataka u AGC.

 
2.7 Standby mod

AGC je imao mod štednje potrošnje (power-saving) putem STANDBY ALLOWED prekidača. Ovaj mod isključuje napajanje AGC-a, izuzev za 2.048 MHz takt i SCALER. F17 signal od SCALER-a uključuje AGC napajanje i AGC se vraća na interval od 1.28 sekundi. U ovom modu, AGC izvršava osnovne funkcije, proverava STANDBY ALLOWED prekidač, i - ako je još uvek uključen - isključuje napajanje i odlazi na spavanje do sledećeg F17 signala.

U standy modu, AGC miruje većinu vremena; stoga, on nije pobuđen za izvršavanje PINC instrukcije potrebne za obnavljanje AGC-ovog takta realnog vremena u intervalima od 10ms. Da bi to kompenzovao, po jedna funkcija se izvršava svaki put kad se AGC pobudi iz standby moda da bi obnovio takt relanog vremena od 1.28 sekundi.

Standby mod je dizajniran za štednju snage od 5 do 10 kW tokom srednjeg kursa leta kada AGC nije potreban. Kako god, u praksi, AGC je ostavljen uključen tokom svih faza misije i ta osobina nikada nije korištena.

 
2.8. Bus-evi podataka

AGC je imao 16-bitni bus za čitanje i 16-bitni za upisivanje. Podaci iz centralnih registara (A, Q, Z ili LP), ili drugih internih registara trebalo je priključiti na bus čitanja sa kontrolnim signalima. Bus čitanja je spojen na bus upisa preko ne-invertujućeg bafera, pa se svi podaci bus-a čitanja pojavljuju i na bus-u čitanja. Drugi kontrolni signali mogu kopirati bus upisa nazad u registre.

Prenosi podataka se vrše na sledeči način: Da bi se prebacila adresa sledeće instrukcije iz B registra u S registar, emitovan je RB (čitaj B) kontrolni signal; to izaziva pomeranje adrese iz B registra na bus čitanja, a potom na bus upisa. WS (upiši S) kontrolni signal pomera adresu sa bus-a upisa u S registar.

Sa bus-a za čitanje se moglo simultano pročitati nekoliko registara. Kad se ovo desi, podaci sa svakog registra se inclusive-OR-uju (logička uključivo ILI funkcija) na bus. Ova inclusive-OR osobina je korištena za immplementaciju MASK instrukcije, koja je bila logička AND operacija. Pošto AGC nije imao prirodnu sposobnost da uradi logički AND, ali je to mogao logički OR preko bus-a i mogao je komplementirati (invertiovati) podatke preko C registra, onda je DeMOrgan-ova teorema korištena za implementiranje ekvivalentna logičke AND funkcije. To je postignuto invertovanjem oba operanda, izvršavajući logičko Or-ovanje preko bus-a, a potom invertovanjem rezultata.

 
2.9. Softver

AGC softver je napisan u AGC assembly jeziku. To je jednostavan operativni sistem u realnom vremenu koji se sastoji od EXEC-a, paketsko poslovno-planirani sistem koji je mogao da radi do 8 poslova istovremeno koristeći m ultitasking bez prethodnog pražnjenja (svaki posao je trebalo da periodično preda povratnu kontrolu EXEC-u). Postojao je takođe i interupt-pogonjena komponenta zvana WAITLIST koja je mogla da planira višestruke vremenski pogonjene zadatke. Zadaci bi bili kratki koraci izvršenja koji se replaniraju samostalno za ponovno izvršavanje na WAITLIST, ili da izbaci u prvi plan dužu operaciju pokretanjem posla sa EXEC.

EXEC poslovi su bili prioritetno-bazirani. Najniži priritetni posao, zvan lažni posao, je uvek bio prisutan. On je radio dijagnostičke provere i pokretao zeleno "COMPUTER ACTIVITY" svetlo na DSKY displeju. Kada je lažan posao radio, kompjuter nije imao šta pametno da radi, i to je pokazano tako što je zasvetlelo COMPUTER ACTIVITY svetlo.

AGC je takođe imao sofisticirani softver prevodioc koji je implementirao virtuelnu mašinu s kompleksnijim i sposobnijim instrukcijama nego pravi AGC. Preveden kod, koji je opskrbljen duplom tačnošću skalarne i vektorske aritmetike - čak i neke MXV (matrix × vector) instrukcije - mogle su biti miksovane sa osnovnim AGC-ovim kodom. Assembler i verzija kontrolnog sistema, nazvan YUL za prvi prototip "Božićni kompjuter", je iznudio pogodan prelaz između osnovnog i prevedenog koda.

Set interupt-pogonjene rutine korisničkog interfejsa nazvan PINBALL obezbeđivao je tastaturi i displeju obradu posla i zadataka koji su radili na AGC-u. Bogat set korisnički-dostupnih rutina bi omogućavali operatoru (astronautu) prikaz sadržaja raznih memorijskih lokacija u oktalnom ili decimalnom zapisu u grupama od 1, 2 ili 3 registra istovremeno. "Monitor" rutine su obezbeđene pa je operator mogao da inicira zadatak za povremeno osvežavanje prikaza sadržaja određenih memorijskih lokacija. Poslovi su mogli biti inicirani. PINBALL rutine se izvršavaju (vrlo grubo rečeno) ekvivalentno UNIX shell-u (školjki).

 
2.10. Korisnički interfejs

Jedinica korisničkog interfejsa se nazivala DSKY (displej/tastatura); niz brojeva i kalkulator-stil tastatura. Komande su unošene numerički, kao dvo-cifarni "prog", "verb" i "noun" brojevi. Brojevi su bili zeleni visoko-naponski elektroluminescentni displeji, složeni u niz od sedam segmenata po broju, za prikaz brojeva. Segmenti su pogonjeni elektromehaničkim relejima, što je ograničavalo obnavljanje displeja (Blok II je koristio SCR-ove - siliconski kontrolisane diode). Tri 5-cifarnih brojeva takođe je moglo biti prikazano oktalno ili decimalno. Ulazi su bili tasteri. Ovaj kalkulator-stil interfejsa, je bio prvi svoje vrste, prototip za sve slične digitalne kontrol-panelne intefejse.

Nacrt interfejsa LMDSKY

Komandni modul (CM) je imao dva DSKY; jedan na osnovnoj instrument tabli a drugi u nižem odeljku opreme blizu sekstanta korištenog za inercionu platformu navigacije. Oba DSKY-a su pogonjena istim AGC-om. Lunarni modul (LM) je imao jedan DSKY za svoj AGC.

 
3. Block II

Blok II verzija AGC-a je dizajnirana 1966. god. Zadržana je osnovna Blok I arhitektura, ali je uvećana brisajuća memorija sa 1k na 2k. Fiksna memorija je proširena sa 24k na 36k. Instrukcije su proširene sa 11 na 34 a ugrađeni su I/O kanali umesto I/O registara na Bloku I. Blok II verzija je ona koja je zapravo poletela na Mesec. Blok I je korišćen tokom bespilotnog leta Apollo 4 i 6, i bio "izbrušen" za nesuđeni Apollo 1.

Odluka za proširenje memorije i instrukcionog seta za Blok II, ali za zadržavanje Blok I restriktivanog 3-bitnog opkoda i 12-bitne adrese imao je interesantne posledice. Korišteni su razni trikovi za usađivanje dodatnih instrukcija, kao što su one za dobijanje specijalnih memorijskih adresa koje, kada su referisane, će implementirati određene funkcije. Na primer, INDEX na adresu 25 okida RESUME instrukciju da se vrati iz interupta. Slično, INDEX 17 izvršava INHINT instrukciju (spreči interupte), dok ih INDEX 16 ponovo omogućava (RELINT). Druge instrukcije bi bile implementirane tako što bi im prethodila specijalna verzija INDEX-a nazvanim EXTEND koja aritmetički modifikuje 3-bitni opkod upošljavajući bit prekoračenja za njihovo proširenje. Adresni prostori su prošireni upošljavanjem BANK (fiksnih) i EBANK (brisajućih) registara, pa je samo memorija, bilo kog tipa, mogla biti trenutna banka koja je adresirana u nekom datom vremenu, plus mala količina fiksno-fiksne memorije i brisajuće memorije. U dodatku, BANK registar je zahvatao 32k adresa, pa je SBANK (super-banka) zahtevala pristup barem 4k. Svi unakrsni bank podrutinski pozivi morali su biti inicirani iz fiksno-fiksne memorije preko specijalnih funkcija radi restauracije originalne banke tokom povratka - u osnovi sistem od udaljenih pokazivača.

 
4. PGNCS problem

PGNC sistem je otkazivao tokom prvog živog lunarnog spuštanja, kad je AGC pokazao 1201 alarm ("Executive overflow - no vacant areas") i 1202 alarm ("Executive overflow - no core sets"). U oba slučaja ove greške su prouzrokovane lažnim podacima sa radara sastanka, koji je ostavljen uključen tokom sletanja. Ove greške su automatski obustavile trenutni zadatak kompjutera, ali je podatak frekvencije radara uverio da su opozivni signali bili poslati prevelikom brzinom da bi ga CPU savladao.

Srećom po Apollo 11, AGC softver je "sigurno" omanuo, rasteretio zadatke nižeg-prioriteta i zatražio od Neil Armstronga da se prebaci na više ručno kontrolisan mod. Inercioni navigacioni zadaci su nastavili da rade sigurno. Stepen preopterećenja je bio minimalan, jer je softver bio "očišćen" da bi ostavio približno 15% slobodnog vremena, a 6400 bita/s povorka impulsa iz radara indukovao je PINC-ove koji su protraćili 15% AGC-ovog vremena. Po savetu Steve Bales-a i Jack Garman-a, greške su premošćene, i misija je bila uspeh.

Među prvim komjuterskim kodovima greške prvi je bio "404 error", mada je ta greška "error 0040" skraćenica za "IMU orientation unknown".

 
5. Zabeleške

Prvi napredni stoni kalkulatori su se pojavili na tržištu u otprilike isto vreme, sa naučnim a potom programibilnim džepnim kalkulatorom koji se pojavljuju tokom naredne dekade. Prvi programibilni ručni kalkulator, HP-65, je proban na rezervnim proračunima u brodu Apollo Komandnog/Servisnog modula u Apollo-Soyuz Test projektu 1975. god.

 
6. Reference

Hall, Eldon C. (1996). Journey to the Moon: The History of the Apollo Guidance Computer. AIAA. ISBN 156347185X.

 
7. Spoljašnji linkovi

Dokumentacija o AGC-u i njegovom razvoju: Neki AGC bazirani tehnološki istorijski projekti:
  • AGC Replica - John Pultorak's successful project to build a hardware replica of the Block I AGC in his basement
  • Virtual AGC Home Page - Ronald Burkey's AGC simulator, plus source and binary code recovery for the Colossus (CSM) and Luminary (LEM) SW
  • Mark's Orbiter Page - Mark Grant's attempt to wire the Virtual AGC software into the NASSP Apollo simulation for the Orbiter space simulator
  • Project Apollo for Orbiter - Addon for Orbiter spaceflight simulator, working towards a full simulation of the CSM and LEM including the Virtual AGC. Seen here running the launch monitoring program.
Sadržaj

Navigacija