Test procesorů Intel 4004 a 4040




Mít tu možnost pohrát si s prvním procesorem na světě - Intel 4004, to byl můj dávný sen. Ale tak nějak jsem si myslel, že posledních pár exemplářů bude jen ve sbírkách a tudíž nedostupné na nějaké hraní. To byl omyl. Musím přiznat, že než jsem se těm starým procesorům začal aktivně věnovat, neměl jsem tušení o následníkovi 4004, tedy o procesoru 4040. Myslel jsem, že po 4004 následoval ihned 8008. Jakmile jsem se o 4040 dozvěděl, soustředil jsem se na jeho získání. Usoudil jsem, že o něj nebude takový zájem, jako o 4004 a bude tedy dostupnější. Tento předpoklad byl správný ale nakonec se mi podařilo sehnat procesory oba: 4040 i 4004. Hrátky tedy mohly začít...

V první fázi bylo nutné zjistit, zda procesory vůbec fungují. Ponořil jsem se tedy do jejich studia a zjistil jsem zajímavou věc: bez dalších obvodů to nepůjde! Zejména se ukázaly být důležité: generátor hodin (4201), RAM pro data (4002) a zejména obvod 4289, který k 4004/4040 umožňuje připojit klasickou Eprom, tzv. Standard Memory Controller. Jinak totiž 4004/4040 spolupracují pouze s maskou programovanou ROM typu 4001 a nazdar hodiny... Naštěstí vše potřebné mám.

Další studium obvodů ukázalo, že to opravdu nebude tak jednoduché. Tyto obvody jsou totiž vyrobeny technologií P-MOS a je tady všechno obráceně:-) Napájecí napětí je -15V, ale pro částečnou kompatibilitu s TTL se volí +5V a -10V. Logická nula je "nejpozitivnější" napětí, tedy zde +5V. Logická jednička naopak "nejzápornější" napětí, tedy -10V. Za těchto okolností je možné k výstupům P-MOS přímo připojovat vstupy obvodů TTL, protože mají na vstupech tzv "clamp diode", tedy antiparalelní diodu vůči GND a záporné napětí jim tak nevadí. Jen je nutné si uvědomit, že pak ten výstup musíte považovat za negovaný (log. 0 z P-MOS bude pro TTL log. 1 a naopak). V případě, že je k P-MOS výstupu nutné připojit vstup CMOS (HC/HCT), je nutné antiparalelní diodu připojit zvlášť! Další možný převod výstupních úrovní P-MOS na TTL je pomocí diody a tranzistoru na následujícím obrázku a je vhodný pro signály výstupních portů RAM 4002. Každá tato RAM totiž zároveň obsahuje jeden 4-bitový výstupní port. Jak se nakonec ukázalo, nebylo těžké naprogramovat procesory 4004/4040, ale přeprogramovat hlavu na ty úrovně...

Opačně, tedy budit P-MOS vstupy z TTL výstupů až na vyjímky nelze a musíte použít nějaký převodník úrovní. Naštěstí to díky obvodu 4289 není třeba. Obvod 4289, který je se svým masivním pouzdrem DIL 40 vedle maličkého procesoru 4004 v pouzdře DIL 16 jako obr vedle trpaslíka, umožňuje do systému zapojit standardní EPROM a vlastně i programovou RAM. Je to důležitý obvod, bez něj by dnes byly procesory 4004/4040 prakticky k ničemu. Obvod přímo komunikuje s CPU 4004/4040 po 4-bitové sběrnici a na druhou stranu umožňuje připojit klasickou paměť s osmibitovou šířkou dat, ze které vybírá data po bajtech, ale do do CPU je posílá po jednotlivých nibblích. CPU 4004/4040 jsou sice 4-bitové, ale všechny instrukční kódy jsou osmibitové! Jelikož 4289 s připojenou EPROM má za úkol nahradit nepraktické pevné ROM typu 4001 a jelikož tyto ROM nesly navíc i jeden 4-bitový obousměrný port, je takový port součástí 4289. Výběr konkrétní periferie je pak nutné určit na základě výběrových signálů C0-C3, které zároveň slouží pro stránkování paměti.


Intel 4004 a 4040 tester

