ZILOG
Mikroprocesszor Családok

Tartalom

II. Rész: Z8000
Bevezetés
2.1. Z busz
2.2. Z8000 Központi egség
2.2.1. Általános ismertetés
2.2.2. Regiszterek
2.2.3. A központi egység belső állapotai
2.2.4. Megszakításkezelés
2.2.5. Memória frissítés
2.2.6. Együttműködés külső feldolgozó egységgel
2.2.7. A Z8000 indítása
2.2.8. A Z8001 és Z8002 kivezetései
2.3. A Z8000 programozása
2.3.1. Adattípusok
2.3.2. Címzési módok
2.3.3. Utasítás típusok
2.3.4. Utasítások ismertetése
2.4. Memória felügyelő egység (MMU)
2.4.1. Általános ismertetés
2.4.2. Regiszterek
2.4.3. Az áramkör kivezetéseinek értelmezése
2.4.4. Programozás
2.4.5. Rendszerbe illesztés

III. Rész: Z8
3.1. Bevezetés
3.1.1. Általános ismertetés
3.1.2. A Z8 kivezetéseinek értelmezése
3.1.3. Regiszterek
3.1.4. Memória felosztás
3.1.5. A környezet illesztése
3.1.6. Számláló-időzítő részegység
3.1.7. Megszakítások kezelése
3.1.8. Z8 programozása
3.1.9. Alkalmazási példák
3.2. Általános periféria illesztő UPC
3.3. Soros adatátvitel vezérlő
3.4. Számláló-időzítő és párhuzamos I/O CIO
3.5. Adatátvitel illesztő FIO
3.6. Adatátvitel buffer FIFO
3.7. Egyéb egységek
3.7.1. COMBO áramkör
3.7.2. Kiegészítő áramkörök a Z8000-hez

IV. Rész: Z800
4.1. Bevezetés
4.2. A Z800-as mikroprocesszor felépítése, összehasonlítása a Z80-as mikroprocesszorral, összefoglalás
4.2.1. Architektúra
4.2.2. A Z800 mikroprocesszor család
4.2.3. A Z800-as mikroprocesszor tulajdonságai; bővítések, főbb jellemzők
4.2.4. Technológiai kérdések, NMOS
4.2.5. Bemenet, kimenet, buszrendszer
4.3. Az architektura áttekintése
4.3.1. Regiszterkészlet
4.3.2. Funkcionális egységek, időzítés
4.3.3. Rendszer és felhasználói üzemmód
4.3.4. Memóriakezelő
4.3.5. Dinamikus memóriafrissítő vezérlő
4.3.6. Oszcillátor, óragenerátor
4.3.7. Megszakítás, trap
4.3.8. Miniszámítógép a Z800-as család elemeiből
4.4. Címzési módok, utasításkészlet
4.4.1. Címzési módok
4.4.2. Z800-as processzor utasításkészlete
4.4.2.1. Szorzás és osztás utasítások
4.4.2.2. Egyéb aritmetikai utasítások
4.4.2.3. TEST és SET utasítás
4.4.2.4. CPU vezérlő utasítások
4.4.2.5. Privilegizált utasítások
4.4.2.6. Rendszerhívó utasítás
4.5. Memóriakezelési technika
4.5.1. Logikai-fizikai cím
4.5.2. Lapozás a memóriában
4.5.3. Memóriacím-tartomány bővítés
4.5.4. Memóriavédelem
4.5.5. Betöltés a lap-deszkriptor-regiszterekbe
4.5.6. A memóriakezelő egység a Z80-as címtartománynak bővítésére
4.6. CACHE memória
4.6.1. Alkalmazási alapelv
4.6.2. A cache memória belülről
4.7. A chip-ben levő periféria illesztők, DMA, számláló / időzítő
4.8. Multiprocesszor működés
4.9. A Z8216 köré épített mikroszámítógép

V. Rész: Z80000
5.1. A Z80000-es mikroprocesszor család bemutatása
5.2. Regiszterek, utasítások
5.3. A teljesítménynövelés eszközei
5.4. Memóriakezelés, kész "READY" referencia
5.5. Pipeline
5.6. Adatfolyam a CACHE memórián és a pipeline-on keresztül
5.7. A Z80000 processzor értékelése
5.8. ZILOG master-slave mikroprocesszoros rendszerek
5.9. A Z80000 alprogramjai
5.10. 32 bites mikroprocesszor típusok


II. Rész: Z8000

Bevezetés
A Zilog cégnek sikerült a Z-80 családdal a piacra betörnie, és elmondható, hogy sikerült vele feljutni a csúcsra. Természetesen a továbbfejlesztés nem állt meg. Látható volt, hogy a Z-80-nál jobbat a 8 bites kategóriában nem tudnak kihozni, legfeljebb az utasításkészleten lehet módosítani, vagy a sebességet növelni. Ez utóbbi megtörtént (Z-80 B változat), de ez is zsákutca. Próbálkoznak a Z-80 és a memória felügyelő egység házasításával (Z800). Ez a központi egység még további utasításokkal is bővült, az osztással és szorzással. Ma még nem tudjuk, hogyan válik majd be. A mikroprocesszorok világa a nagyobb bitszámú processzorok felé halad, megközelítve ezzel a miniszámítógépeket.
A Zilog cég a Z8000-et fejlesztette ki a 16 bites kategóriában. Vele közel egy időben jelent meg a Motorola a maga 68000-esével és az Intel a 8086-ossal. Az Intel azóta ennek variánsait is piacra dobta, megpróbálja a vevőket - széles választéklistával - magához csalogatni. A jelszavuk minden feladatra más CPU. A hazai választékolási törekvések ezt az üzleti fogást nem támogatják. Ha egy magyar cég egy mikroprocesszor alkalmazása mellett dönt, el kell határoznia, hogy melyik - univerzális - típust választja. A 16 bites kategóriában az Intel 8086, a Motorola 68000 és a Z8000 típus jön számításba. A 8086 melletti döntést az Intel cég bő katalógusáradata támasztja alá, és a már itt-ott beszerzett 8086 alapú KIT-ek. Azonban ezeknek-a KIT-eknek az alkalmazása ma még a "játszadozás" szintjén van. Nem létezik sem 68000-es, sem Z8000-es KIT, ennek ellenére van hazánkban mindkét mikroprocesszor típusnak pártolója, olyanok, akik gyártmányba kívánják építeni, és szorgalmasan kísérleteznek velük. E három 16 bites processzor között a verseny még nem dőlt el, sok esetben a megszokás dönt, mindhárom egyformán megfelelő. Egyes szolgáltatásaik eltérőek, de egyik sem rosszabb, egyik sem körözi le a többit.
A 16 bites processzorokkal más szemszögből kell foglalkozni, mint a 8 bitesekkel. Ezek nem a 8 bitesek feldagasztásából keletkeztek, inkább a közép és nagyszámítógépek fogásaiból lestek el néhányat. Aki középszámítógépes rendszerekkel foglalkozott, az sokkal könnyebben sajátíthatja el a 16 bites mikroprocesszor technikát, mint aki pl. a 8080 mellől kacsingat rá. A bitszámban rejlő különbség egymagában még nem újdonság, hanem pl. a SYSTEM és NORMÁL üzemmód, a memóriakezelés teljesen újszerű (mikroprocesszor esetében) módja (szegmens címzés, fizikai és logikai cím, offszet, báziscímzés), multiprocesszoros üzem, multiprogramozást segítő eszközök (memória felügyelet).
Az alkotók a Z-80 igen jó buszrendszere helyett egy teljesen új buszrendszert konstruáltak. Ez persze később érthetővé válik, mivel a Z-80 busz vezérlő-jelei nem alkalmasak az intelligensebb Z8000 kiszolgálására. A Zilog cég megalkotta a Z-Buszt, ezzel kompatibilis a Z8000 és Z8 család. Tekintsük át először ezt.

2.1. Z busz
A Z busz tervezésekor a jelenlegi busz technológiákat úgy fogták össze, hogy tekintettel voltak a továbbfejlesztés lehetséges irányaira. Ez alatt főleg a multiprocesszoros üzemet és a 16 Mbyte /!/ operatív tár alkalmazását érthetjük. A multi-mikroprocesszoros üzemnél csupán a daisy-chain-t tűzték ki célul - hasonlóan a megszakítás- és buszkérési daisy-chain-hez. Ma még nem dönthető el, hogy ez a topológiailag kötött, statikus multiprocesszor prioritás technika megfelelő lesz-e a jövőben. Léteznek más technológiájú buszvezérlő logikák, melyek lehet, hogy alkalmasabbak lesznek egy multiprocesszoros üzemre. Ez mindenesetre nem vonatkozik a Z8000-re, mert az nem kötődik mereven a multiprocesszor daisy-chain-hez, ez csupán Z busz definíció. A Z busz nem csupán összeköttetések halmaza, hanem helyenként némi dekódoló hardware-t is feltételez. Ez látható a buszjeleket vázlatosan bemutató 2.1-1. ábrán is.

2.1-1 ábra: Z busz

A Z busznak legalább 16 címvezetéke van, mely multiplexelve hordozza a 8/16 bites adatbuszt. (Memória címzésre legalább 16 vezetéket használ, I/O címzésére 16 vezetéket.) A címbusz vezetékeinek száma nem kötött, ha MNU egység van a rendszerben, akkor a címbusz 24 bites )16 Mbyte).
A Z buszon állapotjelek jelzik, hogy adat vagy programmemóriát címez a címbusz, vagy I/O egységet, illetve az átvitt adat 8 vagy 16 bites. Mivel az adatok és a címek egyazon 8, illetve 16 vezetéket használják, kiválasztó jeleket alkalmaznak. Az -AS jelzi, hogy a buszon cím van, a -DS jelzi, hogy a buszon adat van. (A 8085-ös multiplexelt busza csak az (ALE=AS) jelet ismeri.)
A Z busz tartalmaz egyéb vezérlő jeleket is, így:

R/-W - jelzi a címzett egység időkérését.
-RESET - a rendszer alapállapotba való hozása.
-CS - az egyes buszra csatlakozó elemeknek jelzi, hogy a címzés őket "szólította" meg. Ez a definiálás feltételezi, hogy a busz címdekóderekkel rendelkezik.
A busz vezérlését az egyes egységek elkérhetik egymástól, erre szolgálnak az alábbi jelek: (A szokásos buszkéréstől a buszkérés melletti daisy-chain-ban térnek el.)
-BUSREQ - jelzi, hogy valaki igényt tart a buszra.
-BUSACK - jelzi, hogy a busz vezérlését a CPU átengedi.
-BAI, -BAO - A buszt kérők közötti daisy-chain prioritásláncot valósít meg. (Lásd DMA)
A megszakításkéréssel összefüggő vonalak az alábbiak:
-INT - jelzi, hogy valamely egység megszakítást kér. Megjegyzendő, hogy a Z8000 háromféle IT-t különböztet meg: NMI (direkt IT), NVI (nem vektoros IT) és VI (vektoros IT).
-INTACK - jelzi, hogy a CPU a megszakításkérést elfogadta. Megjegyzendő, hogy ez a vonal feltételezi, hogy a busz rendelkezik egy dekódoló logikával, amely az állapotjelekből kialakítja az -INTACK jelet.
-IEI, IEO - az IT kérés daisy-chain-je. (A Z-80-as rendszernél megismerttel megegyezik.)
A Z busz több CPU-ra is felkészült, így az alábbi jelek a multiprocesszoros üzemre teszik a buszt alkalmassá:
- MMRQ - jelzi, hogy egy CPU igényt tart a buszra.
- MMST - jelzi az egységek felé az MMRQ állapotát.
-MMAI, -MMAO multi-mikroprocesszoros CPU- k daisy-chain jelei.

A Z buszra négyféle eszköz csatlakozhat: CPU, nem CPU típusú buszvezérlő (például DMA), I/O egység és memória. Az egyes egységek és a busz jelei közötti kapcsolatot a következő táblázat mutatja:

Jel
CPU
Vezérlő
Periféria
Memória
AD0-AD15
ADX
Állapot
R/-W
B/-W
-WAIT
-AS
-DS
-CS
-RESET
-BUSREQ
-BUSACK
-BAI
-BAO
-INT
-INTACK
-IEI
-IEO
-MMRQ
-MMST
-MMAI
-MMAO
B3
03
03
03
0
I
03
03
-
I
I
0
-
-
I
-
-
-
OK
I
I
O
B3
03
03
03
0
I
03
03
-
I
BK
-
I
O
-
-
-
-
-
-
-
-
B3
-
I
I
I
OK
I
I
I
I
-
-
-
-
OK
I
I
O
-
-
-
-
B3
I
-
I
I
OK
I
I
I
-
-
-
-
-
-
-
-
-
-
-
-
-

 

A táblázatban alkalmazott jelölések:
B = kétirányú kapcsolat
I = bemenet az egységbe
O = kimenet az egységből
K = nyitott kollektoros kimenet
3 = három állapotú busz

Az alábbiakban bemutatjuk a Z busz tipikus adatátviteli idődiagramjait. (2.l-3. ábra)


A Z busz adatátviteli idődiagramja

Minden átvitel az -AS jel megváltozásával indul. Az -AS jel felfutó élekor érvényes az állapot vonalakon az információ (ST0-ST3), mely az adatátvitel fajtáját határozza meg. A cím is ugyanekkor érvényes a címbuszon (AD0-AD15). Az adatátvitel, melynek irányát az R/-W; jelzi, a -DS jel hatására történik meg az adatbuszon (AD0-AD15).

2.2. Z8000 Központi egség

2.2.1. Általános ismertetés
A Z8000 mikroprocesszor család lelke a Z8000 központi egység. Ez az elnevezés több változat összefogó neve, ezek a következők: Z8001, Z8002, Z8003 és Z8004 CPU. Ezek nagy általánosságban megegyeznek, de a memóriakezelésben egymástól eltérnek: A Z8001 és Z8003 rendelkezik szegmens címzéssel, ezért kivezetéseinek száma 8-cal több (48 láb), a Z8002 és Z8004 szegmens címzésre nem képes. A Z8003 és Z8004 memória felügyelő egységet tartalmaz, a Z8001 és Z8002 nem, ezért ezekhez az MMU (memória felügyelő) áramkört lehet csatlakoztatni. Kiadványunkban a Z8001 és Z8002 típusjelű központi egységeket és a memória felügyelő egységet ismertetjük. A Z8003 és Z8004 központi egységek ezekből származtathatlak. A Z8001 és Z8002 mikroprocesszorokat együtt ismertetjük Z8000 megjelöléssel, csak ott jelezzük külön-külön a típusszámot, ahol a két változat egymástól eltér.
A Z8000-es CPU 16 bites processzor, 16 bites adatbuszszal rendelkezik. 16 bites utasításait 32 bites műveletek egészítik ki. 110 féle utasítása a különböző címzési módokkal és adattípusokkal kombinálva 414 különböző utasítást ad.
A központi egység blokkdiagramját a 2.2.1-1. ábrán mutatjuk be.

2.2.1-1 ábra: A Z8000 CPU blokkvázlata

A Z8000-es központi egység kétféle üzemmódban működik, az egyik a normál futás, a másik a "system" üzemmód. Ez utóbbi üzemmódban az operációs rendszer futásakor dolgozik a CPU. A központi egységnek vannak kiváltságos, úgynevezett "privilegizált" utasítása, melyek csak "system" üzemmódban hajthatók végre. Így a operációs rendszer és felhasználói programok elkülönülnek, sőt külön stack-kel rendelkezik a két CPU futási állapot. A CPU multiprocesszoros üzemben való részvételre is alkalmas.

A Z8001-es CPU 8 Mbyte memóriát tud címezni a szegmens címzési technikával, míg a Z8002-es csupán 64 Kbyte-ot. A CPU külön tudja kezelni a program, az adat-és a stack-memóriát. A futási állapot különböző voltát (system / normál) is kihasználva, a címezhető memória terület meghatszorozható, azaz 48 Mbyte-ra, illetve 384 Kbyte-ra növelhető. Ezek a számok elméletiek, mert a gyakorlatban ritkán használható ki egy 8 Mbyte-os stack. A Z8001-hez illeszthető a Z8010-es MMU (Memory Management Unit), amely a memória felügyeletét látja el. (2.2.1-2. ábra)


2.2.1-2 ábra: Z8001 kiegészítése MMU-val

A 16 bites központi egységhez az eddigi 8 bites memória és periféria illesztők csatlakoztatása nem oldható meg közvetlenül, így illesztésre van szükség, melyre a 2.2.1-3. és -4. ábrákon mutatunk be példát. A 2.2.1-4. ábrán bemutatott blokkvázlat vezérlő jel illesztő részét a 2.2.1-5. ábrán részletesebben is bemutatjuk. Ez a példa a Z busz és a Z-80 rendszer közötti illesztésre is felhasználható.


2.2.1-3. ábra: Mamória illesztése Z8000-hez

2.2.1-4 ábra: Z8000 rendszer Z-80 periféria illesztökkel
2.2.1-5 ábra: Vezérlő jel illesztő

2.2.2. Regiszterek
A Z8000 CPU belső felépítését a 2 .2.1-1. ábra mutatja. Látható, hogy a regiszterek fontos szerepet játszanak a CPU - ban: akkumulátorként, memória címzőként, indexregiszterként, stack pointerként és általános célú regiszterként lehet őket használni.

2.2.2-1 ábra: Z8001 regiszterei

Az egyes Z8000-es CPU változatok regiszter kiosztását a 2 .2.2-1. és a -2. ábrákon láthatjuk.

2.2.2-2 ábra: Z8002 regiszterei
2.2.2-3. ábra: Z8001 és Z8002 speciális regiszterei

Az ábrákról kitűnik, hogy a regiszterek címezhetők: byte-onként, szavanként (16 bit), hosszú szavanként (32 bit), és négyszeres szavanként (64 bit). A regiszterblokkban a címezhető regiszterek száma 16 (R0-R15) ezen kívül a Z8001-nél az R14 és R15 a "system" állapot céljaira duplázott, a Z8002 esetében csak az R15. Byte-onként csak a nyolc első regiszter érhető el, így 16 byte definiálható (RL0-RL7-RH0-RH7). Két-két regiszter együttesen ad egy hosszú regisztert, (RR0-RR14), így 8 hosszú regiszter definiálható. Egymás után következő négy regiszterrel alakítható ki a négyszeres regiszter, melyből 4 definiálható (RQ0-RQ12). Mint látható az összekapcsolt regiszterek esetén az elnevezést a legkisebb számú regiszterből származtatják, mely tartalmazza a legnagyobb helyértéket.
Az R0 regiszter speciális felhasználásra fenntartott, nem lehet indexregiszterként definiálni, ez a regiszter a címzési mód váltásakor használatos. Az összes regisztert használhatjuk akkumulátorként.
Az általános célú regiszterblokkon kívül a CPU tartalmaz egy speciális regiszterblokkot és egy frissítő regisztert. A speciális regiszterek számában eltérés van az egyes típusok-nál, a Z8001-ben öt, a Z8002-ben három 16 bites speciális regisztert találunk. Értelmezésük a 2.2.2-3. ábrán látható.
Az egyes bitek jelentése a következő:

C - átvitel (carry)
Z - nulla (zéro)
S - előjel S=1: negatív; S=2: pozitív
P/V

- paritás / túlcsordulás

DA - decimális aritmetika segédbitje
H

- rész-átvitel (half-carry)

NVIE - nem vektoros IT engedélyezése
VIE - vektoros IT engedélyezése
S/N - futási állapot jelzése (system / normál)
SEG

- szegmens címzési mód engedélyezése (csak Z8001-nél)

a SEG bitbe való 0 írásával a Z8001-es CPU-n a Z8002-re írt programok futtathatók, mivel ekkor a szegmens címzési mód tiltott.

2.2.3. A központi egység belső állapotai
A CPU állapotait az úgynevezett állapot vonalakon (status lines) közli. Ez a technológia hasonlít az i8085-ös S0, Sl vonalaihoz. Az egyes állapot bitek jelentése:

3 2 1 0 állapot
0
0
0
0
belső művelet
0
0
0
1
memória frissítés
0
0
1
0
I/O művelet
0
0
1
1
speciális I/O művelet
0
1
0
0
szegmens ugrás elfogadva
0
1
0
1
NMI elfogadva
0
1
1
0
NVI elfogadva
0
1
1
1
VI elfogadva
1
0
0
0
adatmemória művelet
1
0
0
0
stackmemória művelet
1
0
1
0
adatmemória művelet (EPU)
1
0
1
1
stackmemória művelet (EPU)
1
1
1
1
utasításmemória művelet
1
1
0
1
utasítás első szavának olvasása
1
1
1
0
külső processzor (EPU) művelet
1
1
1
1
fentartott

Az utasítások között van olyan utasítás (pl. DIV), amely a CPU belső egységeit (pl. ALU) hosszú ideig veszi igénybe. A tervezők úgy oldották meg a CPU szervezését, hogy ezen idő alatt a következő utasítás végrehajtását kezdje meg ha arra van mód. Z-80-nál a belső műveletek végzésekor történik a frissítés, a Z8000-nél erre egy külön állapot szolgál. Ezért tiltható le a frissítés, illetve adható meg a gyakorisága. Mivel nincs mindig frissítés, az átlapolt utasítás beolvasása jelentősen gyorsítja azok végrehajtását. Ezt nem mindig lehet megoldani, mert ugró utasítás esetében a következő utasítás még nem ismert, illetve amikor memória referenciás utasítás végrehajtása folyik nem lehet az utasításmemóriához hozzáférni.

A következő ábrákon a központi egység idődiagramjait mutatjuk be.
A 2.2.3-1. ábrán a memória hozzáférés látható. Az utasítás beolvasás és az adatolvasás ciklusa megegyező. A szegmens szám kiadása a memória cím kiadását egy órajel periódussal megelőzi, hogy az NMU a címátalakítást el tudja végezni.


2.2.3-1. ábra: Memória hozzáférés

A 2.2.3-2. ábrán a CPU és az I/O egységek közötti adatátvitel idődiagramját ismertetjük.


2.2.3-2. ábra: I/O hozzáférés

Az I/O hozzáférés hasonlatos a memória-hozzáféréshez, de itt a szegmens szám nem értelmezett, és a központi egység egy várakozó ciklust szúr be a T2 és T3 ciklusok közé. Természetesen WAIT hatására több várakozó ciklust iktat be a CPU. Az I/O cím 16 bites, és a címbuszon az -AS jel felfutó élekor mintavételezhető. A központi egység I/O utasítás esetén "system" állapotban van.
Belső művelet esetén nincs sem memória, sem I/O hozzáférés. Az -AS jel felfutásakor érvényes állapot információ belső műveletet jelez, a többi buszjel érdektelen. (2.2.3-3. ábra)


2.2.3-3. ábra: Belső művelet idődiagramja

A memória frissítés idődiagramját mutatja a 2.2.3-4 ábra (A frissítés vezérlését lásd a 2.2.5 fejezetben.)


2.2.3-4. ábra: memória frissítés

A buszkérés és a buszkérés elfogadás idődiagramját a 2 .2.3-5. ábrán mutatjuk be.


2.2.3-5 ábra: buszkérés és elfogadása

A -BUSRQ jel mintavételezését a CPU minden gépi ciklus első órajel felfutásakor végzi el. Ha a -BUSRQ jel aktív, ezt egy belső buszkérés-jelző regiszterben tárolja. A gépi ciklus befejezése után a CPU a buszt elengedi. A -BUSRQ jel inaktívvá válását az órajel felfutó élekor vett mintából érzékeli a CPU. Ennek hatására törli a belső BUSRQ flip-flopot, majd a -BUSAK jel logikai "1'"-be állításával jelzi, hogy a CPU a buszt újból vezérli. A buszvezérlő jelek a busz elengedés előtti állapotból indulnak.
A -STOP bemenet aktivizálásával a CPU megállítható. Ennek idődiagramja a 2.2.3-6. ábrán látható. Minden utasításkód olvasási ciklus utolsó lefutó órajelének hatására mintavételezi a -STOP bemenetet a CPU. STOP kérés esetén a CPU frissítő ciklusokat hajt végre.


2.2.3-6 ábra: megállás

