PDP -8 - PDP-8

PDP-8
Digital 556-flattened4.svg
PDP-8 (1) .jpg
PDP-8 na displeji v Bletchley Parku v Bletchley , Anglie. Tento příklad je z první generace PDP-8, postavených s diskrétními tranzistory a později známých jako Straight 8 .
Vývojář Digital Equipment Corporation
Produktová řada Programovaný datový procesor
Typ Minipočítač
Datum vydání 22. března 1965 ; Před 56 lety ( 1965-03-22 )
Zaváděcí cena 18 500 USD , což odpovídá přibližně 151 900 USD v roce 2020
Prodané jednotky 50 000+
Plošina DEC 12bitový
Předchůdce PDP-5
Nástupce PDP-12

PDP-8 je 12-bitový minipočítač , který byl vyroben podle Digital Equipment Corporation (DEC) . Jednalo se o první komerčně úspěšný minipočítač, za dobu životnosti modelu se prodalo přes 50 000 kusů. Jeho základní design navazuje na průkopnický LINC, ale má menší sadu instrukcí , což je rozšířená verze instrukční sady PDP-5 . Podobné stroje od DEC jsou PDP-12, což je modernizovaná verze konceptů PDP-8 a LINC, a průmyslový řídicí systém PDP-14 .

Přehled

Otevřený PDP-8/E s logickými moduly za předním panelem a jedním duálním diskem TU56 DECtape nahoře

Nejstarší model PDP-8, neformálně známý jako „Straight-8“, byl představen 22. března 1965 za cenu 18 500 $ (ekvivalent přibližně 150 000 $ v roce 2020). Používal logiku dioda - tranzistor zabalenou na flip čipových kartách ve stroji o velikosti malé lednice pro domácnost . Byl to první počítač, který se prodával za méně než 20 000 dolarů, což z něj v té době činilo nejprodávanější počítač v historii. Straight-8 byl nahrazen v roce 1966 PDP-8/S, který byl k dispozici ve stolních a rackových modelech. Použití jednobitové sériové aritmetické logické jednotky (ALU) umožnilo PDP-8/S být menší a levnější, i když pomalejší než původní PDP-8. Základní 8/S se prodával za méně než 10 000 $, první stroj, který dosáhl tohoto milníku.

Pozdější systémy (PDP-8 /I a /L, PDP-8 /E, /F a /M a PDP-8 /A) se vrátily k rychlejší, plně paralelní implementaci, ale používají mnohem méně nákladný tranzistor- tranzistorová logika (TTL) Logika MSI . Většina přeživších PDP-8 pochází z této éry. PDP-8/E je běžný a uznávaný, protože pro něj bylo k dispozici mnoho typů I/O zařízení. Poslední komerční modely PDP-8 představené v roce 1979 se nazývají „CMOS-8s“, založené na mikroprocesorech CMOS . Ceny nebyly konkurenceschopné a nabídka selhala. Intersil prodával integrované obvody komerčně do roku 1982 jako rodina Intersil 6100 . Díky své technologii CMOS měli nízké požadavky na výkon a byly použity v některých vestavěných vojenských systémech.

Hlavním inženýrem, který navrhl původní verzi PDP-8, byl Edson de Castro , který později založil Data General .

Architektonický význam

PDP-8 kombinuje nízké náklady, jednoduchost, rozšiřitelnost a pečlivé inženýrství za cenu. Největší historický význam byl v tom, že nízké náklady a velký objem PDP-8 zpřístupnily počítač mnoha novým zákazníkům pro mnoho nových použití. Jeho pokračující význam je historickým příkladem hodnotového počítačového designu.

Nízká složitost přinesla další náklady. Programování bylo těžkopádné, jak je vidět na příkladech v tomto článku a při diskusi o „stránkách“ a „polích“. Velká část něčího kódu provedla požadovanou mechaniku, na rozdíl od stanovení algoritmu. Například odečtení čísla zahrnuje výpočet doplňku jeho dvou a jeho přidání; psaní podmíněného skoku zahrnuje napsání podmíněného přeskočení kolem skoku, přeskok kódující podmínku záporně k požadovanému. Některé ambiciózní programovací projekty se nevešly do paměti nebo se vyvinuly konstrukční vady, které nebylo možné vyřešit. Například, jak je uvedeno níže , neúmyslná rekurze podprogramu produkuje defekty, které je obtížné vysledovat k příslušnému podprogramu.

Jak pokroky v designu snižovaly náklady na logiku a paměť, čas programátora se stal relativně důležitějším. Následné počítačové návrhy kladly důraz na snadné programování, obvykle pomocí větších a intuitivnějších sad instrukcí.

Nakonec většinu strojového kódu vygenerovaly kompilátory a generátory sestav. Počítač se sníženou sadou instrukcí vrátil plný kruh k důrazu PDP-8 na jednoduchou sadu instrukcí a dosažení více akcí v jednom cyklu instrukcí, aby se maximalizovala rychlost provádění, ačkoli novější počítače mají mnohem delší instrukční slova.

Popis

Registry PDP-8
1 1 1 0 9 8 7 6 5 4 3 2 1 0 (bitová pozice)
Hlavní registry
AC AC kumulátor
Počitadlo programů
PC P rogram C ounter
Stavové příznaky
  L L inkoustový registr
Interní registry (nejsou přístupné kódem)
MBR Registr vyrovnávací paměti
MAR Register adres paměti

Použitá myšlenky z několika 12-bitových předchůdců 8 PDP-, nejvíce pozoruhodně LINC navržený WA Clark a CE Molnar , kdo byl inspirován Seymour Cray ‚s CDC 160 minipočítač.

