Procesorové řezy 3000



O procesorových řezech řady 3000 jsem se již zmínil na stránce Kam dál? a původně jsem neměl v úmyslu se jim dál věnovat. Jenže ve výprodejích se objevily obvody Tesla MH300X z této řady a byly k mání i za bůra. Tomu se nedalo odolat a tak jsem se předzásobil:


procesorové řezy 3001 + 3002 + 3003
procesorové řezy 3001 + 3002 + 3003
procesorové řezy 3001 + 3002 + 3003
procesorové řezy 3001 + 3002 + 3003


A nebyl jsem sám. Takzvaně "na důchod" se předzásobili také Milan a Martin:-) Jenže co nám schází, je literatura. Takže přátelé. Pokud nechcete, aby budoucí babušky jagušky (naše současné krásné ženušky), netrpěly na zaslouženém odpočinku (bohatě hrazeného z průběžného penzijního systému) otravnou přítomností nás, budoucích senilních dědků, prohrabte archivy a pošlete co máte. My pak nějak zalezem a budeme si hrát:-) Zajímá nás cokoliv ohledně návrhu procesoru, případně celého počítače z řezů 3000. Pochopitelně ideálně 8-bit. Díky:-)


16-bitový procesor z řezů 3000

blokové schéma 16-bitového procesoru z řezů řady 3000


Asi nejznámější tuzemský počítač postavený na řezech 3000 byl CONSUL 2715. Údajně existoval také TEMS 30 a řezy 3000 byly prý také v inteligentních terminálech z Metry Blansko a v řídících systémech zbraní (údajně MIG 21 a tank T-54). Pěkný článek na téma řezů 3000 vyšel na ROOTu - Procesor sestavený z čipů řady Intel 3000. Článek a zejména odkazy a diskuse pod ním, je cenný zdroj informací. Bohužel to ale stále není ono...


*** aktualizace 1 ***

Tak výše uvedená výzva přinesla své ovoce. Musím zde poděkovat EC1045 a Davidovi. EC1045 našel na naskenoval zajímavý a pro mě nový článek o řadě 3000 ze Sdělovací Techniky, viz níže. David mě zase upozornil na to, že bipolární obvody 3000 dělala i firma Signetics a nějaké materiály této firmy jsou na webu bitsavers.org, kde se specializují na uchovávání dokumentace o staré digitální technice pro mladou generaci. Stačí si najít složku Signetics a je tam jednak PDF Introducing the 3000 a hlavně Signetics 8080 Emulator. Možná se divíte, proč poukazuju na nějaký emulátor procesoru 8080? Ten emulátor je totiž sestavený z obvodů 3000. Konečně ukázka praktické realizace procesoru s těmito obvody a navíc procesoru notoricky známého! Emulátor je ve formě karty a emuluje vlastně celou svatou trojku: 8080 + 8224 + 8228. Když jsem kdysi na stránce další PMI psal o tom, že by bylo zajímavé postavit něco jako PMI-30, kde by procesor byl kompatibilní s 8080, ale postavený z řezů 3000 netušil jsem, jak blízko jsem realitě:-) Další PDF o bipolárních procesorech lze najít v podsložkách Signeticsu. Zajímavé, je že prakticky nic o nich není (stav 11/2011) ve složce Intel...


    Prvky systému 3000


Takže kluci díky! Zjistil jsem, že by to šlo. Tož si takhle jedno deštivé odpoledne uvařit dobrou kávu a k tomu si dát dva řezy 3002 sevírované na nepájivém poli a odzkoušet pár základních operací, tak by se určitě člověk posunul mnohem dál. Jeden obrázek je za tísíc slov a jeden praktický pokus je za tisíc obrázků. A kdyby se jiné deštivé odpoledne k té kávě servíroval velký řez 3001 a vyzkoušelo se generování adres pro paměť mikroinstrukcí, tak to by bylo žůžo. Zkrátka "vono by se dalo", jen mít ten čas. Nebude to prdel, ale nikdo netvrdil, že to má být prdel. Ovšem pokud už jste takhle blázni a občas na svou drahou polovičku (kterážto si už zvykla) promluvíte v assembleru, tak se připravte na ten šok, až na ni vybalíte mikroinstrukce... Proti nim je instrukce "dekrement end džamp if zírou" prostě pohoda:-) Mimochodem ta zmíněná instrukce by mohla znamenat třeba: "podej pivo z lednice a skoč do hospody, pokud tam už žádné není":-)