2.2.4. Megszakításkezelés
A Z8000-nél a program futás megszakításakor a program állapotát jelző byte-ok (Z8001-nél 4 byte, a Z8002-nél 3 byte) a "program állapot terület"-re kerülnek. Ezt a PSAP (Program Status Area Pointer) jelöli ki. A PSAP-nak a programmemóriára kell mutatnia, mert a program állapot betöltése mindig program területről történik. Ez nem okoz problémát, ha a program és adatmemória megegyezik.
A program állapot terület nagysága Z8001-nél 570 byte, Z8002-nél 540 byte. A Z8001-nél a vektoros megszakításkérések ugró táblájában 4 byte-ot foglal egy vektorhoz tartozó cím, a Z8002-nél csak 2 byte-ot. A vektoros megszakításnál 8 bites IT vektor érkezik az adatbuszon, ennek kétszerezése után hozzáadódik a PSAP regiszter tartalmához, valamint ehhez hozzáadódik Z8001 esetén 60, Z8002 esetén 30.
Így alakul ki az IT vektorhoz tartozó megszakításkezelő rutin kezdőcímét tartalmazó mutató címe. A Z8001 esetén az IT vektor csak páros értékű lehet. Így a Z8001-nél csupán 128 vektor létezhet, míg a Z8002-nél 256 féle.
A Z8000-es megszakításkérései (a felsorolás a prioritássorrendet is tükrözi).
Legmagasabb rendű megszakításkérés:

Megszakítás esetén a programszámláló (PC), az állapot jelző szó (FCW) és a 16 bites azonosító kerül mentésre a stack-be. Az azonosító a megszakításkérés okát tartalmazza, azaz belső trap esetén a megszakítást leérő utasítás első szava, külső IT esetén a megszakítás elfogadásakor az adatbuszról beolvasott szó.
Megszakításkor a futó program állapotszavainak mentése után az új állapotszavak automatikusan betöltődnek a program állapot területről.

2.2.5. Memória frissítés
A frissítő regiszter (2.2.5-1. ábra) tartalmaz egy bitet (RE) amellyel engedélyezni, illetve tiltani lehet a frissítést. A frissítés frekvenciája egy hat-bites órajelelosztóval 1 lmsec és 64msec között állítható be (4 MHz órajelnél), így nem vesz el feleslegesen sok időt a processzortól. Megjegyzendő, hogy a Z-80-as CPU-hoz hasonlóan BUSAK állapotban a CPU nem tud frissítést végezni, ugyanígy a RESET állapotban sem. STOP üzem esetén a frissítés folyik, sőt az elosztót megkerülve frissítés állandóan folyik.


2.2.5-1 ábra: Frissítő regiszter

2.2.6. Együttműködés külső feldolgozó egységgel
A Z8000 mikroprocesszor érdekessége a külső processzor feltételezése. Ez azt jelenti, hogy a központi egységben nincs minden lehetséges utasításkód kombináció kihasználva, így a CPU utasítás készletét külső processzor(ok) segítségével kiterjeszthetjük. Ennek megfelelően az utasításkódok között speciális kódok állnak rendelkezésünkre, az utasítások kiterjesztésére:

0EH, 0FH, 4EH, 4FH, 8EH, 8FH

A külső utasítás végrehajtáshoz úgynevezett EPU-t (Extended Processing Unit) kell a rendszerbe illeszteni, ami az utasítások alapján elvégzi a megfelelő műveleteket (pl. speciális adatmozgatás, adattranszformáció, speciális aritmetikai műveletek, mátrix operációk, rendszervezérlés, hálózati kommunikáció stb.). Az előrejelzések szerint a Zilog cég lebegőpontos aritmetikai műveleteket végző EPU-t kíván kifejleszteni. Természetesen a felhasználási igényeknek megfelelően tetszőleges, nem csak gyári EPU illeszthető a rendszerbe, lehet az akár TTL logika segítségével megvalósított processzor, vagy lehet egy mikroprocesszoros alrendszer is.
A Z8000-es CPU az utasítást kiolvassa a memóriából, ha ez nem neki szól, hanem az EPU-nak és a CPU állapotregiszterében a megfelelő bit jelzi, hogy EPU üzem engedélyezett, akkor az utasítás, mint EPU utasítás értelmezett. Ha az EPU üzem nem engedélyezett, - mert a rendszerben nincs EPU realizálva a CPU egy "külső utasítás miatti megszakításkérés"-t hajt végre, és a megszakításkérést kezelő software leutánozza (emulálja) az utasítást - ha erre mód van.
A külső utasításoknak négy típusa lehetséges:

Ha EPU belső utasítás definiált, a Z8000 a következő utasítást kezdi végrehajtani, esetleg a két processzor párhuzamosan dolgozhat és egy következő EPU utasítás alkalmával adja vissza az EPU az eredményt. Ha a Z8000 EPU-val való párhuzamos program futtatása valamilyen okból hátrányos, akkor a Z8000-est az EPU a STOP vezetéken keresztül szinkronizálja.

2.2.7. A Z8000 indítása
A központi egység REST hatására nem a 0000-ás címről indítja a programot, mint az szokásos, hanem először alaphelyzetbe állítja a program állapotszavakat.
Z8001 esetében a 0002 címről beolvassa a "jelző és állapotszó"-t (FCW), a 0004-es címről a programszámláló programszámláló címet tartalmazó részét, majd a 0006-os címről beolvassa a programszámlálóba annak tartalmát (PC). Ezek után, a program az ott definiált helyről indul. (2.2.7-1. ábra)

2.2.7-1 ábra: RESET és CPU indítás idődiagramja (Z8001)

Z8002 esetén az FCW törlése szintén a 0002-es címről történik, de mivel a PC csak egy szavas, a 0004-es címről történő beolvasás után rögtön indulhat a program az ott definiált helyről.

2.2.8. A Z8001 és Z8002 kivezetései


2.2.8-1. ábra: a Z8001 és Z8002 kivezetései

AD0-AD15 Cím és adatbusz (ADDRESS / DATA)
Multiplexelt cím és adatvezetékek, kétirányú adatátvitelre.
-AS Címjelző (ADDRESS STROBE)
Felfutó éle jelzi, hogy az AD buszon érvényes cím van.
-DS Adatjelző (DATA STROBE)
Amíg a jel aktív, addig az AD buszon adatáramlás folyik.
R/-W Olvasás / Írás (READ / WRITE)
Az AD buszon az adatáramlás irányát jelzi, ha logikai "0", akkor a CPU ír adatot, ha logikai "1", akkor a CPU olvas.
B/-W Byte / szó (BYTE / WORD)
Az AD buszon áramló adatok típusát határozza meg. Ha logikai "1", akkor Byte, ha logikai "0", akkor Word (szó).
-MREQ Memória hozzáférési igény (MEMORY REQUEST)
Jelzi, hogy az AD buszon levő cím memóriára vonatkozik.
SN0-SN6 Szegmens szám (SEGMENT NUMBER)
A szegmens szám jelenik meg ezen a kimeneten (csak Z8001 esetében).
-SEGT Szegmens miatti megszakításkérés (SEGMENT TRAP)
Az MMU kér megszakítást ezen a vezetéken, amikor szegmenskezelési hibát észlel.
-WAIT Várakoztatás (WAIT)
Jelzi a CPU-nak, hogy a memória, illetve az I/O egység még nem kész az adat adására, illetve vételére.
N/-S Normál / "System" üzemmód (NORMAL / SYSTEM)
Jelzi a CPU futás állapotát, ha logikai "1", akkor normál üzemben fut, ha logikai "0", akkor system állapotban van.
-RESET Törlés (RESET)
A CPU törlésére és alaphelyzetbe való beállítására alkalmas bemenet. Hatására:
  • az AD busz nagy-impedanciás állapotba kerül,
  • -AS, -DS, -MREQ, -BUSAK, -M0 kivezetések logikai "1" szintre kerülnek,
  • -ST0-ST3 és SN0-SN6 kivezetések logikai "0" szintre kerülnek,
  • frissítés tiltott.
Amint a -RESET bemenet három órajel cikluson át inaktívvá válik, elkezdődik az alaphelyzetbe állítás.
CLK Rendszer órajel (SYSTEM CLOCK)
A Z-80 órajellel azonos szintű (nem TTL) egyfázisú órajel bemenete. Maximális frekvencia 4 MHz, minimális frekvencia 500 kHz.
STOP Megállás (STOP)
A CPU egy utasítás végrehajtása után megáll. Lépésenkénti utasításvégrehajtást tesz lehetővé, vagy EPU szinkronizációt.
-NMI Nem maszkolható megszakításkérés (NON MASKABLE IT)
Lefutó él hatására nem maszkolható megszakítás történik a CPU-ban.
-VI Vektoros megszakításkérés (VECTORED IT)
A logikai "0" szint vektoros megszakításkérést hoz létre.
-NVI Nem vektoros megszakításkérés (NON VECTORED IT)
A logikai "0" szint nem vektoros megszakításkérést hoz létre.
-BUSREQ Buszkérés ( BUS REQUEST )
A logikai "0" szint jelzi, hogy valamely külső egység igényt tart a CPU buszára.
-BUSAK Buszkérés elfogadása (BUS ACKNOWLEDGE)
Jelzi, hogy a CPU elfogadta a buszkérést, azaz minden kimenetét (a -BUSAK kivételével) nagy-impedanciás állapotba helyezte.
-MI, MO MULTI-MICRO be, MULTI-MICRO ki (MULTI MICRO IN, MULTI MICRO OUT)
A multiprocesszoros daisy-chain ki és bemenő jele.

2.3. A Z8000 programozása

2.3.1. Adattípusok
A Z8000 központi egység a következő adattípusokat ismeri:

A biteket lehet beállítani, törölni és értéküket lekérdezni. A BCD digitek a BCD aritmetikai műveleteknél alkalmazhatók. A byte-os adatformátum, karakterek vagy kis értékű adatok (+/- 127) tárolásánál fordulhat elő. Szavakban nem szegmentált utasításokat és változókat (+/- 32767) tárolhatunk, míg a hosszú szavak nagy értékű adatokat (+/- 2147483647), illetve szegmentált utasításokat tárolhatnak. A szövegsorokat kivéve, bármely adattípus vonatkozhat regiszterre és memóriára egyaránt. Szövegsor csak memóriában definiálható.
A különböző adattípusok memóriában való elhelyezkedését a 11.3.1-1. ábrán mutatjuk be.


2.3.1-1 ábra: adatok elhelyezkedése a memóriában

Az ábrán látható, hogy a kisebb címen van a legnagyobb helyértékű byte és az adat legnagyobb című byte-ja a legkisebb helyértékű. Címezni mindig a legkisebb címűt kell, azaz a legnagyobb helyi értékű byte-ra mutat a cím.

2.3.2. Címzési módok
A Z8001 szegmens címzési módot ismer:
A memória 64 Kbyte-os szegmensekre van felosztva, mely szegmensekből mindig egy szegmens érvényes, az adott időpontban. A 16 bites cím, mely a 64 Kbyte-ot címzi, felfogható offszet címnek, mely a szegmens kezdetétől való távolságot jelenti, a 7 bites szegmens cím pedig ezt a kezdőpontot állítja be. Ezzel a technológiával egyszerűen oldható meg több program futtatása, csupán más-más szegmensbe kell őket helyezni, és máris nem tudnak egymásról.
Ebben a szemléletben beszélhetünk logikai címről, és fizikai címről. A program a logikai címet használja és a szegmens cím hozzáadásával keletkezik a fizikai cím. Ha alkalmazzuk a Z8010 MMU-t (Memory Management Unit), a fizikai cím előállítása bonyolultabbá válik, de dinamikusabb memória felosztást tesz lehetővé. A transzformáció elve a 2.4.1-1. ábrán látható. Az ábráról leolvasható, hogy a 16 bites offszet cím alsó fele marad változatlanul, ami egy lap címzését adja meg (256 byte). Az MMU-ban a szegmensek lapokból állnak, illetve egy szegmens állhat minimum egy lapból (256 byte) és maximum 256 lapból (64 Kbyte).

Az utasításokban alkalmazható címzési módok:

A címzési módokat a jobb áttekinthetőség végett a 2.3.2-1. ábrán sematikusan is bemutatjuk.


2.3.2-1. ábra: címzési módok

2.3.3. Utasítás típusok
A Z8000 utasításai szó formátumúak. Lehetséges egy, két, három és négyszavas utasítás.

Töltő utasítások

CLR
EX
LD
LDM
PUSH, POP
törli az operandust
bit operandus tartalmát törli
az egyik operandusból a másikba tölt
az LD n-szeres ismétlése

Aritmetikai utasítások

ADC, ADD
SBC, SUB
DEC, INC
CP
DAB
DIV
MULT
EXTS
NEG
összeadás Carry-vel vagy anélkül
kivonás Carry-vel vagy anélkül
n-nel való csökkentés, illetve növelés
összehasonlítás
BCD helyreállítás
osztás
szorzás
előjel áthelyezés
negálás (0 - operandus)

Logikai műveletek

AND
OR
XOR
COM
TEST
TCC
és
vagy
kizáró vagy
komplementálás
operadus vagy 0
feltétel vizsgálat

Bit műveletek

BIT
RES
SET
TEST
bit vizsgálat
bit törlés
beállítás
bit vizsgálat és beállítás

Eltolások

RL, RR
RLC, RRC
SLA, SRA
SLL, SRR
eltolás balra, jobbra
eltolás balra, jobbra Carry-n át
eltolás balra, jobbra aritmetikailag n -szer
eltolás balra, jobbra logikailag n-szer

Blokkos műveletek

CP
LD
TR
TRT
byte(ok), szövegsorok összehasonlítása
blokk áttöltés
táblázatos karakter konvertálás
táblázatos karakter konvertálás és ellenőrzés

Ugrások és hívások

JP
JR
DJNZ
CALL
CALR
RET
IRET
SC
feltételes ugrás
feltételes relatív ugrás
cikluszáró relatív ugrás
szubrutinhívás
relatív szubrutinhívás
visszatérés szubrutinból
IRET visszatérés IT rutinból
rendszer hívás

I/O műveletek

IN
INR
OUT
OUTR
beolvasás
blokkos beolvasás
blokkos kivitel
blokkos kivitel
és a fenti I/O műveletek az MMU számára (speciális I/O).
Az I/O műveletek mind privilegizált utasítások.

CPU vezérlő utasítások

RESFLG
COMFLG
SETFLG
DI, EI
HALT
LDCTL
LDCTLB
LDPS
MBIT
MREQ
MRES
MSET
jelzőbit törlés
jelzőbit komplementálás
jelzőbit beállítás
megszakítás vezérlés
megállítás
vezérlő regiszter töltés és kiolvasás
jelző regiszter töltés és kiolvasás
program állapot töltés
MI tesztelés
multi-mikro kérés
MO:=1
MO:=0

2.3.4. Utasítások ismertetése
Az utasításokat részletesen az alábbiakban ismertetjük. Az utasításokat alfabetikus sorrendben adjuk meg, első sorban a mnemonik áll az operandusokkal, a második sorban adjuk, hogy a művelet byteos (B), szavas (W), illetve hosszú szavas (L), és felsoroljuk az értelmezett címzési módokat (ismertetésük a 2.3.2. fejezetben). Végül ismertetjük az utasítás funkcióját.
Az alkalmazott rövidítések:

OP1
OP2
IB
R
RH
RX
RY
n
cc
S
PS
ITK
CTLR
IR1
IR2
= operandus 1 / memória vagy I/ O
= operandus 2 / memória vagy I/ O
= jelzőbitek
= regiszter
= RH regiszter (RH0 - RH7)
= regiszter
= regiszter
= adattípusnak megfelelő szám
= állapot jelzőbitek kombinációja
= előjel (jelzőbit)
= program állapot
= megszakításkérési okok kombinációja (NVI, VI)
= vezérlő regiszter
= OP1 címét jelzi
= OP2 címét jelzi
ADC R,OP1  
  B, W R
  R := R+OP1+CY

 
ADD R,OP1  
  B, W, L R, IM, IR, DA, X
  R := R+OP1

 
AND R,OP1  
  B, W, L R, IM, IR, DA, X
  R := R logikai ÉS OP1

 
BIT OP1,b  
  B, W R, IR, DA, X
  Z := -(OP1 b-edik bitje)

 
BIT OP1,R  
  B, W R
  Z := -(OP1 R-ben címzett bitje)

CALL OP1  
  - IR, DA, X
  SP := SP-
(SP) := PC
PC := OP1

 
CALLR OP1  
  - RA
  SP := SP-
(SP) := PC
PC := PC+OP1
(-4094 <= OP1 <= 4096)

CLR OP1  
  B, W R, IR, DA, X
  OP1 := 0

 
COM OP1  
  B, W R, IR, DA, X
  OP1 := -OP1

 
COMFLG IB  
  - -
  IB := -IB

 
CP R, OP1  
  B, W, L R, IM, IR, DA, X
  R-OP1

 
CP OP1,n  
  B, W IR, DA, X
  OP1-n

 
CPD RX,OP1,RY  
  B, W IR
  RX-OP1
IR := IR-
RY := RY-1

 
CPDR RX,OP1,RY,CC  
  B, W IR
  RY-OP1
IR := IR-
RY := RY-1
utasítás ismétlés amíg CC= igaz és R <> 0

CPI RX, OP1, RY  
  B, W IR
  RX-OP1
IR := IR+
RY := RY-1

 
CPIR RX,OP1,RY,CC  
  B, W IR
  RY-OP1
IR := IR+
RY := RY-1
utasítás ismétlés, amíg cc = igaz és RY <> 0

CPSD OP1,OP2,R  
  B, W IR
  OP1-OP2
IR1 := IR1-
IR2 := IR2-
R := R-1

 
CPSDR OP1,OP2,R,CC  
  B, W IR
  OP1-OP2
IR1 := IR1-
IR2 := IR2-
R := R-1
utasítás ismétlés, amíg cc = igaz és R <> 0

CPSI OP1,OP2,R  
  B, W IR
  OP1-OP2
IR1 := IR1+
IR2 := IR2+
R := R-1

 
CPSIR OP1,OP2,R,CC  
  B, W IR
  OP1-OP2
IR1 := IR1+
IR2 := IR2+
R := R-1
utasítás ismétlés, amíg cc = igaz és R <> 0

DAB OP1  
  B R
  OP1 decimális helyreállítása

DEC OP1,n  
  B, W R, IR, DA, X
  OP1 := OP1-n
(1 <= n <= 16)

 
DI ITK  
  - -
  ITK megszakításkérés tiltása

DIV R,OP1  
  W, L R, IM, IR, DA, X
  R := R/OP1

 
DJNZ R,OP1  
  B, W RA
  R := R-1
PC := PC+OP1, ha R <>0
(-254 <= OP1 <=0)

EI ITK *
  - -
  ITK megszakításkérés engedélyezése

EX R,OP1  
  B, W R, IR, DA, X
  R csere OP1

 
EXTS OP1  
  B, W, L R
  Előjel kiterjesztés MSB-ig.

HALT   *
  - -
  megállás

 
IN R,OP1 *
  B, W IR, DA
  R := OP1

 
INC OP1,n  
  B, W R, IR, DA, X
  OP1 := OP1+n
(1 <= n <= 16)

 
IND OP1,OP2,R  
  B, W IR
  OP1 := OP2
IR1 := IR1-
R := R-1

 
INDR OP1,OP2,R *
  B, W IR
  OP1 := OP2
IR1 := IR1-
R := R-1
utasítás ismétlés, amíg R <>0
INI OP1,OP2,R *
  B, W IR
  OP1 := OP2
IR1 := IR1+
R := R-1
 
INIR OP1,OP2,R *
  B, W IR
  OP1 := OP2
IR1 := IR1+
R := R-1
utasítás ismétlés, amíg R <>0

IRET   *
  - -
  PS := (SP)
SP := SP+

 
JP cc,OP1  
  - -
  PC := OP1, ha cc = igaz

JR cc,OP1  
  - -
  PC := PC+OP1, ha cc = igaz
(-256 <= OP1 <= 254)

LD R,OP1  
  B, W, L R, IM, IR, DA, X, BA, BY
  R := OP1

 
LD OP1,R  
  B, W, L IR, DA, X, BA, BX
  OP1 := R

 
LD OP1,n  
  B, W IR, DA, IX
  OP1 := n

 
LDA R,OP1  
  W DA, X, BA, BX
  R := OP1 címe

 
LDAR R,OP1  
  B RA
  R := OP1 relatív címe

LDCTL CTLR,OP1 *
  W R
  CTLR := OP1

 
LDCTL OP1,CTLR *
  W R
  OP1 := CTLR

 
LDCTLB IB,OP1  
  B R
  IB := OP1

 
LDCTLB OP1,IB  
  B R
  OP1 := IB

 
LDD OP1,OP2,R  
  B, W IR
  OP1 := OP2
IR1 := IR1-
IR2 := IR2-
R := R-1

 
LDDR OP1,OP2,R  
  B, W IR
  OP1 := OP2
IR1 := IR1-
IR2 := IR2-
R := R-1
utasítás ismétlés, amíg R <> 0

LDI OP1,OP2,R  
  B, W IR
  OP1 := OP2
IR1 := IR1+
IR2 := IR2+
R := R-1

 
LDIR OP1,OP2,R  
  B, W IR
  OP1 := OP2
IR1 := IR1+
IR2 := IR2+
R := R-1
utasítás ismétlés, amíg R <> 0

LDK R,n  
  B IM
  R := n
(0 <= n <= 15)

 
LDM R,OP1,n  
  W IR, DA, X
  R := OP1
ismétlés n-szer, egymás utáni operandusokkal

LDM OP1,R,n  
  W IR, DA, X
  OP1 := R
ismétlés n-szer, egymás utáni operandusokkal

LDR R,OP1  
  B, W, L RA
  R := OP1

 
MBIT   *
  - -
  S := -MI

 
MREQ OP1 *
  - -
  multi-mikro kérés

 
MRES   *
  - -
  M0 := 0

 
MSET   *
  - -
  M0 := 1

 
MULT R,OP1  
  W, L R, IM, IR, DA, X
  R := R*OP1

 
NEG OP1  
  B, W R, IR, DA, X
  OP1 := -OP1  
NOP    
  - -
  nincs műveletvégzés

OR R,OP1  
  B, W R, IM, IR, DA, X
  R := logikai VAGY OP1

OUT OP1,R  
  B, W IR, DA
  OP1 := R

 
OUTD OP1,OP2,R  
  B, W IR
  OP1 := OP2
IR2 := IR2-
R := R-1

 
OUTDR OP1, OP2,R  
  OP1 := OP2
IR2 := IR2-
R := R-1
utasítás ismétlés, amíg R <> 0

OUTI OP1,OP2,R  
  B, W IR
  OP1 := OP2
IR2 := IR2+
R := R-1

 
OUTIR OP1,OP2,R  
  B,W IR
  OP1 :=OP2
IR2 := IR2+
R := R-1
utasítás ismétlés, amíg R <> 0
POP OP1,R  
  W, L R, IR, DA, X
  OP1 := IR
R := R+

 
PUSH IR,OP1  
  W, L R, IH, IR, DA, X
  R := R-
IR := OP1
 
RES OP1,b  
  B, W R, IR, DA, X
  OP1 b-edik bitje := 0

RES OP1,R  
  B, W R
  OP1 R-ben címzett bitje := 0

RESFLG IB  
  - -
  IB := 0

 
RET cc  
  - -
  ha cc = igaz, akkor:
PC := (SP)
SP := SP+

 
RL OP1,n  
  B, W R
  OP1 eltolása balra n-szer

RLC OP1,n  
  B, W R
  OP1 eltolása balra n-szer CY-n át

RLDB R,OP1  
  B R
  BCD digit eltolása balra

RR OP1,n  
  B, W R
  OP1 eltolása jobbra n-szer

RRC OP1,n  
  B, W R
  OP1 eltolása jobbra n-szer CY-n át

RRDB R,OP1  
  B R
  BCD digit eltolása jobbra

SBC R,OP1  
  B, W R
  R := R-OP1-CY

 
SC OP1  
  B IM
  rendszer hívás:
SP := SP-
(SP) :=PS
IR := OP1
IR := IR-
PS := rendszer hívásai PS
SDA OP1,R  
  B, W, L R
  OP1 aritmetikai eltolása R-ben adott módon

SDL OP1,R  
  B, W, L R
  OP1 logikai eltolása R-ben adott módon

SET OP1,b  
  B, W R, IR, DA, X
  OP1 b-edik bitje := 1

SET OP1,R  
  B, W R
  OP1 R-ben definiált bitje := 1

SETFLG IB  
  - -
  IB := 1

 
SIN R,OP1  
  B, W DA
  R := OP1

 
SIND OP1,OP2,R  
  B, W IR
  OP1 := OP2
IR1 := IR1-
R := R-1

 
SINDR OP1,OP2,R  
  B, W IR
  OP1 := OP2
IR1 := IR1-
R := R-1
utasítás ismétlése, amíg R <> 0

SINI OP1,OP2,R  
  B, W IR
  OP1 := OP2
IR1 := IR1+
R := R-1

 
SINIR OP1,OP2,R  
  B, W IR
  OP1 := OP2