PDP-8 používá pro velikost slova a aritmetiku 12 bitů (na celá čísla bez znaménka od 0 do 4095 nebo celá čísla se znaménkem od −2048 do +2047). Software však umí aritmetiku s více přesnostmi . Například pro operace s pohyblivou řádovou čárkou byl k dispozici tlumočník , který používal 36bitovou reprezentaci s plovoucí desetinnou čárkou s dvojslovným (24bitovým) významem (mantisa) a jednoslovným exponentem. S výhradou omezení rychlosti a paměti může PDP-8 provádět výpočty podobné dražším současným elektronickým počítačům, jako je IBM 1130 a různé modely IBM System/360 , přičemž je snazší propojení s externími zařízeními.

Adresní prostor paměti je také 12 bitů, takže základní konfigurace PDP-8 má hlavní paměť 4 096 (2 12 ) dvanácti bitových slov. Volitelná jednotka rozšiřující paměť může přepínat banky pamětí pomocí instrukce IOT. Paměť je paměť s magnetickým jádrem s dobou cyklu 1,5 mikrosekundy (0,667 MHz ), takže typická dvoucyklová instrukce paměti (Fetch, Execute) běží při rychlosti 0,333 MIPS . Kapesní referenční karta pro PDP-8/E z roku 1974 poskytuje základní dobu instrukce 1,2 mikrosekundy nebo 2,6 mikrosekundy pro instrukce, které odkazují na paměť.

PDP-8 byl částečně navržen tak, aby zvládal současné telekomunikace a text. V té době byly široce používány šestbitové znakové kódy a dvanáctibitová slova PDP-8 dokážou efektivně uložit dva takové znaky. Kromě toho šestibitový kód dálnopisu nazývaný teletypesetting nebo TTS kód byl široce používán zpravodajskými službami a raná aplikace pro PDP-8 sázela pomocí tohoto kódu.

Instrukce PDP-8 mají 3bitový operační kód, takže instrukcí je pouze osm. Assembler poskytuje programátoru více mnemotechnických instrukcí překládáním I/O a instrukcí provozního režimu do kombinací operačních kódů a instrukčních polí. Má také pouze tři registry viditelné pro programátory : 12bitový akumulátor (AC), programový čítač (PC) a příznak přenosu nazývaný „odkazový registr“ (L).

Pro vstup a výstup má PDP-8 jediné přerušení sdílené všemi zařízeními, I/O sběrnici přístupnou pomocí I/O instrukcí a kanál s přímým přístupem do paměti (DMA). Naprogramované I / O sběrnice typicky běží na nízké úrovni, aby periferie střední rychlostí, jako jsou tiskárny , teletypes , paper tape údery a čtenářů, zatímco DMA se používá pro katodovou trubicí obrazovek s lehkým perem , analogově-digitální převodníky , digital- na analogové převaděče , páskové jednotky a diskové jednotky .

Aby se ušetřilo, konstrukce používala pro mnoho účelů levnou hlavní paměť, která je obsluhována dražšími klopnými obvody v jiných počítačích, jako jsou pomocné čítače a podprogramové propojení.

Základní modely používají software k násobení a dělení. Pro rychlejší matematiku poskytuje rozšířený aritmetický prvek (EAE) pokyny pro násobení a dělení pomocí dalšího registru, registru Multiplier/Quotient (MQ). EAE byla možnost původního PDP-8, 8/I a 8/E, ale je nedílnou součástí mikroprocesoru Intersil 6100 .

PDP-8 je optimalizován pro jednoduchost designu . Ve srovnání se složitějšími stroji byly odstraněny nepotřebné funkce a logika je sdílena, pokud je to možné. Pokyny používají automatický přírůstek, autoclear a nepřímý přístup ke zvýšení rychlosti softwaru, snížení využití paměti a nahrazení levné paměti drahými registry.

Elektronika základní PDP-8 CPU má pouze čtyři 12-bitové registry: akumulátor, čítač programu, paměť vyrovnávací registr a paměť adresa registru . Aby ušetřily peníze, sloužily více účelům v různých bodech provozního cyklu. Registr vyrovnávací paměti například poskytuje aritmetické operandy, je součástí registru instrukcí a ukládá data k přepsání základní paměti . (Tím se obnoví základní data zničená čtením.)

Kvůli jejich jednoduchosti byly rané modely PDP-8 levnější než většina ostatních komerčně dostupných počítačů. Používali však nákladné výrobní metody často používané pro prototypy. Používali tisíce velmi malých, standardizovaných logických modulů se zlatými konektory, integrovaných nákladnou, složitou propojovací deskou s drátem ve velké skříni.

V pozdějším modelu 8/S, který byl představen v srpnu 1966, dvě různá logická napětí zvýšila rozdmýchávání levné logiky dioda-tranzistor . 8/S také snížil počet logických bran pomocí aritmetiky pomocí sériové datové cesty o šířce jednoho bitu. CPU PDP-8/S má pouze asi 519 logických bran . Pro srovnání, malé mikrokontroléry (od roku 2008) mají obvykle 15 000 nebo více. Snížení elektroniky umožnilo mnohem menší pouzdro, velké asi jako chlebník. 8/S navrhl Saul Dinman.

Ještě pozdější PDP-8/E je větší, výkonnější počítač, ale dále přepracovaný pro lepší hodnotu. V integrovaných obvodech využívá rychlejší logiku tranzistor - tranzistor . Byla přepracována základní paměť. Umožňuje rozšíření s nižšími náklady, protože na starších modelech používá OMNIBUS místo propojovací roviny zabalené v drátu. (Osobní zprávu o vývoji PDP-8/E si můžete přečíst na Wiki o historii inženýrství a technologie.)

Verze PDP-8

Přední panel PDP-8/S
Přední panel PDP-8/L
Přední panel PDP-8/I
Přední panel PDP-8/E
Přední panel PDP-8/F
Přední panel PDP-8/A 400

Celkový prodejní údaj pro rodinu PDP-8 byl odhadnut na více než 300 000 strojů. Byly vyrobeny následující modely:

