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.
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
|
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.
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.
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
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.
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.
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.
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.
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.
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.
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".
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.
Hall, Eldon C. (1996). Journey to the Moon: The History of the Apollo Guidance Computer. AIAA. ISBN 156347185X.
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.
Copyright by Oaza.net 2006
|