Diit.cz - Novinky a informace o hardware, software a internetu

Registry AGC, instrukční sada, přerušení a čítače

Apollo 11, otisk boty
Z pohledu lidské historie tomu bylo před malým okamžikem právě 40 let od momentu, kdy testovací pilot a astronaut Neil Alden Armstrong jako první příslušník lidského rodu vstoupil na povrch cizího kosmického tělesa, (ne)odvěkého souputníka planety Země, Měsíc. Byl to malý krůček pro člověka, ale obrovský skok pro lidstvo a toto je náš skromný pokus vzdát hold všem vědcům, inženýrům, technikům, politikům i dalším lidem, kteří psali dějiny ve snaze dostát výzvě presidenta Kennedyho a splnit si nejúžasnější dobrodružství, jaké může člověk podstoupit…

Centrální registry

AGC disponoval čtyřmi primárními 16bitovými registry:

  • A - akumulátor; pro obecné výpočty
  • Z - programový čítač; obsahoval adresy následujících vykonávaných instrukcí
  • Q - k podržení DV instrukce a podržení návratové adresy po TX instrukci (viz dále)
  • LP - podržené low-power výstupů po MP instrukcích (viz dále)

Dále zde byly čtyři lokace v hlavní paměti, na adresách 20 až 23, takzvané přípravné lokace, kde se nacházely věci pro budoucí výpočetní kroky (vždy posouvané o jeden bit).

Další registry