Souhrn modelů PDP-8
Modelka Popis Rok Cena Vyrobené množství Hmotnost
PDP-8 Polodiskrétní součásti. Použil jsem nějaké hybridní integrované obvody . DTL . 1965 18 000 dolarů 1450 250 liber (113 kg)
LINC-8 Lze spustit kód LINC nebo PDP-8 1966 38 500 $ 142
PDP-8/S Levnější sériová verze PDP-8 1966 10 000 dolarů 1024 84 liber (38 kg)
PDP-8/I První PDP-8 vyrobený ze standardních integrovaných obvodů TTL 1968 12 800 $ 3698 250 liber (110 kg)
PDP-8/L Levnější protějšek PDP-8/I 1968 8500 dolarů 3902 80 liber (36 kg)
PDP-12 PDP-8/I s podporou instrukcí LINC (nahrazen LINC-8) 1969 27 900 USD 755
PDP-8/E Méně větších desek pro zlepšení ceny a efektivity 1970 6 500 $ 90 liber (41 kg) (typicky)
PDP-8/F Levnější protějšek PDP-8/E 1972 57 liber (26 kg) (typický)
PDP-8/M OEM PDP-8/F se změněným předním panelem 1972 5 000 dolarů 57 liber (26 kg) (typický)
PDP-8/A Logika LSI umožňovala, aby se CPU vešlo na jednu desku 1974 1835 dolarů
Intersil 6100 Jednočipový mikroprocesor kompatibilní s PDP-8 (používá se ve VT78 ) 1975
Harris 6120 CMOS jednočipový mikroprocesor kompatibilní s PDP-8 (používá se v textových procesorech DECmate ) 1976

Implementace posledních dnů

PDP-8 je snadno emulován , protože jeho instrukční sada je mnohem jednodušší než moderní architektury. Nadšenci vytvořili celé PDP-8 pomocí jediného zařízení FPGA .

Na internetu je k dispozici několik softwarových simulací PDP-8 a také implementace hardwaru s otevřeným zdrojovým kódem . Nejlepší z nich správně spouští operační systémy a diagnostický software DEC. Softwarové simulace často simulují pozdní model PDP-8 se všemi možnými periferiemi. I ty využívají jen nepatrný zlomek kapacity moderního osobního počítače.

Jedna z prvních komerčních verzí virtuálního stroje PDP-8/S běžela na Kaypro 386 (počítač s 80386) a byla napsána v počítačovém jazyce C (před dokončením standardu ANSI-C) a assembler David Beecher z Denveru, Colorado. Nahradil selhávající počítač PDP-8/S, který obsluhoval stroj na manipulaci s palivem v reaktoru #85, v Platteville, Colorado Nuclear Fuel Powered Electric Generating Station, Ft. St. Vrain. Byl přezkoumán společností Rockwell International a během provozu stroje na manipulaci s palivem fungoval bezchybně po dobu 2,5 roku, zatímco byl používán k odstraňování paliva z jádra reaktoru a vyřazování elektrárny z provozu. Zahrnovalo simulovaný zavaděč papírové pásky a přední panel.

Vstup výstup

I/O systémy prošly během éry PDP-8 obrovskými změnami. Starší modely PDP-8 používají rozhraní na předním panelu , čtečku papírových pásek a dálnopisnou tiskárnu s volitelným děrovačem papírové pásky. Postupem času byly přidány I/O systémy jako magnetická páska , RS-232 a hloupé terminály proudové smyčky , čtečky děrných karet a disky s pevnou hlavou . Ke konci éry PDP-8 byly diskety a kazetové jednotky s pohyblivou hlavou oblíbenými I/O zařízeními. Moderní nadšenci vytvořili standardní adaptéry pevného disku IDE ve stylu PC pro skutečné a simulované počítače PDP-8.

Podporováno je několik typů I/O:

  • Vstupy backplane vyhrazené sloty pro I / O řadičů
  • "Negativní" I/O sběrnice (pomocí signalizace záporného napětí)
  • „Pozitivní“ I/O sběrnice (stejná architektura využívající signalizaci TTL)
  • Omnibus (backplane of undedicated system bus slots) zavedený v PDP-8/E. (Podrobnosti jsou popsány v níže uvedeném odkazovaném článku IEEE.)

Je podporována zjednodušená, levná forma DMA s názvem „třícyklový datový zlom“; to vyžaduje pomoc procesoru. Metoda „data break“ přesouvá část běžné logiky potřebné k implementaci DMA I/O z každého I/O zařízení do jedné společné kopie logiky v procesoru. „Přerušení dat“ svěřuje procesoru správu registrů adres DMA a počtu slov. Ve třech po sobě následujících paměťových cyklech procesor aktualizuje počet slov, aktualizuje přenosovou adresu a ukládá nebo načítá aktuální datové slovo I/O.

Jednokroková přestávka dat účinně ztrojnásobuje přenosovou rychlost DMA, protože do cílové paměti a z ní bylo třeba přenášet pouze cílová data. I/O zařízení však potřebují více elektronické logiky ke správě vlastních registrů počtu slov a přenosů adres. V době, kdy byl PDP-8/E představen, byla elektronická logika levnější a „jednocyklová přestávka dat“ se stala populárnější.

Programovací zařízení

Rané systémy PDP-8 neměly operační systém, pouze přední panel s přepínači spuštění a zastavení. Systémy vývoje softwaru pro řadu PDP-8 začaly nejzákladnějším zadáním surového binárního strojového kódu na přední panel ( bootovací položka).

Ve střední éře byly vyvinuty různé „operační systémy“ papírové pásky. Mnoho pomocných programů bylo k dispozici na papírových páskách. Zdrojový kód montážního jazyka PAL-8 byl často uložen na papírovou pásku, načten do paměti a uložen na papírovou pásku. PAL sestavený z papírové pásky do paměti. K dispozici byly papírové kazetové verze řady programovacích jazyků, včetně překladače DOC FOCAL a kompilátoru 4K FORTRAN a běhu.