Po důkladném nastudování všech potřebných obvodů jsem navrhl testovací zapojení. Jedná se v podstatě o jednoduchý počítač obsahující generátor dvoufázových hodin s 4201, samotný procesor 4004 nebo 4040 (fungují zde oba) a rozhraní pro klasickou paměť - obvod 4289. Již v této konfiguraci bylo možné provést jednoduchý test klasickým NOPováním. Na vstupy OPA a OPR obvodu 4289 jsem "připojil" instrukci NOP a vyzkoušel čítání adresových signálů A0-A7 a výběr stránky pomocí C0-C3. Jelikož to fungovalo, pokračoval jsem připojením klasické paměti EPROM s testovacím programem a jako indikaci jsem k portu 4289 připojil výstupní latch s LEDkami v podobě 74LS175. Později jsem za účelem jejího otestování připojil ještě RAM 4002 a také její výstupní port jsem využil k indikaci (přímé připojení LED 2mA). Vše je jasné z následujícího schématu. Testovací program otestuje všechny buňky RAM 4002 a je-li vše OK, začne čítání na ledkách výstupního portu 4289 a rotace bitu na výstupním portu 4002. Jelikož má procesor 4040 výstup indikující nastavení příznaku Carry, využil jsem i tento výstup k indikaci LED. Její zapojení se zdá podivné, ale je to tak správně. Výstup CY je "open drain" a vyžaduje pulldown odpor na -Vdd.

tester CPU Intel 4040 - doplňky


    tester CPU 4040


Tester jsem zbastlil na nepájivém poli a k mé velké radosti mám všechny klíčové obvody funkční! Testovací program je uveden níže. Pro reálný procesor je ve zdrojáku pouze nutné odkomentovat čekací smyčku (4 řádky s instrukcemi ISZ). Adresace RAM je určena pro typ 4002-1. Pro otestování 4002-2 je nutné změnit její adresu (viz začátek programu).

Tedy tak idylické to zase nebylo. Prvnotní nadšení po nastudování procesoru vystřídal smutek, beznaděj a vztek. Nefungovalo to! Jenže jsem tomu dal pauzičku, večerní posezení ve vinárně s dobrým jídlem a pitím a druhý den jsem byl schopen lokalizovat problém mnohem přesněji. Namísto původního fádního určení, že to je někde v procesoru, se ohnisko problému ukázalo býti v oblasti mezi židlí a nepájivým polem... Následovala oprava a napjaté očekávání doprovázené zapnutím napájení. A zase nic! Tentokrát bylo hledání závady velmi rychlé a lokalizace problematické části se zpřesnila na "to co nosím na krku". Nemůžete očekávat, že procesor pojede, když mu předtím vytáhnete Epromku za účelem přeprogramování...

Třetí zapnutí a rána. To jak spadl kámen ze srdce, že dolárky nevyletěly komínem:-) Procesor a další obvody tepaly v testovacím zapojení na nepájivém poli a dělaly přesně to, co se po nich chtělo. Jako kdyby jim ani nebylo 40 let...

CPU Intel 4040
čipset Intel 4040 (MCS-40)
tester CPU Intel 4040
tester CPU Intel 4040



www.youtube.com/nostalcomp


Kromě paměti EPROM umožňuje obvod 4289 připojit i klasickou programovou RAM. Původní RAM 4002 totiž může sloužit pouze k uložení dat. Nelze z ní spouštět kód. RAM, do které lze ukládat programy a spouštět je, je nutné připojit pomocí 4289 a to celkem krkolomně. Výstup dat z 4289 do RAM se totiž děje prostřednictvím výstupního portu (signály I/O 0-3), ale čtení se provádí jako u EPROM pomocí sběrnice OPA a OPR. Ideální je tedy použití RAM s oddělenými vstupy a výstupy dat, ale vyřešil jsem to i pro klasickou paměť s jedinou datovou sběrnicí pro vstup i výstup (2114). Dalším problémem je to, že data se zapisují po niblích, ale čtou po bajtech. A aby toho nebylo málo, nelze ke stránkování RAM v režimu zápisu použít signály C0-C3, které slouží jen ke stránkování při čtení. Při zápisu je nutno stránku ručně zvolit a vystavit na nějaký výstupní port - latch. Prostě tady není nic jednoduchého, ale zase to není neřešitelné. Mám vyřešeno připojení dvojice RAM 2114 a funguje to. Jo, ještě jsem zapomněl, že při práci s programovou RAM na 4289 dochází k přepisům datové RAM 4002 pověšené na signálu CM-RAM0 a tuto banku je tak ideální vůbec nepoužívat...

A aby v tom byl dokonalý zmatek, tak obvod 4289 má některé výstupy přímo kompatibilní s TTL (data, adresy, stránky), ale jiné (řídící signály a I/O) zase v úrovních P-MOS. Fakt guláš. Snad jen pro informaci dodám, že 4289 je "sloučenina" dvojice obvodů 4008 a 4009, které dohromady dělají to samé.

