Obsah
1. Jazyk symbolických instrukcí i vyšší programovací jazyky na mainframech GE-200
2. Překladače programovacích jazyků a jejich nedostatky při programování sálových počítačů
3. Dartmouth Time Sharing System – DTSS
4. Interaktivní způsob práce s DTSS
5. Vznik programovacího jazyka BASIC na systému DTSS
6. Příkazy dostupné v prvních verzích programovacího jazyka BASIC
7. Vliv DTSS na další vývoj operačních systémů
8. Mainframy General Electric, systém DTSS a UNIX
1. Jazyk symbolických instrukcí i vyšší programovací jazyky na mainframech GE-200
V předchozí části seriálu o historii vývoje výpočetní techniky jsme se seznámili jak s technickými parametry sálových počítačů řady GE-200 (konkrétně s mainframy nesoucími označení GE-215, GE-225 a GE-235), tak i s programovacími jazyky, které byly na těchto počítačích zpočátku používány a podporovány přímo společností General Electric. Z nižších programovacích jazyků měli vývojáři na výběr mezi jazykem symbolických instrukcí nazvaným General Assembly Program (zkráceně GAP) a plnohodnotným assemblerem se jménem ZOOM, který mj. podporoval i tvorbu maker. K těmto nízkoúrovňovým programovacím jazykům můžeme připočíst i specializovaný jazyk WIZ, který sloužil pro překlad aritmetických a logických výrazů do strojového kódu. Tyto přeložené výrazy bylo díky kompatibilnímu binárnímu formátu samozřejmě možné volat jak z assembleru (přesněji řečeno z programů napsaných v jazyku symbolických instrukcí), tak i z programů vytvořených v některém vyšším programovacím jazyku.
Obrázek 1: Procesorová jednotka sálového počítače GE-225.
Autor fotografie: Ed Thelen
Vyšší programovací jazyky byly na mainframech dostupné přes nástroj nazvaný GECOM, což je zkratka plného názvu General Compiler. Tento nástroj podporoval především dvojici programovacích jazyků COBOL a ALGOL, kterými jsme se podrobněji zabývali v předchozích částech tohoto seriálu. Kromě těchto v podstatě obecných programovacích jazyků byl nástrojem GECOM podporován i specializovaný jazyk GECOM Report Writer, jehož jméno přesně vystihuje oblast jeho použití (tvorba tiskových sestav), a taktéž programovací jazyk TABSOL, který byl specializovaný na programování úloh, v nichž se používaly rozhodovací tabulky. Díky možnosti vzájemné kombinace jednotlivých programovacích jazyků podporovaných nástrojem GECOM bylo možné psát nízkoúrovňové rutiny aplikace v assembleru, základní rutiny v COBOLu a/nebo v ALGOLu, rozhodovací část aplikace (dnes je moderní používat termín „business logika“) v TABSOLu a definici výstupních sestav bylo možné provést v GECOM Report Writeru.
Obrázek 2: Pohled na vnitřní uspořádání procesorové jednotky sálového počítače GE-225.
Autor fotografie: Ed Thelen
2. Překladače programovacích jazyků a jejich nedostatky při programování sálových počítačů
I přes na svou dobu velmi široké spektrum programovacích jazyků, které jsme si stručně představili v předchozí kapitole však nebyla nabídka jazyků úplná do té míry, aby vyhovovala potřebám všech uživatelů a programátorů mainframů. Z tohoto důvodu byl pro sálové počítače řady GE-200 vyvinut i překladač programovacího jazyka FORTRAN II, který spolu s COBOLem patřil až do poloviny šedesátých let minulého století mezi nejpoužívanější jazyky na sálových počítačích. Ovšem všechny výše zmíněné programovací jazyky, ať již se jednalo o assemblery či o vyšší programovací jazyky, trpěly jedním poměrně závažným nedostatkem – zdrojové texty programů se nejdříve musely napsat na specializované formuláře (pro každý jazyk byl určen jiný formulář), poté se texty napsané na formulářích vyděrovaly na děrné štítky, což se provádělo na mechanickém či elektromechanickém zařízení bez jakékoli návaznosti na počítač a teprve poté bylo možné děrné štítky umístit do čtečky, která zapsané zdrojové texty postupně načítala a předávala překladači.
Obrázek 3: Jednotka pro přípravu děrných štítků.
Pokud nastala při překladu zdrojového textu chyba (vypsaná většinou na systémovou tiskárnu nebo do generovaného listingu programu), nebo i úspěšně přeložený program nevykonával takovou činnost, jakou programátor zamýšlel, musel se celý postup překladu znovu opakovat. Díky tomu, že se pořadí děrných štítků mohlo měnit, nemusel se většinou přepisovat celý program, ale pouze se do něj mohly doplňovat (či nahrazovat) další příkazy, i tak se však jednalo o velmi zdlouhavou činnost, která navíc vyžadovala spolupráci mezi programátorem, pracovníky, kteří program vyděrovali na děrné štítky a operátory pracujícími přímo se sálovým počítačem. Určité zrychlení přineslo použití dálnopisů pro zápis programů na děrné pásky s tím, že se při opravě programu musela většinou vytvořit nová páska, popř. přišly ke slovu nůžky a lepidlo. Děrná páska se v místě opravy přestřihla a při troše trpělivosti se mohlo přestřižené místo nahradit kusem nové pásky – i z tohoto důvodu také mnoho tehdejších programátorů znalo nazpaměť kódování EBCDIC či ASCII, aby dokázali kód na pásce číst z hlavy a tak snadno najít místo, které je potřeba opravit.
Obrázek 4: Část programu napsaného v programovacím jazyce TABSOL na formuláři určeném k vyděrování a následnému překladu (kompilaci).
3. Dartmouth Time Sharing System – DTSS
Řešení s dálnopisy přinášelo i tu výhodu, že programátor nemusel po každé změně ve zdrojových textech svého programu cestovat s děrnými štítky do budovy, kde se nacházel sálový počítač (nebo zařízení pro přípravu děrných štítků), ale mohl svůj program přenést přímo pomocí dálnopisu, resp. při použití běžné telefonní linky přes modem, který většinou obsahoval „kolébku“ pro položení telefonního sluchátka – přenos dat byl prováděn přes běžný telefon (některé modernější dálnopisy již externí telefon nepotřebovaly). Počítač navíc mohl všechny zprávy překladače tisknout pomocí dálnopisu přímo u stolu programátora. Ovšem i tento způsob použití dálnopisu nebyl zcela dokonalý, protože ve svých prvopočátcích vedl k tomu, že se celý mainframe (resp. jeho operační systém) musel věnovat jedinému uživateli, který prováděl překlad svého programu, nebo již přeloženou aplikaci spouštěl. Počet uživatelů obsloužených za jeden den byl při tomto způsobu práce relativně nízký a navíc bylo nutné zavádět a dodržovat časové plány určující termíny připojení jednotlivých uživatelů.
Obrázek 5: Starší typ dálnopisu. Na levé straně je umístěna jednotka pro děrování i čtení děrné pásky, na pravé straně pak klávesnice.
Zatímco při použití sálových počítačů v bankách, pojišťovnách či podobných institucích nebyl problém obsluhy více uživatelů zpočátku příliš omezující, protože se na těchto mainframech většinou spouštěly dlouhotrvající dávkové úlohy, byla situace zcela odlišná na vysokých školách, kde měly sálové počítače sloužit mj. i pro výuku programování, popř. pro implementaci různých výpočtů z oblasti matematiky, fyziky, chemie atd.. To znamenalo, že „univerzitní“ počítače musely zpracovávat větší množství spíše krátkodobějších úloh denně (překlad programu trval několik desítek sekund až jednotek minut, což byla mnohem kratší doba, než například výpočet mezd ve větší společnosti). Z toho důvodu, aby se toto omezení vyřešilo, se začal na Dartmouth College (jedna z prestižních univerzit v USA) již v roce 1963 vyvíjet systém, který by umožnil současnou práci více uživatelů na jednom mainframu, přičemž by jednotliví uživatelé pro komunikaci se sálovým počítačem používali dálnopisy upravené do podoby počítačových terminálů. Vývoj tohoto systému byl veden Johnem Kemenym a Thomasem Kurtzem, kteří při programování tohoto systému spolupracovali s několika svými studenty.
Obrázek 6: Dálnopis ASR-33, který byl poměrně často používaný i jako levná a relativně kvalitní tiskárna.
4. Interaktivní způsob práce s DTSS
Výsledný produkt spolupráce Johna Kemenyho, Thomase Kurtze a skupiny studentů (první použitelná verze jejich systému byla představena již roku 1964), jenž byl nazván Dartmouth Time-Sharing System – DTSS, byl zprvu provozován na sálovém počítači GE-235 vybaveného dálnopisy Datanet 30. Tyto terminály se však nepřipojovaly přímo k mainframu GE-235, ale k jednoduššímu počítači nazvanému Datanet (tedy podobně, jako vlastní dálnopisy), který požadavky z dálnopisů vhodným způsobem předpřipravil pro zpracování mainframem GE-235. Systém DTSS na této konfiguraci umožňoval souběžnou práci několika desítek uživatelů. Po přenosu operačního systému DTSS na modernější a výkonnější mainframy řady GE-600 (konkrétně na typ GE-635) se výkon celého systému zvýšil takovým způsobem, že počet souběžně pracujících uživatelů dosáhl téměř neuvěřitelné hodnoty 300! John Kemeny, který byl, jak již víme, jeden z autorů systému DTSS, ještě před svým působením v Dartmouth College pracoval ve výzkumných laboratořích v Los Alamos (jedná se o známé laboratoře, kde ve čtyřicátých a padesátých letech probíhal intenzivní výzkum v oblasti jaderné fyziky).
Obrázek 7: Manuál k první verzi FORTRANu určeného pro mainframy IBM 704.
Zde John Kemeny tvořil výpočetní a simulační programy a taktéž si sám připravoval děrné štítky se zdrojovými kódy aplikací, které byly následně dávkově (někdy i po delší době) překládány tehdejšími sálovými počítači. Právě při této činnosti si Kemeny uvědomil, jak je tento dávkový způsob práce ve skutečnosti krkolomný, a vzápětí se stal propagátorem interaktivního způsobu práce s počítačem, při němž uživatel zadává mainframu příkazy konverzačním způsobem a počítač následně tyto příkazy vykonává a ihned tiskne veškerá chybová hlášení i výstupy příkazů. Právě díky systému DTSS a dálnopisům se interaktivní způsob komunikace s počítačem stal skutečností – uživatelé (většinou studenti) mohli s počítačem konverzovat takovým způsobem, že napsali příkaz na dálnopisu, tento příkaz byl mainframem vykonán a výsledek se ihned poté vypsal na elektronickém psacím stroji, kterým byl dálnopis vybaven (tento psací stroj mohl taktéž „opisovat“ příkazy zapsané uživatelem). Při čekání na zadání nového příkazu mohl mainframe díky způsobu implementace DTSS vykonávat jiné činnosti, tj. obsluhovat další uživatele, což mnohdy ve výsledku poněkud paradoxně vedlo k lepšímu využití strojového času, než tomu bylo na mainframech orientovaných výhradně na zpracování dávkových úloh.
Obrázek 8: Ukázka programu napsaného ve FORTRANu II, ve kterém můžeme mj. vidět i použití aritmetického IF.
5. Vznik programovacího jazyka BASIC na systému DTSS
Se systémem DTSS je prakticky nerozlučně spojen i programovací jazyk BASIC, jenž byl na tomto systému vyvinut. Nejednalo se v žádném případě o náhodu, ale o cílený vývoj, protože některé vlastnosti BASICu, především jeho interaktivní způsob komunikace s uživatelem (jednalo se sice původně o překladač, ovšem program byl při zápisu kontrolován) i jednoduchost tvorby programů přesně odpovídala potřebám výuky programování, samozřejmě s ohledem na stav výpočetní techniky v polovině šedesátých let minulého století (dnes již jsou samozřejmě k dispozici zcela jiné technické prostředky, včetně grafických displejů a operačních systémů nabízejících plnohodnotné GUI). Programovací jazyk BASIC byl navržen takovým způsobem, aby v něm bylo možné interaktivně vytvářet programy, a to i v případě, že se uživatel k sálovému počítači připojoval „pouze“ s využitím dálnopisu. Omezení na použití dálnopisu ovšem do značné míry vylučovalo použití plnohodnotného textového editoru a tím do značné míry i blokovou strukturu programů psaných v BASICu.
Obrázek 9: John Kemeny a Thomas Kurtz.
Namísto toho byl původní interpret programovacího jazyka BASIC orientován na zápis programových řádků, které byly očíslovány, tj. na začátku každého řádku bylo uvedeno jeho číslo s tím, že se programové řádky automaticky po svém zápisu na klávesnici dálnopisu zařazovaly podle svého čísla na správné místo v programu. To mj. znamenalo, že vývojář mohl zapisovat programové řádky v libovolném pořadí a navíc při zadání řádku se stejným číslem, jaké měl již existující řádek, došlo k přepisu původního obsahu tohoto programového řádku novou sekvencí příkazů. S číslováním řádků částečně souvisely i příkazy GOTO a GOSUB, které obsahovaly číslo cíle skoku a nikoli (textové) návěští. Používání čísel řádků v BASICových programech bylo sice o mnoho let později – již v dobách celoobrazovkových terminálů a domácích i osobních počítačů – kritizováno, ovšem s ohledem na dobu vzniku BASICu a možností, které v té době poskytovala dostupná technika (dálnopisy) se jednalo o velmi dobrý návrh, což je ostatně potvrzeno i tím, že BASIC ve své téměř původní podobě přežil do dob, kdy se jeho způsob zápisu programů již stal v mnoha ohledech zastaralý (mezitím ostatně přišla éra strukturovaného programování i programování objektově orientovaného).
Obrázek 10: Dálnopis Datanet používaný v systému DTSS.
6. Příkazy dostupné v prvních verzích programovacího jazyka BASIC
John Kemeny a Thomas Kurtz navrhli programovací jazyk BASIC s ohledem na to, aby se jednalo o jazyk využitelný pro prakticky libovolné úlohy, který by byl jednoduchý a současně i nezávislý na použitém hardware i operačním systému. Některé příkazy (jejich syntaxe i sémantika) jsou založeny na FORTRANu a ALGOLu, ovšem oproti oběma zmíněným jazykům byly první verze BASICu mnohem jednodušší a v několika ohledech i omezenější – na rozdíl od ALGOLu například BASIC po velmi dlouhou dobu postrádal možnost definice víceřádkových funkcí či uživatelských datových typů, FORTRAN navíc nabízel například funkce pro práci se soubory, formátovací příkazy, podporu pro komplexní čísla a od verze FORTRAN II taktéž uživatelské podprogramy. Původní verze BASICu byla skutečně velmi jednoduchá, což je pro výuku základů programování spíše pozitivní vlastnost – jazyk obsahoval pouze osmnáct příkazů, deset funkcí a neumožňoval deklarovat vícerozměrná pole ani řetězce.
Obrázek 11: Přední stránka manuálu k historicky první verzi programovacího jazyka BASIC.
Příkazy dostupné v první verzi BASICu jsou vypsány v následující tabulce:
Příkaz | Popis |
---|---|
REM | začátek komentáře |
DEF | definice jednořádkové funkce |
DIM | definice jednorozměrného pole |
LET | přiřazení hodnoty výrazu do proměnné |
GOTO | skok na zadané číslo řádku |
GOSUB | skok do (nepojmenovaného) podprogramu |
RETURN | návrat z podprogramu |
IF | začátek podmínky |
THEN | začátek těla podmínky |
FOR | začátek počítané smyčky |
TO | za tímto příkazem je koncová hodnota počitadla smyčky |
STEP | krok, o který se změní počitadlo smyčky po jedné iteraci |
NEXT | konec počítané smyčky |
tisk výsledné hodnoty výrazu | |
DATA | datová sekce programu obsahující statická data |
READ | načtení hodnot uložených v sekci DATA |
STOP | zastavení programu na tomto příkazu |
END | konec programu, jedná se o příkaz umístěný na posledním řádku |
Obrázek 12: Program zapsaný v AppleSoft BASICu spuštěný na počítači Apple II.
7. Vliv DTSS na další vývoj operačních systémů
I když byl operační systém DTSS určen především pro použití na univerzitách (s čímž souvisel i zpočátku poněkud jednodušší plánovač úloh), byl jeho vliv na vývoj dalších operačních systémů poměrně velký. Možnosti souběžné práce většího množství uživatelů a současně i podpora interaktivní komunikace s počítačem se o několik let později stala součástí i některých dalších operačních systémů a obliba konverzační práce uživatele s počítačem (většinou prováděná přes příkazový řádek, který nám v prakticky nezměněné podobě vydržel dodnes) se ještě více zvětšila ve chvíli, kdy se k sálovým počítačům a později i k minipočítačům začaly dodávat terminály vybavené klávesnicí a monitorem (resp. obrazovkou).
Obrázek 13: Práce s numerickými proměnnými a poli v BASICU. Povšimněte si, že na řádku 50 se do proměnné A vloží hodnota 0 a současně se vytvoří numerické proměnné B a C inicializované na nulu. Dále se na řádku 70 vytvoří desetiprvkové pole, na řádku 80 se nastaví hodnota prvního prvku tohoto pole na 42 a na řádku 100 se vypíše hodnota zdánlivě neinicializovaného prvku číslo 2 (který je ve skutečnosti automaticky nastaven na nulu).
Tím se vlastně oklikou (trvající padesát dílů :-) dostáváme zpět k úvodním částem tohoto seriálu, v nichž jsme se zabývali popisem minipočítačů PDP a vznikem operačního systému UNIX, který již od svých prvních verzí podporoval souběžnou práci uživatelů a samozřejmě i ovládání přes příkazový řádek.
Obrázek 14: Demonstrační příklad zapsaný v Sinclair BASICu. Jednotlivé příkazy nebyly vypisovány znak po znaku, ale použily se klávesové zkratky, které si uživatelé nemuseli pamatovat, neboť je měli natištěné přímo na klávesnici.
8. Mainframy General Electric, systém DTSS a UNIX
Připomeňme si, že v roce 1968 Ken Thompson a jeho kolegové vytvořili na sálovém počítači GE-635 (kde mohl být mj. provozován i systém DTSS) hru Space Travel, ovšem strojový čas tohoto stroje byl velmi drahý, takže vedení firmy samozřejmě nebylo spokojeno s tím, že se výkonný počítač využívá pro hraní a ne pro vážnou práci (což je možná trošku paradoxní, protože právě práce na této hře vedly ke vzniku mnoha zajímavých technologií). Ken Thompson se tedy rozhodl, že hru přepíše tak, aby ji bylo možné spustit na mnohem jednodušším počítači PDP-7, ovšem takovým způsobem, aby s počítačem mohli pracovat i další uživatelé – jinými slovy, musel se vytvořit operační systém podporující multiuživatelský režim. Ovšem kvůli omezeným technickým možnostem PDP-7 pokračoval vývoj operačního systému, který byl později nazván UNIX, stále na mainframu GE-635 s využitím makroassembleru GEMAP, což je vzdálený potomek již dnes zmíněného assembleru GAP (General Assembly Program). Teprve později bylo jádro UNIXu přepsáno do céčka, což však již s mainframy GE příliš nesouvisí :-)
Obrázek 15: Známá fotografie Kena Thompsona a Dennise Ritchieho sedících před PDP.
9. Odkazy na Internetu
- General Electric GE-400
http://www.feb-patrimoine.com/PROJET/ge400/ge-400.htm - GE-400 Time-sharing information systems:
http://www.computerhistory.org/collections/accession/102646147 - A brief history of the development of BASIC
http://www.phys.uu.nl/~bergmann/history.html - History of BASIC (PDF)
http://www.q7basic.org/History%20of%20BASIC.pdf - The History of the Mainframe Computer
http://www.vikingwaters.com/htmlpages/MFHistory.htm - Dartmouth Time Sharing System
http://en.wikipedia.org/wiki/Dartmouth_Time_Sharing_System - General Electric (Wikipedia)
http://en.wikipedia.org/wiki/General_Electric - GE 225 vs. IBM 1401
http://ed-thelen.org/GE225-IBM1401.html - A GE-225 is found
http://ed-thelen.org/comp-hist/GE225.html - G.E. 200 Series Computers
http://www.smecc.org/g_e__200_series_computers.htm - DTSS – Dartmouth Time Sharing System
http://dtss.dartmouth.edu/index.php - John G. Kemeny: BASIC and DTSS: Everyone a Programmer
http://dtss.dartmouth.edu/everyoneaprogrammer.php - GE-200 series (Wikipedia)
http://en.wikipedia.org/wiki/GE-200_series - GE-400 series (Wikipedia)
http://en.wikipedia.org/wiki/GE-400_series - GE-600 series (Wikipedia)
http://en.wikipedia.org/wiki/GE-600_series - Mainframe – Introduction
http://www.thocp.net/hardware/mainframe.htm - Craig Jensen (as programmer)
http://www.craigjensen.com/programmer.html - Honeywell 800 (1958)
http://www.cs.clemson.edu/~mark/h800.html - Real Machines with 24-bit and 48-bit words
http://www.quadibloc.com/comp/cp0303.htm - Honeywell ARGUS
http://en.wikipedia.org/wiki/Honeywell_ARGUS - Honeywell Datamatic 1000
http://www.smecc.org/honeywell_datamatic_1000.htm - Honeywell
http://en.wikipedia.org/wiki/Honeywell - Whatever Happened to IBM and the Seven Dwarfs? Dwarf Four: Honeywell
http://www.dvorak.org/blog/ibm-and-the-seven-dwarfs-dwarf-four-honeywell/ - Datamatic 1000 by DATAmatic Corporation (1955)
http://www.computermuseum.li/Testpage/Datamatic-1000.html - Burroughs – Third Generation Computers
https://wiki.cc.gatech.edu/folklore/index.php/Burroughs_Third-Generation_Computers - NX bit (používán u některých moderních mikroprocesorů)
http://en.wikipedia.org/wiki/NX_bit - Burroughs B5000, B5500 and B5700 (original) documentation
http://www.bitsavers.org/pdf/burroughs/B5000_5500_5700/ - Burroughs B6500 and B6700 (original) documentation
http://www.bitsavers.org/pdf/burroughs/B6500_6700/ - Burroughs B8500 (original) documentation
http://www.bitsavers.org/pdf/burroughs/B8500/ - ALGOL in the early 1970s
http://www.simnia.com/it/clycl/algol/algol.htm - Burroughs: IF (Dec, 1961)
http://blog.modernmechanix.com/2009/02/10/burroughs-if/ - Burroughs B5000: Encyclopedia II – Burroughs B5000 – ALGOL
http://www.experiencefestival.com/a/Burroughs_B5000_-_ALGOL/id/4823149 - HOW ASCII GOT ITS BACKSLASH
http://www.bobbemer.com/BACSLASH.HTM - Burroughs B5000 Computer
http://www.cs.uaf.edu/2010/fall/cs441/proj1/b5000/ - Burroughs large systems (Wikipedia)
http://en.wikipedia.org/wiki/Burroughs_large_systems - Burroughs large systems instruction sets (Wikipedia)
http://en.wikipedia.org/wiki/Burroughs_large_systems_instruction_sets - William Seward Burroughs
http://history-computer.com/MechanicalCalculators/19thCentury/Burroughs.html - Burroughs Corporation (Wikipedia)
http://en.wikipedia.org/wiki/Burroughs_Corporation - Adding machine (Wikipedia)
http://en.wikipedia.org/wiki/Adding_machine - Burroughs B-205
http://www.angelfire.com/scifi/B205/ - Burroughs 205 Hardware Package Design
http://tjsawyer.com/B205Pkg.htm - ERA 1101 Documents
http://ed-thelen.org/comp-hist/ERA-1101-documents.html - Ukázkový program pro UNIVAC 1101/ERA 1101
https://wiki.cc.gatech.edu/folklore/index.php/Engineering_Research_Associates_and_the_Atlas_Computer_(UNIVAC_1101) - UNIVAC I Computer System
http://univac1.0catch.com/ - UNIVAC I Computer System
http://univac1.0catch.com/yellowpage.htm - UNIVAC (Wikipedia)
http://en.wikipedia.org/wiki/Univac - UNIVAC I (Wikipedia)
http://en.wikipedia.org/wiki/UNIVAC_I - UNIVAC II – Universal Automatic Computer Model II
http://ed-thelen.org/comp-hist/BRL61-u4.html - UNIVAC II (Wikipedia)
http://en.wikipedia.org/wiki/UNIVAC_II - UNIVAC III (Wikipedia)
http://en.wikipedia.org/wiki/UNIVAC_III - UNIVAC 1101 (Wikipedia)
http://en.wikipedia.org/wiki/UNIVAC_1101 - UNISYS History Newsletter
https://wiki.cc.gatech.edu/folklore/index.php/Main_Page - UNIVAC Solid State (Wikipedia)
http://en.wikipedia.org/wiki/UNIVAC_Solid_State - Bi-quinary coded decimal (Wikipedia)
http://en.wikipedia.org/wiki/Bi-quinary_coded_decimal - UNIVAC III Data Processing System
http://ed-thelen.org/comp-hist/BRL61-u4.html#UNIVAC-III - The UNIVAC III Computer
https://wiki.cc.gatech.edu/folklore/index.php/The_UNIVAC_III_Computer - UNIVAC III Photos
http://jwstephens.com/univac3/page01.htm - A History of Unisys Computers (kniha)
http://www.lulu.com/product/hardcover/a-history-of-unisys-computers/4627477 - UNIVAC III Instructions Reference Card
http://www.bitsavers.org/pdf/univac/univac3/UT-2455_UNIVACIII_RefCd61.pdf - Index register (Wikipedia)
http://en.wikipedia.org/wiki/Index_register - FLOW-MATIC, COBOL's Roots, Birth of COBOL…
http://www.inf.fu-berlin.de/lehre/SS01/hc/pl/cobol.htm - FLOW-MATIC
http://en.wikipedia.org/wiki/FLOW-MATIC - FLOW-MATIC Manual
http://archive.computerhistory.org/resources/text/Remington_Rand/Univac.Flowmatic.1957.102646140.pdf - Grace Murray Hopper
http://cs-www.cs.yale.edu/homes/tap/Files/hopper-story.html - Grace Hopper (Wikipedia)
http://en.wikipedia.org/wiki/Grace_Hopper - Biographies of Women Mathematicians: Grace Murray Hopper
http://www.agnesscott.edu/lriddle/women/hopper.htm - A-0 System (Wikipedia)
http://en.wikipedia.org/wiki/A-0_programming_language - Rosetta Code – Category:COBOL
http://rosettacode.org/wiki/Category:COBOL - COmmon Business Oriented Language
http://foldoc.org/COBOL - COBOL Compilers
http://www-01.ibm.com/software/awdtools/cobol/ - Cobol: Not Dead Yet
http://www.computerworld.com/s/article/266156/Cobol_Not_Dead_Yet?intsrc=kc_rfavs - The future's bright … the future's Cobol
http://features.techworld.com/applications/3056/the-futures-bright–the-futures-cobol/ - COBOL Example Programs
http://www.csis.ul.ie/COBOL/examples/default.htm - Introduction to COBOL
http://www.csis.ul.ie/COBOL/Course/COBOLIntro.htm - COBOL programming – tutorials, lectures, exercises, examples
http://www.csis.ul.ie/COBOL/ - Wikipedia: COBOL
http://en.wikipedia.org/wiki/COBOL - Humor on Computers, Systems and Programming
http://www-crypto.htw-saarland.de/weber/misc/programming.html - OpenCOBOL
http://en.wikipedia.org/wiki/OpenCOBOL - OpenCOBOL.org
http://opencobol.org/ - OpenCOBOL FAQ
http://opencobol.add1tocobol.com/ - TinyCOBOL
http://tiny-cobol.sourceforge.net/ - TinyCOBOL FAQ
http://tiny-cobol.sourceforge.net/docs/faq/ - JTC1/SC22/WG4 – COBOL
http://ra.dkuug.dk/jtc1/sc22/wg4/ - COBOL on COGS
http://www.coboloncogs.org/INDEX.HTM - Cobol Coders: Going, Going, Gone?
http://www.computerworld.com/s/article/266228/Cobol_Coders_Going_Going_Gone_ - BUNCH
http://en.wikipedia.org/wiki/BUNCH - The Colossus That Works
http://www.time.com/time/magazine/article/0,9171,949693–5,00.html - Mainframe computer
http://en.wikipedia.org/wiki/Mainframe_computer - United States Census Bureau
http://en.wikipedia.org/wiki/United_States_Census_Bureau - Slideshow – More Core Memories
http://spectrum.ieee.org/computing/hardware/slideshow-more-core-memories - UNIVAC I Mercury Delay Line Memory
http://ed-thelen.org/comp-hist/vs-univac-mercury-memory.html - Digital Number System Part-III
http://www.asic-world.com/digital/numbering3.html - Excess-3 – Definition
http://www.wordiq.com/definition/Excess-3 - Excess-3
http://en.wikipedia.org/wiki/Excess-3 - Method of complements
http://en.wikipedia.org/wiki/Method_of_complements - Univac documentation
http://www.bitsavers.org/pdf/univac/univac1/ - UNISERVO
http://en.wikipedia.org/wiki/UNISERVO - John Mauchly (Wikipedia)
http://en.wikipedia.org/wiki/John_Mauchly - J. Presper Eckert (Wikipedia)
http://en.wikipedia.org/wiki/J._Presper_Eckert - BINAC (Wikipedia)
http://en.wikipedia.org/wiki/BINAC - Delay line memory (Wikipedia)
http://en.wikipedia.org/wiki/Delay_line_memory - Paměť se zpožďovací linkou (Wikipedia)
http://cs.wikipedia.org/wiki/Paměť_se_zpožďovací_linkou - Description of the BINAC
http://www.palosverdes.com/lasthurrah/binac-description.html - UNIVersal Automatic Computer
http://www.thocp.net/hardware/univac.htm - IBM 36-bit computers
http://www.36bit.org/ibm/ - Symbolics 36-bit computers
http://www.36bit.org/symbolics/ - IBM System 360/370 Compiler and Historical Documentation
http://www.edelweb.fr/Simula/ - Who Was Who in IBM's Programming Research? Early FORTRAN Days
http://www.trailing-edge.com/~bobbemer/PRORES.HTM - Control Data Corporation (CDC) 6600: 1966–1977
http://www.cisl.ucar.edu/computers/gallery/cdc/6600.jsp - Control Data Corporation (CDC) 7600: 1971–1983
http://www.cisl.ucar.edu/computers/gallery/cdc/7600.jsp - Cray History
http://www.cray.com/About/History.aspx?404;http://www.cray.com:80/about_cray/history.html - Cray Historical Timeline
http://www.cray.com/Assets/PDF/about/CrayTimeline.pdf - Company: Cray Research, Inc. (Computer History)
http://www.computerhistory.org/brochures/companies.php?alpha=a-c&company=com-42b9d5d68b216 - PDP-1 Web Pages
http://www.pdp-1.org/ - PDP-1 Restoration Process
http://pdp-1.computerhistory.org/pdp-1/ - Programmed Data Processor (Wikipedia)
http://en.wikipedia.org/wiki/Programmed_Data_Processor - Digital Equipment Corporation (Wikipedia)
http://en.wikipedia.org/wiki/Digital_Equipment_Corporation - PDP-1 (Wikipedia)
http://en.wikipedia.org/wiki/PDP-1 - Ancient Computing Machinery
http://www.ee.ryerson.ca/~elf/ancient-comp/index.html - Spacewar – The first computer video game. Really!
http://www3.sympatico.ca/maury/games/space/spacewar.html - Programmed Data Processor-1 Handbook
http://www.dbit.com/~greeng3/pdp1/pdp1.html