Jenže teď má přednost CPU 74xx. Pak se uvidí:-)


*** aktualizace 2 ***

Tak 4-bitový TTL počítač z obvodů 74xx jménem Claudia-1 je dávno hotov a můžeme se vrátit k řezům řady 3000... :-) V první řadě bych rád poděkoval všem, kdo poslali nějaké materiály ohledně těchto zajímavých obvodů. Obrovský dík patří těm, kdo neváhali obětovat svůj drahocenný čas a naskenovali nějaká ta skripta či příručky. Nakonec se ukázalo, že opravdu vše bylo důležité. Zjistil jsem totiž, že není možné brát informace jen z jediného zdroje. V každém materiálu jsem totiž našel nějakou důležitou informaci, která jinde není. Je to zajímavé, ale je to tak. Pouze periodickým studiem veškeré dostupné literatury se daří skládat jednotlivé střípky informací o těchto obvodech. Je to úmorné se pořád dokola vracet k již prostudované dokumentaci, ale jinak to nejde. Žádný z materiálů není prostě úplně komplexní. Je to fakt podivné a já absolutně nechápu, podle jakých materiálů tenkrát konstruktéři vlastně pracovali a postupovali... Nicméně jsem v teoretickém studiu řezů pokročil natolik, že další katarze byla možná jen po provedení nějakých praktických pokusů. Platí totiž, že jeden obrázek vydá za tisíc slov a jeden praktický pokus vydá za tisíc obrázků...


První test obvodů 3002 (CPE) a 3003

První pokus, který jsem si načrtl, bylo ověření činnosti CPE (Centrálního Procesorového Elementu) 3002, což je v podstatě 2-bitový procesorový řez. Obvod 3002 obsahuje kromě kombinační logiky ALU a řízení také sadu 11 univerzálních registrů R0-R9 a T, registr výstupní adresy MAR a střadač AC. Ovšem po prostudování činnosti obvodu nelze nesouhlasit s doporučením v literatuře, že pro skutečný střadač budoucího procesoru je vhodnější využívat některý z Rx registrů a registr AC využívat jen jako výstupní registr dat. Veškerá činnost obvodu je časována jediným hodinovým signálem CLK.

Po prostudování dokumentace jsem se rozhodl pro jednoduchý test na nepájivém poli, který bude spočívat v periodické inkrementaci některého z Rx registrů (konkrétně R0) a jeho vystavování prostřednictvím MAR a současně by probíhala rotace obsahu registru AC. Obsahy MAR a AC by byly zobrazovány pomocí LED stejně jako výstupní přenos generovaný při přetečení inkrementovaného R0 registru. Rozhodl jsem se pracovat s dvojicí obvodů CPE a tedy se 4-bitovou šířkou slova (nibble).

Pro řízení činnosti obvodů jsem od začátku plánoval využít svůj Poloprog s jednočipem x51 (konkrétně 89S8253, ale zde by stačil i obyčejný 8051), který de facto nahrazuje řadič mikroinstrukcí 3001 s časováním, paměť mikroprogramu a nějakou tu řídící logiku. Využití jednočipu se ukázalo jako velmi přínosné a podstatně zjednodušilo prvotní pokusování. Než se od začátku trápit s 3001, bylo lepší použít něco, co člověk zná jak svý boty:-) Jednočip generuje pro CPE mikroinstrukce (F0-F6), hodiny (CLK), konstanty (K0-K1), vstupní přenos (CI) a také vysílá hodnoty na datové vstupy (M3-M0 a případně I3-I0). Jednočip také čte výstupní přenos (CO) z 3002 (nebo 3003) a pro indikační účely jej "prodlužuje" a zobrazuje na LEDce.