Ke konci éry PDP-8 umožňovaly operační systémy jako OS/8 a COS-310 tradiční editor režimů řádků a vývojový systém kompilátoru příkazového řádku s využitím jazyků, jako je například montážní jazyk PAL-III, FORTRAN, BASIC a DIBOL .

K dispozici byl poměrně moderní a pokročilý operační systém v reálném čase (RTOS) a preemptivní víceúlohové víceuživatelské systémy: byl k dispozici systém v reálném čase (RTS-8) a víceuživatelské komerční systémy (COS-300 a COS-310) a vyhrazený systém zpracování textu pro jednoho uživatele (WPS-8).

K dispozici byl také systém sdílení času , TSS-8 . TSS-8 umožňuje více uživatelům přihlásit se do systému prostřednictvím 110-baudových terminálů a upravovat, kompilovat a ladit programy. Mezi jazyky patří speciální verze BASIC, podmnožina FORTRAN podobná FORTRAN-1 (žádné podprogramy ani funkce psané uživatelem), podmnožina ALGOL , FOCAL a assembler nazvaný PAL-D.

Značná část softwaru darovaného uživateli pro PDP-8 byla k dispozici od společnosti DECUS , Digital Equipment Corporation User Society, a často byla dodávána s úplnými zdrojovými výpisy a dokumentací.

Instrukční sada

Tři bity vysokého řádu 12bitového instrukčního slova (označené bity 0 až 2) jsou operační kód. Pro šest operací, které se týkají paměti, poskytují bity 5 až 11 7bitovou adresu. Bit 4, je-li nastaven, říká, že je třeba dokončit adresu pomocí 5 bitů vysokého řádu registru programového čítače (PC), což znamená, že adresované místo bylo ve stejných 128 slovech jako instrukce. Pokud je bit 4 jasný, použijí se nuly, takže adresované umístění je v prvních 128 slovech paměti. Bit 3 určuje směrování; pokud je nastavena, získaná adresa tak, jak byla dosud popsána, ukazuje na 12bitovou hodnotu v paměti, která udává skutečnou efektivní adresu instrukce; to umožňuje operandům být kdekoli v paměti na úkor dalšího slova. JMP instrukce nepracuje na slovo paměti, s výjimkou případů, je uvedeno bezcílnost, ale má stejné bitové pole.

0 2 3 4 5 11
Úkon Z Ofset
Stránky paměti

Toto použití instrukčního slova rozděluje 4 096 slovní paměť na 128 slovní stránky ; bit 4 instrukce vybere buď aktuální stránky nebo 0 (adresy 0000-0177 v osmičkové soustavě ). Paměť na stránce 0 je prémiová, protože zde umístěné proměnné lze adresovat přímo z jakékoli stránky. (Navíc adresa 0000 je místem, kde musí začít jakákoli rutinní služba přerušení, a adresy 0010–0017 mají speciální vlastnost automatického přírůstku předcházející jakékoli nepřímé referenci prostřednictvím nich.)

Standardní assembler umísťuje konstantní hodnoty pro aritmetiku na aktuální stránku. Stejně tak přeskakování mezi stránkami a volání podprogramů používají na aktuální stránce nepřímou adresu.

Bylo důležité psát rutiny, aby se vešly na stránky se 128 slovy, nebo uspořádat rutiny tak, aby se minimalizovaly přechody stránek, protože odkazy a skoky mimo aktuální stránku vyžadují další slovo. V důsledku toho bylo mnoho času chytře zachováno jedno nebo několik slov. Programátoři záměrně umístili kód na konec stránky, aby dosáhli volného přechodu na další stránku, jak se zvyšoval počítač.

Základní pokyny

000 - AND - A paměťový operand s AC.
001 - TAD - Dvojkový doplněk Přidejte paměťový operand na <L, AC> ( 12bitová hodnota se znaménkem (AC) s přenosem v L).
010 - ISZ - zvýšení operandu paměti a přeskočení další instrukce, pokud je výsledek nulový.
011 - DCA - Vložte AC do paměťového operandu a Clear AC.
100 - JMS - JuMp na podprogram (uložení zpáteční adresy do prvního slova podprogramu!).
101 - JMP - JuMP.
110 - IOT - přenos vstupu/výstupu (viz níže).
111 - OPR - mikrokódované OPeRace (viz níže).

Pokyny IOT (Input-Output Transfer)

Procesor PDP-8 definoval několik instrukcí IOT, ale jednoduše poskytl rámec. Většina instrukcí IOT byla definována jednotlivými I/O zařízeními.

0 2 3 8 9 11
6 = IOT přístroj Funkce
přístroj

Bity 3 až 8 instrukce IOT vybírají I/O zařízení. Některé z těchto adres zařízení jsou standardizovány konvencí:

  • 00 je zpracováno procesorem a není odesláno do žádného I/O zařízení (viz níže).
  • 01 je obvykle vysokorychlostní čtečka papírových pásek.
  • 02 je vysokorychlostní děrovačka papírové pásky.
  • 03 je konzolová klávesnice (a jakákoli související nízkorychlostní čtečka papírových pásek).
  • 04 je konzolová tiskárna (a jakýkoli související nízkootáčkový děrovač papíru).

Pokyny pro zařízení 0 ovlivňují procesor jako celek. Například ION (6001) umožňuje zpracování přerušení a IOFF (6002) jej deaktivuje.

Funkce