IR1 := IR1+
R := R-1
utasítás ismétlése, amíg R <> 0

SLA OP1,n  
  B, W, L R
  OP1 aritmetikai eltolása balra n-szer

SLL OP1,n  
  B, W, L R
  OP1 logikai eltolása balra n-szer

SOUT OP1,OP2  
  B, W DA
  OP1 := OP2

 
SOUTD OP1,OP2,R  
  B, W IR
  OP1 := OP2
IR2 := IR2-
R := R-1

 
SOUTDR OP1,OP2,R  
  B, W IR
  OP1 := OP2
IR2 := IR2-
R := R-1
utasítás ismétlése, amíg R <> 0

SOUTI OP1,OP2,R  
  B, W IR
  OP1 := OP2
IR2 := IR2+
R := R-1

 
SOUTIR OP1,OP2,R  
  B, W IR
  OP1 := OP2
IR2 := IR2+
R := R-1
utasítás ismétlése, amíg R <> 0
SRA OP1,n  
  B, W, L R
  OP1 aritmetikai eltolása jobbra n-szer

SRL OP1,n  
  B, W, L R
  OP1 logikai eltolása jobbra n-szer

SUB R, OP1  
  B, W, L R, IM, IR, DA, X
  R := R-OP1

 
TCC cc, OP1  
  B, W R
  OP1 LSB-je := 1, ha cc = igaz

TEST OP1  
  B, W, L R, IR, DA, X
  OP1 logikai VAGY 0

 
TRDB OP1,OP2,R  
  B IR
  OP1 := OP2(OP1)
IR1 := IR1-
R := R-1

 
TRDRB OP1,OP2,R  
  B IR
  OP1 := OP2(OP1)
IR1 := IR1-
R := R-1
utasítás ismétlése, amíg R <> 0

TRIB OP1,OP2,R  
  B IR
  OP1 := OP2(OP1)
IR1 := IR1+
R := R-1

 
TRIRB OP1,OP2,R  
  B IR
  OP1 := OP2(OP1)
IR1 := IR1+
R := R-1
utasítás ismétlése, amíg R <>0

TRTDB OP1,OP2,R  
  B IR
  RH1 := OP2(OP1)
IR1 := IR1-
R := R-1

 
TRTDRB OP1,OP2,R  
  B IR
  RH1 := OP2(OP1)
IR1 := IR1-
R := R-1
utasítás ismétlése, amíg R <>0 és RH1 <>0

TRTIB OP1,OP2,R  
  B IR
  RH1 := OP2(OP1)
IR1 := IR1-
R := R-1

 
TRTIRB OP1,OP2,R  
  B IR
  RH1 := OP2(OP1)
IR1 := IR1+
R := R-1
utasítás ismétlése, amíg R <> 0 és RH <> 0

TSET OP1  
  B, W R, IR, DA, X
  S := OP1 MSB-je
OP1 összes bitje := 1

XOR R,OP1  
  B, W R, IM, IR, DA, X
  R := R logikai kizáró VAGY OP1

2.4. Memória felügyelő egység (MMU)

2.4.1. Általános ismertetés
A memória felügyelő egység a Z8001 CPU-val együttműködve felügyel a memória kezelésre, a CPU által adott logikai címekből a szegmens táblázat alapján előállítja a fizikai címeket. A szegmens táblázat 64 különböző szegmenet tud nyilvántartani. Ezen szegmensek illegális hozzáférés, illetve átírás ellen védhetőek.
Minden szegmens 1-256 lapból áll, egy lap 256 byte - os, így tároló-kapacitása 256 byte - tól 64 Kbyte-ig terjedhet (256 byte-os lépcsőkben) . Ha a 64 szegmens a rendszerben kevésnek bizonyul, több MMU-t lehet alkalmazni, a közvetlenül címezhető szegmensek a rendszerben alkalmazott MMU-k számának a 64-szerese. Az MMU 16 Mbyte-os memóriát tud címezni, mert a 23 bites logikai címet 24 bites fizikai címmé alakítja. A logikai fizikai átalakítás menetét a 2.4.1-1. ábra mutatja.


2.4.1-1 ábra: Címátalakítás az MMU-ban

Ezután az MMU blokkvázlata könnyen érthető. (2.4.1-2. ábra)


2.4.1-2. ábra: az MMU blokkvázlata

2.4.2. Regiszterek

Szegmens leíró regiszterek:
Mind a 64 blokkhoz tartozik egy szegmens leíró terület, amely tartalmazza a 16 bites báziscímet, a 8 bites lapszámot és a 8 bites szegmens jellemzőt. A szegmens jellemző byte a következő információkat tartalmazza:

RD CSAK OLVASHATÓ (READ-ONLY)
ha a bit=1 írásvédelem van
SYS CSAK RENDSZERNEK (SYSTEM-ONLY)
ha a bit=1 csak a system üzemben hozzáférhető
CPU CPU TILTÁS (CPU INHIBIT)
ha a bit= 1 a CPU nem férhet a szegmenshez csak a DMA
EXC CSAK UTASÍTÁSKÉNT (EXECUTE ONLY)
ha a bit=1 csak az utasítás beolvasási ciklus (fetch) férhet a szegmenshez
DMAI DMA TILTÁS (DMA INHIBIT)
ha a bit= 1 a DMA nem férhet a szegmenshez, csak a CPU
DIRW FIGYELMEZTETÉS (DIRECTION AND WARNING)
ha a bit=1 a szegmens legutolsó lapjára történő íráskor figyelmeztető jelzést ad (szegmens trap)
CHG MEGVÁLTOZOTT (CHANGED)
ha a bit=1, szegmensre írás történt
REF HOZZÁFÉRÉS VOLT (REFERENCED)
ha a bit=1, akkor jelzi, hogy a szegmenshez volt hozzáférés.

Vezérlő regiszterek:
Az MMU vezérlésére szolgálnak ezek a CPU átal hozzáférhető regiszterek (MDR, SAR, DSCR) (2.4.2-1. ábra).


2.4.2-1. ábra: Vezérlő regiszterek

ID AZONOSÍTÓ (IDENTIFICATION FIELD)
Az MMU címét tartalmazza (több MMU esetén).
NMS
NORMÁL ÜZEMMÓD (NORMAL MODE SELECT)
Ha több MMU üzemel, lehet az egyiket a system üzemben, a másikat normál üzemben igénybe venni. Ez a bit választja ki, hogy az MMU melyik üzemanódban legyen aktív.
MST TÖBB MMU VAN (MULTIPLE SEGMENT TABLE)
Ha a bit=1 az MMU-nak figyelnie kell az N/S kivezetéseket az NMS bit beállítása alapján.
URS
KIVÁLASZTÁS (UPPER RANGE SELECT)
Az MMU a szegmensszám MSB-jét és az URS bitet hasonlítja össze, ha megegyeznek, az MMU elvégzi a címkonvertálást, ha nem, nagy-impedanciás állapotban vannak a kimenetei.
TRNS
CÍMÁTALAKITÁS (TRANSLATE)
A bit jelzi, hogy az MMU-nak címátalakítást kell-e végezni, vagy a logikai cím megegyezik a fizikai címmel. (Ez utóbbi esetben az MMU által kiadott cím MSB-je 0, azaz az alsó 8 Mbyte-ot címzi.)
MSEN TILTÁS (MASTER ENABLE)
Az MMU művelet felfüggesztésére szolgál, ha a bit=0 az MMU kimenetei nagy-impedanciás állapotban vannak.

A SAR regiszterben a 64 szegmens leíró kiválasztására szolgáló cím (SDN) található. A szegmens leírón belüli regiszter kiválasztására a DSCR regiszterben levő 2 bites DSC szolgál.

Állapotregiszterek
Hat darab egyenként 8 bites regiszter tartalmazza az MMU információit, főleg amelyek a memória hozzáférési hibák esetén fontosak (VTR, VSN, VOFF, BSR, ISN, IOFF) (2.4.2-2. ábra).


2.4.2-2 ábra: Állapot regiszterek

RDV ÍRÁSVÉDELEM SÉRTÉS (READ ONLY VIOLATION)
Í rási k í sérlet írásvédett szegmensre.
SYSU SYSTEM VÉDELEM SÉRTÉS (SYSTEM VIOLATION)
A CPU normál módban akart hozzáférni a szegmenshez.
CPUIV CPU TILTÁS SÉRTÉS (CPU INHIBIT VIOLATION)
A tiltott szegmenshez akart a CPU hozzáférni.
EXCV UTASÍTÁSVÉDELEM SÉRTÉS (EXECUTE ONLY VIOLATION)
A CPU az utasítás szegmenshez nemcsak utasításbevételi ciklusban akart hozzáférni.
SLV TÚLCSORDULÁS (SEGMENT LENGHT VIOLATION)
Szegmens túlcsordulás.
PWW FIGYELMEZTETÉS (PRIMARY WRITE WARNING)
Ha a DIRW=1 és írás történik a szegmens utolsó lapján.
SWW FIGYELMEZTETÉS (SECONDARY WRITE WARNING)
Ha a DIRW= 1 és a CPU system módban a stack utolsó lapjára kezd írni (stack túlcsordulás várható).
FATL TÖBBSZÖRÖS HIBA (FATAL CONDITION)
A bit=1, ha valamelyik memória sértést jelző bit értéke már logikai "1" és újabb sértési kísérlet történik, vagy írás-figyelmeztető jelzés érkezik. Ez azt jelzi, hogy a memória védelmi trap rutinban újabb hiba volt.

A VSN és WOFF regiszterekben definiált SN (szegmens szám) és UPOFF (felső offszet) jelzi, hogy milyen logikai című lapon történt a memóriavédelem megsértése. Az ISN és IOFF regiszterek a memóriasértési kísérlet előtti utolsó utasítás lapcímét tartalmazzák. A BSR-ben azt a busz állapotot (N/S jel, R/W jel, és az állapotkód ST3-ST0) találjuk, ami a memóriasértési kísérlet időpontjában volt.
Ha az MMU memóriavédelem sértését észleli a SEGT vonalon Szegmens Trap-ot kér a CPU-tól és a SUP kivezetésen jelzi a memóriának, hogy a most futó ciklus memóriavédelmet sért. A memória ezzel a jellel védhető. Amennyiben a memóriavédelmi sértés DMA ciklusban történt, a Szegmens Trap kérése elmarad, mert a CPU azt nem tudná végrehajtani, mivel átadta a busz vezérlését. Ez esetben csak a SUP (SUPPRESS) jel kiadása történik meg.

A Z8001-es CPU az MMU-val együttműködve virtuális memória kezelésére is képes. Ez az üzemmód nem alapszolgáltatása a CPU-nak és az MMU-nak, de egy kis módosítással megoldható. Azt a szegmenet, amelyet nem a memóriában helyezünk el, CPU TILTÁS védelemmel kell ellátni. Amikor a Z8001-es hozzá akar férni ehhez a szegmenshez, akkor az MMU Szegmens Trap-ot kér. Ez jelzi, hogy biztosítani kell a háttértár elérését.

2.4.3. Az áramkör kivezetéseinek értelmezése

AD8-AD15 Cím- / Adatbusz (ADDRESS / DATA BUS)
Az MMU a logikai címet és az egyes utasításokat a címbuszon kapja, illetve az adatbuszon tud válaszolni.
-AS Cím kapuzójel (ADDRESS STROBE)
Jelzi, hogy az AD buszon érvényes cím van, valamint az ST0-ST3, R/W és N/S vonalakon értékes jel található.
-DS Adat kapuzójel (DATA STROBE)
Jelzi, hogy az AD buszon érvényes adat van.
-CS Kiválasztás (CHIP SELECT)
Jelzi, hogy az MMU-hoz parancs érkezik.
CLK Rendszer órajel (SYSTEM CLOCK)
Nem TTL szintű egyfázisú órajel bemenete.
N/-S Normál / System üzemmód (NORMAL / SYSTEM MODE)
Jelzi, hogy a CPU vagy a DMA Normál vagy System üzemmódban dolgozik.
R/-W Olvasás / Írás (READ/ WRITE)
Jelzi az AD buszon az adatáramlás irányát.
-RESET Törlés (RESET)
Az MMU törlésére szolgál.
DMASYNC DMA / szegmensszám szinkronizálás (DMA / SEGMENT NUMBER SYNCHRONISATION STROBE)
Jelzi, hogy DMA (logikai "0") vagy CPU ciklus (logikai "1") megy végbe.
SN0/SN6 Szegmensszám (SEGMENS NUMBER)
Szegmens szám, az SN0-SN5 vezetékek, az MMU-nál definiált 64 szegmens kiválasztására szolgálnak, az SN6 az MMU kiválasztására használható.
ST0-ST3 Állapot (STATUS)
A CPU status vonalai csatlakoznak ide. Jelentésük az ott leírtakkal megegyezik.
-SUP Memória figyelmeztetés (SUPRESS)
Jelzi a memóriának, hogy memóriavédelem sértés történik a futó ciklusban. Ezzel a jellel tiltható a memória.
-SEGT Szegmens trap kérés (SEGMENT TRAP REQUEST)
Ezen a vezetéken az MMU szegmens trap-ot kér a CPU-tól, amikor memóriavédelem sértést észlel, illetve amikor figyelmeztetést ad.
A8-A23 Memória címbusz (ADDRESS BUS)
Az MMU ezeken a vonalakon adja ki a fizikai cím felső 16 bitjét.
DECOUPLE Visszacsatolás mentesítés (DECOUPLE)
Az MMU-ban levő, negatív feszültséget előállító generátor visszacsatolását lehet az ide kapcsolt kondenzátorral megszüntetni.

2.4.4. Programozás
Az MtdIU speciális I/O utasításokkal elérhető. Ezeket az MMU az AD8-15 vonalon kapja, mert az adatátvitelnél szokásos AD0-7 vonalak az MMU-ba nincsenek bekötve. Az MMU a válaszokat szintén az AD8-15 vonalon adja. A SAR automatikus címnövelő szolgáltatása révén a speciális I/O-k között is megtalálható blokkos átvitellel könnyen tudjuk az MMU regisztereit feltölteni, vagy kiolvasni.
A vezérlő regiszterek elérésére szolgáló utasítások (írás és olvasás):

Utasítás Funkció
00H MDR (MODE regiszter) elérése
01H SAR (szegmens címregiszter) elérése
20H DSCR (szegmens leíró + címző regiszter) elérése

A szegmens leírót ellenőrző parancsok:
Utasítás Funkció
08H bázis címmező elérése
09H lapszám mező elérése
0AH szegmens jellemzők mezejének elérése
0BH szegmens leíró minden mezejének elérése
0CH bázis címmező elérése (R/W); SAR növelése
0DH lapszám elérése (R/W); SAR növelése
0EH szegmens jellemzők mezejének elérése; SAR növelése
0FH szegmens leíró minden mezejének elérése; SAR növelése
ezen belül csak író utasítások:
15H az összes CPU Inhibit bit " 1 "-be állítása
16H az összes DMA Inhibit bit " 1 "-be állítása
Állapotregisztereket csak olvasni lehet:
02H (VTR) sértéstípus szerinti regiszter olvasása
03H (VSNR) sértésszegmens-szám regiszter olvasása
04H (VOFF) sértés-offszet regiszter olvasása
05H (BSR) busz állapotregiszter olvasása
06H (ISN) utasításszegmens-szám olvasása
07H (IOFF) utasítás-offszet olvasása
Törlő utasítások:
11H sértéstípus (VTR) regiszter törlése
13H SWW bit törlése a VTR regiszterben
14H PATL bit törlése a VTR regiszterben

2.4.5. Rendszerbe illesztés
Az MMU áramkörök aránylag kevés segédáramkör alkalmazásával illeszthetők a központi egységhez. Az első példán (2.4.5-1. ábra) két MMU illesztés látható. A CNTL vezetékek között futó S/N vezetékkel a két MMU különválasztható: az egyik a system üzemmód esetén módosítja a logikai címeket, a másik csak a felhasználói (normál) üzemmódban. Sok felhasználós multiprogramozás esetén két MMU kevésnek bizonyulhat. A második példa több (hét) memória felügyelő egység rendszerbe illesztését mutatja. (2.4.5-2. ábra)
Végül az MMU idődiagramjait mutatjuk be a 2.4.5-3, -4, -5. ábrákon.

2.4.5-1. ábra: Két MMU rendszerbe illesztése
2.4.5-2. ábra: Több MMU rendszerbe illesztése


2.4.5-3 ábra: Memória olvasás idődiagramja


2.4.5-4. ábra: Memória írás idődiagramja


2.4.5-5. ábra: CPU-MMU kommunikáció

III. Rész: Z8

3.1. Bevezetés
A Z8 áramkör a Zilog gyár egy chipes számítógépe. A Z8 MCU-t két változatban állítják elő: Z8601 néven 40 lábú 2K-s maszk programozott MCU-t, Z8602 néven ennek 64 lábú külső program fogadására alkalmas változatát és Z8603 néven az előző kettő házasítása egy EPROM foglalattal: a 40 lábú tokon levő foglalatba a belső 2K-s maszk PROM helyett egy külső 2K-s EPROM csatlakozhat az MCU-hoz. A Z8611, Z8612, Z8613 az előzőek 3K-s változatai. A Z8681 a Z8601 ROM nélküli változata. Az 1. port a multiplexelt cím és adatbusz. Megjelenésekor hazai alkalmazására nem volt sok remény, mivel maszk programozású. Kicsi a valószínűsége, hogy pl. 1000 darabos tételben rendeljünk a Zilog cégtől maszk programozott Z8 mikrogépet. A fejlesztéshez kialakított Z8602 vagy Z8603 ("Z8 Protopack Emulator") beszerzésére sem vállalkoztak sokan. Az irodalom is igen szegényes, ami hazánkban fellelhető. Az ismertetést az indokolja, hogy az NDK-beli RFT cég a Z80 mellett a Z8-at is gyártja 40 és 64 kivezetékes változatban, illetve létezik az emuláláshoz megfelelő NDK gyártmányú eszköz.
A Z8 tervezői egy igen sokrétűen felhasználható univerzális eszközt alkottak meg, amely a már piacon levő korábbi processzorok, és egy chipes mikrogépek tapasztalatait sűríti magába. Az áramkör nem csupán egy chipes központi egységként kerül forgalomba, hanem megfelelő belső programmal ellátva periféria vezérlőként és speciális processzorként is.

Z8601 40 lábú, 2K maszk PROM -mal
Z8602 64 lábú, 2K memória illesztővel
Z8603 40 lábú, 2K-s EPROM foglalattal (2716)
Z8611 40 lábú, 4K maszk PROM -mal
Z8612 64 lábú, 4K memória illesztővel
Z8613 40 lábú, 4K-s EPROM foglalattal (2732)
Z8681 40 lábú, csak külső memóriával

3.1.1. Általános ismertetés
Az egy chipes Z8 mikrogépbe 2/4 Kbyte ROM-ot és 144 byte RAM memóriát, 32 különféle célú I/O vonalat, két 8 bites számláló-időzítőt (melyek 6 bites előosztóval rendelkeznek) és egy duplex UART áramkört integráltak. A Z8 belső felépítését a 3.1.1-1. ábra szemlélteti.


3.1.1-1 ábra: A Z8 belső felépítése

A Z8 5V-os tápfeszültséget igényel, TTL kompatibilis. Az órajelet vagy kívülről adjuk, vagy a chipen belül levő oszcillátor állítja elő külső elem(ek), (Kvarc, RC vagy LC hálózat) segítségével. Viszonylag nagy a műveletvégzési sebessége pl. belső regiszterművelet: 1,5 mikrosec; átlagos műveletvégzés: 2,2 mikrosec és a leglassúbb utasítás végrehajtása 4,25 mikrosec; 43 féle utasítása van. Képes a Z buszra csatlakozni, valamint 62 Kbyte adat-és programmemóriát címezni. A megszakításkezelés vektoros, prioritásos, a belső illesztő, csatlakoztató áramkörök: I/O, időzítő, UART. Az I/O vonalai 4 port regiszterhez csatlakoznak. 16 állapot és vezérlő regisztere van, a többi belső regiszter, szabadon felhasználható a legkülönbözőbb célokra.

3.1.2. A Z8 kivezetéseinek értelmezése

P00-P07
P10-P17
P20-P27
P30-P37
I/O vonalak (I/O LINES)
I/O port kivezetések. Ez a 32 vonal cím, adat és I/O-ként használható, az egyes portok programozásának függvényében.
-AS
Cím kapuzójel (ADDRESS STROBE)
Az -AS vonal jelzi, ha belső, külső beolvasási ciklus vagy külső memória művelet van. Külső program-, illetve adatmemória az -AS jel visszafutó élével mintavételezheti a címet. Az -AS-t a -DS, R/W kivezetésekkel és a P0, P1 pontokkal együtt nagy-impedanciás állapotba lehet vinni (lásd R 248 programozása).
-DS
Adat kapuzójel (DATA STROBE)
A -DS a külső memóriával végzett műveletvégzéskor (írás vagy olvasás) válik aktívvá. Ha a Z8 nincs külső memória műveletre programozva, a -DS utasítás szinkron jelként értelmezett, azaz az utasításkód beolvasás előtti belső órajel ciklusban aktív.
-R/-W Olvasás / Írás (READ/WRITE)
A külső memóriának jelzi, hogy írás vagy olvasás történik a ciklusban. Logikai "0" szint jelenti az írást, logikai "1" szint jelenti az olvasási ciklust.
XTAL1-2
Órajel (CLOCK)
Az óragenerátor kivezetései. Ha a Z8 beállítása olyan, hogy az "óra" oszcillátor üzemben dolgozik, akkor kristályt (soros rezonanciájú Rs <= 100 Ohm) és a külső LC, illetve RC hálózatot erre a pontra kell csatlakoztatni (fQmax=8MHz). A külső órajel-üzemben erre a pontra kell csatlakoztatni az egyfázisú órajelet. Erre példát a 3.1.2-2. ábra mutat.


3.1.2-2. ábra: Külső órajel csatlakoztatása

-RESET
Törlés (RESET)
A törlő bemenet logikai "0"-ba állításával a Z8 alaphelyzetbe állítása történik meg, majd a -RESET jel lefutása után a belső programmemória 000CH címről indul a program futtatása. Alaphelyzet beállításakor az alábbi regiszter beállítás történik:
R241 Stop, T0, T1
R243 Modulo N üzemmód; belső órajel
R245 Modulo N üzemmód
R246 P2 = input
R247 P2 kimenet nyitott kollektoros
P30-P33 input
P34-P37 output
R248 P0, P1 input
belső stack
normál memória ciklus
R250 megszakításkérések törölve
R251 Megszakításkérések tiltva

A -RESET-nek 18 órajel cikluson át logikai "0"-ban kell lennie bekapcsoláskor, hogy a belső óragenerátor stabilizálódjon.
Ha a RESET kivezetésre a Vcc--nél nagyobb feszültséget adunk, a Z8 TEST üzemmódba kerül. Ekkor egy 64 byte-os speciális belső program aktivizálódik, mely az MCU funkcionális tesztelését hajtja végre, majd külső memória esetén az ott elhelyezett programmal lehet a belső ROM tartalmát kiolvasni. A tesztelési üzemmódot a kivezetés logikai "0"-ba állítása törli.

A Z8/64 (Z8602 / Z8612) további kivezetései:

-A0-A11 Programmemória címbusz (PROGRAM MEMORY ADRESS)
Az első 2K/4K program címvezetékei. Erre az A 0 -A 10 kivezetések szolgálnak a Z8602 esetében. Az A 11 -es kivezetés csak a Z8612-nél működik.
D0-D7 Utasításkód (PROGRAM DATA)
A külső programmemóriából az adat ezeken a vonalakon jut el a Z8/64-be.
-MDS Utasításkód kapuzójel (PROGRAM MEMORY DATA STROBE)
A -MDS vonal akkor aktív, amikor a Z8/64 az utasítás olvasási ciklusban van.
-SYNC Utasítás szinkron (INSTRUCTION SYNC)
Az utasítás bevételi ciklust megelőző órajelciklusban aktív a -SYNC jel.
SCLK Rendszer órajel (SYSTEM CLOCK)
A belső órajel kivezetése. A belső órajel frekvenciája a külső órajel, illetve az oszcillátor frekvenciájának a fele.
IACK Megszakításkérés elfogadása (IT ACKNOWLEDGE)
A megszakításkérés elfogadása utáni gépi ciklusban - megszakítási ciklus - az IACK jel aktív.

