Již jsem zde mnohokrát psal, že mě vždy zajímaly samotné procesory, než celé počítače. Zejména procesory v našich končinách poněkud exotické. Měl jsem možnost si pohrát se 4-bitovými 4004/4040 i s 8-bitovými 8008, 8060 (SC/MP II), 1802, 2650. Okrajově jsem si pohrál též s bipolárními řezy 3000. Myslel jsem si, že mám "splněno", a že už to stačí. I jsem to tak veřejně prezentoval. Jenže jednoho dne mi v poště přistála obálka s "mikrokontrolérem" Signetics 8X305. Už jen krátký pohled do stažené dokumentace značil, že mám co do činění s exotem všech exotů a tomu se pochopitelně nedalo odolat...
Označení "mikrokontrolér" dávám do uvozovek záměrně, neboť v současné době si pod tímto označením představujeme spíše "jednočip". Tedy jednočipový mikropočítač, který na čipu obsahuje vše, co dělá počítač počítačem: CPU, paměti, porty a další obvody (časovače, převodníky...). Jenže 8X305 nic z toho nemá, vyjma CPU. Takže jej nadále budu nazývat procesorem (CPU).
Procesor 8X305 je opravdu exot. Není to tak úplně klasický procesor, je spíše určen pro konstrukci specializovaných řídících systémů a řadičů (např. řadičů diskových pamětí, tiskáren..). Je vyroben bipolární schottkyho technologií (cca TTL LS) a má harvardskou architekturu s odděleným prostorem pro program a data+porty. Je v impozantním pouzdru DIL50 se šířkou 0,9 palce, takže když je vrazíte do klasického nepájivého pole, zbude po stranách vždy jediná volná dírka:-) V porovnání s ním vypadá takový klasik 8080 v DIL40 jako chudý příbuzný:-) K napájení stačí jediná úroveň +5V, ale jelikož některé vnitřní obvody vyžadují +3V, obsahuje procesor vlastní interní regulátor, kterému stačí zvnějšku dodat jediný výkonnější (do 1A) tranzistor NPN. Celý tento úchvatný brouk si může "říct" až o úctyhodných 450 mA.
![]() Porovnání 8X305 v DIL50 a 8080 v DIL40 |
Předchůdcem 8X305 byl 8X300. Oproti němu má 8X305 jen pár vylepšení a je s ním zpětně kompatibilní. Výrobcem těchto unikátů byla firma Signetics, ale dělal je i Phillips. Kromě samotných CPU zahrnovala "rodina" i celou řadu podpůrných obvodů: pamětí, vstupně/výstupních bran až po tzv. interrupt coprocessor, který procesoru umožňoval pracovat s přerušením, byť sám žádný přerušovací vstup nemá! Princip práce toho přerušovacího kopráku, je fakt výživnej. Všechny tyto rodinné podpůrné obvody jsou plně kompatibilní s řídícími signály, které 8X300/305 generují. Tyto signály totiž opět nepřipomínají nic z nám všem dobře známých procesorů. Nicméně konverze na "normální" řídící signály není složitá, a tak lze k 8X300/305 připojovat i klasické počítačové obvody. Jen je to trocha drátování navíc:-)
Kromě procesoru samotného za poněkud exotický považuji i jeho originální popis v původních datasheetech a uživatelských manuálech. Hodně se zde pracuje s osmičkovou číselnou soustavou a chce to trochu přeprogramovat vlastní kebuli, než si na to člověk zvykne:-) Také je hrozně matoucí, že všechny sběrnicové signály jsou značeny tak, že signál s indexem 0 (A0, I0, /IV0) je vždy MSB (nejvýznamnější bit)! Naopak signály s nejvyšším indexem (A12, I15, /IV7) jsou LSB (néjméně významný bit)! Z drtivé většiny ostatních procesorů jsme zvyklí to mít naopak... A ještě upozornění. V uživatelském manuálu k 8X305 z roku 1982 je spousta chyb v popisech formátu instrukcí! Nutno ověřovat s manuálem k 8X300!
![]() Tohle bylo nutné nastudovat... |
Jak už jsem uvedl, procesory 8X300/305 mají tzv. harvardskou architekturu, tedy oddělené adresové prostory pro program a data. Zde jsou v datovém prostoru navíc umístěny i všechny vstupně-výstupní (V/V) brány. Programová paměť může mít až 8192 adres a šířku slova musí mít 16 bitů. Tedy 8192x16. Připojuje se na adresové piny A0-A12 (A12=LSB) a datové (zde nazýváno instrukční) piny I0-I15 (I15=LSB). Žádný další řídící signál pro čtení z paměti programu (ROM/PROM/EPROM) se nepoužívá. Pro komunikaci s případnou pamětí RAM a V/V bránami se používá obousměrná 3-stavová 8-bitová sběrnice /IV0-/IV7 (/IV7=LSB), které je invertovaná. Zde se vysílají jak data, tak adresy připojených obvodů. Je tedy možné přímo adresovat 256 registrů, bran, apod. To není moc. Znamenalo by to, že lze přímo připojit pouze 256 bajtů paměti RAM a už nic jiného!
Jenže za prvé: 8X300/305 má tyto prostory dva označené jako Left Bank (LB) a Right Bank (RB), tudíž se nám to číslo zvedá na 512. Čili můžeme připojit třeba 256 bajtů datové RAM a 256 různých V/V bran. A to už je solidní. CPU má přímo vyvedeny signály /LB a /RB, jimiž signalizuje, se kterou bankou hodlá aktuálně pracovat.
Za druhé: pro většinu jednodušších řídících aplikací tu vnější RAM ani nepotřebujeme a vystačíme s interními univerzálními registry, kterých má 8X300 osm a 8X305 jedenáct, ale v některých případech lze využívat ještě další dva (R12, R13).
Za třetí: celý ten prostor se dá pomocí pomocných latchů dále stránkovat, takže ta vnější kapacita je teoreticky neomezená.
Ovšem to by hodně zpomalovalo procesor, jehož hlavní výhodou má být právě rychlost daná jednak bipolární technologií a druhak tím, že všechny instrukce se zpracovávají na 2 hodinové takty. Hodiny mohou být až 10MHz a jako jejich zdroj může sloužit obligátní krystal, nebo obyčejný kondenzátor a nebo je lze přivést z nějakého externího oscilátoru. Á propos, instrukce... Jak plyne z uspořádání paměti programu, jsou instrukce 16-bitové. Co adresa to jedna instrukce. Ovšem samotný operační kód zabírá pouze 3 bity. Čili procesory 8X300/305 rozeznávají pouhých 8 instrukčních kódů! Jedná se o instrukce MOV, XMIT, ADD, AND, XOR, XEC, NZT, JMP. Zbylých 13 bitů 16-bitového instrukčního kódu jsou operandy, konstanty a jiné parametry.
V těchto 13 bitech můžeme u transferových a aritmetickologických instrukcí uvést zdroj dat (registr, IV Bus), cíl dat (registr, IV Bus) a bitovou manipulaci, jež se má během transakce s daty provést (rotace vpravo, maskování a posun vlevo). V rámci jedné instrukce tak 8X300/305 zvládá udělat to, k čemu konvenční procesor potřebuje několik instrukcí. Navíc, oproti tzv. střadačově orientovaným procesorům, k těmto manipulacím nepotřebujeme střadač, byť ho 8X300/305 také má (R0=AUX).
![]() Pinout 8X305 v DIL50 |
Procesor 8X305 disponuje pouze jediným příznakovým bitem (OVF), který indikuje přetečení pří operaci aritmetického sčítání ADD. Zajímavé je, že příznakový registr OVF je klasicky 8-bitový, ale platný je v něm opravdu jediný bit! Říkáte si, že je nutný jestě minimálně příznak nuly (Zero). Tak ten tady není, ale jeho funkci zastupuje instrukce NZT, která zajišťuje podmíněné větvení programu, pokud registr uvedený v parametru je nenulový (Not Zero). Jako registr může být uveden i IV Bus. Lze tak přímo testovat vybrané externí vstupy bez nutnosti jejich kopírování dovnitř procesoru!
Původně jsem chtěl testovat klasickým NOPováním, ale pak jsem si uvědomil, že pouhou změnou instrukce na vstupech I15-I0 toho mohu otestovat mnohem více. Nejen periodické čítání na adresových výstupech, ale také generování řídících signálů (/LB, /RB, SC, WC). Pochopitelně je možné sledovat i výstup MCLK a reakci pinů na aktivací /RESET a /HALT. Pro tyto účely jsem si navrhl a na nepájivém poli postavil toto zapojení:
![]() Základní zapojení pro testování 8X305 |
Pro generování systémových hodin jsem nejprve použil keramický kondenzátor 1nF, který by měl dle datasheetu zajistit generování kmitočtu 1MHz. Protože změny na výstupech byly moc rychlé, zkusil jsem jít na 10nF a nakonec až na 100nF. Pochopitelně jsem si nejprve v dokumentaci ověřil že hodinový takt není zdola nijak omezen. Při 100nF vycházela frekvence asi na 12KHz (6KHz na MCLK) a ke všem pozorováním jsem vystačil s logickou sondou (používal jsem svou nouzovku).
Klasický test NOPováním jsem prováděl instrukcí MOV R0,0,R0 (instrukční kód 0000h). Ale lze použít jakoukoliv instrukci, která neovlivňuje interní adresový registr a programový čítač a pouze jej inkrementuje (MOV, XMIT, ADD, AND, XOR). Při tomto testu lze pozorovat binární čítání na adresách A0-A12. Aktivací /HALT se čítání zastaví na aktuální adrese, aktivací /RESET přejdou všechny adresové výstupy na stav 0. Řídící signály jsou v klidu, na MCLK je 1/2 kmitočtu jádra procesoru.
![]() Test Signetics 8X305: instrukce XMIT |
Dále jsem prováděl testy instrukcemi, které již ovlivňovaly řídící signály pro přístup k vnějším zařízením. Konkrétně:
Test instrukcí MOV IV Bus > registr
Test instrukcí XMIT konstanta > IV Bus ADDR
Test instrukcí XMIT konstanta > IV Bus DATA
Během těchto testů jsem sledoval stavy řídících signálů /LB, /RB, WC a SC logickou sondou a vše bylo v souladu s dokumentací.
Nakonec jsem si nechal test instrukcí JMP addr, kde je možné pozorovat změnu na adresových výstupech v souladu s adresou nastavenou na DIP spínačích. Až při testování instrukce JMP mě napadlo použít svůj 8x LED modul, abych to pořád nemusel očuchávat sondou. Škoda, že mě to nenapadlo už při testování instrukce XMIT data > IV Bus, ale už jsem to měl sondou obrnkaný a nechtěl jsem se k tomu vracet.
![]() Test Signetics 8X305: instrukce JMP |
Dále jsem se zatím nedostal, ale připravil jsem si jednoduchý prográmek pro binární čítání na LEDkách připojených k latchi na IV Bus. A nejen ten. Dalších testovacích kroků mám navrženo více. Ale už to bude chtít z procesoru udělat pročítač. Za tím účelem jsem navrhl dekódovací logiku řídících signálů pro připojování standardních V/V obvodů a externí RAM k 8X305. Snad se k tomu jednou vrátím a vyzkouším to...
![]() Návrh dekódovací logiky pro čtení dat z IV Bus (2 verze s OR a NAND) |
![]() Návrh dekódovací logiky pro zápis adresy a a zápis dat na IV Bus |
![]() Zjednodušená logika pro zápis dat na IV Bus pro účely testování |
Literatura:
[1] Datasheet 8X305
[2] Users manual 8X305 (1982 - chyby!)
[3] Programming manual 8X300
Publikováno: 2/2022