Bity 9 až 11 instrukce IOT vybírají funkce, které zařízení provádí. Jednoduchá zařízení (například čtečka a děrovačka papírových pásek a klávesnice konzoly a tiskárna) používají bity standardními způsoby:

  • Bit 11 způsobí, že procesor přeskočí další instrukci, pokud je I/O zařízení připraveno.
  • Bit 10 vymaže AC.
  • Bit 9 přesune slovo mezi AC a zařízením, zahájí další přenos I/O a vymaže příznak „připraveno“ zařízení.

Tyto operace probíhají v přesně definovaném pořadí, které poskytuje užitečné výsledky, pokud je nastaven více než jeden bit.

Složitější zařízení, jako jsou diskové jednotky, používají tyto 3 bity v módech specifických pro zařízení. Zařízení obvykle dekóduje 3 bity a poskytne 8 možných funkčních kódů.

OPR (OPeRate)

Mnoho operací je dosaženo pomocí OPR, včetně většiny podmíněných podmínek. OPR neřeší paměťové místo; podmíněného provedení je dosaženo podmíněným vynecháním jedné instrukce, což je obvykle JMP.

Instrukce OPR byla údajně „mikrokódovaná“. To neznamenalo, co to slovo dnes znamená (že program nižší úrovně přinesl a interpretoval instrukci OPR), ale znamenalo to, že každý bit instrukčního slova specifikuje určitou akci a programátor mohl dosáhnout několika akcí v jednom cyklu instrukcí nastavením více bitů. Při používání může programátor napsat několik mnemotechnických instrukcí vedle sebe a assembler je zkombinuje s NEBO a navrhne skutečné instrukční slovo. Mnoho I/O zařízení podporuje „mikrokódované“ pokyny IOT.

Mikrokódované akce probíhají v přesně definované sekvenci navržené tak, aby maximalizovaly užitečnost mnoha kombinací.

Pokyny OPR se dodávají ve skupinách. Bity 3, 8 a 11 identifikují skupinu instrukce OPR, takže není možné kombinovat mikrokódované akce z různých skupin.

Skupina 1

        00 01 02 03 04 05 06 07 08 09 10 11
        ___________________________________
       | 1| 1| 1| 0|  |  |  |  |  |  |  |  |
       |__|__|__|__|__|__|__|__|__|__|__|__|
                   |CLA   CMA   RAR   BSW
                       CLL   CML   RAL   IAC

    Execution order  1  1  2  2  4  4  4  3
7200 - CLA - čistý akumulátor
7100 - CLL - Vymažte bit L
7040 - CMA - jeden doplňkový akumulátor
7020 - CML - bit L komplementu
7001 - IAC - přírůstek <L, AC>
7010 - RAR - Otočit <L, AC> doprava
7004 - RAL - Otočit <L, AC> doleva
7012 - RTR - Otočit <L, AC> dvakrát doprava
7006 - RTL - Otočit <L, AC> dvakrát doleva
7002-BSW-Byte Swap 6bitové „bajty“ (PDP 8/e a vyšší)

Ve většině případů jsou operace sekvenovány, takže je lze kombinovat nejužitečnějšími způsoby. Například kombinace CLA (CLear Accumulator), CLL (CLear Link) a IAC (Increment ACcumulator) nejprve vymaže AC a Link, poté zvýší akumulátor a nastaví jej na 1. Přidání RAL do mixu (takže CLA CLL IAC RAL) způsobí, že se akumulátor vyčistí, zvýší, pak se otočí doleva a zůstane nastaven na 2. Tímto způsobem byly do akumulátoru umístěny malé celočíselné konstanty s jedinou instrukcí.

Kombinace CMA IAC, kterou vám assembler umožňuje zkracovat na CIA, vytváří aritmetickou inverzi AC: negace dvojkomplementace. Protože neexistuje žádná instrukce k odčítání, pouze přidání dvojice komplementu (TAD), spočítávající rozdíl dvou operandů, vyžaduje nejprve negaci subtrendu.

Instrukce OPR skupiny 1, která nemá žádný z mikroprogramovaných bitů, neprovádí žádnou akci. Pro sestavení takové instrukce může programátor napsat NOP (No Operation).

Skupina 2, nebo skupina

         00 01 02 03 04 05 06 07 08 09 10 11
        ___________________________________
       | 1| 1| 1| 1|  |  |  |  | 0|  |  | 0|
       |__|__|__|__|__|__|__|__|__|__|__|__|
                   |CLA   SZA      OSR
                       SMA   SNL      HLT

                     2  1  1  1     3  3
7600 - CLA - Clear AC
7500 - SMA - Přeskočit na AC <0 (nebo skupina)
7440 - SZA - Přeskočit na AC = 0 (nebo skupina)
7420 - SNL - Přeskočit na L ≠ 0 (nebo skupinu)
7404-OSR- logicky 'nebo' přepínače na předním panelu s AC
7402 - HLT - Halt

Když je bit 8 jasný, přeskočí se, pokud platí některá ze zadaných podmínek. Například „SMA SZA“, opcode 7540, přeskočí, pokud AC ≤ 0.

Instrukce OPR skupiny 2, která nemá nastaven žádný z mikroprogramovaných bitů, je další instrukce No-Op.

Skupina 2 a skupina

         00 01 02 03 04 05 06 07 08 09 10 11
        ___________________________________
       | 1| 1| 1| 1|  |  |  |  | 1|  |  | 0|
       |__|__|__|__|__|__|__|__|__|__|__|__|
                   |CLA   SNA      OSR
                       SPA   SZL      HLT

                     2  1  1  1     3  2
7410 - SKP - Přeskočte bezpodmínečně
7610 - CLA - Clear AC
7510 - SPA - Přeskočit na AC ≥ 0 (a skupina)
7450 - SNA - Přeskočit na AC ≠ 0 (a skupina)
7430 - SZL - přeskočit na L = 0 (a skupina)