3.1.3. Regiszterek
A Z8 belső felépítése a 3.1.1-1. ábrán látható. Az ábrából kitűnik, hogy a 144 belső regiszterből 124 egy blokkban van. További 4 a négy porthoz rendelt regiszter. Ezek címei 0-3-ig terjednek, megegyezően a port elnevezésekkel. 16 regiszter a belső egységek vezérlő és állapot regiszterei. Ezek a 240H címtől a 255H címig érhetők el a 3.1.3-1. ábra szerint.

255
Stack mutató (0-7)
SPL
254
Stack mutató (8-15)
SPH
253
regiszter címző
RP
252
jelző bitek
FLAGS
251
Megszakítás maszk
IMR
250
Megszakítás kérés
IRQ
249
Megszakítások prioritása
IPR
248
Port 0-1 üzemmód
P01M
247
Port 3 üzemmód
P3M
246
Port 2 üzemmód
P2M
245
T0 előosztó
PRE 0
244
időzítő / számláló 0
T0
243
T1 elosztó
PRE 1
242
időzítő / számláló 1
T1
241
Időzítő üzemmód
TMR
240
Sorod I/O üzemmód
SIO
 
Nincs megvalósítva
 
127
...
4
Általánosan használható
regiszterek
 
3
PORT 3
P3
2
PORT 2
P2
1
PORT 1
P1
0
PORT 0
P0

3.1.3-1. ábra: Regiszterek

3.1.4. Memória felosztás
Mint látható a regisztereken kívül 2K/4K programmemória is található a Z8601/Z8602 chipen belül (a Z8602/Z8612 esetén ez kívülről csatlakozik az áramkörhöz, a Z8603/Z8613 esetében pedig a tok tetejére helyezhető EPROM-ban van) . Ennek a programmemória területen való elhelyezkedésére a 3.1.4-1. ábra ad felvilágosítást.


3.1.4.1. ábra: Programmemória térkép

A Z8681 esetén nincs belső programmemória, mind a 64 K , külső programmemória.
A Z8 külön definiálja a programmemóriát (max. 64K) és az adatmemóriát (max. 62K). Az adatmemória 800H-n kezdődik. (A teljes 64K címtartományból az első 2K/4K nem címezhető.) Az adatmemória kiosztása a 3.1.4-2. ábrán látható.


3.1.4-2 ábra: Adatmemória térkép

Az adatmemória és a programmemória-rész azonos területen is elhelyezkedhet. Ekkor az MCU 126K/124K memóriát címezhet (ebből 124K/120K külső memória). A kétféle memória megkülönböztetésére a -DM kivezetés szolgál. Ez egy "virtuális" kivezetés, a 3. port 4. kivezetéseként érhető el (P34), ha a portot ennek megfelelően programozzuk.
A stack két helyen lehet, a belső általános regiszter területen (R4-R127), vagy a külső adatmemória területen. Az első esetben 8 bites (R255), a második esetben 16 bites (R254, R255) a stack pointer.
Az utasítások bevételezése átfedéses módon történik. Bizonyos utasítások esetén az egymást követő utasítások nem akadályozzák az átfedéses üzemet, de az IP, RET, IRET, LDE, LDEI, LDC, LDCI, CALL és NOP utasítások esetében nem tud a Z8 átfedéses utasításvégrehajtást végezni. Az utasításokat összefoglaló táblázatban az "EXECUTION CYCLES" az utasítás teljes végrehajtásához szükséges ciklusok számát adja, a "PIPELINE CYCLES" pedig azon ciklusok számát adja, amely ciklusok alatt a következő utósítás bevételezése folyhat.
Ha az utasítás bevételezése külső programmemóriából történik, akkor programozható (R248-5), hogy az utasítás bevételezési ciklus tartalmazzon várakozó ciklust, amely lassúbb memóriák esetén szükséges (az MCU-nak nincs WAIT bemenete). Ha külső memóriaciklust (EXTENDED) állítunk be (tartalmaz WAIT ciklust), akkor a két byte-os aritmetikai és logikai utasításokat és az LD rl,Ir2 utasítást nem hajtja végre az MCU helyesen. (Természetesen, ha belső memóriából vagy normál külső memóriaciklus esetén olvassa be az MCU az utasítást, akkor helyesen hajtja végre azt.)

3.1.5. A környezet illesztése
A Z8 MM portjai akár bemeneti, akár kimeneti portként, de speciális portként is felhasználhatók. A 0, 1 és 2-es portok "handshake" logikával is rendelkeznek, melyek "handahake" jelei a 3-as porton át érhetők el.
A portok TTL kompatibilisek.

PORT 1
A port 1. egy-byte-os I/O-ként "handshake" jelekkel, vagy azok nélkül használható. Külső memória használatakor alkalmazható cím / adatbuszként. A port üzemmódját az R248-as regiszterben állíthatjuk be, és az adat az R1-ben érhető el. A Z8681 esetén a PORT 1. cím / adatbuszként definiált, I/O-ként nem használható.
Ha egy-byte-os I/O üzemmódban működik a port 1., és "handshake" jeleket is akarunk használni, akkor a port 3. P33 és P34 kivezetéseit kell igénybe venni, amit az R247-es regiszterben állíthatunk be.
Külső memóriával a cím (alsó byte), illetve az adatbuszt a port 1. valósítja meg. Ennek megfelelően értelmezettek a -DS, R/-W és -AS jelek, valamint a port 3.-on át elérhető -DM jel (P34). A port 1.-nek ebben az üzemmódjában az R1 regiszter nem érhető el. Szükség esetén a port 1. a vezérlő jelekkel (-DS, RI-W, -AS) (DMA vagy multiprocesszor üzem) nagy-impedanciás állapotba is tehető. Ha a külső buszt vezérelni akarjuk, akkor a port 3. P33 és P34-es kivezetéseit alkalmazhatjuk a BUSAK, illetve BUSREQ jelekként. A port 1. 0-256-ig tud memóriát címezni. Ha ennél nagyobb külső memóriára van igény, akkor a felső címek a port 0. kivezetéseken érhetők el.