Zapojení obvodů 3002 je prakticky katalogové. Pouze výstup RO (right output) z prvního obvodu je zaveden zpět do vstupu LI (left input) druhého obvodu. To proto, aby mohl obsah střadače AC volně rotovat. Výstupy z registrů MAR a AC jsou přes invertující budič (3002 pracuje s negativní logikou) 74LS541 přivedeny na LED. Zelené LED indikují obsah registru MAR a červené LED obsah registru AC. Po resetu řídícího jednočipu jsou do sestavy obvodů 3002 vysílány mikroinstrukce které zajistí vynulování registru R0, jeho přepis do MAR a do AC je nahrána hodnota 0Ch. Následně je v nekonečném cyklu inkrementován R0 a přepisován do MAR a současně je provedena rotace AC vpravo. Výsledkem pokusu je tedy periodické čítání 0-F na zelených LED a cyklická rotace počáteční hodnoty 1100 o jeden bit vpravo na červených LED. Malá červená LED indikuje výstupní přenos (přetečení registru R0). Že vše funguje, si můžete ověřit na videu níže. Videa i fotky byly pořizovány tabletem v nočních hodinách za mizerného osvětlení, tak je prosím berte s nadhledem:-)

První test dvojice řezů MH 3002
První test dvojice řezů MH 3002
Přidán rychlý generátor přenosu MH 3003
Přidán rychlý generátor přenosu MH 3003


Pro pořádek ještě uvádím sekvenci mikroinstrukcí pro tento pokus. Názvy mikroinstrukcí korespondují s datasheetem obvodu 3002. Pochopitelně nestačí jen vysílat instrukční kódy, ale je nutné pro každou mikroinstrukci příslušně nastavovat vstupy K, CI a M, viz datasheet obvodu. Také je nutné vzít v úvahu, že většina vstupů a výstupů obvodu 3002 je invertovaných!

start:
     CLR R0     ;vynuluje R0 (K=CI=0, M=X)
     LMI R0     ;přepis R0 do MAR a inkrementace R0 (K=0, CI=1, M=X)
     LTM AC     ;přepis vstupů Mx do AC (K=1, CI=0, M=0Ch)
cykl:
     LMI R0     ;přepis R0 do MAR a inkrementace R0 (K=0, CI=1, M=X)
     SRA        ;rotace AC vpravo (K=0, CI=X, M=X)
     jmp cykl

Poznámka: s druhými vstupy dat Ix jsem vůbec nepracoval a byly trvale připojeny na log 1 (ve skutečnosti je to log 0, protože vstupy jsou inverzní). Na jejich stavu, ale v tomto pokusu nezáleží.


Video z prvotního pokusu řízení dvojice obvodů 3002:


www.youtube.com/nostalcomp


Přidání obvodu 3003 ke stávajícím 3002:

Ve druhé fázi pokusu s obvody 3002 jsem chtěl ověřit připojení obvodu 3003 pro rychlé generování přenosu. Tedy ne, že bych ho při těch "závratných kmitočtech" hodin, které používám potřeboval:-) I pro uvažovaný procesor bude bohatě postačovat postupné šíření přenosu jen s obvody 3002, ale prostě jsem chtěl činnost 3003 ověřit. Obvod 3003 jsem připojil dle doporučení v katalogu. Vzhledem k tomu, že jsem pracoval jen s dvojicí obvodů 3002, jsou využity jen vstupy X0,Y0 a X1,Y1. Ostatní páry vstupů X,Y jsou připojeny na log 0. Výstupy přenosu C0 z obvodů 3002 nejsou zapojeny a jako výstupní přenos celé sestavy slouží signál Cn+2 z 3003. Připojení obvodu 3003 by nemělo mít vliv na funkčnost obvodu a to se také potvrdilo. Pokusné zapojení pracovalo naprosto stejně, bez jakýchkoliv dalších úprav, viz. video výšee.


První test řadiče 3001 (MCU)

Otestovat řadič mikroinstrukcí 3001 se zprvu zdálo mnohem složitější, než v případě obvodů 3002. Však také jestli jste někdy viděli jeho dokumentaci a pokoušeli se pochopit to děsné uspořádání paměti mikroinstrukcí a to skákání v rámci sloupců a řádků, víte o čem je řeč:-) Ale nakonec se jednoduché otestování obvodu 3001 ukázalo jako mnohem jednoduššní, než v případě 3002 + 3003 výše. K řadiči totiž stačí připojit jen paměť mikroinstrukcí s jednoduchým mikroprogramem a pomocí LED sledovat dění na adresových vstupech paměti. Pro plné využití řadiče 3001 potřebujete připojit paměť mikroinstrukcí s datovou šířkou minimálně 18 bitů. A to jen v případě, že nebudete generovat žádné další signály pro externí obvody. Jenže bez těchto signálů procesor nepostavíte, takže v reálu potřebujete datovou šířku ROM mikroinstrukcí ještě mnohem větší (cca 28-32 bitů). Přesto se mi podařilo najít způsob, jak vystačit s pouhými 7 bity a mohl jsem tedy použít klasickou 8-bitovou paměť, konkrétně EEPROM 28C16. Datové výstupy D6-D0 paměti jsou připojeny na vstupy AC6-AC0 řadiče 3001 a představují kód mikroinstrukce. Naopak výstupy MA3-MA0 z řadiče jsou přivedeny na A3-A0 paměti (ostatní adresové vstupy paměti jsou na log 0). Pracuje se tedy pouze se 4-bitovou adresou. Třetí obvod vpravo na nepájivém poli je 7400 zapojený jako RS klopný obvod pro bezzákmitové tlačítko na krokování hodin CLK.