Když bit 8 je nastaven, skupinu 2 nebo přeskočit stav je převrácený přes De Morganovy zákony : přeskočení se nebude provádět, pokud některý ze skupiny 2 nebo podmínky jsou splněny, což znamená, že všechny z uvedených skip podmínky musí být splněny. Například „SPA SNA“, opcode 7550, přeskočí, pokud AC> 0. Pokud není nastaven žádný z bitů 5–7, je přeskočení bezpodmínečné.

Skupina 3

Nepoužité bitové kombinace OPR jsou definovány jako třetí skupina mikroprogramovaných akcí, které většinou ovlivňují registr MQ (multiplikátor/kvocient). Registr MQ a pokyny pro rozšířený aritmetický prvek (EAE) jsou volitelné a existují pouze tehdy, když byla zakoupena možnost EAE.

        00 01 02 03 04 05 06 07 08 09 10 11
        ___________________________________
       | 1| 1| 1| 1|  |  |  |  |  |  |  | 1|
       |__|__|__|__|__|__|__|__|__|__|__|__|
                   |CLA   SCA   \_    _/
                   |   MQA   MQL  CODE

                     1* 2  2  2     3
7601 - CLA - Clear AC
7501 - MQA - multiplikační kvocient s AC (logický nebo MQ do AC)
7441 - SCA - Krokové zatížení čítače do AC
7421 - MQL - Multiplikátor kvocientu zátěže (Přenos AC na MQ, vymazání AC)
7621 - CAM - CLA + MQL vymaže AC i MQ.

Typicky byly CLA a MQA kombinovány pro přenos MQ do AC. Další užitečnou kombinací je MQA a MQL pro výměnu dvou registrů.

Tři bity zadaly instrukci násobení/dělení, která se má provést:

7401 - Žádná operace
7403-SCL-zatížení čítače kroků (následuje okamžité slovo, PDP-8/I a vyšší)
7405 - MUY - znásobit
7407 - DVI - rozdělit
7411 - NMI - Normalizace
7413 - SHL - posun doleva (následuje bezprostřední slovo)
7415 - ASR - aritmetický posun doprava
7417 - LSR - Logický posun doprava

Ovládání paměti

Zásobník jádra paměti PDP-8/I
Jeden ze tří vzájemně propojených modulů, které tvoří základní paměťovou rovinu PDP-8.
Jeden ze tří vzájemně propojených modulů, které tvoří základní paměťovou rovinu PDP-8. Toto je střed tří a obsahuje pole skutečných feritových jader.
Jeden ze tří vzájemně propojených modulů, které tvoří základní paměťovou rovinu PDP-8.

12bitové slovo může mít 4096 různých hodnot, což je maximální počet slov, která může původní PDP-8 nepřímo adresovat pomocí ukazatele slova. 4096 12bitových slov představuje v moderní terminologii 6 144 bytů, neboli 6 kB. Jak se programy staly složitějšími a cena paměti klesala, bylo žádoucí tento limit rozšířit.

Aby byla zachována kompatibilita s již existujícími programy, přidal nový hardware mimo původní design do efektivních adres generovaných programem bity vysokého řádu. Řadič rozšíření paměti rozšiřuje adresovatelnou paměť o faktor 8, celkem na 32 768 slov. Toto rozšíření bylo považováno za dostačující, protože s tím, že jádrová paměť tehdy stála asi 50 centů za slovo, by se celých 32 kB paměti rovnalo ceně CPU.

Každé 4K paměti se nazývá pole. Řadič rozšíření paměti obsahuje dva tříbitové registry: DF (datové pole) a IF (instrukční pole). Tyto registry určují pole pro každou paměťovou referenci CPU, což umožňuje celkem 15 bitů adresy. Registr IF určuje pole pro načítání instrukcí a přímé odkazy na paměť; registr DF určuje pole pro nepřímé přístupy k datům. Program spuštěný v jednom poli může odkazovat na data ve stejném poli přímým adresováním a referenční data v jiném poli nepřímým adresováním.

Sada I/O instrukcí v rozsahu 6200 až 6277 je zpracovávána řadičem rozšíření paměti a poskytuje přístup k registrům DF a IF. Instrukce 62X1 (CDF, ​​Change Data Field) nastavila datové pole na X. Podobně 62X2 (CIF) nastavilo pole instrukcí a 62X3 nastavilo obojí. Již existující programy by nikdy nespouštěly CIF nebo CDF; registry DF a IF by ukazovaly na stejné pole, jediné pole, na které byly tyto programy omezeny. Účinek instrukce CIF byl odložen, aby se shodoval s další instrukcí JMP nebo JMS, takže provedení CIF nezpůsobí skok.

Pro programy s více poli bylo složitější zabývat se hranicemi polí a registry DF a IF, než by to bylo, kdyby mohly jednoduše generovat 15bitové adresy, ale design poskytoval zpětnou kompatibilitu a je v souladu s 12bitovou architekturou používá se v celém PDP-8. Porovnejte pozdější Intel 8086 , jehož adresy 16bitové paměti jsou rozšířeny na 20 bitů jejich kombinací s obsahem zadaného nebo implikovaného segmentového registru .

Schéma rozšířené paměti umožňuje stávajícím programům zvládnout zvýšenou paměť s minimálními změnami. Například 4K FOCAL měl normálně asi 3 kB kódu, přičemž pro uživatelský program a data zbylo pouze 1 kB. S několika opravami by FOCAL mohl použít druhé pole 4K pro uživatelský program a data. Kromě toho by mohla být samostatným uživatelům přidělena další pole 4K, čímž se z FOCAL 4K stane víceuživatelský systém sdílení času.

Virtualizace