PORT 0
A port 0. fél-byte-os (4 bit) I/O-ként vagy a külső memória felső címének kiadására használható. I/O-ként használva az R248-as regiszter fél-byte-onkénti beállításával (P00-P03 és P04-P07) kiválasztható, hogy ki- vagy bemenetként akarjuk működtetni. A magasabb helyérték (fél byte által meghatározott iránynak megfelelő "handshake" jelek (DAVO és RDYO) a port 3.-on (P32 és P35) érhetők el.
Ha olyan külső memóriát használunk, amelynek mérete 256 byte és 4K között van, akkor az alacsonyabb helyértékű fél byte-ot (P00-P03) címbuszként (A8-A11) kell alkalmaznunk. Ha ennél nagyobb a memóriánk, akkor a magasabb helyértékű (fél byte-ot is címbuszként kell programoznunk. (A12-A15) Ha a port 0.-ot (vagy a felét) címbusznak használjuk akkor a regisztereken keresztül a címvezetékekhez rendelt (fél) byte nem érhető el. A címvezetékként felhasznált (fél) port 0. nagy impedanciás állapotba is tehető (tristate) úgy, mint a port 1. (R248).

PORT 2.
A port 2.-t bitenként programozhatjuk akár bemenetként, akár kimenetként. A port 2. adata elérhető az R2-es regiszterben, ami maga a port.
A legmagasabb helyértékű bit (P27) irányának megfelelően áll rendelkezésünkre a port 3.-on két "handahake" jel. Ez a két kivezetés a P31 és P36, melyeket az R247-es regiszter segítségével programozhatunk. Ugyanezen regiszter 0-ás bitjével állíthatjuk be a port 2. kimenetét nyitott kollektorosra vagy normál kimenetre.

PORT 3.
Mint az eddigiekből kiderült a vezérlő és "handshake" jeleket a 3-as port szolgáltatja, illetve I/O portként is használhatjuk úgy, hogy a port alacsonyabb helyértékű fele bemenet (P30-P33), a magasabb helyértékű fele pedig kimenet (P34-P37).

A "handshake" jelek három porthoz hat ponton (P31-P36) kapcsolódnak. A fennmaradó két kivezetést (P30-P37) soros kimenetként használhatjuk.
Ha a port 1. cím / adat portként értelmezett, akkor a hozzá tartozó "handshake" jelek szükségtelenek, helyettük megszakításkérő bemenetet, illetve "adatmemória kiválasztás" (-DM) jelkimenetet használhatunk.
Ha a 2-es porthoz nem igényeljük a "handshake" jeleket, akkor a felszabaduló két kivezetésen az időzítő áramkört érhetjük el (TIN, TOUT).
A fenti felhasználásokon túlmenően a négy bemenet (P30-P33) megszakításkérést tud továbbítani, ha azt az R251-ben engedélyeztük.

Soros port UART (UNIVERSAL ASYNCHRONOUS RECEIVER TRANSMITTER)
A P30 és a P37 port kivezetéseken keresztül az MCU a külvilággal max. 62.5 Kbit/sec sebességű soros adatátvitelt tud létrehozni. Az UART számára a belső órajelgenerátor jelét T0-ás időzítő áramkörrel leosztják. Az UART időzítő áramkörtől kapott jelének frekvenciája az adatátviteli frekvencia 16-szorosa. Ha az órajelfrekvencia 7.3728 MHz, akkor a szabványos adatátviteli sebességeket 110 Baud és 19 200 Baud között tudjuk előállítani. Ehhez a T0 előosztóját 3-ra kell beállítani. A kivárt Baud értékek a T0 osztásarányával állíthatók be (19200 = 1; 110 = 175).
Adáskor a Z8 automatikusan állítja elő a start és a két stop bitet. Mindig nyolcbites adatot ad ki, de lehet a nyolcadik bit helyett a paritásbit (páros). Karakter kiadása IRQ 4-es megszakításkérést eredményezhet. A karakterek közti szünetben marker jelet (logikai "1") ad ki.
Vételkor nyolc adatbitet és egy stop bitet vár a P30 bemenettel kapcsolatban levő vevőáramkör. Ha paritásellenőrzés engedélyezett (R247) a legnagyobb helyértékű bitet tekinti paritásbitnek. A paritáshibát jelzőbit jelzi. Karakter vétele IRQ 3 megszakításkérést eredményezhet. A vevő kétszeresen bufferelt, felülírás ellen nem védett.

3.1.6. Számláló-időzítő részegység
Az UART időzítéséhez és egyéb feladatok ellátására két számláló-időzítő egységet tartalmaz az MCU. A két egység (T0, T1) egyenként egy 6 bites előosztóból és egy 8 bites számlálóból áll. A T0 meghajtása a belső órajelről történik, a T1-et lehet belülről, illetve kívülről vezérelni. A belső órajel az SCLK kivezetésen is megjelenő rendszer órajel negyede. A rendszer órajel a bemenő frekvencia fele. Külső órajelként a számláló-időzítő max. 1 MHz-es jelet kaphat. Programozásra az R241-es regiszter szolgál, vagyis annak segítségével engedélyezhetjük, illetve tilthatjuk az egyes számlálókat, jelezhetjük, hogy tölteni fogjuk őket, illetve a T1-es számláló környezeti csatlakozásait definiálhatjuk, azaz a P31-es bemenetet, mind órajel, mind kapuzó, vagy mind trigger bemenetet használjuk. Ez utóbbi esetben T1 számláló működhet retriggerelhetőként és egyszeres indításúként. Ugyanezen regiszterben adhatjuk meg a P36-os kimenet funkcióját is. Kapcsolhatjuk a T0-ás kimeneteként - és így sorba kapcsolható a két számláló, ha a T1-es bemeneteként definiált P31-gyel összekötjük - a T1-es kimeneteként, de a belső órajel kivezetéseként is felhasználhatjuk. Az előosztók és a számlálók feltöltésére négy regiszter szolgál (R242-245). A számlálók pillanatnyi értékei visszaolvashatók. A számlálók lefelé számolnak, amikor tartalmuk 0-ra csökken, megszakításkérést tudnak (IRQ 4 és IRQ 5) létrehozni.

3.1.7. Megszakítások kezelése
A belső egységek (UART, számlálók) és a külső források (P30-P33) kérhetnek megszakítást. Hat megszakítás engedélyezhető és tiltható az R251-es regiszter segítségével, prioritásukat az R249-es regiszterben lehet meghatározni. A beérkezett megszakításkérések az R250-es regiszterben a nekik megfelelő biteket "1"-be állítják.
Ha megszakításkérés érkezik, akkor az MCU "IT" típusú gépi ciklust hajt végre, amely tiltja a megszakításkéréseket, tárolja a programszámláló tartalmát, menti a jelzőbiteket és a megszakításnak megfelelő vektorban található címre ugrik. A megszakításokhoz rendelt vektorok a memória elején 0-B-ig találhatók, két byte-onként. Mindegyik vektor 16 bites IT rutincímet tartalmazhat.
A megszakítást kezelő rutinban EI utasítással kell engedélyezni az újabb megszakításkérések érkezését, vagy IRET utasítással kell lezárni a rutint, amely szintén elvégzi a megszakításkérések engedélyezését az állapot bitek visszatöltését, valamint visszatér a megszakított programba.

3.1.8. Z8 programozása
A Z8-as utasításkészlete az alábbi utasításokat ismeri:

3.1.8-1. ábra: A Z8 utasításkészlete

Az utasítások táblázatosan a 3.1.8-1. ábrán láthatók.
Az utasításokban az alábbi címzési módok megengedettek:

Az utasításokat részletesen az alábbiakban ismertetjük. Az ismertetésben alkalmazott rövidítések:

OP1 = operandus 1
OP2 = operandus 2
JB = jelzőbitek
IFF = megszakítás maszkregiszter 7. bitje
R = regiszter
RR = regiszterpár
CY = túlcsordulást jelző bit

 

ADC OP1,OP2
OP1 := OP1+OP2+CY
ADD OP1,OP2
OP1 := OP1+OP2
AND OP1,OP2
OP1 := OP1 logikai ÉS OP2
CALL OP1
SP := SP-2
(SP) := PC
PC := OP1
CCF  
CY := -CY
CLR OP1
OP1 := 0
COM OP1
OP1 := -OP1
CP OP1,OP2
OP1-OP2
DA OP1
OP1 decimális helyreállítása
DEC OP1
OP1 := OP1-1
DECW OP1
OP1 := OP1-1
DI  
IFF := 0
DJNZ R, OP1
R := R-1
ha R <>0, akkor PC := PC+OP1
EI  
IFF := 1
INC OP1
OP1 := OP1+1
INCW OP1
OP1 := OP1+1
IRET  
JB := (SP)
SP := SP+1
PC := (SP)
SP := SP+2
IFF := 1
JP CC,OP1
ha CC igaz, PC := OP1
JR CC,OP1
ha CC igaz, PC := PC+OP1
LD OP1,OP2
OP1 := OP2
LDC OP1,OP2
OP1 := OP2
LDCI OP1,OP2
OP1 := OP2
R := R+1
RR := RR+1
LDE OP1,OP2
OP1 := OP2
LDEI OP1,OP2

OP1 := OP2
R := R+1
RR := RR+1

NOP  
nincs műveletvégzés
OR OP1,OP2
OP1 := OP1 logikai VAGY OP2
POP OP1
OP1 := (SP)
SP := SP+1
PUSH OP2
SP := SP-1
(SP) := OP2
RCF  
CY := 0
RET  
PC := (SP)
SP := SP+2
RL OP1
közvetlen eltolás balra
RLC OP1
eltolás CY-n át balra
RR OP1
közvetlen eltolás jobbra
RRC OP1
eltolás CY-n át jobbra
SBC OP1,OP2
OP1 := OP1-OP2-CY
SCF  
CY := 1
SRA OP1
eltolás jobbra, 7. bit marad
SRP OP2
RP := OP2
SUB OP1,OP2
OP1 := OP1-OP2
SWAP OP1
fél-byte-os csere
TCM OP1,OP2
(logikai NEM OP1) logikai és OP2
TM OP1,OP2
OP1 logikai ÉS OP2
XOR OP1,OP2
OP1 := OP1 logikai kizáró VAGY OP2

3.1.9. Alkalmazási példák
A 3.1.9-1. ábrán a Z8-hoz való külső memória illesztését mutatjuk be. Az MCU a példabeli esetben 6 kbyte programmemóriával és 4 kbyte adatmemóriával rendelkezik. Ezen kívül 12 ki- bemeneti vonallal, négy kimeneti és négy bemeneti vonallal csatlakozik a környezethez.


3.1.9-1. ábra: Külső memória illesztése

Két Z8 együttműködésére mutatunk példát a 3.1.9-2. ábrán. Mindkét Z8 egy kétirányú portját (P2) áldozza a kommunikáció adatátvitelére és két kivezetést a kommunikáció vezérlésére. Amelyik egység adni kíván, az jelzi, hogy az adat érvényes a -DAV vonalon (A). Az adatelvétel jelzése az RDY vonalon történik. Az adat bevétele a B pontban történik meg, ettől kezdve foglalt a másik MCU, majd az adat beolvasása után (C) jelzi, hogy újabb adat fogadására kész.


3.1.9-2 ábra: Két Z8 együttműködése

Azt, hogy melyik MCU kezdeményezhet adást elsőként, azt meg kell határozni és ennek megfelelően kell a vezérlő jelek irányát az első alkalommal definiálni. A táviratok tartalma szerint lehet az irányt váltani, ami a kijelölt vezérlőpontok étprogramozásával oldható meg, természetesen software úton.

3.2. Általános periféria illesztő UPC
(UNIVERSAL PERIPHERAL CONTROLLER)

AZ UPC áramkör a Zilog 8 bites családjának új tagja, mely tulajdonképpen a Z8 módosított változata. Utasításkészlete megegyezik a Z8-ével, felépítése is hasonló hozzá, azzal az eltéréssel, hogy a kivezetéseinek egy része kötött. Illesztését úgy alakították ki, hogy teljesen általános buszt alkalmaztak.
Belső regisztereinek tároló-kapacitása 256 byte-ra növekedett. Belső ROM-ja változatlanul 2 Kbyte-os. Külső programtárat nem tud kezelni, így hazai alkalmazása egyelőre igen kétséges. Ha a belső ROM helyett EPROM-ot fog a Zilog cég alkalmazni, akkor a hazai felhasználás szempontjából is érdekessé válhat. A 3.2-1. ábrán bemutatjuk az UPC kivezetéseit.


3.2-1 ábra: UPC kivezetései

3.3. Soros adatátvitel vezérlő
(SERIAL COMMUNICATION CONTROLLER)

A soros adatátvitel vezérlő a Z buszhoz illeszkedik, a Z-80 SIO továbbfejlesztett változata. A SIO-hoz hasonlóan aszinkron és szinkron adatátvitelre képes. Az áramkör két csatornás, mindkét csatornának saját belső órajelgenerátora van. Szinkron átvitel esetén nem szükséges az órajelet is átvinni az adat mellett, mert a vevő oldalon beépítettek egy fáziszárt hurkot (PLL), amely NRZI vagy FM kódolás esetén szinkronizálni képes. Az adó NRZ, NRZI és FM kódolással tud dolgozni.
Az SCC áramkör szabvány modemjeleket fogad, illetőleg állít elő. Ha erre nincs szükség a ki- és bemeneteket általános I/O-ként lehet felhasználni. Szükség esetén DMA-val is lehet szinkronizálni e kivezetések felhasználásával. Így az SCC-vel és a DMA-val nagysebessé (1 Mbit/sec) átvitelt is megvalósíthatunk. Az SCC kivezetéseit a 3.3-l. ábrán mutatjuk be.


3.3-1 ábra: SCC kivezetései

3.4. Számláló-időzítő és párhuzamos I/O CIO
(COUNTER/TIMER AND PARALLEL I/O UNIT)

A CIO áramkör három 16 bites időzítőt és két 8 bites bufferelt kétirányú pontot tartalmaz, melyekhez egy 4 bites speciális I/O port tartozik, és amellyel négyféle "handshake" üzemmódot tud megvalósítani. A CIO a CTC és a PIO kombinációja. Alkalmazása főleg kis méretű rendszerekben lehet előnyös.
A CIO három független 16 bites számláló regiszteréből kettő utasítással egymás után kapcsolható, így 32 bites osztót képez. A számlálók be- és kimenetei a B és C portra is rákapcsolhatók, így azok kívülről vezérelhetők és jeleik külső vezérlést adhatnak. Bemenetként léptetés, triggerelés és kapuzás áll rendelkezésünkre, kimenetként pedig a szokásos számláló-kimenet. A számlálók nem csak egy számlálási ciklusra állíthatók be, hanem folyamatos üzemre is alkalmasak automatikus újratöltéssel. A folyamatos üzem retriggerelhető. A Kimeneten háromféle jelforma jelenhet meg: impulzus, logikai szint váltás és négyszögjel.
A CIO két 8 bites portját egymástól függetlenül lehet vezérelni négyféle üzemmódban: bemenet, kimenet, kétirányú átvitel és bitenkénti I/O. A portok mellett elhelyeztek egy összehasonlító áramkört, mely megszakításkérést adhat, ha a porton az előre beállított minta megjelenik. Ezt a figyelő áramkört úgy is lehet programozni, hogy a port megszakításkérés gyűjtőként is képes működni, prioritásos megszakításkérést megvalósítva.
A C port az A és B port "handshake" vonalait adja, vagy ha erre nincs szükség a harmadik számláló külső elérhetőségét biztosítja, vagy általános célú I/O-ként használható. A C portop négyféle "handshake" üzem valósítható meg: impulzus vezérlés, kapuzójel, UPC csatolás és IEEE 488 típusú. A CIO áramkör kivezetéseit a 3.4-1., ábra mutatja.


3.4-1. ábra: CIO kivezetései

3.5. Adatátvitel illesztő FIO
(FIFO INPUT/OUTPUT INTERFACE UNIT)

A FIO alkatrészt különböző rendszerek határfelületeként lehet alkalmazni. A sebességkülönbséget a 128 byte-os FIFO hidalja át. Segítségével nem csupán két mikroproceszoros rendszert lehet illeszteni, hanem perifériát is csatlakoztathatunk vele tetszőleges CPU-hoz. Ha az adatátvitelnél nagyobb bufferelésre van szükség két vagy több FIO egymáshoz csatolható, ha pedig 16 bites rendszerben kívánjuk használni, két párhuzamos FIO-t kell alkalmaznunk. A FIO képes a Z8000 16 bites buszának alacsonyabb, illetve magasabb helyi értékű byte-ját megfelelően illeszteni. A FIO áramkör blokkvázlata a 3.5-1. ábrán látható. Ebből kitűnik, hogy az áramkör a kimeneteket tekintve nem teljesen szimmetrikus: Az A oldal Z buszhoz és tetszőleges CPU-hoz csatlakoztatható, míg a B oldal képes egyéb "handshake" portként is működni.


3.5-1. ábra: FIO blokkvázlata

Mint az ábrán látható a 128 byte-os buffer mindkét irányú adatátvitelt buffereli. A két oldalon egymástól függetlenül történhet beírás és kiolvasás, sőt egy oldalon egymás után felváltva is érkezhet írási és olvasási igény. A beírást és a kiolvasást címmutatók tartják nyilván, melyek mindkét oldalról kiolvashatók.
A FIO áramkör az adatok átvitelén kívül vezérlő jeleket is fogad, illetve ad. A tíz vezérlő kivezetés az egyes interface módok függvényében változik. A kivezetések jelentése a 3.5-2. ábrán látható. A kívánt illesztési mód 2-2 kivezetés vezérlésével választhat ki:

M1
M0
A oldal
0
0
Z busz alacsonyabb helyértékű fele
0
1
Z busz magasabb helyértékű fele
1
0
Általános mikroprocesszor busz
SL1
SL0
B oldal
0
0
0 Z busz alacsonyabb helyértékű fele, illetve magasabb helyértékű fele, ha M1 = 0 és M 0 =1
0
1
Általános mikroprocesszor busz
1
1
IEEE-488 HS
1
1
"Interlocked" HS


3.5-2. ábra: FIO kivezetései

A 3-5-2. ábrán A-J betűkkel jelölt kivezetések jelentése az egyes buszoknak megfelelően:

Jel
Z-Busz af.
Z-Busz ff.
ált. mikrop.
Interlocked
IEEE-488
A
B
C
D
E
F
G
H
I
J
-REQ/-WT
-DMASTB
-DS
R/-W
-CS
-A/S
-INTACK
IEO
IEI
-INT
-REQ/-WT
-DMASTB
-DS
R/-W
-CS
-A/S
A0
A1
A2
A3
-REQ/-WT
-DACK
-RD
-WR
-CS
C/-D
-INTACK
IEO
IEI
-INT
RFD/-DAV
-ACKIN
FULL
EMPTY
-CLEAR
DATA DIR
IN0
OUT1
IN2
OUT3
RFD/-DAV
-DAV/DAC
DAC/RFD
EMPTY
-CLEAR
DATA DIR
IN0
OUT1
IN2
OUT3

3.6. Adatátvitel buffer FIFO
(FIRST IN FIRST OUT)

Az adatátvitel buffer a FIO adatátvitel-illesztő kiegészítő eszköze. Segítségével a FIO buffere 128 byte-tal bővíthető. Ha több FIFO-t alkalmazunk, akkor a buffer n*128 byte-tal növelhető (ahol n a FIFO-k száma). Az áramkör alkalmazása igen egyszerű, csupán az adatútba kell beilleszteni. A FIO Interlocked HS üzemmódba állítandó és az RFD/-DAV összekapcsolandó a FIFO -ACKIN bemenetével, valamint a FIFO RFD/-DAV kimenete a FIO -ACKIN bemenetével.
A FIFO kivezetései a 3.6-1. ábrán láthatók.


3.6-1. ábra: FIFO kivezetései

3.7. Egyéb egységek

3.7.1. COMBO áramkör
A Mostek cég, mint a Zilog áramkörök egyik legrégebbi és legjelentősebb másodgyártója, maga is fejlesztett periféria illesztőt a Z-80 rendszerhez. A COMBO egy teljesen univerzális áramkör, mely 256 byte-os RAM-ot (ebből 64 byte kisfogyasztású), két időzítőt, soros portot és három megszakításkérőt tartalmaz.
Az áramkör 40 kivezetéses DIL tokozásban készül. A kivezetéseket a 3.7.1-1. ábra mutatja.


3.7.1-1. ábra: COMBO kivezetései

A kivezetések jelentése:

D0-D7 Adatbusz (DATA BUS)
A központi egység és a COMBO közötti adat- és vezérlőinformáció-forgalom lebonyolítására szolgál.
A0-A7 Címbusz (ADDRESS BUS)
A 256 byte-os memória és az I/O portok címzésére szolgál.
-M1 Utasításkód olvasás (MACHINE CYCLE)
-IORQ I/O Hozzáférési igény (I/O REQUEST)
-MREQ Memoria-hozzáférési igény (MEMORY REQUEST)
-RD Olvasás (READ)
-WR Írás (WRITE)
CLK Rendszer órajel (SYSTEM CLOCK)
Z-80 típusú órajel-bemenet.
-CSM Memória kiválasztás (CHIP SELECT RAM)
-CSI/O I/O kiválasztás (CHIP SELECT I/O)
-INT Megszakításkérés (CPU felé) ( INTERRUPT REQUEST)
IEI, IEO IT engedélyezés BE, IT engedélyezés KI (IT ENABLE IN, IT ENABLE OUT)
Csatlakozás a daisy-chain-hez.
-INT1, INT2 Külső megszakításkérés (EXTERNAT INTERRUPT)
Két élvezérelt bemenet, amelyek hatására a COMBO megszakítást kér.
TCLK Időzítő órajel (TIMER CLOCK)
A két időzítő órajel bemenete.
INTO Külső megszakításkérés (EXTERNAL INTERRUPT)
Az A időzítővel együtt impulzushossz mérésre alkalmas, de az -INT1, INT2-höz hasonlóan is használható.
ZCA, ZCB Időzítő kimenet (ZERO COUNT OUT)
Az időzítők jelkimenete, melyen impulzust vagy négyszögjelet kaphatunk.
-RESET Törlés (RESET)
A COMBO áramkör alaphelyzetét állítja be, illetve tiltja a RAM hozzáférést.
SRCLK Soros port órajel (SERIAL PORT CLOCK)
Mindkét irányú soros adatátvitel órajel bemenete.
SRIN Soros adatbemenet (SERIAL DATA INPUT)
SROUT Soros adatkimenet (SERIAL DATA OUTPUT)
+5V RAM Kisfogyasztású RAM táp (LOW POWER STANDBY SUPPLY)
A RAM 64 byte-os kisfogyasztású részére tápellátását biztosit, 3,2 - 5,6 V közötti feszültség adható rá.

3.7.2. Kiegészítő áramkörök a Z8000-hez
A Zilog cég jelzi, hogy a Z8000-hez további áramköröket kíván forgalomba hozni:

Z8016 Memória hozzáférés vezérlő (DMA CONTROLLER)
A memória-hozzáférés vezérlő a Z8000 rendszer címzési módjaihoz igazodva 8 Mbyte-ot tud címezni, MMU esetén 16 Mbyte-ot. Az adatátviteli I/O és memória, vagy memória és memória között bonyolítható, byte-onként vagy szavanként, tud adatkeresést végezni. Multiprocesszoros rendszerben is üzemelhet.

Z8052 Képernyő vezérlő (CRT CONTROLLER)
Intelligens képernyő vezérlést tud végezni alfanumerikus vagy pontraszteres kijelzést megvalósítva. Különböző speciális kiírásokat tud megvalósítani: index írás, kitevő írás.

Z8065 Hibajavító (BURST ERROR PROCESSOR)
Előnyösen használható nagysebességű adatátvitel esetén hibák javításához.

Z8068 Adat titkosító (DATA CIPHERING PROCESSOR)

IV. Rész: Z800

4.1. Bevezetés
A Zilog cég 8 bites Z80 mikroprocesszorának eredményei alapján a szakértők világszerte figyelemmel várták a 16 bites Z8000 mikroprocesszor család megjelenését. A Z8000 mikroprocesszor típus címzési tartománya nyolcszor nagyobb mint az INTEL 8086 mikroprocesszoré és teljesítménye egy közepes miniszámítógéppel egyenértékű.
A Zilog cég bízott a sikerben és ennek megfelelően szervezte meg a Z8000 CPU gyártását, azonban nagy meglepetésre alig kapott rendeléseket, viszont a 8086 iránti érdeklődés változatlanul intenzív maradt. Első közelítésben a Zilog Z8000 lényegesen kedvezőbb tulajdonságú processzornak tűnt, mint az INTEL 8086, és a szolgáltatásait tekintve az ára is alacsonyabb. Megjelentek a Z8000 mikroprocesszor-család 16 bites periféria illesztői is. Ennek ellenére számos felhasználó továbbra is kitart a 8086 vagy a 68000 mikroprocesszor család mellett.
A felhasználók orientálódásának a vélemények szerint két lehetséges oka van. Egyik ok, hogy a vevőkör általában vagy a legelső, vagy a legjobb új típusú terméket választja. Nem a Zilog, hanem az INTEL volt ezen a területen az első és a Motorola Tűnik a legjobbnak. A Zilog számára tehát csap a maradék érdeklődés nyújt lehetőségeket.
A második ok az, hogy amíg az INTEL 8086 16 bites processzor kompatibilis az INTEL 8 bites típusainak adatbusz változataival (a 8080-al), a Z8000 nem rendelkezik 8 bites adatbusz változattal, ami a Zilog tervezőinek komoly tévedése. Ennek okáért a Zilog elhatározta, hogy egy olyan 16 bites processzort fog gyártani a Z800-at, amely 8 és 16 bites adatbusszal is rendelkezik.
Mint azt a 8 bites operáción rendszerek fejlődése is mutatja, a mikroszámítógépet sokkal bonyolultabb feladatokra kezdik használni, mint néhány évvel ezelőtt. Napjainkban a 8 bites rendszerekben általában magas szintű nyelveket használnak, és ez eleve megköveteli azt, hogy a címezhető memóriakapacitás megnövekedjék. Mivel a memóriahellyel kapcsolatos követelmények sok alkalmazási területen megnövekedtek, hátrányt jelent, hogy a 8 bites mikroprocesszorok címezhető memória-tartománya max. 64 kbyte. A 16 bites processzorok címezhető memória-kapacitása sokkal nagyobb, ugyanakkor a gyakorlatban sokszor jobban megfelelne egy 8 bites processzor. A 16 bites processzorok alkalmazása gyakran azt eredményezi, hogy a rendszer drágább lesz és a hatékonyság az árral nem nő arányosan. Ugyanakkor sokkal komolyabb problémát jelent a software inkompatibilitása. A végfelhasználó ideális megoldáshoz akkor juthatna, ha a memóriacímzési tartományt kibővíthetnénk és lehetővé tennénk, hogy használhassa azokat a software-eket, amelyek a Z80-hoz már rendelkezésre állnak. A Z8000 tervezésekor nem gondoskodtak arról, hogy kompatibilis legyen a Z80 processzorral, ez nagy hiba volt, amit a Z800-as processzornál kiküszöböltek. A Z800-as utasításkészlete a Z80 utasításkészletének egy kiegészített változata.
Napjaink felhasználói egyre nagyobb software komplexitást igényelnek és a rendszereket egyre szélesebb körben kívánják alkalmazni. Ezért növelni kell a software megbízhatóságot, a modularatást és a rendszer védelmét az illegális elérések ellen. A memóriakezelésnél igen fontos feladat, hogy a védelem minél egyszerűbb és olcsóbb legyen.
A Z800-as mikroprocesszor kialakításánál optimális lehetőségek biztosítására törekedtek, mind az előnyösebb műszaki paraméterek - a nagy végrehajtási sebesség, a kifinomult architektúra, a nagy címezhető memória-kapacitás, a magas szintű nyelvek és operációs rendszerek használata, mind pedig az alacsony ár tekintetében.

4.2. A Z800-as mikroprocesszor felépítése, összehasonlítása a Z80-as mikroprocesszorral, összefoglalás

A Z800-as mikroprocesszor a Z80-as mikroprocesszor továbbfejlesztett változata, kompatibilis a Z80-nal.

4.2.1. Architektúra
A Z800-as processzort a Z80-as mikroprocesszor "mag"-ja köré alakították ki, kibővítve azt olyan chip-be beépített funkcionális egységekkel, amelyek rugalmas alkalmazhatóságot tesznek lehetővé.


4.2.2-1. ábra: A Z800 mikroprocesszor

Hardware bővítés a Z800-ban:

4.2.2. A Z800 mikroprocesszor család
A Z800-as család a következő tagokból áll: 8 bites Z8108, Z8208 és a 16 bites Z8116, Z8216 (4.2.2-l. táblázat):

A Z800 mikroprocesszor család
 
Tokkivezetés
Adatbusz
illesztő bitek
A chipbe beépített
periféria kezelő egységek
közös tulajdonságok
Z8108
40
8
Négy 16 bites számláló-időzítő (16 bites) Memória-kezelő
Cache memória
Cím-frissítő generátor
Óra-oszcillátor
Z8116
40
16
Z8208
64
8
Négy 16 bites számláló-időzítő (egy belső)
Egy aszinkron soros port
Z8216
64
16

A Z8108 és a Z8208 támogatja a 8 és 16 bites busz - nem multiplikált - perifériáit, a Z8116 és a Z8216 támogatja a 16 bites Z busz - multiplikált - perifériáit. A Z8108 és a Z8208 40, a Z8116 és a Z8216 64 kivezetéses tokban van.

4.2.3. A Z800-as mikroprocesszor tulajdonságai; bővítések, főbb jellemzők

4.2.4. Technológiai kérdések, NMOS
Az 5 millió utasítás/s sebességet azzal lehetett elérni, hogy 2 mikronos felbontású N-csatornás technológiát használnak az előállításhoz. A polyszilikon összeköttetéseknek két szintje van, az első az alacsony, a második a nagy-impedenciájú rétegben. Az eljárásnál négy tranzisztortípust alakítottak ki (THRESHOLD tranzisztorok) egy növekményes, egy instrinsic és két kiürítésen üzemmódú.

4.2.5. Bemenet, kimenet, buszrendszer
A Z800-as mikroprocesszor multiplexelt cím / adatbusszal rendelkezik. A Z800-as busz jelkészlete megegyezik a Z80-as jelkészletével, így a Z80-as család perifériális eszközei illesztettek. Minden a chip-ben levő periféria-áramkör szabványos Z80 I/O címkiosztású és az egyes címek a Z80 I/O utasításokkal érhetők el.
A Z800-as mikroprocesszor chip-be elhelyezett perifériakezelő egységekkel redukálják a rendszer integrált áramköri egységeinek számát, ezáltal kevésbé kell igénybe venni a külső buszt és csökken a rendszer ára. Az eszközök belső összekötésével növelték a teljesítőképességet és a gyorsaságot.
A Z800-as mikroprocesszoros rendszer kiegészítő egységei azonosak a Z80-nál ismertetettel. Ugyanakkor a rendszer átmenetet biztosít a nagyobb teljesítményű rendszerek kialakítására, a legmodernebb 16 bites perifériák használatára.
A Z800-as család el van látva egy globál / lokál busz-opcióval és egy külső busz "arbiter" (döntnök)-el abból a célból, hogy multiplikált processzorok is használhassák a rendszerbuszt.
A Z800-hoz az összes Z busszal rendelkező periféria csatlakoztatható, amely már rendelkezésre áll a Z8000,16 bites processzor családban.

4.3. Az architektura áttekintése

4.3.1. Regiszterkészlet
A Z800-as mikroprocesszoros rendszer regiszterkészlete a Z80-ashoz viszonyítottan kibővült. Ilyen bővítés például a felhasználói üzemmódhoz a verem (stack) mutató, ami a rendszerverem (stack) mutatóval együtt látja el a kettős üzemmódú működést (4.3.1-1.ábra). Tartalmaz két további busz-időzítő regisztert, a busz-időzítéshez, vezérléshez és inicializáláshoz. Ezeknek a regisztereknek az a célja, hogy WAIT állapotokat hozzanak létre a programban pl. a memória műveleteknél - különböző sebességek és műveleteknél -a különböző sebességek és műveletek összehangolására, mint pl. DAISY CHAIN időzítés. Egy további lapregiszter 8 bittel bővíti ki az I/O címmezőt, ami az I/O műveletek végrehajtásánál hozzáadódik a 16 bites kimenethez. Ezekkel az extra bitekkel a szokásos módon engedélyezik a memória lapcímzéshez az I/O címek generálását.

4.3.1-1. ábra: Z800-as CPU regiszter-konfiguráció

Az IX és az IY regiszterek index-regiszter funkciót látnak el. Rendszer üzemmódban minden regiszter úgy érhető el, mint egy 16 bites általános célú regiszter, vagy mint két, egy byte-os regiszter.
A Z800-as mikroprocesszor teljes regiszterkészlete (4.3.1-1. ábra):

4.3.2. Funkcionális egységek, időzítés
A Z800 processzor funkcionális egységei: memóriakezelő, ceche memória, négy 16 bites számláló / időzítő, egy soros PORT, négycsatornás DMA vezérlő, egy dinamikus RAM frissítésvezérlő. Mindegyik DMA csatorna 24 bites forrás és rendeltetési (cél) címet kezel. A csatornák programozhatóak lépésenkénti működésre; kötegelt (burst) és folyamatos üzemmódra. Az egyes funkcionális egységek a chip-ben levő periféria illesztőkkel szintén belül csatlakoztathatóak, ami tovább növeli az egység teljesítményét (4.3.2-1. táblázat).

Periféria
t. szám
Periféria megnevezés
 
Periféria
t. szám
Periféria megnevezés
Z8108 / Z8208 8 bites busz (Z80 vezérlő jelek)
 
Z8116 / Z8216 16 bites busz (Z-busz vezérlő jelek)
Z8410 DMA (Direct Memory Access Controller)
Közvetlen memória-hozzáférés vezérlő
  Z8016 DTC (Direct Memory Access Transfer Controller)
közvetlen memória-hozzáférés átvitel vezérlő
Z8420 PIO (Parallel Input / Output)
párhuzamos bemenet / kimenet
  Z8030 Z-SCC (Serial Communications Controller)
soros-összeköttetés vezérlő
Z8430 CTC (Counter / Timer Circuit)
számláló időzítő áramkör
  Z8031 Z-ASCC (Asynchronous Serial Communications Controller)
aszinkron soros összeköttetés-vezérlő
Z8440/1/2 SIO (Serial Input / Output Controller)
Soros kimenet / bemenet vezérlő
  Z8036 Z-CIO (Counter / Timer and Parallel I/O Unit)
számláló / időzítő és párhuzamos I/O egység
Z8470 DART (Dual Asynchronous Reciever / Transmitter)
kettős aszinkron adó-vevő
  Z8038 Z-FIO FIFO (Input / Output Interface Unit)
bemeneti / kimeneti illesztő egység
Z8516 DTC (Direct Memory Access Transfer Controller)
közvetlen memória-hozzáférés átvitel vezérlő
  Z8060 FIFO (Buffer Unit and Z-FIO Expander)
FIO bővítő
Z8530 SCC (Serial Communications Controller)
soros-összeköttetés vezérlő
  Z8065 Z-BEP (Brust Error Processor)
Z8531 ASCC (Asynnchronous Serial Communications Controller)
aszinkron soros-összeköttetés vezérlő
  Z8068 Z-DCP (Data Ciphering Processor)
Z8536 CIO (Counter / Timer and Parallel I/O Unit)
számláló / időzítő és párhuzamos I/O egység
  Z8070 FPP (Floating Point Processor)
lebegőpontos processzor
Z8038 Z-FIO FIFO (Input / Output Interface Unit)
bemeneti / kimeneti illesztő egység
  Z8090 Z-UPC (Universal Peripherial Controller)
univerzális periféria vezérlő
Z8070 FPP (Floating Point Processor)
lebegőpontos processzor
     

4 chip-be beépítve rendelkezésre áll egy teljesen duplex UART, különböző adatkezelési lehetőség és karakter formátum meghatározás az aszinkron soros összeköttetéshez. A Z8108 és a Z8208 négy darab 16 bites számláló / időzítőt tartalmaz a belső időzítéshez. A számláló / időzítő funkciók kívülről is vezérelhetőek kapuzott, triggerelt bemenetekkel.
Tekintet nélkül arra, hogy 8 bites vagy 16 bites buszt használunk, a felhasználó programozhatja a Z800-as mikroprocesszor család minden tagjának a busz időzítését. Alaphelyzetbe állítás után a Z800-as mikroprocesszor-rendszer időzítése programozható, ami negyede, fele vagy egyező a CPU sebességével. Az óralépték WAIT állapotban programozható. Külső hardware használata nélkül nulla-három WAIT állapot "szúrható be" (inzertálható) a memória, az I/O és a megszakítás nyugtázó tranzakciókba. Továbbá WAIT állapot specifikálható szeparált memóriaterületekhez, így különböző sebességű ROM-ok és RAM-ok használhatóak ugyanabban a rendszerben. Engedélyezett a várakozási állapot külső generálása is.
A Z800-as rendszeren az összes Z80-ra írt program akkor futtatható, ha az időzítőhurkok a Z800-as gyorsabb utasításvégrehajtási sebességének megfelelően változtathatóak.

4.3.3. Rendszer és felhasználói üzemmód
A Z800-as processzor a programokat rendszer vagy felhasználói üzemmódban hajtja végre. Rendszer üzemmódban a CPU minden regisztere elérhető.
Az utasításokkal engedélyezett felhasználói üzemmód a Z80-as processzorban nem található meg. Ez az üzemmód védi meg a rendszert a felhasználó (alkalmazói) programjától, mert programvégrehajtás közben tiltja, hogy a felhasználói program utasításai zavart okozhassanak a rendszer állapotában (pl. disable megszakítások). Ezért ebben az üzemmódban bizonyos CPU regiszterek elérése tiltott.
A Z80-ra írt programok csak rendszer üzemmódban hajthatóak végre a Z800-as rendszerben.

4.3.4. Memóriakezelő
Egy mikroprocesszoros rendszerben az egyik legnagyobb probléma a nagy program és adattartományok kezelése. Ennek problémának a megoldására hozták létre pl. a külső memóriatérkép (map) áramköröket, tértek át a 16 bites processzorok használatára.
A Z800 processzor-család tagjai chip-be beépített memóriakezelő egységet (MMU - Memory Management Unit), lap-orientált memóriakezelést és memóriavédelmet biztosítanak. A CPU maga külön tudja választani a rendszer és a felhasználói tartományokat, valamint a program kódrészt az adatreferenciáktól mindkét tartományban.
A Z800 MMU egy címfordító mechanizmust használ, amit dinamikus laprelokációnak nevezünk. A CPU logikai címet generál, amit az MMU fizikai címre fordít le, mielőtt kiküldené a címvonalakra.

4.3.5. Dinamikus memóriafrissítő vezérlő
A frissítési tranzakció programvezérléssel engedélyezhető vagy tiltható és megválasztható a felfrissítési frekvencia. Különálló busz tranzakciókat generálnak a Z800-as család tagjai a frissítéshez.
A Z800-as memóriafrissítő vezérlő, 10 bites frissítő (refresh) címet generál, amely igen nagy kapacitású dinamikus memória támogatását biztosítja.

4.3.6. Oszcillátor, óragenerátor
A chip-be beépített oszcillátor / óragenerátor egyszerűsíti a rendszertervezést, mivel nem kell gondoskodni külső MOS óragenerátorról / meghajtóról. Egy kristály közvetlenül kapcsolható a Z800 processzorhoz, vagy egy TTL külső órajel szolgáltatható. A processzor egy belső órajelet generál, ami fele a kristály bemeneti frekvenciájának. Ez tovább osztható a külső rendszer órafrekvenciájának megfelelően.

4.3.7. Megszakítás, trap
A Z80 megszakítási módjai: 0, 1, és 2, a Z800-nál egy új megszakítási mód a 3. A 3. egy szerviz megszakítási mód, célja a belső megszakítások ún. "trap"-ok kezelése. A trap - egy nem programozott feltételes ugrás egy ismert rekeszbe, amelyet a hardware automatikusan aktivál. A 3. módban a processzor megszakítás / trap vektor-táblázatban egy új programállapotnak megfelelő értéktáblázatot keres. Ez az értéktáblázat egy trap vagy egy nem vektorizált megszakítás esetében a következőkből áll: egy új programszámláló érték, egy új "master" állapot-regiszter érték. A vektoros megszakításnál a programszámláló és a master állapot-regiszter eredeti tartalma regisztrált (mentve van) és a vektor adatait a megszakító eszközből olvassák ki. Ez a módszer megengedi a megszakítás teljes regisztrálását (skatulyázását), vagyis a megszakítás-engedélyezés előtti állapotot a stack regiszterbe mentik.
A trap kondíciók számát a hardware-en belül határozzák meg a rendszer védelme érdekében, általában ezeket software-rel nem lehet hatástalanná tenni. A feltételek tartalmaznak kibővített utasítás-trapokat, amelyek jelzik a kibővített utasítások végrehajtása során, ha az architektúra a végrehajtásra képtelenné válik; osztásgátló-trap: megelőzi a nullával való osztást; egy rendszerhívás-trap gondoskodik a szabályos átvitelről a rendszer és a felhasználói üzemmód között. Ezek és egyéb trapok engedélyezik a tervezőnek és a felhasználónak, hogy könnyen hozzon létre olyan feltételeket, amelyek különbözőképpen fogják befolyásolni a programvégrehajtást vagy a rendszer műveletvégzését.
A Z800-as processzor megszakítás módjai:

Megszakítás-mód Leírás
0
A megszakítást előidéző eszköz a buszon utasítást helyez el, amelyet a rendszer úgy hajt végre, mint a megszakítás kiszolgáló rutin első utasítása. (Ez általában egy ugrás vagy egy újraindítási utasítás).
1
Feltétel nélküli ugrás a 0038H címre.
2
Vektor olvasás az eszközből, regiszter tartalmával mutatnak a megszakítás kiszolgáló rutin táblázatában a megfelelő rutin induló címére.
3
A megszakítás előtti programállapot a verembe (stack) mentik. Az eszközből kiolvasott vektort használják az előbb említett táblázat megfelelő elemének eléréséhez. A trap vektor-táblázat segítségével elérhető az új programállapot.

A Z800-as rendszer lehetővé teszi a megszakítások maszkolását (maszkolható és nem maszkolható megszakítások).

4.3.8. Miniszámítógép a Z800-as család elemeiből

4.3.8-1. ábra: Miniszámítógép a Z800 család elemeiből építve.
A rendszer tartalmaz egy memóriakezelő egységet, egy cache memóriát, multiplikált DMA csatornákat, multiplikált számláló / időzítőket és egy soros PORT-ot.

4.4. Címzési módok, utasításkészlet

4.4.1. Címzési módok
(4.4.1-1./a, 4.4.l-1./b. ábrák)
A Z80-as mikroprocesszor címzési módjait a következőkkel növelték meg a Z80-hoz viszonyítottan.

Az LDA (Load Address) utasítást használva a bázis-index címzési mód hatékonyan kombinálható más címzési módokkal Így kiépíthető egy ideiglenes komplex címzési mód, amely involválja az indexelés több szintjét.
A Z80-nál már használt címzési módok is nagyobb flexibilitást biztosítanak, mivel kibővült az utasításkészlet, így több utasítás használható. Ezek a bővítések teszik lehetővé, hogy a Z800 architektúrája elég hatékony és flexibilis legyen a magas szintű, valamint az assembler nyelven történő programozáshoz.

4.4.1-1./a. ábra: A Z800-as címzési módjai 1.
4.4.1-1./b. ábra: A Z800-as címzési módjai 2.

4.4.2. Z800-as processzor utasításkészlete
A Z800-as mikroprocesszor utasításkészlete a Z80-as típusú utasításkészletének bővített változata. Az új utasítások: index, bázis-index, STACK mutató és programszámláló vonatkozásúak. Ezek a Z80 lehetőségein túlmenően öt üzemmódban hajthatóak végre, úgymint: "regiszter", "azonnali", "közvetlen elérés", "nem közvetlen regiszter" és "short index" üzemmód.

4.4.2.1. Szorzás és osztás utasítások
A szorzásnak számos variációja van, pl. 8*8 bites - 16 bites eredményig, 16*16 bites - 32 bites eredményig, bármely címzési módban.
Az osztás változatai között a következők szerepelnek: 16 bit osztva 8 bittel - 8 bites hányados és maradék, 32 bit osztva 16 bittel - 16 bites hányados és maradék. Az osztás utasítás ellenőrzi a túlcsordulást és tiltja a 0-val való osztást.
Ha ezek a feltételek mégis előfordulnak trapek jönnek létre, ezek programból kezelhetőek.

4.4.2.2. Egyéb aritmetikai utasítások
A Z800-as architektúrája még további 16 bites aritmetikai lehetőségeket biztosít. Ezek az utasításon a következők:

Ezek a műveletek a HL regiszterpárt használják, mint 16 bites akkumulátort.
Az IX és IY regiszterek elérhetőek, mint 16 bites regiszterek, vagy mint 2 db 2 byte-os regiszter.

4.4.2.3. TEST és SET utasítás
A TEST és SET (beállítás) utasítás támogatja a Z800-as család alkalmazását multiprocesszoros rendszerek kialakításánál.
Multiprocesszoros rendszerhez rendelkezésre álló teszt (TEST) és beállítás (SET) utasítás, lehetőséget biztosít az osztott forrású programok közötti összekapcsolásra. A betöltést vezérlő utasításcsoporttal állítják be a regisztereket a chip-en levő források konfigurálásához és a chip állapot kiválasztásához a rendszer üzemmódban. A rendszerhívó utasítás segítségével tér át a felhasználói rendszermódba, ekkor használhatja a rendszermód lehetőségeit (pl. megszakítás engedélyezés vagy nem engedélyezés).

4.4.2.4. CPU vezérlő utasítások
A Z800-as tartalmaz néhány új utasításcsoportot a CPU vezérléshez, az új regiszterek elérésének engedélyezéséhez, valamint a rendszer és felhasználói üzemmód kezeléséhez, szétválasztásához.

4.4.2.5. Privilegizált utasítások
A Z800-as processzor privilegizált utasításai csak a rendszer üzemmódban futó programokban hajthatók végre. Privilegizált utasítások:

4.4.2.6. Rendszerhívó utasítás
Az SC rendszerhívó (System Call) utasítás egy interface-t hoz létre a felhasználói módban futó program és a rendszermódú operációs rendszer között.

4.5. Memóriakezelési technika
A Z800-as mikroprocesszoros rendszer memóriakezelő egysége a processzor chip-be van beépítve ez lehetővé teszi, hogy a mikroprocesszor 512 kbyte-ot vagy 16 Mbyte-ot címezzen az eszköz tokozásától függően. A memóriakezelő más kezelési funkciót is lehetővé tesz, pl. külső memória csatlakoztatását a rendszerhez. (Memóriakezelő egység = MMU - Memory Management Unit.)
A chip-ben levő memóriakezelő egység -Z80 programokkal- lapokra osztja a 64 kbyte logikai címtartományt. Azután ezeket a lapokat áttérképezik (lefordítják) a Z800-as szélesebb fizikai címtartományára. Attól függően lehetnek a lapok 8 vagy 4 kbyte hosszúságúak, hogy a program/adat szétválasztás engedélyezett-e. Ezzel a technikával 16 bites logikai címzéseket 24 bites fizikai címekre (Z8208, Z821)/ vagy 19 bites fizikai címekre (Z8108, Z8116) fordítanak le.
A memóriakezelési technikát a Z800-as a rendszer és felhasználói üzemmódú műveletvégzésnél, valamint a programok és az adatok szétválasztásánál használja. A címfordítás rendszer és a felhasználói üzemmódban is végbemehet, ezért az utasítás-referenciák el vannak különítve az adatreferenciáktól. Ez az elkülönítés megengedi, hogy a gépen 64 kbyte hosszú program 64 kbyte adattal dolgozzon anélkül, hogy az operációs rendszer beavatkozására lenne szükség.
A logikai és fizikai címtartomány közötti fordítás végrehajtására a memóriakezelő a 16 bites lap-deszkriptor-regiszterekből két készletet használ, egyet a rendszer, egyet a felhasználói üzemmódhoz. Minden 16 bites lap-deszkriptor-regiszter 12 bit címinformációt és 4 bit memóriavédelem információt tartalmaz (címfordítás: 4.5.-1. ábra).


4.5-1. ábra: A chip-en lévő memóriakezelő lefordít egy logikai címet fizikai címre a 16 Mbyte-os címmező kezelésének megvalósításához és a virtuális memória elrendezés teljes implementálásához.

4.5.1. Logikai-fizikai cím
A logikai cím az a cím, amelyet a mikroprocesszor memóriakezelője a különféle címzési módokkal kezel, a fizikai cím az a cím, amelyet a memória-rendszer fogad. Abban az esetben, ha a mikroprocesszoros rendszernek nincs memóriakezelő egysége, a fizikai cím megegyezik a logikai címmel (5.5.1-1/a ábra).
Abban az esetben, hogyha a mikroprocesszor rendelkezik memóriakezelő egységgel a processzor logikai címet állít elő, amit a memóriakezelő egység lefordít vagy kibővít, mielőtt a memória címvonalakra küldi mint fizikai címet (4.5.1-1./b. abra). Például a Z80-as mikroprocesszor 16 bites logikai címe egy memóriakezelő rendszerrel könnyen kibővíthető 24 bites címre.


4.5.1.1- ábra: Címtartomány bővítés memóriakezeléssel.
A. ábra: A címtartományt behatárolja a mikroprocesszor címbusza.
B. ábra: A címtartomány kibővítését a memóriakezelő egység teszi lehetővé, azzal, hogy logikai / fizikai címfordítást végez.

4.5.2. Lapozás a memóriában
A címfordítás elvégzéséhez sokféle technika használható, ilyen például a lapozás. Két laptípus létezik: a logikai lap, amely a mikroprocesszor címtartományának egy része és a lapkeret (frame), amely a fizikai memóriának egy fix hosszúságú blokkja. A lapkeret bemutatása céljából egy példát közlünk. A fizikai memóriában a lapkeret 4 k-s (4096 byte) blokkokból áll. A lapkeret minden byte-ja egyedülálló módon címezhető a 12 címbit egy kombinációjával (12 bit meghatároz 4096 byte-ot). Egy 8 bites processzor 64k logikai címtartománya 16 logikai lapot tartalmaz, ugyanakkor 16 Mbyte fizikai címtartomány 4096 (4k) lapkeretet tartalmazhat. A memóriakezelő rendszertérkép 16 logikai lapból áll, vagyis a mikroprocesszor 16-ot "lát" a 4k lapkeretből (4.5.2-1. ábra). Felosztva a fizikai memóriát, 4k-s lapkeretekre, mindkét memóriacím-tartomány bővül és a memóriavédelem könnyen megoldható.


5.5.2-1 ábra: MMU térképek a logikai memóriacímek fizikai memóriacímekké történő átalakításához. A CPU mindenkor csak 16 aktív lapkeretet lát.

4.5.3. Memóriacím-tartomány bővítés
A memóriacím-tartomány bővítése történhet úgy, hogy a mikroprocesszor által kiadott 16 bites logikai címből 24 bites fizikai címet generálunk (4.5.3-1. ábra).


4.5.3-1. ábra: Címfordítási eljárás logikairól fizikai címre. A logikai címtartomány ezzel 16 bitről 24 bitre bővül a lap-deszkriptor-regisztereken keresztül. A lap-deszkriptor-regiszterek címtartománya 12 bit lapkeret-cím és 4 jelzőbit.

A 16 bites logikai cím két mezőre van osztva: egy 12 bites eltolási (displacement) mezőre és a 4 bites index mezőre. A 4 bites index mezőt használjuk a 16 bites lap-deszkriptor-regiszterek kiválasztására. Ezek mindegyike 12 címinformációt tartalmaz, amivel 4096 lapkeretet lehet azonosítani a fizikai memóriában. A fizikai cím generálása a 12 bites lap-deszkriptior információk - amely a lap-deszkriptor-regisztertől érkezik - és a 12 bites logikai címmező összeillesztésével fejeződik be. Amikor a processzor a 16 bites logikai címet elhelyezi a címbuszon a cím alacsonyabb helyi értékű 12 bitje (A0-A11) megjelenik a fizikai memóriában az A12-A15 címbitekkel pedig kiválasztják a 16 lap-deszkriptor-regisztert. Ezután a 12 bites cím, amely a kiválasztott regiszterben van a buszra kerül azért, hogy előállítsa a fizikai cím magasabb helyi értékű 12 bitjét (A12-A23).
A 16 lap-deszkriptor-regiszter használata lehetővé teszi a felhasználónak, hogy 16 különálló lapkeretet érjen el bármely időpontban. A felhasználó 64 kbyte aktív memóriaterületet fog "látni" (16 lap * 4 kbyte/lap).
Ha szükségessé válik egy másik 64 kbyte-os memória szegmensben lévő lapkeret elérése, az egyszerűen megvalósítható az operációs rendszerrel, csak be kell tölteni egy új lapkeret értékét a megfelelő lap-deszkriptor-regiszterbe. Meg kell jegyezni, ha a lap-deszkriptor-regiszterekben 000-tól 00F-ig vannak hexadecimális számok, a címzés olyan mintha a címtartomány bővített lenne.

4.5.4. Memóriavédelem
A memóriavédelmet négy memóriavédelmi bittel (attribute bitek) valósítják meg. A lap-deszkriptor-regisztereket az A12-A15 címbitek választják ki. A cím- és a memóriavédelmi információ is arra a partikuláris lapkeretre vonatkozik, amelyet kikerestek (elértek). A memóriakezelő rendszerben a külső áramkörök négy memóriavédelmi bitet használnak arra, hogy jelezzék a lapkeret elérés típusát és hogy információt jegyezzenek le a lap-blokkokról. A memóriavédelmi bitek a következők: az érvényességi bit, a beírás elleni védelem bit, módosító bit és egy további bit, ami lehetőség egyéb célokra, pl. cache bit. A 4.5.4-1. ábrán látható a lap-deszkriptor-regiszterek bit-kiosztása.


4.5.4-1. ábra: A lap-deszkriptor-regiszter formátuma. Ezzel a logikai címtartomány A12-A23-ig 12 bittel növekedett és további 4 bit áll rendelkezésre a címtartományban egyéb funkciók ellátására.

Az érvényességi bit jelzi, hogy a lap-deszkriptor-regiszter érvényes-e. Ezt a bitet input vagy output berendezés írja be vagy olvassa ki a megyelelő lap-deszkriptor-regiszterbe (vagy regiszterből). Ha az érvényességi bit logikai "1" értékű, a memória elérhető. Ha az érvényességi bit logikai "0" értékű, a memória elérés érvénytelen. Amikor egy érvénytelen elérési kísérlet jön létre, akkor egy megszakítás generálódik, így egy megszakítás kiszolgálás rutin védelmet nyújt az érvénytelen eléréssel szemben.
A beírás elleni védelem bit csak olvasást engedélyez (read-only) a memória lapkeretében. Az érvényességi és a beírás elleni védelem bitet állíthatja a felhasználó SET vagy RESET állapotba. Ha a bit SET vagyis logikai "1" állapotban van, a memória beírás ellen védett. Ha beírási kísérlet történik, megszakítás jön létre. Amikor a beírás elleni védelem bit RESET, vagyis logikai "0", írási- és olvasási művelet is létrejöhet. Ez a bit akkor fontos, amikor a rendszerben multiplikált processzorok vannak és egy közös memórián osztoznak, vagy ahol egy működő rendszernek szüksége van vétlen beírás elleni védelemre, amit pl. egy végrehajtás alatt levő program idézhet elő.
A módosító bit indikálja a memórialap beírhatóságát. A módosító bit egy állapotbit, így ez automatikusan SET állapotba kerül, amikor egy lapkereten belüli logikai címre az írás befejeződik. RESET csak akkor lehet, amikor az alacsonyabb helyi értékű byte-ot töltik be a lap-deszkriptor-regiszterbe. A módosító bit jelzi, hogy a lapkeretbe a beírás megtörtént. A módosító bit határozza meg azt is, hogy mikor kell egy lapkeretet átmásolni egy másik tárolóba.
A cache bit jelzi, hogy egy lap betölthető-e a cache memóriába.
A módosító bit és az utasítás-megszakítási vagy újraindítási lehetőség kombinációja lehetővé teszi, hogy a processzor virtuális memória-rendszert implementáljon.

4.5.5. Betöltés a lap-deszkriptor-regiszterekbe
A lap-deszkriptor-regisztereket egyedileg el lehet érni, de arra is van lehetőség, hogy mint I/O blokkot érjék el a processzor I/O utasításaival. Mivel minden regiszter 16 bit hosszúságú, szükség van arra, hogy az olvasás a regiszterből, vagy az írás a regiszterbe minden regiszter vonatkozásában kétszer történjék meg azért, hogy a teljes regisztert elérjék. A kétszeres elérés biztosítása érdekében minden lap-deszkriptor-regiszternek két I/O cím áll rendelkezésére, egy a magasabb helyi értékű byte-hoz, egy pedig az alacsonyabb helyi értékű byte-hoz. Az I/O címek listája a 4.5.5-1. táblázatban található, I/O PORT regiszterek megnevezéssel.

I/O PORT regiszterek
XX00 rendszer vezérlő PORT
XX03 laphiba és rendszer állapot
XX10 Lap-deszkriptor-regiszter 0
(alacsonyabb helyértékű byte)
XX11 Lap-deszkriptor-regiszter 0
(magasabb helyértékű byte)
XX12 Lap-deszkriptor-regiszter 1
(alacsonyabb helyértékű byte)
XX13 Lap-deszkriptor-regiszter 1
(magasabb helyértékű byte)
XX14 Lap-deszkriptor-regiszter 2
(alacsonyabb helyértékű byte)
XX15 Lap-deszkriptor-regiszter 2
(magasabb helyértékű byte)
...  
XX2E Lap-deszkriptor-regiszter 15
(alacsonyabb helyértékű byte)
XX2F Lap-deszkriptor-regiszter 15
(magasabb helyértékű byte)

4.5.6. A memóriakezelő egység a Z80-as címtartománynak bővítésére
Ha nincs chip-be beépített memóriakezelő egység, BY PASS mechanizmust lehet alkalmazni a PASS mód engedélyezi a mikroprocesszor felé az utasítások végrehajtásának megkezdését. PASS módban a logikai cím bitjei (A12-A15-ig) átkerülnek a fizikai címtartományba A12-A15-ig, mialatt A16-A23-ig a fizikai címbitek SET állapotban vannak. Inicializálás után a mikroprocesszor lap-deszkriptor-regiszterei fordító módba kerülnek.
A memóriakezelés használatát a Z80-as mikroprocesszornál már leírtuk, az egyes áramkörök a memóriacím-tartomány bővítése céljából, a memóriavédelmi szempontból a teljesítménnyel és a megszakítás-kezeléssel kapcsolatosan kerülnek tárgyalásra. A memóriacím-tartomány bővítéshez a 74LS612 memóriatérkép áramköröket alkalmazzák. Ez tranzisztor-tranzisztor logikai áramkör, 12 bites lap-deszkriptor-regisztereket tartalmaz. Mivel a memóriatérkép-regiszterek 12 bit szélesek, ezért szükség van még 16 db 4 bites regiszterre a memóriavédelemhez. Ezeket a regisztereket 4 RAM memória 74LS219 és egy multiplexer 74S257 csatlakoztatásával lehet megvalósítani. A RAM memóriában a 4 bites regiszterek tárolják a memóriavédelmi biteket. Ezeket a regisztereket ugyanabban az időben töltik fel, mint a memóriatérkép-regisztereket. Ezzel rendelkezésre áll a 16 bites regiszterkészlet.
A memóriavédelmi funkció a lap-deszkriptor-regiszterekben levő memóriavédelmi bitekkel valósul meg. A lap-deszkriptor-regiszterek a memória-eléréskor kapcsolatban vannak a lapkerettel. A memória egy blokkjába történő beírás vagy kiolvasás nem mehet végbe, ha az érvényességi bit nincsen SET állapotban, vagy a beírás megkísérlése egy olyan memórialapra, amelynél a beírás elleni védelem bit SET állapotban van. Az érvényességi bitet minden olvasási vagy írási ciklus alatt vizsgálják, amivel biztosítják, a memóriablokk védelmét. Ha hiba lép fel, akkor egy nem maszkolt megszakítás (NMI) generálódik és a logikai cím bitjei (A12-A15) a LATCH-memóriába kerülnek. Ha a lap érvényes és írásművelet következik, a beírás elleni védelem bitet ellenőrzi, abból a célból, hogy a memórialapra lehet-e írni. Abban az esetben, ha egy nem érvényes (invalid) elérési kísérlet történik (valid=0), a rendszer egy beírás elleni védelem hibát jelez, aminek hatására is NMI jel generálódik, és a logikai cím bitjei (A12-A15) a LATCH-ba kerülnek tárolásra. Látható, hogy a logikai címbitek (A12-Al5) mindkét esetben a LATCH-ba kerültek, a megszakítás kiszolgáló rutin innen olvashatja ki ezeket a biteket, annak meghatározására, hogy melyik lap-deszkriptor-regiszter tartalmazza azokat a memóriavédelmi biteket, amelyek a hibát jelezték. Az I/O PORT a 03H kiolvasás hatására négy címbit kerül a D0-D3 adatvonalakra. A memóriakezelő áramköröknek két üzemmódja van, a PASS és a címfordító. Amikor a rendszert bekapcsoljuk az áramkör a PASS módba kerül és a rendszer úgy viselkedik mint egy módosítás nélküli Z80. A PASS módban és a megszakítás nyugtázás alatt az NMI a nem kívánt megszakítás megelőzése céljából tiltott. A címfordításmód megengedett, ha 00H-t írunk az I/O PORT-ba, ha a PASS módot akarjuk visszaállítani, akkor 01H-t kell beírni ugyanabba a PORT-ba. A rendszer üzemmódját az I/O PORT 03H 4 bitjének beolvasásával határozzuk meg.

4.6. CACHE memória
A Z800-as mikroprocesszor család minden tagja tartalmaz, cnip-be beépített buffer típusú 256 byte-os memóriát. Ez a memória konfigurálható, mint nagysebességű cache memória vagy mint fix címes helyi memória. A cache programozható csak utasítás-memóriaként, csak adatmemóriaként, valamint adat és utasítás-memóriaként. A cache memória meggyorsítja a programok futását mivel redukálja a külső busz elérési időt. A cache működés és update állapotban tartás automatikusan megy végbe. Helyi memóriának használva, a címzése programozható, RAM-nélküli rendszerben használható. Mivel a memória a chipbe van beépítve sebességi eltérés nem fordul elő.

4.6.1. Alkalmazási alapelv
A cache alkalmazásának az alapelve a következő tapasztalatokon alapul az újabban használatos utasítások vagy adatok nagyobb valószínűséggel ismétlődnek, mint a régebbiek, ezért a cache mindig a legújabban elért kódokat tartalmazza. Így az ismétlődő tételek végrehajtása sokkal gyorsabb lehet. A processzor a kívánt adatokat vagy utasításokat először a cache memóriában keresi, ha ott megtalálja, akkor nincs szükség a külső busz elérésre. A becslések szerint a Z800-as utasításvégrehajtási sebessége 2-8-szor nagyobb a cache memória alkalmazása következtében mint a Z80-as processzoré.

4.6.2. A cache memória belülről
Ha a rendszerben cache memória van, a memóriaszervezés úgy történik, hogy a 16 byte-nak 16 vezeték áll rendelkezésére (4.6.2-1. táblázat).

A Z800-as cache memóriájának szervezése

 
20 bit
16 bit
16*8 bit
0 sor
1 sor
2 sor
.
.
.
15 sor
0 TAG (Toldalék)
1 TAG
2 TAG
.
.
.
15 TAG
érvényes bitek
érvényes bitek
érvényes bitek
.
.
.
érvényes bitek
cache adat
cache adat
cache adat
.
.
.
cache adat

Minden vezeték összeköttetésben van két mezővel:

A címtoldalék-mező kapcsolódik a fizikai cím 20 bitjéhez, amit a CPU és a memóriakezelő generál. Ha egy kapcsolódás létrejött a 16 toldalékcím bármelyikét illetőleg fizikai cím alacsonyabb helyi értékű 4 bitjét használják a szükséges byte vagy szó kiválasztására.
Ha az érvényességi bit (SET) kiolvasása megtörtént, és cache találat jött létre, a CPU felhasználhatja azt az információt (egy byte), amit a cache-ból kiolvasott. Ha az érvényességi bit nincsen SET állapotban, a processzor elküldi a címet a külső memóriába, és onnan hozza ki az adatot. Ezt az adatot a processzor felhasználja a program végrehajtásához, ugyanakkor beírja a cache memóriába is, amelynek hatására az érvényességi bit SET állapotba kerül, minden cache memóriába írt byte vonatkozásában. Ha a 16 címtoldalékból egyik sem illeszkedik a 20 bites címhez, a cache memória "túlcsordul" (Flushed), melynek hatására a processzor az összes érvényességi bitet törli, érvényteleníti a byte-ot és a 20 bites cím egy új toldalék-címmé válik. Ezután a CPU az aktuális byte-ot vagy byte-okat a külső memóriából hozza ki. A Z8116 és a Z8216-on levő Z busz interface lehetővé teszi, hogy a processzor a cache memóriába történő betöltésnél a busz tranzakcióhoz a kötegelt "burst" módot használja. Bár a "burst" módot a 64 kbites dinamikus RAM-hoz tervezték, hogy ellássa a sorosan "adagokba" szervezett kimenetet, mégis jól használható a cache memória feltöltéséhez. Ha nincs szükség a cache memóriára, áramkörileg ki lehet kapcsolni és a memória használható mint egy 256 byte-os fix címes RAM. A cache memória használható mint csak olvasható (ROM) memória, vagy tartalmazhat egy olyan programrészt, amelyet sebességnövelés szempontjából szükségesnek tartunk a chip-ben elhelyezni, ilyen pl. a megszakítás rutin.
A cache memória működése a 4.6.2-2. táblázatban összefoglalva látható.

ciklus
MMU - cache tiltó bit
cache tevékenység
memória tevékenység
csak olvasás
csak utasítás
utasítás olvasás találat
lényegtelen
lényegtelen
nincs változás
nincs változás
utasítás olvasás hiány
törlés
lényegtelen
frissítés
nincs változás
utasítás olvasás találat
beállítás
lényegtelen
nincs változás
nincs változás
adat olvasás találat
lényegtelen
lényegtelen
nincs változás
nincs változás
adat olvasás hiány
beállítás
lényegtelen
nincs változás
nincs változás
adat olvasás hiány
törlés
beállítás
nincs változás
nincs változás
adat olvasás hiány
törlés
törlés
frissítés
nincs változás
adat írás találat
lényegtelen
lényegtelen
frissítés
frissítés
adat írás hiány
lényegtelen
lényegtelen
nincs változás
frissítés

Cache memória alkalmazása a végrehajtási idő csökkentésére utasításkihozás 4.6.2-1. ábra.

Cache memória alkalmazása a végrehajtási idő csökkentésére adatelérés 4.6.2-2. ábra.

Az SCII-EBCDIC karakter átalakítás cache igénybevétellel 4.6.2-3. táblázat:

Címke mnemonik komment
START LD IX,SBUF tárold a forrás-buffer-címet az X regiszterben
LD IY,DBUF tárold a cél-buffer-címet az Y regiszterben
LD DE,TABLE tárold az EBCDIC táblázat címét a D-E regiszterpárban
LD B,"EOT" EOT karakter
TXLATE LD HL,DE a H-L regiszterpár mutat a táblázat START-ra
LD A,(IX+0) karakter a forrás-bufferből
AND A,07F paritásbit leválasztás
ADD HL,A kalkuláld ki az indexet a táblázatban
LD A,(HL) karakter lefordítása
LD (IY+0),A tárold a karaktert a cél-bufferben
INC IX mutass a következő karakterre a forrás-bufferben
INC IY mutass a következő karakterre a cél-bufferben
CP A,B utolsó karakter?
IR NZ,TXLATE nem; csináld még egyszer
RET igen; utolsó átalakítás

4.7. A chip-ben levő periféria illesztők, DMA, számláló / időzítő
A Z800-as chip-be beépített periféria illesztők hatása a teljes rendszer szempontjából azt jelenti, hogy minimális helyet foglal el a nyomtatott áramköri kártyán, minimális lett az eszközök közötti összeköttetés és a komponensek száma is. Ez az árfekvés szempontjából is jelentős. A Z8208 és a Z8216 4 DMA csatornája független, nagysebességű adatátvitelt tesz lehetővé; a soros PORT, egy teljes duplex aszinkron interface lehetőséget biztosít, a sebesség 10 MHz-es órafrekvenciánál 2 Mbit/s. A DMA csatornák adatátvitele programozható. A programozásnak megfelelően adatátvitel jöhet létre: memóriából memóriába, memóriából egy I/O eszközre (oda-vissza), vagy az egyik I/O eszközről egy másik I/O eszközre. Az adatok három üzemmódban továbbíthatók: lépésenként, kötegelten "burst" vagy folyamatosan.
A lépésenkénti átviteli módban a DMA szekció mentesíti a buszt, így azt a CPU vagy egy másik DMA csatorna használhatja minden byte vagy szóátvitel között; a kötegelt "burst" átviteli módban teljesül az a lehetőség, hogy a DMA adatátvitel olyan hosszú ideig tartson, ahogy azt a periféria kérése megkívánja, vagyis a periféria "kész" jelzésig. A folyamatos mód megengedi a DMA áramkörnek, hogy átvigyen egy teljes adatblokkot anélkül, hogy mentesítené a buszt. A kontroller minden csatornája működhet "no transzfer" - nincs átvitel - módban, amikor úgy működik, mint egy számláló.
Minden DMA csatorna a következőkből áll: egy 24 bites forráscím-regiszter, egy 24 bites rendeltetés cím-regiszter, egy 16 bites számláló-regiszter és egy 16 bites átvitel deszkriptor-regiszter. Mindezek a regiszterek a CPU I/O tartományban, I/O utasításokkal érhetőek el a CPU belső buszán keresztül. Külső kapcsolatok létesítéséhez, adatátvitelhez a DMA csatornák a processzor cím, adat és vezérlő vonalait használják.
Minden csatorna rendelkezik egy olyan bemenő vezetékkel, amelyen keresztül a csatorna jelzést kap arról, ha egy külső eszköz adatátvitelt kér.
Mind a négy csatornát a master DMA kontroll-regiszter vezéreli, pl. összekötheti az egyiket a másikkal, vagy a soros I/O csatornákkal. Amikor a DMA csatornákat összekapcsolják, az egyik csatorna úgy működik, mint egy slave csatorna a master csatornába tölti be az új címet, és a deszkriptor információt. A master csatorna átvisz egy adatblokkot a rendeltetési helyére és azután addig vár, ameddig a slave csatorna a memóriából információt nem kap, az új adat (4.7-1. ábra) felfrissíti a regisztereiben levő információkat. Ezzel a struktúrával különböző típusú átvitelek valósíthatók meg, különböző memóriarekeszek iniciálhatók anélkül, hogy a CPU-t igénybe vennénk.


4.7-1. ábra: Összekapcsolt 2 csatornás DMA műveletek, Az egyik csatornába töltik be a másik csatorna-vezérlő információját, ami az időt minimalizálja, mert a vezérlő paraméterek átvitelekor a processzornak le kell állnia.

Minden processzor chip-ben négy számláló / időzítő egység van, de a Z8208 és a Z8216 típusok azt is lehetővé teszik, hogy három számláló / időzítő "külső" célokra is igénybe vehető legyen a negyedik csak belső funkciókra használható. A Z8208 és Z8216-on levő három külső igénybevehető számláló / időzítő teljes 16 bites lefelé számláló áramkör, amelyeket egymástól függetlenül lehet programozni, a külső események számlálására (számláló mód), vagy belső időzítésre (időzítő mód). A 16 bites számlálók közül kettő belül összekapcsolható, így 32 bites számláló állítható elő.
Használatban minden számláló be van töltve egy kezdeti értékkel, amelyet a számláló 16 bites időkonstans regiszterében tárolnak (latch). Amikor a számláló értéke eléri a nullát az a következő események bekövetkezését idézheti elő: megszakítás generálódik, külső impulzus generálódik, vagy a számláló töltődik be az időkonstans regiszterből, hogy újraindítsa a lefelé számlálási szekvenciát. Hogy ezek közül az események közül melyik következzék be, parancs-bit-opcióval lehet meghatározni. Minden számláló kapuzható vagy triggerelhető egy külső jellel vagy software-val, ez lehetőséget ad további vezérlésre.

A soros PORT funkcionális egység segít az időzítésben, mint egy adatátviteli (baud-rate) generátor, vagy mint egy külső óra. A soros PORT szimultán adhat és fogadhat adatokat, két DMA csatornát kapcsolhat össze az adó-vevő részben, ezzel lehetővé teszi az automatikus, nagysebességű soros adatátvitelt. A PORT mint univerzális aszinkron adó-vevő beállítja az adatformátumot, ami a következőkből áll: egy start bit, 5-8 adatbit, paritás bit (páros vagy páratlan vagy nincs paritás), egy vagy két stop bit.
A Z800-as dolgozhat ROM nélkül slave processzorként-egy "host" gazda rendszerben. Ha a Z800-ast slave processzorként használjuk egy nagyobb rendszerben a soros PORT elvégzi az adatok vagy a programok távirányított betöltését. A nagyobb távolságra történő betöltést "bootstrap" segíti, ami a processzor RESET állapotában választható ki. Választáskor ez a mód automatikusan egy DMA csatornát kapcsol a soros PORT vevő oldalához egy nem létező rendeltetési helyet (000000) programoz a DMA csatornába, beállítja a soros PORT adatformátumát és megkezdi az adat 256 byte-jának betöltését a soros csatornán keresztül a memóriába.

4.8. Multiprocesszor működés
A Z800-as processzor működhet multiprocesszoros rendszer tagjaként. A Z8208 és a Z8216 egységek rendelkeznek olyan chip-be beépített lehetőségekkel, amelyek biztosítják a multiprocesszoros rendszeren belüli összeköttetést. A 4.8.-1. ábrán látható kapcsolás kettő vagy több processzort tartalmaz, amelyek mindegyike rendelkezik egy helyi - lokális - busszal, amely néhány memória kombinációt és az I/O eszközöket látja el összeköttetéssel az osztott globális buszon keresztül összekötve a memóriablokkokkal. Ez az architektúra megkívánja, hogy a globális busz erőforrásainak allokálásához a busz-használat kiválasztása logikai áramkörökkel történjék.


4.8-1. ábra: Multiplikált Z800 processzorok komplex rendszerben. Az összekötés a globális memórián keresztül valósítható meg, a globális buszrendszer kérés / nyugtázással és a lokális címregiszter szolgáltatásaival.

A Z800-as címtartománya a globális buszon keresztül osztható ki a processzorok helyi címregisztereihez. A kapcsolás tartalmaz egy master processzort a globális busz vezérléséhez és slave processzorokat az allokálási feladatokhoz.

4.9. A Z8216 köré épített mikroszámítógép
Ha a nyomtatott áramköri kártyák méretét akarjuk csökkenteni, akkor a legjobb választás a Z8216 típus. Ez az eszköz sok olyan funkcionális egységet tartalmaz, amely a mikroszámítógépek felépítéséhez szükséges. A megszakítások kezelése és egy párhuzamos PORT a nyomtatóhoz két Z8036 számláló / időzítővel és párhuzamos I/O áramkörökkel valósítható meg. Továbbá a soros I/O-hoz egy Z8030 kettős csatornájú soros összeköttetés vezérlő köthető be a helyi (lokális) buszba (4.9.-1. ábra).

4.9-1. ábra: Mikroszámítógép rendszer. A Z8216 köré épített párhuzamos I/O és megszakítás-vezérlőként két Z8036-ot és egy Z8030-at alkalmaztunk, soros összeköttetés-vezérlőként.

A processzor saját óraoszcillátort tartalma, valamint egy órakimenetet, a beépített kristállyal az összes időzítés megvalósítható. A számláló / időzítő egyike óragenerátorként működik a belső soros PORT-okhoz, a chip-en kívüli soros összeköttetést vezérlő egy saját bit-frekvencia generátorral rendelkezik. A speciális állapot- és vezérlőjeleket a Z8216 modul szolgáltatja. Ezek egyszerűsítik a külső logikát, a busz és buffer vezérlőjelek generálásánál. Az alacsonyabb helyértékű 16 cím/adat vonal demultiplikálásához a címregisztert (latch) aktiválják a címaktiváló (strobe) vezetéken keresztül, az állapotvezetékek jelei az 1-10 vagy az 1-16 dekóderekkel dekódolhatóak. Az első 10 állapot-kimenetet olyan rendszerekben használják, amelyeknek nincs bővített processzoruk, így kisebb dekóder használható.
A dinamikus RAM (1 Mbit kapacitású) frissítésére a processzor tartalmaz egy 10 bites saját frissítő generátort. A processzor automatikusan tudja generálni a WAIT állapotot, ezzel lehetőség van arra, hogy a busz-időzítés és a memória elérési sebesség optimális legyen.

V. Rész: Z80000

5.1. A Z80000-es mikroprocesszor család bemutatása
Az egykor pontos határokat a mikro-, mini- és a központi egységet és memóriát tartalmazó nagy-számítógép architektúrák között gyorsan elmosta a VLSI áramkörök tervezésének előrehaladása. A VLSI-k egyik reprezentánsa a 32 bites Z80000 típusszámú mikroprocesszor. A másodpercenként 1,5 millió utasítást végrehajtó Z80000 CPU - a 32 bites cím- és adatformátummal megvalósítható funkcionális lehetőségen és teljesítményen kívül - egy 32 bites pipeline processzorral, - 10 MHz-es CPU órafrekvenciával - rendelkezik, amely a virtuális memóriakezeléshez a CPU-ba beépített cache memóriát tartalmaz.
A szabadon választható lehetőségek - mint pl. a szegmentált vagy a lineáris címzés, a címzési tartomány bővítése vagy szűkítése, a szervezési és a fordítási táblázatok, valamint a be/kimeneti adatvédelem módja - lehetőséget biztosítanak arra, hogy a Z80000 CPU-t speciális alkalmazások egyedi követelményeihez lehessen igazítani. A Z80000-es processzor külső illesztő egysége, olyan rendszerek kialakítását teszi lehetővé, amelyek működési tartománya a speciális célra tervezett vezérlőktől a szuper-mini számítógépekig terjed.
A Z80000 CPU a Z8000 CPU-val felülről kompatibilis. A Z8000-hez viszonyítva a Z80000-nek nagyobb a címtartománya, több a regisztere, több a címzési módja és több utasításból áll az utasításkészlete. A Z80000 32 bites logikai címzéssel képes arra, hogy közvetlenül érjen el 4 milliárd byte-ot, a négy címmező mindegyikében; a teljes címezhetőség 16 milliárd byte. Ezek a címmezők külön utasítás- és adatpartíciókat foglalnak magukba mind a rendszer, mind a felhasználói üzemmódban.
A jelző- és vezérlőszó (flag and control Word)-regiszter két bitje lehetővé teszi a programozók számára, hogy háromféle címzési mód között válasszanak; ezek: a kompakt, a szegmentált és a lineáris.

A bemenet / kimenet címzés két módja a Z80000 rugalmasságát növeli. Az egyik módszernél a CPU a memóriakezelő rendszer segítségével állítja elő az adatmemória hivatkozásokat a bemenet / kimenet PORT-okon keresztül Ez a technika a felhasználó számára védett hozzáférést biztosít a be/kimenetekhez. A második megoldás akkor hasznos, amikor a memóriakezelést kikapcsoljuk, mivel privilegizált utasításokat alkalmazunk, amelyeket külön bemenet / kimenet céljára készítettek. Bármelyik módszert használjuk, a bemenet / kimenet illesztő státust és időzítést generál a hivatkozásokhoz.
A Z80000 mikroprocesszor 9 "általános" címzési módot tesz lehetővé, melyek legtöbb utasításnál felhasználhatók. Ezek a módok a következők: regiszter-, közvetlen címzés, közvetett regiszter-, index, bázis, azonnali, bázisindex plusz eltolás, programszámláló relatív és programszámláló relatív plusz index. A legutóbbi hármat csak a szegmentált műveletnél alkalmazzuk. A többi általános címzési mód lehetővé teszi, hogy az operandusokat regiszterben, az utasításban vagy memóriában helyezzük el. Az indexben, bázisindexben, vagy relatív index címzési módban használt index-regiszter lehet egy szó vagy egy hosszú-szó. Az alkalmazástechnikában a leggyakrabban alkalmazott memóriacímzési módokat kompakt módon lehet kódolni, a legritkább esetben alkalmazunk olyan hosszú kódolásokat, amelyek a teljes címmezőt átfogják.

5.2. Regiszterek, utasítások
A Z80000 mikroprocesszornak 16 db 32 bites általános célú regisztere van. Továbbá tartalmaz egy 32 bites programszámlálót, egy 16 bites jelző-vezérlőszó- és kilenc egyéb vezérlő-regisztert is. A rugalmasságot növeli a regiszterállomány átlapolt szervezése is, mert akkumulátorként az első 16 byte-ot használja fel. A regiszter-állomány ugyanezen részét használják a nyolc egy-szavas, valamint a négy hosszúszavas általános regiszter-készletként. Ez a szervezés lehetővé teszi a byte-ok kényelmes változtatását, különösen a byte kitöltő műveleteknél, miközben a legtöbb regiszter "üres" marad, vagyis alkalmas a címek és egyéb adatok tárolására. A regiszterek közül kettő a veremtár mutató (stack pointer) (SP) és a keret mutató (frame pointer) (FP) funkcióit látja el, a CALL, ENTER, EXIT és RETURN utasításoknál.
A programszámláló, valamint a jelző- és vezérlőszó-regiszterek alkotják a programállapot-regisztereket, amelyek tartalma megszakításkor automatikusan kimentődik. A jelző- és vezérlőszó-regiszterben levő bitek jelölik ki a felhasználói oldalról igényeit üzemmódokat, a leálláshoz és a megszakításokhoz szükséges maszkokat, az aritmetikai és logikai utasításokkal beállított jelzőbiteket (flageket) és információt adnak a feldolgozás állapotáról. A többi vezérlő-regisztert a memóriakezelésnél és a rendszer konfigurálásánál használjuk.
A jelző- és vezérlőszóban van az a bit, amely kijelöli, hogy a processzor rendszer vagy felhasználói üzemmódban fut-e. Csak a rendszer üzemmódban futó programok hajthatnak végre bemeneti / kimeneti utasításokat, módosíthatják a memória kezelését végző és a megszakításokat vezérlő regiszterek tartalmát. Ez a privilegizált mód (amelyet rendszer üzemmódnak nevezünk) a veremtár-mutatóval van védve a felhasználói üzemmódtól. A memóriakezelő mechanizmus védi az operációs rendszert a felhasználói programok által okozható károsodástól, valamint védi a felhasználói programokat a többi felhasználói program által okozható károsodás ellen is. Ily módon az operációs rendszer kényes részeit általában rendszermódban használhatjuk. A felhasználói módban végrehajtott programok igényelhetik, hogy az egyes feladatok rendszermódban kerüljenek végrehajtásra a rendszerhívó és belső megszakítást kezdeményező "trap" utasítások segítségével.
A programozót közvetlenül szolgálhatja a Z80000 architektúrája, mivel annak utasításkészlete olyan programokhoz igazodik, amelyeket magas szintű nyelven írtak; pl. C-ben vagy PASCAL-ban. Az utasítások 8-16-32 bites operandusokkal dolgozva bináris, aritmetikai, logikai, előjeles és nem előjeles szorzási és osztási műveleteket kezelnek, valamint string (füzér) műveleteket, pl. eltolás, összehasonlítás, vizsgálat, keresés és konverzió. Más utasítások olyan bitmezőket változtatnak meg, amilyenek pl. a programcsomagokhoz és a videografikákhoz vannak hozzárendelve. A CALL, ENTER, EXIT és RETURN utasítások használatakor a regiszterek mentését, illetve visszaállítását is segíti a processzor, kivétel kezelést is biztosít, amellyel egy, az ADA-t támogató aszinkron belső megszakítás kezelhető.

5.3. A teljesítménynövelés eszközei
A lebegőpontos aritmetikai utasítások gyors végrehajtásához rendelkezésre áll a Z8070 aritmetikai egység (co-processzor). Amikor a co-processzor nincs beépítve a rendszerbe, akkor a lebegőpontos utasításokat a CPU software úton hajtja végre. A Z8070 binárisan kódolt decimális stringekben kezeli az aritmetikát.
A Z80000 CPU azonkívül, hogy lebegőpontos aritmetikát kezel az IEEE P754 előírások szerint, futásidő hibajelzést és software hibakeresést is lehetővé tesz. A hibakereséshez a programozók töréspont utasításokat és utasításonkénti végrehajtást is használhatnak. A lebegőpontos műveletekhez rendelkezésre állnak a következő belső okok "kivételek" miatti belső megszakítások (trap); egész szám túlcsordulás, hardware méret nem elegendő stb. Működő rendszer leállása pl. rendszerhívás, a privilegizált utasítás, a hibás memóriaelérés és a laphiba eseten nem okozhat hibát a felhasználói programok végrehajtását illetőleg.
Amikor a CPU felfedez egy "kivételt" - legyen az leállás (belső megszakítás) vagy megszakítás - a programszámláló és a jelző- vezérlőszó-regiszter tartalma kimentődik a rendszer veremtárába. Ekkor a CPU új programszámlálót, valamint jelző- és vezérlőszót hoz be egy táblázatból a memóriába.

5.4. Memóriakezelés, kész "READY" referencia
A Z80000 processzor-chip-ben van elhelyezve a memóriakezelő funkcionális egység, melynek segítségével az operációs rendszer könnyen kezeli a 4 gigabyte-os címmezőt, miközben ellátja a memóriavédelmet és a címfordítást is. A CPU ezt egy lapozó-fordító mechanizmussal hajtja végre, amely hasonló a nagy központi egységekben és a szuper-mini számítógépekben használtakhoz. A memóriakezelő mechanizmus felosztja a logikai címmezőt 1 kbyte-os lapokra, a fizikai címmezőt pedig 1 kbyte-os keretekre. Mivel a lapcímzést át lehet alakítani bármilyen fizikai keret előállítására, így a memóriakezelés egészen egyszerűvé vált. (Fizikai cím = abszolút cím)
A Z80000 CPU-val és az operációs rendszerrel a programmal generált logikai címeket olyan fizikai címekre fordítják, amelyek közvetlenül címzik a memóriarekeszeket. Az operációs rendszer megalkotja a fordítási táblázatokat a memóriákban, majd iniciálja a mutatókat, hozzárendeli a CPU vezérlő-regiszterek táblázataihoz, ezt követően a Z80000 CPU automatikusan a táblázatokra hivatkozik a címfordítás végrehajtását és az elérésvédelmet illetőleg. Az operációs rendszer segít a virtuális memória kialakításában. A CPU külön jelöli azokat a lapokat, amelyekre hivatkoztak, és azokat, amelyeket módosítottak. A programszámláló vagy más regiszterek tartalmának korrigálása nem szükséges, mivel a címfordítási művelet után a CPU automatikusan alaphelyzetbe áll, ami lehetővé teszi az utasítások végrehajtásának újraindítását.
A processzornak és a memóriakezelő funkcióknak ugyanazon chip-en történő elhelyezése lehetővé, teszi, hogy a fordítási hibákat azelőtt fedezzük fel, mielőtt az olvasás megtörtént. Ez egyszerűsíti a hibajavítást, ami növeli a teljesítményt. A memória elérése gyors, mivel a CPU fizikai címeket generál, elkerülve ily módon a "külső" memóriatérkép áramkör használatából eredő késéseket.
Egy speciális, a chip-en levő TLB buffer (Translation Lookaside Buffer) hordozza azt az információt, amely a 16, legutóbb használt lap fordításához szükséges. A címkiosztást egy logikai címzési példán mutatjuk be. Ha a logikai címzésnél a lap címéhez illesztünk egy belépést (ENTER) a TLB asszociatív-tag (toldalék) memóriában - TLB találat - a megfelelő fizikai keret címét a TLB adatmemóriából lehet kiolvasni. Ha a logikai címzésnél a lap címe nem illeszkedik egyik érvényes TLB címhez sem (TLB tévesztés), akkor a CPU úgy hajtja végre a fordítást, hogy a memóriában levő táblázatokra hivatkozik, a TLB-be való hiányzó (tévesztett) "belépést" pedig helyettesíti a legutóbb használttal.
Az 5.4-1. ábra mutatja azt a négy logikai címmezőt, amelyet a címfordító mechanizmus arra használt, hogy betöltsön egy hiányzó "belépési pont"-ot (ENTRY) a TLB-be. A fordítási eljárás a CPU-ban levő négy táblázat (-deszkriptor-) leíró regiszter kiválasztásával kezdődik, amelyek a következők: regiszter utasításmező-regiszter, rendszer adatmező-regiszter, normál utasításmező-regiszter és normál adatmező-regiszter. A táblázat leíró regiszter a memóriában levő "szint 1." táblázat kezdetére mutat.


5.4-1. ábra: Transzlátor. A logikai címben levő multiplikált mezők a különböző táblázatok belépéseire mutatnak, amikor a Z80000 egy logikai címet fizikai címmé fordít le azért, hogy a TLB-be betölthesse a lefordított programot.

A logikai cím Ll-N0-val jelölt mezője a táblázatok indexeként kerül felhasználásra, amikor a "szint 1." táblázat belépési pontját kell kiválasztani. Ez a "szint 2." táblázat belépési pontjára mutat. A PAGE-NO mezőt a logikai címben indexként használják ehhez a táblázathoz, a lap-táblázat belépési pontjának kiválasztásához. A 4 byte-os lap-táblázat belépési pontja tartalmazza a lapkeret fizikai címet és a laphoz képesti relatív címmel együtt megadja a fizikai (abszolút) címet.
A lap-táblázat ENTRY-ben levő 31 bit egy logikai 1-gyel indikálja a memóriaterület bemenetét (kimenetét /I/O). Ekkor a CPU az I/O állapotot és időzítést használja referenciának. Ily módon a címfordítási eljárás a rendszerekben lehetővé teszi, hogy a memóriaterület bemeneti / kimeneti eszközeihez a hozzáférés védett legyen.

kód
rendszer
üzemmód
normál
üzemmód
0000
na
na
0001
na
re
0010
e
re
0011
re
re
0100
na
e
0101
e
e
0110
na
r
0111
r
r
1000
next
next
1001
na
rw
1010
r
rw
1011
rw
rw
1100
na
rwe
1101
e
rwe
1110
re
rwe
1111
rwe
rwe

5.4-1. táblázat: hozzáférési védelem

na
r
w
e
next
= nincs hozzáférés
= olvasás hozzáférés
= írás hozzáférés
= végrehajtás hozzáférés
= a következő fordítási táblázat védelmi mezőjének használata, vagy nincs hozzáférés.

A hozzáférés-védelmi információ egy 4 bites mezőben kódolt a fordítási eljárás minden szintjén. A fordítási eljárás az előbb említett CPU táblázatleíró regiszterek segítségével jut el a táblázatokig, majd a fenti hozzáférési védelmi kód alapján választja ki a megfelelő táblázatot. Akkor megfelelő a táblázat, ha a kód nem 100016.
A programozónak lehet tulajdonos kódja is. Ez védhető mindenfajta illetéktelen hozzáféréstől. A programoknál is, mint láttuk, adható többféle hozzáférési mód, engedélyezhető csak végrehajtás is.
Különböző választható lehetőségek révén csökkenteni lehet a szintek számát és a táblázatok nagyságát. Ha a memória címmezők nincsenek külön választva, két vagy több fordítási táblázat-deszkriptor-regiszter tölthető be ugyanazzal az értékkel, így az új címmezőkhöz a táblázatok közösek.
A táblázat-deszkriptor-regiszter azt is meghatározhatja, hogy az 1. szintű és a 2. szintű táblázatok egyike vagy mindegyike elhagyható-e a fordítási eljárás alatt. Az 1. szintű táblázatok elhagyása a 24 bites címzésnél előnyös. A 16 bites címeknél mind az 1. szintű, mind a 2. szintű táblázatokat el lehet hagyni. A táblázat méreteit úgy lehet csökkenteni, hogy 256, 512 vagy 768 byte-ot foglalunk le a fordítási táblázatok számára, a fennmaradó ENTRY-ket pedig érvénytelennek tételezzük fel. A táblázatokat hatékonyan lehet allokálni figyelembe véve a lefelé növekvő veremtárakat.
A Z80000 CPU külső interface-e olyan bővítéseket is tartalmaz, amelyek növelik a sávszélességet és egyszerűsítik a rendszertervezést. Buszrendszere kompatibilis a Zilog Z busszal. Mind a 16, mind a 32 bites memória adatutak kezelését támogatja. A memória két tartományából az adatút szélességet és a várakozó állapotok számát külön lehet programozni. Például a memória egyik része a 16 bites adatutat használja különböző várakozó állapotokkal a ROM betöltéséhez. Ugyanakkor a memória másik része a 32 bites adatutat nem várakozási állapotban a dinamikus RAM-hoz használja.
A Z80000 rendszerben buszon futó műveletek frekvenciája fele vagy negyede a CPU óra bemenetének. A szabványos, 10 MHz-es CPU általában egy 5 MHz-es buszt használ. Ennek alternatívájaként egy 20 MHz-es CPU ugyanazt a busz-időzítést használhatja, ha 1/4-es tényezőt választ az 1/2 helyett. A CPU-ban levő ("belső") cache memória segít abban, hogy a processzor működését lehetőleg "függetlenné" tegyük a memória elérési időtől.
Mivel a Z80000 68 kivezetésű tokban van, a tok 32 kivezetésén a cím és az adat idő-multiplexelt. Valamennyi tranzakció egy cím-mintavétellel kezdődik, amely igazolja a cím, a státusz (a tranzakció típusát specifikáló) az olvasás-írás és az átviendő adat méretének (8, 16 vagy 32 bit) érvényességét. A címzést követően a tranzakció adatátviteli része alatt működik az adat-strobe vonal. A slave eszköz két jelvezetéket használhat 4 lehetséges válasz kódolására; a Z80000 rendszerben:

A bemenet és kimenet engedélyező vezetékeket arra lehet használni, hogy vezéreljék a bufferek irányát a multiplikált cím és adatvonalakon.
A kötegelt (brust) adatátvitel esetén a Z80000 illesztő egységnek (interface) egyéb szolgáltatásai is vannak. Itt a tranzakció alatt a CPU multiplikált adatmintákat tud kiadni egyetlen cím-mintavételt követően. Ez megnöveli a busz tényleges sávszélességét, amikor adatokat visz át egy memóriablokk egymás után következő rekeszeibe. A kötegelt adatátvitelhez - egy tranzakció egy adatmintával és várakozó állapotok nélkül - három busz órajel szükséges. Négy adatminta és várakozó állapotok nélküli tranzakcióhoz hat busz órajel szükséges, így ennél az átviteli tranzakciónál a busz sávszélesség kétszerese az előzőnek. Az 5 MHz-es busz órajellel (10 MHz-es CPU órajel), 32 bites adatúttal és négy adatátvitellel tranzakcióként a sáv szélessége: 13,3 Mbyte/s.
Egy kéthuzalos "handshake" ( hardware összekötés ) rendszer - kötegelt ( burst - BRST ) és kötegelt -nyugtázott ( burst acknowledge - BRSTA ) - szabályozza az átvitelek számát egy kötegelt tranzakcióban. A CPU addig biztosítja a BRST-működést, amíg az kezelni tudja az adatokat, a memória pedig addig biztosítja a BRSTA-működést, amíg képes erre. Akár a CPU, akár a memória leállíthatja a kötegelt tranzakciót. Ha a memória állítja le a kötegelt átvitelt, a CPU egy másik tranzakciót kezdeményez a fennmaradt adatok átvitelére. A tervező választására van bízva, hogy a memória nyugtázza-e a kötegelt átviteleket. A köteg-átviteli-protokoll - amelyet a CPU használ -a chip cache memóriáján keresztül illeszkedik a közbülső memória-rendszerekhez, vagy az olyan memória-rendszerekhez, amelyeket "nibble" módú RAM -okkal terveztek. A 32 bites Z80000 CPU olyan multiprocesszoros konfiguráció központjaként is szolgálhat, amely co-processzorokat, slave processzorokat, szoros és lazán csatolt multiplikált CPU-kat tartalmaz. Olyan co-processzorok, mint pl. a Z8070 aritmetikai processzor, speciális hardware-rel segít a CPU-nak abban, hogy egyszerű utasításokkal komplex műveleteket hajtson végre. A Z80000 és Z8070 kombináció (10 MHz-n) képes arra, hogy 600000-nél több lebegőpontos műveletet hajtson végre másodpercenként, egyszeres pontosságú "vektoros" számítások formájában.

5.5. Pipeline
A Z80000 CPU hatfokozatú szinkron pipeline programok végrehajtására is aLxalmas (5.5-l.ábra). Az utasítások a pipeline valamennyi fokozatán szekvenciálisan haladnak át, az operandust tároló fokozat esetleges kivételével. A pipeline különböző fokozatai egyidejűleg tudnak működni, különböző utasításokat, vagy egy komplex utasítás különböző részeit tudják végrehajtani. Vagyis a pipeline időben párhuzamos, térben soros működésű.


5.5-1. ábra: Hatfokozatú pipeline programvégrehajtó

A hatfokozatú pipeline programvégrehajtó növeli a 32 bites Z80000 központi egység teljesítményét. A külső memóriához való hozzáférés ehhez a működéshez nemi lenne elég gyors, ezért a Z80000 chip cache tárolóját kell igénybe venni.
Valamennyi pipeline-fokozat egyetlen processzor-ciklusban tud működni, amely két óraciklusból áll 01 és 02. A pipeline lehetővé teszi egyszerű utasítások - mint pl. regiszterből regiszterbe töltés és memóriából regiszterbe átvitel - gyors végrehajtását, a sebesség: egy utasítás végrehajtásának befejezése minden processzor-ciklusnál, ami 10 MHz-es órafrekvenciával számolva 5 millió utasítás-végrehajtás/s. A gyakorlatban a tényleges utasítás-végrehajtási sebesség a csúcsértéknek kb. egyharmada. A késleltetésnek három forrása van: néhány utasítás túlságosan bonyolult ahhoz, hogy egyetlen ciklusban végre lehessen hajtani; interferencia lép fel az utasítások között, amely késleltetést okoz; a főmemória elérése várakozásra kényszeríti a pipeline rendszert.
A rendszer utasítás-kihozó fokozat inkrementálja (1-gyel növeli) a programszámláló tartalmát és utasítás-kihozást kezdeményez. Az utasítás-dekódoló fokozat fogadja és dekódolja az utasítást, az utasítás hosszának meghatározása és a címkiszámító fokozat-vezérlő üzembe helyezése céljából. Az utóbbi fokozat tartalmaz egy PORT-ot a regiszter-állományhoz és egy összeadót speciálisan a cím-aritmetikához. A processzorciklus alatt a cím-kiszámító fokozat készen áll egy operandus kezelésére, vagy egy operandus-cím generálására a memóriában. A címfordítás a cím-kiszámításkor megy végbe. Az operandust kihozó fokozat kezdeményezi az operandushoz a hivatkozások kihozását a memóriából és fogadja az adatoltat, melyeket egy regiszterben tárol.
Az utasítás-végrehajtás a végrehajtó fokozatban megy végbe. Ennek a fokozatnak a regiszter-állományhoz két 32 bites adatút rendszere van és tartalmaz egy 32 bites ALU-t.
A byte, szó és hosszú-szó ALU műveletek végrehajtása regiszterből regiszterbe, vagy memóriából regiszterbe a processzor-ciklus alatt megy végbe. Az ALU speciális hardware-t is tartalmaz a szorzás és osztás meggyorsítására.
Az operandus tároló fokozat beállítja a feltétel jelzőbiteket és tárolja az adatokat a memóriában. Eltérően azonban az egyéb pipeline fokozatoktól az operandus tárolása több ciklust igényel, mivel az adatok tárolásához végre kell hajtani a tárolással kapcsolatos műveleteket. Ez azonban nem csökkenti komoly mértékben a teljesítményt, mivel a legtöbb utasítás végrehajtásához nem kell az eredményeket tárolni a memóriában és a tárolási művelet végrehajtása rendszerint át tudja lapolni más utasítások végrehajtását.

5.6. Adatfolyam a CACHE memórián és a pipeline-on keresztül
A pipeline architektúrák növelik a rendszer teljesítményét, de csak akkor, ha kész adatforrás áll rendelkezésre. A Z80000 32 bites mikroprocesszor pipeline működésénél két memória kihozásra (fetch) van szükség minden egyes processzor-ciklusban: az egyikre az utasítás kihozási, a másikra az operandus kihozási művelet alatt. Mivel a főmemória hivatkozások tipikusan három processzor-ciklust igényelnek, a rendszer az idő nagy részében tétlen lesz, ha minden hivatkozásnak el kell érnie a főmemóriát. A gyors memória-elérést a Z80000 cache memóriája segíti, amelyet minden óraciklusban el lehet érni, ami buffereli a legtöbb memória-kihozást (75%).
A cache memória a legutóbb hivatkozott memória rekeszek másolatait tartalmazza. Minden egyes memória-lehíváskor a CPU megvizsgálja a cache memóriát, hogy megállapítsa, vajon ezen a címen szereplő adat megtalálható-e benne, ezt a megtalálást cache memória találatnak nevezzük. Találat esetén az adat kiolvasása a cache memóriából megy végbe, ezért nem kell az adatot külső tranzakcióval a főmemóriából kihozni. Ha nincs találat, akkor a CPU egy külső tranzakciót generál a főmemóriából történő kihozásra, az adat pedig belép a cache memóriába.
A pipeline fokozat várakozásra kényszerül mindaddig, amíg a főmemóriától a hiányzó adat be nem érkezik, illetőleg a vonatkozó művelet befejeződik, ez alatt más pipeline fokozatok folytathatják a műveletek végrehajtását.
A cache memória olyan információt tárol, amelyet a főmemóriából kap 16 byte-os blokkokban. Minden egyes blokkhoz egy 28 bites toldalék (tag) kapcsolódik, amely a blokkhoz tartozó főmemória-cím legnagyobb helyértékű bitjeit hordozza. Van egy érvényességi bit is, amely a cache memóriában levő minden egyes 16 bites szóhoz kapcsolódik. A cache memóriának 16 blokkja van, ez 256 byte bináris adat tárolását teszi lehetővé. Amikor blokkhiány lép fel, a legutóbb használt (LRU - Least Recently Used) blokkot lehet felhasználni. Amikor cache memória-hiány lép fel egy utasítás kihozásánál, a CPU behozza a hiányzó utasítást a főmemóriából és előre kihozza azokat a byte-okat, amelyek a kötegelt tranzakciót alkalmazó blokkban következnek. Ha a főmemória nem támogatja a kötegelt tranzakciót, a CPU nem hoz ki előre utasításokat a cache memóriába történő tárolásra. Amikor egy cache memóriahiány lép fel egy operandus kihozásakor a CPU csak a hiányzó adatot hozza ki a memóriából. A hiányzó operandusokat csak a string utasításokhoz hozzák ki előre. Az "előre" kihozásnak ez a szelektív alkalmazása biztosítja a főmemória leghatásosabb kihasználását.
Operandus tárhivatkozásoknál, végbemegy az adatok beírása a memóriába, ezt az eljárást átírásnak nevezzük. Ha a tárhivatkozás a cache memóriában van, akkor az adat ugyancsak oda íródik be. Ha ez a tárhivatkozás hiányzik a cache memóriában, akkor a beírás elmarad. Az átírási tárolómechanizmus biztosítja, hogy a főmemória bármely címén az érvényes adatot tárolja. Olyan esetekben, amelyekben a multiprocesszorok megoszthatják az "írható" tárolót, a címfordító táblázatok lehetővé teszik azt a jelölést, hogy egyedi oldalakat lehessen a cache memóriába tölteni A rendszer eltér a Motorola MC 68020-tól, amely csak utasításokat helyez el a cache tárulóban, a Z80000 cache memória mechanizmusa szelektíven engedélyezhető az utasítások és az operandusok elhelyezésére. A Z80000 alkalmazásoknál is választhatjuk azt, hogy csak utasításokat helyezünk el a cache memóriában, ha azonban az utasításokkal együtt az adatot is a cache memória-rendszerben kezeljük, akkor a tapasztalat szerint a teljesítmény kb. 20%-kal javul.

5.7. A Z80000 processzor értékelése
A pipeline architektúra és a cache memória növeli a 32 bites Z80000 mikroprocesszor teljesítményét, ugyanakkor nehezíti a teljesítmény mérését. A probléma legjobban úgy közelíthető meg, ha felbontjuk az utasítás kezelési-feldolgozási időt három összetevőre, ezek az utasítás-végrehajtási, pipeline műveletvégzési és a memóriával kapcsolatos műveletvégzési időtartamok.
A végrehajtási idő azon ciklusok száma, amelyek egy utasítás végrehajtásához szükségesek, ha valamennyi memória hivatkozás a cache memóriára és a TLB bufferre vonatkozik a pipeline műveletek végrehajtása során más utasításokkal nincs interferencia. Az átlagos végrehajtási idő az egyes utasítások végrehajtási idejétől, valamint az operációs kódok és címzési módok frekvencia "kiosztásától" függ.

Z80000 utasítás-végrehajtási idők
a processzor-ciklusokban

Utasítás
ciklusok száma
hosszú-szó áttöltés, regiszterből regiszterbe
hosszú-szó hozzáadás, memóriából regiszterbe
szó összehasonlítás, közvetlenül a regiszterben
hosszú-szó szorzás, memóriából regiszterbe
hosszú-szó osztás, regiszterből regiszterbe
1
1
2
20
36

Az általános utasítások végrehajtása - mint betöltés egy regiszterbe, pl. egy olyan szó-operandust, amelyet a bázisregiszter-plusz-áthelyezés címzési mód specifikál - egy processzor-ciklus (két óraciklus) alatt történik. Ugyanez a betöltési utasítás 10 ciklust igényel a Zilog Z8002-ön 12 ciklust a Motorola MC 68000-en, 17-et az INTEL 8086-on és 10-et a National NS16032-n, amikor nincsenek várakozó állapotok. A Z80000 processzor átlagos utasítás-végrehajtási ideje 1,3 processzor-ciklus.
A pipeline késleltetéseit az utasítások közötti különböző típusú függések okozzák. A legjelentékenyebb időigénye az olyan elágazási (branch) utasításoknak van, mint pl. feltétel nélküli ugrás, feltételes ugrás, visszatérés stb. Ha egy elágazás következik, szünet (gap) keletkezik az utasítás-folyamban, amíg az elágazáshoz szükséges utasítás behozása végbemegy. A feltétel nélküli elágazások megvalósítása két processzor-ciklus ideig (gap) tart. A feltételes elágazás megvalósítása három processzor-ciklus ideig (gap) tart, ha nem jön létre késleltetés. Az átlagos időszükséglet utasításonként az elágazásokhoz 0,5 processzor-ciklus.
Egy másik jelentős pipeline-ből eredő késleltetés akkor áll elő, ha egy utasítás módosítja annak a regiszternek a tartalmát, amelyet a következő két utasítás valamelyike igényel a cím kiszámításához. Ha ez fordul elő, a cím-kiszámítással várni kell egy vagy két processzor-ciklusideig, amíg a regisztertartalmat módosító utasítást végrehajtják. Az átlagos késleltetés a regiszter átírási műveletek következtében 0,2 processzor-ciklus utasításonként.
Néhány további ok következtében a pipeline működésnél a késleltetés együttesen, átlag 0,2 processzor-ciklus. Az elágazások, regiszter átírások és egyéb okok miatt előálló átlagos pipeline-késleltetés 0,9 processzor-ciklus utasításonként.
A memória műveletek miatti késleltetések okai a "hiányok" azaz, amikor a hivatkozott információ nem található meg a cache-ban, illetőleg a TLB-ben. Ennek a késleltetésnek a mértéke a CPU-hoz használt memória-rendszertől függ. Itt három olyan memória-rendszert vizsgálunk meg, amelyek a Z80000 CPU-hoz alkalmazhatóak. Az 1. memóriának 16 bites adatvezeték-rendszere van, ciklusideje három processzor-ciklusidő és nincs kötegelt adatátvitele; a 2. memóriának 32 bites adatvezeték-rendszere, három processzor-ciklus ciklusideje van és nincs kötegelt adatátvitele. A 3. memóriának 32 bites adatvezeték-rendszere, három processzor-ciklus ciklusideje és kötegelt adatátvitele van (L. táblázat).

Z80000 cache memóriájának teljesítménye
Memória konfiguráció
1. memória
2. memória
3. memória
cache memória teljesítmény      
találati arány (h)
hiány utasításonként
késleltetés utasításonként
0,62
0,65
1,9
0,75
0,42
1,3
0,88
0,21
0,63
TLB buffer teljesítmény      
találati arány (h)
hiány utasításonként
késleltetés utasításonként
0,98
0,04
0,78
0,98
0,04
0,56
0,98
0,04
0,56

Amikor a processzor olyan utasítást vagy operandust hoz ki, amely nincs a cache memóriában, a főmemória eléréséhez három CPU ciklusidőre van szükség. A cache memória tényleges eredményességét a "találat" arányával (h) mérjük, ami a cache memóriában talált és a főmemóriából kihozott szavak hányadosa.
Ha meg akarjuk határozni a cache hiány által létrejött átlagos késleltetést, ki kell számítani az utasításonkénti hiányok átlagát. Átlagban 1,4 utasítás-szót és 0,3 operandusszót hozunk ki végrehajtott utasításokként. A cache memória hiányok átlagos száma tehát utasításonként az u = 1,7(1-h)-ból adódik. Az utasításonkénti átlagos késleltetés cache memória hiányok miatt 3u. A TLB hiányok miatt előálló késleltetés nemcsak a memória-rendszertől, hanem a fordítási táblázatos szintjeinek számától is függ. A TLB hiány miatti késleltetés a feldolgozásban (5+T)^x*N, ahol T a processzor-ciklusok száma 32 bites memória referencia esetén, N pedig a fordítási táblázatokban szereplő szintek száma. Az átlagos TLB hiányból adódó késleltetés kiszámítása hasonló a cache memória hiányból adódó késleltetés kiszámításához, de az operandusok tárolása is okozhat TLB hiányt, mivel lap-táblázat belépésre szükség van ahhoz, hogy az operandust tárolni lehessen a "fizikai" memóriában. Átlagosan 0,15 operandus-szó tárolásra van szükség utasításonként.
Most, hogy meghatároztuk az átlagos utasítás-feldolgozási idő összetevőit, kiszámíthatjuk a teljesítményt. A számítási eredmények szerint az átlagos utasítás-feldolgozási idő 3,4-4,9 processzor-ciklusig tart, amely függ a memória-rendszertől. Ez 1,0-1,5 millió utasítás-végrehajtás másodpercenként (MIPS), 10 MHz-es CPU óra és 600 ns memória ciklusidőt feltételezve. Összehasonlításul közöljük egy Z8000 adatát - amely ugyanazt a feladatot hajtja végre ugyanazzal az órasebességgel és memóriaciklus-idővel - eredmény = 0,7 MIPS.
Zilog termék lesz ugyancsak a max. 25 MHz-es órával ellátott processzor, amelynek teljesítménye - 240 ns memóriaciklus idő esetén - 2,5-3,7 MIPS.

5.8. ZILOG master-slave mikroprocesszoros rendszerek
A slave processzorok mint pl. a Z8016 DMA - közvetlen memória hozzáférésű átvitelt vezérlő,- vagy a Z800 I/O (be / kimenet) processzor, dedikált, a CPU-val aszinkron műveleteket hajtanak végre, a CPU által vezérelt, osztott buszrendszeren keresztül. A slave processzor számára a CPU biztosítja a buszcsatlakoztatást a kétvezetékes buszkérő / busznyugtázó "handshake"-en keresztül.
A szorosan csatolt multiplikált CPU-k önálló utasításfolyamatokat, programokat hajtanak végre és osztott memórián vagy, közös buszon elhelyezett perifériákon keresztül tartanak egymással kapcsolatot. Ezeket a közös buszrendszerrel kapcsolatos vezérlési feladatokat a CPU-n kívüli funkcionális egység látja el. A CPU-ban levő vezérlő-regiszter specifikálja a közös buszrendszerhez használt fizikai címmező tartományt. Mielőtt egy tranzakció megy végbe, a közös buszrendszeren a CPU a kétvezetékes közös buszrendszer-kérő / közös buszrendszer-nyugtázó jeleket szolgáltató handshake (hardware) eszköztől nyert információk alapján léphet tovább, amelyet külső eszköz vezérel.
A lazán csatolt, multiplikált CPU-k általában egy olyan több-PORT-os egységen keresztül tartanak egymással kapcsolatot, mint pl. Z8038 - FIFO. A Z80000 CPU-k szolgáltatják a bemenet / kimenet és a megszakítások kezelését a lazán csatolt multiprocesszoros rendszerben.

5.9. A Z80000 alprogramjai
A Z80000 CPU 15 (nem szegmentált) programját, amelyet a Zilog Z8000 mikroszámítógép rendszer alkalmaz, az alábbi táblázatban soroljuk fel. Az operációs rendszer: Zilog ZEUS, amely az UNIX változata.

A Z80000 programjai
Program
Felhasználás
C1
C2
C3
C4
CPP
DIFF
ED
GREP
LS
NM
OD
PR
SED
SORT
VI
C fordító-elemző
C fordító kódgenerátor
C fordító optimalizáló
C fordító listázó
C fordító preprocesszor
file összehasonlító
sorszerkesztő
mintakereső
file (jegyzék) listázó
betöltő modul névlistázó
oktális kiírató (core images)
formátum előállító nyomtatóhoz
"folyam" (stream) szerkesztő
szortírozó
képernyő szerkesztő

5.10. 32 bites mikroprocesszor típusok
A CPU chip-ben elhelyezett cache memória nemcsak a Z80000 mikroprocesszorra jellemző, hanem több cég pl. a Motorola, INTEL, Austin, Texas is teljesítménynövelő elemeket tesz a 32 bites mikroprocesszoraiba. A Zilog utasításokat és adatokat tárol a cache memóriában, a Motorola pl. csak utasításokat. A Motorola a co-processzorok széles tartományának előállítását tervezi, mint pl. az MC6881 lebegőpontos aritmetikai egységet.
A Motorola az N-csatornás CMOS technológiáktól azt várja, hogy az MC6820 típus teljesítmény disszipálását 1,5-2W-ra szorítja le, ami ugyanannyi, mint a 16 bites MC68000-es processzoré.
Az INTEL azt reméli, hogy vezetését a 16 bites mikroprocesszor kategóriában kiterjesztheti. Az INTEL mikroprocesszor típusok: a 8086/88, a 80186 és a 80286. Az INTEL 32 bites 80386 típusú mikroprocesszora várhatóan megkétszerezi a 286-os típus teljesítményét. A 16 bites 80286 mikroprocesszor szegmentált memóriakezeléssel rendelkezik, ezen túlmenően az INTEL hasonlóan a Zilog-hoz a 32 bites processzorához biztosítani fogja a lapozási lehetőséget és a CPU chip-ben történő memória kialakítást is.
A National Semiconductor - 32032 mikroprocesszorának 32 bites adatbusza és 24 bites címbusza van - ennek továbbfejlesztett változata 20 MHz-es, 32 bites 32132 mikroprocesszor. A National CMOS technológiával készülő processzoraiban integrálja a lapozásos memóriakezelést, a lebegőpontos aritmetikát, a megszakításvezérlést, amely a becslések szerint olyan eszközt eredményez, amely több mint 500000 tranzisztort fog tartalmazni.
A félvezető gyártóknak az a véleménye, hogy a 32 bites mikroprocesszorok piaca még kicsi, kb. 100000 db 1984-ben és max. 1 millió 1987-re (ezeket a számokat a Dataquest, Cupertino (California) kutatóintézet közölte).
A 32 bites mikroprocesszorok főbb alkalmazási területes ipari- robotika, grafikai-, orvosi-, irodai-rendszerek

Vissza a Spectrum könyvekhez

Vissza az Enterprise könyvekhez