První test řadiče MH 3001
První test řadiče MH 3001
První test řadiče MH 3001
První test řadiče MH 3001


Princip testu je jednoduchý. V EEPROM jsou na adresách 00h až 0Fh umístěny mikroinstrukce JZR (skok na daný sloupec v řádku 0) následovně: na adrese 00h je JZR 1, na 01h je JZR 2 ..... na 0Eh je JZR F a na 0Fh je JZR 0. Tento mikroprogram nedělá nic jiného, než že postupně adresuje paměť v rozsahu 00h až 0Fh a následně začíná opět od 00h. Činnost lze sledovat pomocí LED na adresových výstupech MA3-MA0. Stavy ostatních vstupů (vyjma LD) řadiče nejsou podstatné a jsou připojeny na log. 0.

Každý správný procesor potřebuje mít definovaný stav po RESETu. U řadiče 3001 k tomu slouží vstup LD, kterým lze nahrát počáteční adresu kde započne vykonávání mikroprogramu. Startovací adresu je nutné řadiči dodat na vstupy PX(4) a SX(4). Jelikož jsou tyto vstupy důležité i pro jiné činnosti, než je RESET, je zpravidla nutné použít nějaký multiplexer. Tak alespoň hovoří literatura. Ovšem v jedněch skriptech jsem nalezl ještě jednodušší způsob, který spočívá v odpojení výstupů MA přivedením log 0 na uvolňovací vstup EN. Počáteční adresa je pak dána pullup odpory na adresových vstupech paměti mikroinstrukcí. Tímto způsobem lze ale zpravidla dodat je jedinou adresu sestávající ze samých jedniček. V mém případě je to adresa 1111 (0Fh), kde je mikroinstrukce JZR 0. Po resetu je tedy zpracování mikroprogramu započato na adrese 0Fh, kde je skok na 00h a pokračuje postupnou inkrementací až na 0Fh a celý cyklus se opakuje. Signál RESET musí být aktivní po dobu alespoň jedné náběžné hrany hodin CLK. Jednoduchý jak facka a plně funkční.

Výsledkem testování je tedy periodické čítání 00h-0Fh na LEDkách, jak můžete vidět na následujícím videu. Řadič MH 3001 tedy žije:-)


Video z prvotního testu mikrořadiče 3001:


www.youtube.com/nostalcomp

Abych si ověřil principy větvení mikroprogramu na základě vstupních podmínek, upravil jsem původní mikroprogram takto:

org 0000h
     JZR 1     
     JZR 2     
     JZR 3     
     JZR 4     
     JZR 5     
     JZR 6     
     JZR 7     
     JZR 8     
     JZR 9     
     JZR A     
     JZR B     
     JZR C     
     JZR D     
     JPX 0     
     JPR 0     
     JZR 0     