Nakonec jsem se rozhodl otestovat i jednoduchý počítač, kde je k procesoru prostřednictvím obvodu 4289 připojena programová paměť RAM 1KB (2x 2114). Jelikož je připojení programové RAM k 4289 dosti komplikované (jaksi se s programy v RAM tehdá nepočítalo), vyžádalo si to dalších 6 IO (+ 2 pouzdra RAM)! Nicméně to funguje. Testovací program v EPROM přepíše do RAM část testovacího kódu a spustí ho tam. Šlape to.


tester CPU Intel 4004 + RAM



Online assembler a emulátor procesoru 4004

Nutno říct, že velkým pomocníkem při testování CPU 4004/4040 byl online assembler a emulátor procesoru 4004, který je volně na webu. Je to perfektní nástroj. Kromě samotného procesoru emuluje i připojené RAM 4002 i s jejich výstupními porty a také výstupní port ROM 4001. Programy je možné krokovat, nebo spouštět ve dvou rychlostech zpracovnání. Pomalý, tzv. Animate režim ještě stále umožňuje sledovat změny interních registrů. Plná rychlost (RUN) je pak výhodná pro odlaďování programů pro reálný procesor. Pokud byste si chtěli činnost 4004 vyzkoušet, připravil jsem upravenou verzi svého testovacího programu, která je optimalizována pro režim Animate. Jsou tedy krásně viditelné zápisy do RAM a změny v registrech. Zde je malý návod, jak na to:

1) zdrojový kód programu vložte do okna Source code online assembleru 4004.

2) přeložte kód tlačítkem Generate code

3) pokud assembler neohlásí chybu, zkopírujte do schránky obsah okna Object code (obsah Hex code lze přes schránku vložit do prázdného textového souboru a nahrát do EPROM pro reálný CPU - tak to také dělám)

4) přepněte se do emulátoru emulátoru 4004 a pro jistotu klikněte na tlačítko RESET ALL

5) do pole ROM block vložte Object code ze schránky a klikněte na LOAD - nutné!!!

6) spusťte program tlačítkem ANIMATE. Program jede v pomalém režimu a je možné v okně 4002 RAM, bank 0, chip 0 sledovat plnění (0-F) a opětovné mazání registrů Main memory i Status.

7) Po opětovném vynulování RAM program přejde na nekonečné čítání na portech. Blikání na portech lze sledovat na výstupech RAM OUT portu a dole na 4001 ROM I/O portu. Pozor, ty radiobuttony jsou dost světlé a jsou špatně vidět.

8) Program je možné kdykoliv zastavit a znovu spouštět, nebo krokovat. Pochopitelně můžete vyzkoušet rozličné úpravy přímo ve zdrojáku a tento opět přeložit a vložit do emulátoru. Pro reálný procesor stačí jen odkomentovat instrukce ISZ pro čekací smyčku. Pak to i na emulátoru můžete pustit plnou parou, ale neuvidíte plnění RAM:-) Změnou počáteční adresy (FIM R8R9, $xx), lze volit jiný RAM čip 4002.

Kromě online assembleru a vlastního emulátoru je k dispozici také výkonný diaassembler a popis instrukčního souboru 4004.


    TEST 4040 + 4002 emulator


on-line 4004 assembler
on-line 4004 assembler
on-line 4004 emulator
on-line 4004 emulator


Co s ním?

Počítačů s procesorem 4004 či 4040 asi moc nevzniklo. Není se co divit. Tyhle procesory byly spíše určeny k "variabilní tvorbě jednoúčelových zařízení". Asi nejznámějším z nich je kalkulátor Busicom 141-PF. Ale to mě neláká. Samotný Intel později uvedl na trh vývojový systém Intellec 4, což byl takový vývojový počítač, ale na můj vkus velmi složitý. Moc se mi líbí amatérský MCS-4 Micro-Lab od Billa Kotasky (autora známé repliky Busicomu), ale jednak se Bill nechce dělit o schémata a druhak mi tam ten LCD displej přijde jako pěst na oko. Sorry, Bille, ale tohle fakt ne. Tady musí ČERVENĚ svítit segmentovky! Takže mě napadá počítač vlastní konstrukce a mám už pro něj i jméno: PMI-40, jakože První Mikroprocesor Intel:-) Pochopitelně to nemůže být kompatibilní s PMI-80, ale může to zachovat jeho ducha, filosofii a systém ovládání. Takže tak.


RET



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