Zbývající registry byly interně využívány v procesu výpočetních operací:

  • S - 12bitový registr paměťových adres
  • Bank/Fbank - 4bitový ROM bank registr; vybíral 1kibislovo v ROM při adresování zafixovaném ve fixed-switchable módu
  • Ebank - 3bitový RAM bank registr vybírající 256slovní RAM banku při adresování v erasable-switchable módu
  • Sbank (super-bank) - 1bitové rozšíření Fbank (poslední 4kibislova z 36kibislovové ROM nebyly dosažitelné z Fbank
  • SQ - 4bitový sekvenční registr nesoucí aktuální instrukci
  • G - 16bitový registr paměťového bufferu uchovávající datová slova jdoucí do/z paměti
  • X - držel jeden ze dvou vstupů do sumátoru (ten se používal pro veškerou jednorozměrnou aritmetiku a k inkrementování programového čítače (Z registru))
  • Y - držel druhý vstup sumátoru
  • U - ne přímo registr, šlo o výstup ze sumátoru (jednorozměrný výsledek z obsahu registrů X a Y)
  • B - buffer registr pro všeobecné použití, také používaný pro pre-fetch příští instrukce. Na začátku další instrukční sekvence byl horní bit z B (obsahující příští operační kód) zkopírován do SQ a nižší bit (adresa) putoval do S.
  • C - jiný výstup z B registru
  • IN - čtyři 16bitové vstupní registry
  • OUT - pět 16bitových výstupních registrů

Instrukční sada

Z dnešního pohledu byla „jednoúčelová“ instrukční sada AGC v podstatě primitivní, ale svůj účel plnila skvěle.

Formát instrukcí byl 3bitový pro operační kódy a 12bitový pro adresy. První verze AGC měla 11 instrukcí: TC, CCS, INDEX, XCH, CS, TS, AD, MASK, SU, MP a DV. Prvních osm byly základní isntrukce přímo dostupné 3bitovými operačními kódy, zbývající tři byly speciální dostupné pouze vykonáním speciálního typu INDEX instrukce zvaného EXTEND, a to hned před instrukcí.

  • TC (transfer control) - návratová adresa automaticky putuje do Q registru, TC instrukce tak šla použít pro subrutinní volání.
  • CCS (count, compare, and skip) - velmi komplexní instrukce, jejíhož dlouhého popisu vás ušetřím.
  • INDEX - přidává data z poslední instrukcí specifikované adresy příští instrukci.
  • RESUME - speciální instance INDEXu (INDEX 25) používaná jako návrat z přerušení.
  • XCH (exchange)
  • CS (clear and subtract) - plní registr A data odkazovanými ze specifické adresy paměti.
  • TS (transfer to storage) - přesunutí registru A na specifikovanou adresu paměti. TS také detekovala a korigovala přetečení a tomu uzpůsobovala chování.
  • AD (add)
  • MASK - provádí booleanovské operace nad registrem A, kde poté ukládá výsledek
  • MP (multiply)
  • DV (divide)
  • SU (subtract)

Instrukce byly implementovány ve skupinách po 12 krocích zvaných „časovací pulsy“. Každý set 12 pulsů byl označován jako instrukční subsekvence. Jednoduché instrukce jako TC se vykonávaly v jedné subsekvenci, komplexnější vyžadovaly více subsekvencí. Například MP používala 8 subsekvencí: prvotní zvanou MP0, následovalo šest subsekvencí MP1 a nakonec přerušení subsekvencí MP3. V pozdější verzi AGC bylo toto redukováno na tři subsekvence.

Každý časovací puls v subsekvenci (připomenu že jich bylo 12) mohl spustit pět kontrolních pulsů. Každý puls byl právě tím, co dělalo z dané instrukce skutečnou práci jako načítání obsahu registru na sběrnici, zápis dat ze sběrnice do registru atd. (pro představu: zde se již bavíme na nejelementárnější úrovni jednotlivých pulsů elektrického signálu na vodičích a v čipech).

Přerušení a nedobrovolné čítače

AGC měl pět vektorových přerušení:

  • Dsrupt bylo voláno v pravidelných intervalech kvůli updatu zobrazení
  • Erupt bylo generováno při rozličných hardwarových poruchách a alarmech
  • Keyrupt signalizovalo zmáčknutí klávesy na klávesnici
  • T3Rrupt bylo generováno v pravidelných intervalech z hardwarového časovače, který updatoval real-time hodiny
  • Uprupt bylo generováno vždy, když se do AGC nahrávalo 16bitové slovo

Na každé přerušení reagoval AGC tak, že pozastavil aktuálně vykonávaný program, spustil krátkou servisní rutinu pro přerušení a potom obnovil běh přerušeného programu.

AGC také měl 20 „nedobrovolných“ čítačů. Ty pracovaly „na zakázku“ jiných částí systému jako up/down čítače, posuvné registry atd. Mohly inkrementovat, dekrementovat, nebo posouvat hodnoty v závislosti na interních vstupech. Inkrementace (Pinc), dekrementace (Minc), nebo posuv (Shinc) byl spravován jednou subsekvencí mikroinstrukcí vkládaných během dvou běžných instrukcí programu.

Přerušení mohla být spouštěna i během přetečení čítačů. T3rupt a Dsrupt přerušení byla produkována jejich vlastními čítači a řízena 100Hz hardwarovými hodinami, kdy k přetečení docházelo při vykonání příliš mnoha Pinc subsekvencí. Uprupt přerušení se volalo když spuštěná Shinc subsekvence posunula 16bitů vstupních dat do AGC.

David "David Ježek" Ježek

Bývalý zdejší redaktor (2005-2017), nyní diskusní rejpal.

více článků, blogů a informací o autorovi

Diskuse ke článku Lidská noha vkročila na měsíc před 40 lety

Pátek, 7 Srpen 2009 - 23:29 | Anonym | paulie z malého města no tym teoriam vseliakym sa...
Čtvrtek, 30 Červenec 2009 - 09:16 | Anonym | Jen taková poznámka/osobní zkušenost, jednou jsem...
Středa, 29 Červenec 2009 - 11:43 | Anonym | pepst co sa urazas ved je to len diskusia nic...
Středa, 29 Červenec 2009 - 10:41 | pepst | Urobil som chybu, že som sa do tejto diskusie...
Úterý, 28 Červenec 2009 - 21:54 | Anonym | pepst tak nemal zabrdat do tej temy nemoze z...
Úterý, 28 Červenec 2009 - 09:04 | pepst | Porovnávať .týždeň a Blesk je extrémne, ale fakt...
Pondělí, 27 Červenec 2009 - 22:19 | Anonym | pepst ty vole ako ze fajn clanok ale to snad...
Pondělí, 27 Červenec 2009 - 15:02 | pepst | Také množstvo bláznov som v diskusii na cdr.cz...
Pondělí, 27 Červenec 2009 - 14:57 | Anonym | Uhodili jste hrebicek na hlavicku panove, lidsto...
Pondělí, 27 Červenec 2009 - 14:07 | Anonym | Tomcat2: Za 40 let je to docela málo, uvážime-li...

Zobrazit diskusi