Ke změně došlo na adresách 0Dh a 0Eh, kde jsou namísto původních mikroinstrukcí JZR nově instrukce JPX a JPR. Instrukce JPX načte stavy vstupů SX(4) do pomocného interního registru PR řadiče 3001. Zároveň provede skok na adresu (v aktuálním řádku) danou vstupy PX(4). Jelikož potřebuji přechod na následující adresu (0Eh) musí na vstupech PX(4) být v okamžiku zpracovávání mikroinstrukce JPX právě hodnota 0Eh, jinak nebude program správně fungovat. Instrukce JPR na adrese 0Eh provádí skok (v aktuálním řádku) na adresu danou obsahem pomocného registru PR (který byl načten v předchozím kroku instrukcí JPX). Do PR jsem vybíral jen ze dvou hodnot 00h a 0Fh (všechny 4 vstupy SX byly spojené a přiváděny na log 0 nebo log 1). V případě hodnoty 00h tak řadič skákal z adresy 0Eh na 00h a čítání tedy bylo jen v rozsahu 00h-0Eh. Pokud jsem do PR nahrál 0Fh, řadič skákal na následující adresu (0Fh) a probíhal tedy plný cyklus čítání 00h-0Fh. To vše šlape v pohodě. Nyní mi zbývá ověřit větvení dle příznaků C a Z, nastavovaných vstupem FI. To zatím vypadá docela nepřehledně...


Závěr?

Opravdu se potvrdilo, že jeden praktický pokus je za tisíc obrázků. Oba výše popsané pokusy mě posunuly o míle dál, než bych byl jen pouhým studováním literatury. Sen o vlastním procesoru z řezů 3000 je zase o kus blíže, ale pořád mě čeká ještě dlouhá cesta. Dalším logickým krokem by bylo spojení předchozích pokusů do jednoho, tedy nahradit jednočip v prvním pokusu řadičem 3001 s pamětí z druhého pokusu. Teoreticky v tom již nevidím absolutně žádný problém. Daleko zajímavější je teď ověření práce s příznaky a větvení programu. Tak uvidíme... :-)

A ještě jednou děkuji za všechnu tu zaslanou literaturu. Bez toho bych byl v pr... prostě tam, kde je naše země a svět vůbec.

A poslední věc: plně si uvědomuju, že bez několika hodin studia dokumentace k řezům 3000 tomu všemu textu, který jsem v rámci 2. aktualizace této stránky vyplodil, nemáte šanci vůbec, ale vůbec porozumět. Ale snažil jsem se:-) A taky si uvědomuju, že na takovéhle blikání na ledkách by stačil třeba čítač 7493, ale uvědomte si, že za tím blikáním na videích výše stojí opravdové zpracovávání mikroprogramů!



Tak jsem se do toho pustil

Abych dokázal, že nekecám a CPU 3000 je (nebo spíše byl) opravdu na spadnutí, přikládám první fotku. Jedná se o první verzi rozmístění součástek na dvou spojených univerzálkách. Každá má rozměr malé eurokarty, tedy 160 x 100 mm. Vynechaný prostor je rezerva pro případná "akutní" hradla a pomocné obvody, ale v této části se rozmístění ještě bude měnit. Naopak velké obvody, už mají místo jisté.

procesor CPU3000
procesor CPU3000
procesor CPU3000
procesor CPU3000

Původně jsem chtěl stavět zase čtyřbiťák kompatibilní s Claudií, ale ukázalo se, že v případě řezů to není žádná výhra. Naopak. Takže to nakonec bude osmibiťák. Abych mohl překládat programy v zavedeném assembleru, chtěl jsem to mít kompatibilní s 8080 alespoň na 60-80% Pochopitelně mám na mysli kompatibilitu jen na úrovni intrukčního souboru. Nakonec by kompatibilita s 8080 měla na úrovni instrukčního souboru být 99,6% :-) V podstatě bude chybět jen dekadická korekce DAA. Ale je fakt, že nemám odsimulováno úplně vše a leckde tak ještě můžu narazit. Zkušenosti z Claudie jsou k nezaplacení a díky Claudii s těmi řezy zacházím asi i jinak, než bylo před 30 lety obvyklé. Prostě nový přístup:-) Na dokončování se těším moc, ale na rutinní drátování zas tolik ne:-) Cílem je připojit to místo svaté trojky do PMI-80...

Vím, že Sygnetics měl kompletní emulátor 8080 ze svých řezů 3000 a že je tento i dostupný na netu. Ale nekopíruju to. Ani jsem to jejich zapojení moc nestudoval. Maj to ňák moc složitý...:-) Už jen to, že používají dvě sady řezů 3002. Já hodlám vystačit s jedinou i za cenu toho, že ten jediný registr 8080, který se mi tam nevejde budu prostě mít externě v jiném obvodu.


RET



Odladěno na MS IE 8.0 a Firefoxu při rozlišení min. 1024 x 768 pixelů
www.NOSTALCOMP.cz    2010  -  2017