U modelů PDP-8/E a novějších byl řadič rozšíření paměti rozšířen tak, aby umožňoval virtualizaci strojů. Program napsaný pro použití celých zdrojů PDP-8 může koexistovat s jinými takovými programy na stejném PDP-8 pod kontrolou správce virtuálních počítačů. Správce může zajistit, aby všechny I/O pokyny (včetně těch, které fungovaly na řadiči rozšíření paměti) způsobily past (přerušení, které zpracovává správce). Tímto způsobem může manažer mapovat odkazy na paměť, mapovat data nebo pole instrukcí a přesměrovat I/O na různá zařízení. Každý původní program má úplný přístup k „virtuálnímu počítači“ poskytovanému správcem.

Nové I/O pokyny k řadiči rozšíření paměti načítají aktuální hodnotu datových a instrukčních polí, takže software může ukládat a obnovovat většinu stavu stroje přes past. Program však nemůže vycítit, zda CPU právě odkládá účinek instrukce CIF (zda provedl CIF a dosud neprovedl odpovídající instrukci skoku). Manažer musí obsahovat kompletní emulátor PDP-8 (není obtížné pro stroj s 8 instrukcemi). Kdykoli se instrukce CIF zachytí u manažera, musí ji emulovat až do dalšího skoku. Naštěstí, jako skok je obvykle další instrukce po CIF, tato emulace programy příliš nezpomaluje, ale je velkým řešením zdánlivě malého nedostatku designu.

V době PDP-8/A ceny paměti klesly natolik, že paměť přesahující 32 kB byla žádoucí. 8/A přidal novou sadu pokynů pro zpracování více než osmi polí paměti. Číslo pole lze nyní umístit do AC, nikoli napevno do instrukce. Do této doby však PDP-8 byl na ústupu, takže bylo upraveno velmi málo standardního softwaru, aby tyto nové funkce používalo.

Příklady

Následující příklady ukazují kód v jazyce sestavení PDP-8, jak by se dalo psát pro assembler PAL-III.

Srovnání dvou čísel

Následující část kódu ukazuje, co je potřeba k porovnání dvou čísel:

    /Compare numbers in memory at OPD1 and OPD2
            CLA CLL     /Must start with 0 in AC and link
            TAD OPD1    /Load first operand into AC (by adding it to 0); link is still clear
            CIA         /Complement, then increment AC, negating it
            TAD OPD2    /AC now has OPD2-OPD1; if OPD2≥OPD1, sum overflows and link is set
            SZL         /Skip if link is clear
            JMP OP2GT   /Jump somewhere in the case that OPD2≥OPD1;
                        /Otherwise, fall through to code below.

Jak je ukázáno, velká část textu typického programu PDP-8 se nezaměřuje na autorův zamýšlený algoritmus, ale na mechaniku na nízké úrovni. Dalším problémem čitelnosti je, že u podmíněných skoků, jako je ten, který je uveden výše, podmíněná instrukce (která přeskakuje kolem JMP) zdůrazňuje opak podmínky zájmu.

Řetězcový výstup

Tento kompletní program sestavovacího jazyka PDP-8 vydává „Hello, world!“ na dálnopis.

    *10                   / Set current assembly origin to address 10,
    STPTR,    STRNG-1     / An auto-increment register (one of eight at 10-17)

    *200                  / Set current assembly origin to program text area
    HELLO,  CLA CLL       / Clear AC and Link again (needed when we loop back from tls)
            TAD I Z STPTR / Get next character, indirect via PRE-auto-increment address from the zero page
            SNA           / Skip if non-zero (not end of string)
            HLT           / Else halt on zero (end of string)
            TLS           / Output the character in the AC to the teleprinter
            TSF           / Skip if teleprinter ready for character
            JMP .-1       / Else jump back and try again
            JMP HELLO     / Jump back for the next character

    STRNG,  310           / H
            345           / e
            354           / l
            354           / l
            357           / o
            254           /,
            240           / (space)
            367           / w
            357           / o
            362           / r
            354           / l
            344           / d
            241           / !
            0             / End of string
    $HELLO                /DEFAULT TERMINATOR

Podprogramy

Procesor PDP-8 neimplementuje zásobník, na který se ukládají registry nebo jiný kontext, když je vyvolán podprogram nebo dojde k přerušení . (Stoh může být implementován v softwaru, jak je ukázáno v další části.) Místo toho instrukce JMS jednoduše uloží aktualizovaný počítač (směřující kolem JMS na návratovou adresu) na efektivní adresu a skočí na efektivní adresu plus jednu. Podprogram se vrátil svému volajícímu pomocí nepřímé instrukce JMP, která adresuje první slovo podprogramu.

