bélyegkép|250px|Az NEC által készített Z80 klón (NEC D780C) a Sinclair Spectrum alaplapján
A Zilog Z80 az Intel sikeres 8 bites processzorának, a 8080-nak a Zilog cég által készített utódja volt. (A Zilog-ot az Inteltől kilépett mérnökök alapították.) A Z80 hatására adta ki az Intel a 8085 jelű processzorát (amely azonban továbbra is a 8080-as utasításkészletével rendelkezett, pár kisebb bővítéssel8085 processor differences: TRAP, 3 maszkolható megszakítás, RIM, SIM utasítások).
A két processzor belső felépítésben eltérő, de a Z80 felülről kompatibilis a 8080-nal, a bővítések a 8080 által nem definiált gépi kódokat használják (pl. a CB, ED, DD, FD hexadecimális kódok). Számos új utasításon kívül két új indexregisztere is van (IX és IY), illetve az alap regiszterkészletnek egy "másodpéldánya" is létezik (AF', BC', DE', HL'). A Z80-as saját assembly nyelvvel rendelkezik, amely az i8080-asénál felhasználóbarátabb.
Fejlődése thumb|280px|A Z80 eredeti DIL40 (dual in-line, 2×20 kivezetés) tokozású változatának lábkiosztása. A ponttal jelölt láb az 1-es, a számozás felülről nézve az óramutató járásával ellenkező irányban növekszik.
A Z80 első verziója 2,5 MHz órajellel üzemelt, DIL40 tokban, egyetlen tápfeszültséggel (+5V). Széles körű ismertségét a Sinclair ZX 80, ZX81, Timex gépeknek, később a ZX Spectrumnak, illetve ezek utódainak (Magyarországon az ABC 80 iskolaszámítógépnek is) köszönhette. A CPU mellé készítettek PIO (16 bites programozható párhuzamos I/O portot), SIO (soros vonali illesztő), CTC (számláló, időzítő) és DMA (közvetlen memóriavezérlő) csipeket is. A processzor az akkoriban megfizethető dinamikus memóriák frissítését megoldotta, nem kellett külön frissítő, memóriakezelő csipeket használni. Ezzel sokkal egyszerűbben alkalmazható, tervezhető, olcsóbb felhasználást tettek lehetővé.
A volt szocialista blokk is másolta, ugyanis akkoriban a COCOM lista miatt nem engedték importálni, ezért készült az U880 (a volt NDK-ban, ezt építették a magyar fejlesztésű PRIMO gépcsaládba is), de volt szovjet és bolgár megfelelője is. Később megjelentek gyorsabb változatok, valamint utángyártottak is, pl japán CPU-k voltak az újabb Spectrum sorozatokban is. A Z80A 4, Z80B 6, a Z80H pedig 8 MHz-es maximális órajellel működött.
Az 1980-as években kiterjedten használták méréstechnikai célokra is. A magyar MOMCOLOR színmérő számítóegysége Z80-as processzorral működik.
A maga idejében nagyon jól programozható, sokat tudó, és gyors processzor volt. A gyártó még 2008 végén is ajánlotta (több mint 20 évvel az első kiadása után), beágyazott rendszerekbe. Mikrovezérlőkbe a mai napig beépítik.
2024. április 15-én a Zilog bejelentette, hogy 2024. június 14-től a Z80 gyártása megszűnik.
Műszaki leírás
A Z80-as egy 8 bites CISC mikroprocesszor; adatbusza 8 bites, címbusza 16 bites. Little-endian bájtsorrendet használ.
Általános jellemzők A processzor a CISC kategóriába tartozik: utasításai változó bájthosszúak, 1–4 bájtot foglalhatnak a memóriában; megengedett a memória-operandus, az utasítások között vannak pl. komplex blokkmozgató utasítások is. Utasításkészlete egy részhalmazként tartalmazza az Intel 8080-as processzor utasításkészletét, azzal felülről kompatibilis. A bővített utasításokat CB, DD, ED vagy FD prefixek jelölik az utasításkészletben.
A külvilággal a Z80 16 bites címbuszon, 8 bites adatbuszon, és a vezérlőbuszon keresztül tartotta a kapcsolatot. A 16 bites címtartomány közvetlen címzést tesz lehetővé. Ez akkoriban elég nagynak számított, de különböző technikákkal ez tovább bővíthető; pl.: a címtartomány alsó felét ROM és DRAM, a felső felét 2 vagy több DRAM használja.
A Z80 nagyban támogatta a DRAM-ok frissítését: minden utasítás végrehajtási ciklusba egy (esetenként két!) 'frissítési ciklust' épített be, ilyenkor a címbusz alsó hét bitjén egy automatikusan növelt számlálót (az R regiszter alsó hét bitjét) adott ki, ami az úgynevezett 'RAS-only' frissítést igénylő DRAM-ok esetén maximum 16 KiB-os memóriachipek (pl. 4116) frissítésére volt elegendő, ennél nagyobb kapacitású chipek (pl. 4164 (64 KiB), 41256 (256 KiB)) esetén további számláló áramkörökre volt szükség.
A processzor aritmetikai egysége (ALU) szorozni nem tudott, de ezen felül minden szokásos aritmetikai, logikai és léptetési művelet elvégzésére képes volt. Teljes regiszterkészlete a 8080-tól örökölt és megduplázott 3 regiszterpárból (16 bitesnek összefogható, de 8 bitenként külön-külön is elérhető regiszterből), az IX, IY indexregiszterekből, az SP veremmutató regiszterből, a PC programszámláló regiszterből, valamint két 8 bites regiszterből – I (megszakítás) és R (memóriafrissítés) – állt. Utóbbi egyébként gyors változása miatt álvéletlenszámok előállítására is alkalmazható volt.
Az alapregiszterek két sorozata két külön, váltható bankba van szervezve; az előtérben lévő ill. aktív bank regiszterei elérhetőek, a háttérben lévő regiszterek tartalma nem változik (ld. regiszterek).
Van indexelt címzése, mellyel valamelyik indexregiszterben tárolt címhez képest a -128 – +127 tartományban lehet elérni a memóriát.
Fejlett multiprocesszoros üzemmódot támogató lehetőséggel látták el.
Érdekes újítás volt akkoriban a blokkos adatmozgató művelet, amikor egy-egy regiszterpárt használtak a forrás és a cél cím tárolására és egy regiszterpárt darabszámlálónak. Automatikusan ismétlő megfelelőik is vannak, és a felhasználó is tudott ciklust készíteni. 8 bites lévén volt 8 bites cikluskezelő utasítás is.
Programozási modell és regiszterek A Z80 processzor regiszterei 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 (bitpozíció) Fő regiszterek A Flag regiszter AF * B C BC D E DE H L HL (közvetett cím) Alternatív regiszterek A' Flag regiszter AF * B' C' BC D' E' DE H' L' HL (közvetett cím) Indexregiszterek IX Index X IY Index Y SP Veremmutató ** Egyéb regiszterek I Megszakításvektor *** R Frissítési számláló **** Állapotregiszter S Z - H - P N C Jelzőbitek (flag-ek) Utasításszámláló PC Program Counter * AF: akkumulátor és jelzőbitek** SP: Stack Pointer*** Interrupt vector**** Memóriafrissítési számláló, Refresh counter A programozási modell és regiszterkészlet konvencionális, és hasonlít a rokon x86 családéra. A Z80 regiszterei egy összesen 208 bites területet foglalnak el, amelyen 18 darab 8 bites és 4 darab 16 bites regiszter található. A 8080-kompatibilis regiszterek: AF, BC, DE, HL – a Z80-ban két példányban találhatók, két regiszterbankban kaptak helyet, és ezek között a processzor igen gyorsan tud átkapcsolni (egyikről a másikra, oda-vissza); ez a tulajdonság igen hasznos az egyszintű, magas prioritású megszakítások kezelésénél. Ez a képesség már létezett a Datapoint 2200 programozható terminálban (az x86, 8080 és Z80 architektúrák ősében), azonban az Intel ezt nem valósította meg a 8008-as processzorban (ami az Intel próbálkozása volt a terminál egyetlen integrált áramköri lapkán való megvalósítására). A kettős regiszterkészlet jelentősége főképpen abban áll, hogy a Z80-as processzort, miként a korabeli processzorok többségét is, beágyazott rendszerekben történő használatra tervezték, nem pedig a még fel sem talált otthoni vagy személyi számítógépekhez. Sima Maszatosi, a processzor egyik tervezője szerint a korabeli piac a nagy teljesítményű nyomtatókra, felső kategóriás pénztárgépekre és intelligens terminálokra koncentrált. A tulajdonság kapóra jött (nagyon hasznos volt) a kézi assembly kódolásban is, nagymértékben optimalizált kódok készítésénél. Egyes szoftverek, különösen az MSX, Sinclair ZX Spectrum és más Z80 alapú számítógépek szoftverei, a Z80-as assembly optimalizációt egészen szélsőséges szintre vitték, amelynek egyebek közt része volt a megduplázott regiszterek használata is.
A regiszterek
A 8080-as processzorhoz hasonlóan, a 8 bites regiszterek párokban is használhatók, 16 bites regiszterekké kapcsolhatók össze. A 8080-kompatibilis regiszterek a következők: AF: 8 bites akkumulátor (A) és jelzőbitek (F): átvitel (carry), nulla (zero), negatív, paritás/túlcsordulás, félátvitel (ezt a BCD műveletek használják), és az (N jelű) összeadás/kivonás jelzőbit, szintén a BCD műveletekhez BC: 16 bites adat/cím regiszter vagy két 8 bites regiszter DE: 16 bites adat/cím regiszter vagy két 8 bites regiszter HL: 16 bites accumulator/cím regiszter vagy két 8 bites regiszter SP: veremmutató, 16 bites PC: programszámláló, 16 bites A Z80-nál bevezetett új regiszterek a következők: IX: 16 bites index vagy bázis regiszter a 8 bites közvetlen eltolásokhoz (offset) IY: 16 bites index vagy bázis regiszter a 8 bites közvetlen eltolásokhoz I: megszakítási vektor bázisregiszter, 8 bites R: DRAM frissítési számláló, 8 bites (legmagasabb helyiértékű bitje nem változik) AF': alternatív (vagy árnyék-) akkumulátor és jelzőbitek (az EX AF,AF utasítás váltja) BC', DE' és HL': alternatív (vagy árnyék-) regiszterek (az EXX utasítás váltja őket) Négy bit a megszakítási állapot és mód jelzésére
Akkumulátor és jelzőbitek Az A akkumulátor-regiszter és párja, az A, 8 bites regiszterek, közülük mindig csak az előtérben lévő elérhető. Aritmetikai és logikai műveletek egyik operandusát tartalmazza és ebben képződik a művelet eredménye is.
Az F (flag) regiszter és párja, az F, 8 bites regiszterek, a jelzőbitek elérésére szolgál: a belső jelzőbitek tartalmát a processzor az F-be másolja. Az A és F regiszterek egy 16 bites párt alkotnak, ami a kétbájtos műveletekkel kezelhető.
Általános célú regiszterek Ezek a B, C, D, E, H, L 8 bites, vagy a BC, DE, HL párokba állított 16 bites regiszterek. Alternatív párjaik a BC, DE, HL készlet. A két készlet egyetlen utasítással cserélhető.
Alternatív regiszterkészlet Az alternatív regiszterkészlet közvetlenül nem elérhető, ehelyett két speciális utasítás, az EX AF,AF' és az EXX, teszi lehetővé ennek kezelését; mindkettő csak egy multiplexer flipflop állapotát változtatja. Ez gyors kontextusváltást tesz lehetővé a megszakítások kiszolgálórutinjainak: az EX AF,AF' önmagában is használható (például egy nagyon egyszerű és gyors megszakításkezelőben) vagy együtt az EXX utasítással, amely lecseréli az egész BC, DE, HL készletet; ez még így is sokkal gyorsabb, mint a regiszterek verembe mentése (lassabb, alacsonyabb prioritású vagy több szintű megszakítások rendesen a veremben tárolják el a regisztereket). Az alternatív regisztereket árnyék-regiszterekként is említik (shadow registers).
Speciális regiszterek A speciális regiszterek a PC programszámláló, SP veremmutató, IX, IY indexregiszterek, I és R regiszter.
A PC programszámláló (program counter) regiszter egy 16 bites regiszter, a végrehajtandó utasítás memóriacímét tartalmazza. Közvetlenül nem elérhető, tartalma minden utasítás beolvasásakor automatikusan növekszik az utasítás hosszával (a „számláló” itt hibás elnevezés, a regiszter szerepe nem a számlálás, hanem az utasításokra mutató címérték); ugróutasítások után értéke a relatív címkülönbséggel változik, vagy abszolút ugráskor az új cím értékét veszi fel. Reset alkalmával 0 értéket kap.
Az SP veremmutató (stack pointer) regiszter egy 16 bites regiszter, a verem tetejét címzi. A programokban a PUSH utasítással két bájtos adatot lehet a verem tetején elhelyezni, és a POP utasítással onnan a regiszterekbe írni; ilyenkor a veremmutató értéke automatikusan növekszik / csökken 2-vel.
Az IX és IY két független 16 bites indexregiszter, amelyek indexelt címzési mód esetén a memória báziscímet tartalmazzák; a tényleges cím az indexregiszter és egy 8 bites eltolási érték összegeként áll elő.