[[Soubor:Sharp LH0080A.jpg|thumb|Klon vyráběný firmou SHARP.]]
[[Soubor:Z84C0010FEC_LQFP.png|thumb|[[LQFP]] verze procesoru Z80.]]
'''Zilog Z80''' je osmibitový [[procesor|mikroprocesor]], navržený firmou [[Zilog]] a prodávaný od července [[1976]]. Byl široce používán jak ve stolních počítačích tak pro armádní účely. Z80 a jeho klony tvoří jednu z nejvíce používaných CPU sérií všech dob a společně se sérií [[MOS Technology 6502]] dominoval trhu s osmibitovými počítači od začátku 70. až do poloviny 80. let 20. století.
Zilog licencoval design Z80 několika dodavatelům, ačkoli mnoho východoevropských a ruských výrobců vyrábělo nelicencované kopie (U880D v počítačích [[Robotron]]). To umožnilo výrobkům menších společností prosadit se na trhu vedle větších společností, jako třeba [[Toshiba]]. V důsledku toho Zilog, od uvedení procesoru na trh, vyrobil méně než polovinu procesorů Z80. V posledních desetiletích se Zilog soustředí na stále rostoucí trh s [[Embedded systém|vestavěnými systémy]] (pro který jsou učeny původní Z80 a Z180) a na nejnovější z rodiny [[Jednočipový počítač|mikrokontrolérů]], Z80-kompatibilní.
Ačkoli už dříve Zilog uskutečnil pokusy s pokročilými mikropočítači, jako byly architektury Z80 (Z800 a Z280), tyto čipy se nikdy neuchytily. Společnost se také snažila proniknout na trh s pracovními stanicemi s jejich procesorem Z8000 a 32bitovým Z80000 (ani jeden nesouvisí s 8bitovým procesorem Z80).
== Stručná historie a přehled ==
Z80 se objevil, když Federico Faggin, po práci na procesoru [[Intel 8080]], opustil společnost Intel a na konci roku 1974 vstoupil do firmy Zilog. Společně s Raplhem Ungermanem uvedli v červenci 1976 procesor Z80 na trh. Byl navržen aby byl [[zpětná kompatibilita|zpětně kompatibilní]] s procesorem Intel 8080, zejména CP/M operační systém mohl fungovat bez jakýchkoli dalších úprav. K vývoji procesoru Z80 přispěl také další z návrhářů procesorů [[Intel 4004]] a [[Intel 8080|8080]], Masatoshi Shima.
Patrně nejslavnější použití a boom přinesla procesoru řada domácích [[počítač]]ů [[Sinclair ZX Spectrum]].
Později ho firma [[SEGA]] nasadila v [[herní konzole|herních konzolích]] [[Master System]] a [[Game Gear]].
Firma [[Nintendo]] použila v konzolích [[Game Boy]] a [[Game Boy Color]] klon procesoru Z80 od firmy [[Sharp]].
Procesor Z80 byl také použit v [[Japonsko|japonském]] domácím počítači [[Sord M5]].
V [[Československo|Československu]] byly na základě Z80 vyráběny počítače [[Ondra (počítač)|Ondra]] a [[Didaktik]].
V současnosti je Z80 stále používán např. ve [[Embedded systém|vestavěných systémech]], [[Jednočipový počítač|mikrokontrolérech]] nebo v [[elektronika|elektronice]] (například programovatelné [[kalkulátor]]y, [[Počítačová tiskárna|tiskárny]], [[Syntezátor|syntezátory]] či [[MP3 přehrávač]]e atd.)
Z80 nabízí mnoho skutečných vylepšení oproti 8080
* Rozšířená [[instrukční sada]] obsahující blokové operace, manipulace s bity a relativní skoky
* Nové indexové registry IX a IY s podporovou adresování ''base+offset''
* Lepší systém [[přerušení]]
** Více automatický a obecný vektorizovaný systém přerušení, ''mode 2'', stejně jako pevný vektor přerušení systému, ''mode 1'', pro jednoduchý systém s minimálním hardwarem (''mode 0'' je 8080-kompatibilní).
** Nemaskovatelné přerušení ([[NMI]] – Non Maskable Interrupt), může být použito v případě výpadku napájení a/nebo při jiné události s vysokou prioritou (umožňuje minimalistickému systému Z80 snadno implementovat dvouúrovňové schéma přerušení v ''mode 1'').
** Dva soubory registrů, mezi kterými lze rychle přepínat, což umožňuje zrychlit reakci na přerušení.
* Menší požadavky hardwaru.
** Jeden 5V zdroj napájení (''procesor 8080 potřeboval +5V/+5V/+12V'').
** Jednofázové 5V hodiny (''procesor 8080 potřeboval dvoufázový generátor hodin s vysokou amplitudou'').
** Vestavěný obnovovací mechanismus pro paměti [[DRAM]], který se jinak musí řešit externími obvody.
** Nemultiplexová sběrnice
Z80 vystřídal procesor 8080 a jeho nástupce 8085, na trhu s procesory a stal se jedním z nejpopulárnějších 8bitových [[Procesor|CPU]]. Možná, že klíčem, který zapříčinil úspěch procesoru Z80 byl zabudovaný DRAM refresh a ostatní funkce, které dovolovaly systému aby byl postaven s menším počtem podpůrných čipů (později, většina Z80 systémů byli vestavěné systémy, které typicky používaly statickou [[RAM]], a proto nepotřebovali tento refresh).
Podle originálního designu [[NMOS]] se určená horní hranice frekvence postupně zvyšuje z původních 2,5 MHz, přes dobře známé 4 MHz (Z80A), až na 6 MHz (Z80B) a 8 MHz (Z80H). [[CMOS]] verze byla také vyvinuta se stanovenými limity frekvencí v rozsahu od 4 MHz až do 20 MHz pro verzi, která se prodává dnes. CMOS verze také umožňovala spánek s nízkou spotřebou se zachováním vnitřních stavů (nemá žádnou dolní hraniční frekvenci). Plně kompatibilní s deriváty HD64180/Z180 a eZ80, ty jsou v současné době určené až pro 33 MHz a 50 MHz.
== Technický popis ==
=== Programovací model a nastavení registrů ===
Programovací mode a nastavení registrů jsou konvenční a podobně souvisejí s rodinou [[x86]]. U procesoru Z80 jsou kompatibilní registry procesoru 8080, AF,BC,DE,HL, duplikovány jako dvě od sebe oddělené banky, kde procesor může rychle přepínat z jedné banky do jiné, což je užitečná vlastnost pro urychlení odezvy u jednoúrovňového přerušení s vysokou prioritou. Tato vlastnost byla představena v Datapoint 200, ale v procesoru 8008 nebyla Intelem implementována. Nastavení duálního registru dává smysl, Z80 (stejně jako ve většině procesorů té doby) byl skutečně určen pro použití v [[Terminál (informatika)|terminálech]], nikoli pro použití v [[Osobní počítač|osobních počítačích]]. Podle jednoho z designérů, Masatoshi Shima, se trh zaměřil na vysoce výkonný tisk, velké cash registry a inteligentní terminály. Také se ukázalo být velmi užitečné vysoce optimalizované, manuální kompletování kódování. Některý software, hlavně hry pro [[MSX]], [[Sinclair ZX Spectrum]] a další počítače založené na Z80, optimalizovali kód na extrémní úroveň, mimo jiné použili také duplicitní registry.
'''Registry'''
Stejně jako v procesoru 8080, 8bitové registry jsou vetšinou spojeny, aby poskytovaly 16bitovou verzi. Kompatibilní registry procesoru 8080 jsou:
* AF: 8bitový akumulátor (A) a Flag bity (F) carry, zero, minus, parity/overflow, half-carry (používané pro BCD kód), a Add/Subtract Flag (obvykle nazývaný N) také pro BCD kód
* BC: 16bitový data/address registr nebo dva 8bitové registry
* SP: stack pointer, 16 bitů
* PC: program counter, 16 bitů
Nové registry zavedené v Z80 jsou:
* IX: 16bitový index nebo base registr pro 8bitový immediate offsets
* IY: 16bitový index nebo base registr pro 8bitový immediate offsets
* I: interrupt vector base registr, 8 bitů
* R: DRAM refresh counter, 8 bitů
* AF´: alternativní (nebo stínový) akumulátor a flag (přepínatelný dovnitř a ven s EX AF, AF´)
* BC´, DE´ a HL´: alternatvní (nebo stínový) registr (přepínatelný dovnitř a ven s EXX)
* Čtyři bity interupt status a interrupt mode status
Není zde žádný přímý přístup k alternativním registrům, místo toho jsou použity dvě speciální instrukce, EX AF, AF a EXX, každá přepíná jeden nebo dva flip-flop [[Multiplexor|multiplexery]]. To umožňuje rychlé prohození kontextu pro obsluhu přerušení: EX AF, AF´ mohou být použity samostatně (pro opravdu jednoduché a rychlé přerušení) nebo dohromady s EXX aby se vyměnila celá sada AF, BC, DE, HL. Stále je to rychlejší, než přidávání toho samého registru do fronty (pomalejší, nižší priorita, víceúrovňová přerušení běžně používají frontu k ukládání registrů).
Refresh registr, R, se zvýší pokaždé, když CPU vykoná opcode (operační kód) nebo opcode prefix a proto nemá žádný přímí vztah s vykonáním programu. Toto se někdy používá pro generování [[Pseudonáhodná čísla|pseudonáhodných čísel]] ve hrách a také ve schématech ochrany softwaru. V některých návrzích je také použit jako „hardware“ counter, slavný příklad toho je [[ZX81]], který umožňuje sledovat pozici písmene na televizní obrazovce tím, že spouští přerušení okolo obalu (připojením INT do A6).
Interupt vector registr, I, se používá u Z80 konkrétně pro přerušení ''mode 2'' (vybraný IM 2 instrukcí). Dodává nejvyšší byt ze základních adres pro 128-vstupní tabulku obsluhy adres, které jsou vybírány přes ukazatel zaslání CPU během vědomého přerušení cyklu. Nejnižší byt ze základních adres je napevno nastaven na nulu. Ukazatel identifikuje zejména periferní čip a/nebo periferní funkci nebo akci, kde jsou čipy normálně spojeny v takzvaném [[Sériové zapojení|sériovém zapojení]] pro prioritní řešení. Stejně jako refresh registr, tento registr je někdy použit také kreativně, u přerušení v ''mode 0'' a ''1'' může být použit jednoduše jako další 8bitový data registr.
===Z80 - jazyk symbolických adres===
====Datapoint 2200 a Intel 8008====
První [[jazyk symbolických adres]] (dále jen [[assembler]]) pro Intel 8008 byl založen na velmi jednoduché (ale systematické) syntaxi, zděděné od [[Datapoint 2200|Datapointu 2200]]. Pro původní čip Intel 8008 byla později tato originální syntaxe změněna na novou, poněkud tradičnější formu assembleru. V tu samou dobu byl assembler rozšířen, aby se přizpůsobil přidání nových adresních možností ve více pokročilém čipu Intel 8080 (Intel 8008 a 8080 sdíleli jazykovou podskupinu bez toho aby byly binárně kompatibilní, nicméně, Intel 8008 byl binárně kompatibilní s Datapointem 2200).
V tomto procesu, symbolický název (neboli mnemonická zkratka) L, pro LOAD, byla nahrazena různými zkratkami slov LOAD, STORE a MOVE, a ty byli smíchány s ostatními symbolickými písmeny. Symbolický název písmene M, pro paměť, byl odstraněn ze symbolických instrukcí, aby se stal syntakticky samostatným operandem, zatímco [[Registr procesoru|registry]] a kombinace registrů byli velmi rozporuplně označeny. Buď zkrácením operandu (MVI D, LXI H a podobně) nebo v rámci vlastních symbolických instrukcí (LDA, LHLD a podobně) nebo obojím najednou (LDAX B, STAX D a podobně).
{| class="wikitable"
|-
! Datapoint 2200 &a i8008
! i8080
! Z80
! i8086/i8088
|-
! beforepřed rokem ~1973
! ~1974
! 1976
====Nová syntaxe====
Protože [[Intel]] prohlašoval, že vlastní práva na symbolické názvy, musela být v assembleru vyvinuta nová [[Syntax|syntaxe]].
Tentokrát byl použit mnohem systematičtější přístup:
* Všechny registry, včetně párových registrů jsou explicitně označeny jejich celými jmény.
* Závorky jsou běžně použity k označení "obsahu paměti", s výjimkou nějakých skokových instrukcí.
* Všechny LOAD a STORE instrukce používají stejný symbolický název, LD pro LOAD (byl to návrat ke zjednodušenému slovníku z Datapointu 2200). Ostatní běžné instrukce, jako například ADD a INC, používali stejný symbolický název, bez ohledu na adresní režim nebo velikost operandu. To je možné právě proto, že operand už sám o sobě obsahuje dostatek informací.
Tyto zásady umožňovali přímočaře zjistit jména a tvary všech instrukcí procesoru Z80.
S výjimkou pojmenování rozdílů, a navzdory určitému rozporu v základní registrové struktuře, syntaxe Z80 a 8086 je v podstatě izomorfní pro velkou část instrukcí. V assembleru pro 8080 a 8086 existují pouze docela povrchnínedůležité podobnosti (jako například slovo MOV, nebo písmeno X pro rozšířené registry). [[ProgramProgramy]] pro procesor 8080 mohou být přeloženy do strojového kódu pro procesor 8086 pomocí speciálního assembleru nebo přeloženy do jazyku symbolických adres pomocí překladatelského programu.
===Instrukční sada a kódování===
Procesor Z80 používá 252 z 256 možných kódů jednotlivých [[Bajt|bajtů]] opcodu ([[Strojový kód|operační kód]] - "kořenové instrukce"). Čtyři zbývající kódy jsou značně používané jako opcode prefix.
CB a ED povolí speciální instrukce a DD nebo FD vyberou IX+d nebo IY+d příslušně (v některých případech bez posunutí "d") v místě HL. Toto schéma dává procesoru Z80 velké množství permutací instrukcí a registrů. Zilog je kategorizuje do 158 různých instrukčních typů, 78 z nich jsou ty samé jako u procesoru Intel 8080 (umožňují provoz programů z procesoru 8080 na procesoru Z80).
Dokumentace k Z80 dělí skupiny instrukcí do následujících kategorií:
* Rotace a posun
V originálním procesoru Z80 nejsou dostupné několikanásobné instrukce. Rozdílné velikosti a varianty sčítání, posunu a rotace mají někdy rozdílné účinky na příznaky, a to proto, že z procesoru 8080 byly zkopírovány příznaky ovlivňující vlastnosti. Instrukce LOAD neovlivňuje příznaky (s výjimkou LOAD registru I a R, které jsou pro zvláštní účely). Instrukce index registru jsou užitečné pro snížení délky kódu a zatímco některé nejsou o mnoho rychlejší než ekvivalentní sekvence jednodušších operací, nepřímo šetří čas pro vykonání instrukce tím, že snižuje potřebu uložit a obnovit registry. O deset let mladší design [[Z180]] si mohl ze začátku dovolit více "čipového prostoru", který umožňuje o něco účinnější implementaci (mimo jiné používá širší [[ALU]]). Podobné věci mohou být řečeny o [[Z800]], [[Z280]] a [[Z380]]. Nicméně až roku 2001, když byl vydán procesor [[eZ80]] umožňující plné [[Pipelining|zřetězení instrukcí]] (neboli [[Pipelining]]), se jim tyto instrukce konečně přiblížili svou efektivitou v cyklech jak jen to bylo technicky možné, to jest vzhledem ke kódování v Z80 kombinovaném se schopností realizovat 8bitové čtení nebo zápis v každém hodinovém cyklu. Stejně tak instrukce pro 16bitové sčítání nejsou v originálním procesoru Z80 příliš rychlé (11 hodinových cyklů). Nicméně, jsou asi dvakrát rychlejší, než když se vykonávají ty samé výpočty pomocí 8bitových operací. A stejně tak důležité je, že snižují množství operací s registry.
== Externí odkazy ==
|