PDP -8 - PDP-8
Vývojář | Digital Equipment Corporation |
---|---|
Produktová řada | Programovaný datový procesor |
Typ | Minipočítač |
Datum vydání | 22. března 1965 |
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
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
|
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
Celkový prodejní údaj pro rodinu PDP-8 byl odhadnut na více než 300 000 strojů. Byly vyrobeny následující modely:
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 | Já | 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
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 JMS
na 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 0
instrukce, 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
- Dokumentace pdp-8: The Small Computer Handbook (1966 Edition), Section 1 and 2 and others are available from Simon Fraser University
- „Často kladené otázky PDP-8“ . www.faqs.org . Jedna stránka . 27. března 2014 . Citováno 2018-12-16 .CS1 maint: ostatní ( odkaz )
- http://homepage.cs.uiowa.edu/~jones/pdp8/
- „Souhrn modelů a možností PDP-8“ . www.faqs.org . Jedna stránka . 27. března 2014 . Citováno 2018-12-16 .CS1 maint: ostatní ( odkaz )
- Na webu pdp8online.com je spuštěný PDP8, který může kdokoli ovládat prostřednictvím apletu Java, a webová kamera, která zobrazuje výsledky.
- dpa , přenosný cross-assembler PDP-8
- Počítač kompatibilní se SBC6120 PDP-8 společnosti Spare Time Gizmos s volitelným předním panelem
- Stále pracuje Classic 8, PDP 8e a 8i v německém počítačovém muzeu
- Elegantní simulátor PDP-8/E Bernharda Baehra pro Macintosh
- Simulátor PDP-8/E Willema van der Marka v Javě
- http://simh.trailing-edge.com velmi přenosný simulátor pro PDP-8, který funguje prakticky na jakémkoli moderním OS.
- Replika PDP PDP-8 s otevřeným zdrojovým kódem PiDP-8 pomocí Raspberry Pi se SIMH připojeným k replice předního panelu PDP-8.
- Digital Equipment Corporation PDP-8, 1965 -Computer History Collection od Smithsonian
- Historická aplikace PDP8 v Německu pro všechna centra Deutsche Bank a další finanční instituty: Olympia Multiplex 80 (Olympia Business Systems)
- Průvodce zachováním a obnovou počítačů PDP-8
- Digital Equipment Corporation PDP-8 Vysvětlení Steva Gibsona o tom, jak PDP-8 funguje a jak jej programovat.
- Na YouTube je video série ukazující PDP-8.
- „Rejstřík dokumentů PDP-8“ . Web BitSavers.Org . Citováno 29. května 2011 .