Zde je například „Hello, World!“ přepsán tak, aby používal podprogram. Když instrukce JMS přeskočí na podprogram, změní 0 kódovaný v umístění OUT1:

    *10                     / Set current assembly origin to address 10,
    STPTR,  STRNG-1         / An auto-increment register (one of eight at 10-17)

    *200                    / Set assembly origin (load address)
    LOOP,   TAD I STPTR     / Pre-increment mem location 10, fetch indirect to get the next character of our message
            SNA             / Skip on non-zero AC
            HLT             / Else halt at end of message
            JMS OUT1        / Write out one character
            JMP LOOP        / And loop back for more
    OUT1,   0               / Will be replaced by caller's updated PC
            TSF             / Skip if printer ready
            JMP .-1         / Wait for flag
            TLS             / Send the character in the AC
            CLA CLL         / Clear AC and Link for next pass
            JMP I OUT1      / Return to caller
    STRNG, "H               / A well-known message
           "e               /
           "l               / NOTE:
           "l               /
           "o               /   Strings in PAL-8 and PAL-III were "sixbit"
           ",               /   To use ASCII, we spell it out, character by character
           "                /
           "w               /
           "o               /
           "r               /
           "l               /
           "d               /
           "!               /
           015              /
           012              /
           0                / Mark the end of our null-terminated string (.ASCIZ hadn't been invented yet!)

Skutečnost, že instrukce JMS používá slovo těsně před kódem podprogramu k uložení zpáteční adresy, brání opětovnému vstupu a rekurzi bez další práce programátora. To také ztěžuje použití ROM s PDP-8, protože úložiště návratové adresy pro čtení a zápis je smícháno s ukládáním kódu jen pro čtení v adresním prostoru. Programy určené k umístění do ROM přistupují k tomuto problému několika způsoby:

  • Před provedením se zkopírují do paměti pro čtení a zápis, popř
  • Jsou umístěny do speciálních karet ROM, které poskytují několik slov pro čtení/zápis, k nimž je nepřímo přistupováno pomocí třináctého příznakového bitu v každém slovu ROM.
  • Vyhýbají se používání podprogramů; nebo použijte místo instrukce JMS kód, jako je následující, k vložení zpáteční adresy do paměti pro čtení a zápis:
    JUMPL, DCA TEMP         / Deposit the accumulator in some temporary location
           TAD JUMPL+3      / Load the return address into the accumulator: hard coded
           JMP SUBRO        / Go to the subroutine, and have it handle jumping back (to JUMPL+3)

Použití instrukce JMS ztěžuje ladění. Pokud programátor udělá chybu, že sám zavolá podprogram, přímo nebo prostředním podprogramem, pak je zpáteční adresa pro vnější volání zničena návratovou adresou následujícího volání, což vede k nekonečné smyčce. Pokud je jeden modul kódován nesprávnou nebo zastaralou adresou podprogramu, nezpůsobí pouze selhání celé sekvence kódu podprogramu, ale může upravit slovo kódu podprogramu a uložit zpáteční adresu, kterou by procesor mohl interpretovat jako pokyn během následného správného volání podprogramu. Oba typy chyb se mohou projevit během provádění kódu, který byl napsán správně.

Zásobník softwaru

Přestože PDP-8 nemá zásobník hardwaru , lze je implementovat do softwaru. Zde jsou příklady podprogramů PUSH a POP, zjednodušené pro vynechání problémů, jako je testování přetečení a podtečení zásobníku:

    *100              /make routines accessible for next example
    PUSH, 0
          DCA DATA
          CLA CMA     / -1
          TAD SP
          DCA SP
          TAD DATA
          DCA I SP
          JMP I PUSH     /Return

    POP,  0
          CLA CLL
          TAD I SP
          ISZ SP
          JMP I POP

    DATA, 0
    SP, 0

A tady je „Hello World“ s tímto „stackem“ implementovaným a podprogram „OUT“:

    *200
    MAIN,  CLA CLL         /Set the message pointer
           TAD (MESSG      /To the beginning of the message (literal)
           DCA SP

    LOOP,  JMS POP
           SNA             /Stop execution if zero
           HLT
           JMS OUT         /Otherwise, output a character
           JMP LOOP

    MESSG, "H
           "e
           "l
           "l
           "o
           ",
           "
           "w
           "o
           "r
           "l
           "d
           "!
           015
           012
           0

    OUT,    0               / Will be replaced by caller's updated PC
            TSF             / Skip if printer ready
            JMP .-1         / Wait for flag
            TLS             / Send the character in the AC
            CLA CLL         / Clear AC and Link for next pass
            JMP I OUT       / Return to caller

Spojový seznam

Dalším možným podprogramem pro PDP-8 je propojený seznam.

     GETN, 0     /Gets the number pointed to and moves the pointer
     CLA CLL     /Clear accumulator
     TAD I PTR   /Gets the number pointed to
     DCA TEMP    /Save current value
     ISZ PTR     /Increment pointer
     TAD I PTR   /Get next address
     DCA PTR     /Put in pointer
     JMP I GETN  /return
     PTR,  0
     TEMP, 0

Přerušení

Na sběrnici I/O PDP-8 je jedno přerušení . Procesor zpracovává jakékoli přerušení deaktivací dalších přerušení a provedením JMSna místo 0000. Jelikož je obtížné zapisovat podprogramy reentrantů, je obtížné vnořovat přerušení a to se obvykle nedělá; každé přerušení běží do konce a znovu povoluje přerušení těsně před provedením JMP I 0instrukce, která se vrací z přerušení.

Protože na I/O sběrnici je pouze jedna linka přerušení, výskyt přerušení neinformuje procesor o zdroji přerušení. Místo toho musí rutina služby přerušení sériově dotazovat každé aktivní I/O zařízení, aby zjistila, zda je zdrojem. Kód, který to dělá, se nazývá přeskakovací řetězec, protože se skládá ze série testů PDP-8 a přeskočení, pokud je nastaven příznak I/O. (Nebylo neslýchané, že přeskokový řetězec dosáhl svého konce, aniž by našel jakékoli zařízení, které potřebuje servis.) Relativní priorita přerušení I/O zařízení je určena jejich polohou v řetězci přeskočení: Pokud se několik zařízení přeruší, dříve testované zařízení v řetězci přeskočení je opraveno.

Knihy

Technická učebnice populární v 80. letech 20. století, Umění digitálního designu od Davida Winkela a Franklina Prossera, obsahuje příklad problému zahrnujícího několik kapitol, ve kterých autoři demonstrují proces návrhu počítače, který je kompatibilní s PDP-8/I. Je vysvětlena funkce každé součásti. Přestože se nejedná o produkční návrh, protože využívá modernější komponenty SSI a MSI , cvičení poskytuje podrobný popis činnosti počítače.

Nelicencované klony

SSSR vyráběl minipočítače Saratov-1, respektive Saratov-2, PDP-8 a PDP-8/E .

Reference

  • C. Gordon Bell a Allen Newell , 1971, Počítačové struktury: Čtení a příklady , McGraw-Hill Book Company, New York. Kapitola 5 DEC PDP-8 , strany 120–136. S dostatečným množstvím podrobností, které by mohl elektrotechnik postavit (pokud dokáže najít díly).

externí odkazy