# Z80

De Z80 is een 8 bit processor, die werd ontworpen door het bedrijf Zilog. Hij werd uitgebracht in 1976 en is in essentie een processor die compatibel is met de 8080 van Intel, maar met meer instructies, registers en adresseringsmethoden. Zoals veel chips uit de twintigste eeuw werd de Z80 ook in licentie gemaakt, onder meer door SGS, Mostek, NEC, Sharp, Toshiba en Hitachi.

## Geschiedenis

De Z80 ontstond toen Federico Faggin in 1974 vertrok bij Intel om samen met Ralph Ungermann het bedrijf Zilog te starten. Faggin werkte eerder aan fundamentele transistor en halfgeleider fabricagetechnologie. Hij ontwierp ook het basisontwerp dat werd gebruikt bij Intel voor computergeheugen en microprocessors. Als hoofdontwerper werkte hij onder meer aan de Intel 4004 en de 8080.
Het ontwerp van de Z80 was gericht op het gebruik in computerterminals, printers, kasregisters, maar ook telecomapparatuur, industriële robots en apparatuur voor automatisering.
In juli 1976 kwam de Z80 formeel beschikbaar op de markt.

## Vergelijking met 8080

Enkele uitbreidingen ten opzichte van de 8080 zijn:
* Een dubbele registerset waartussen kan worden omgeschakeld. Dit schakelen kost 4 kloktikken, waardoor een interrupt sneller kan worden afgehandeld (mits het geen geneste interrupt is).
* Twee indexregisters.
* Bit set/reset-instructies.
* Drie interruptmodi. De 8080 voert, bij het optreden van een interrupt, een instructie uit die op de databus wordt gezet. De Z80 kan ook een byte van de databus lezen en naar het daarmee aangegeven adres springen. Een derde mogelijkheid is een sprong naar een vast adres (38h), wat vooral voor een embedded toepassing voordelig is omdat hardware eenvoudiger uitgevoerd kan worden.
* Ingebouwd register voor het verversen van dynamisch geheugen.
Door dit alles is de Z80 sneller dan de 8080 bij dezelfde klokfrequentie, mits de software gebruikmaakt van de extra mogelijkheden.

## Z80-familie

De kloksnelheid van de oorspronkelijke Z80-processor werd gestaag opgevoerd. De Z80-processor is in de onderstaande varianten verschenen:
* Z80, kloksnelheid 2,5 MHz
* Z80A, kloksnelheid 4 MHz
* Z80B, kloksnelheid 6 MHz
* Z80H, kloksnelheid 8 MHz.
Later werd een CMOS-ontwerp geleverd dat tot 20 MHz snelheid bood. In 2008 leverde Zilog Z80-compatibele processoren met kloksnelheden van 1 tot 50 MHz, waarbij de eZ80-processoren tot vier keer minder kloktikken nodig hebben per uitgevoerde instructie dan de oorspronkelijke Z80.

## Aansluitingen

* 27 (uit) M1: Actief als de eerste byte van een instructie wordt opgehaald (begint de instructie met CB, ED, FD of DD, dan is M1 ook actief bij het ophalen van de tweede byte van de instructie). Ten slotte wordt M1 gebruikt bij de interruptrespons. M1 wordt gebruikt voor:
** Hardware voor single-stepping.
** Interruptrespons. De processor activeert dan lijn M1 en IORQ en de interruptcontroller zet dan (meestal) een wijzer naar de uit te voeren interruptroutine op de bus.
** Terugkeer van interrupt. De interruptcontroller weet dat een interrupt is afgehandeld door de instructie RETI van de bus af te luisteren. Hierbij moet M1 actief zijn.
* 19 (uit) MREQ: Geheugen adresseren
* 20 (uit) IORQ: Invoer/uitvoer adresseren
* 22 (uit) WR: Schrijven
* 21 (uit) RD: Lezen
* 28 (uit) RFSH: Tijdens het decoderen van een opcode wordt er een adres uitgezonden om dynamisch geheugen te verversen. Daarbij is RFSH actief.
* 18 (uit) HALT: Is actief en blijft actief als de instructie HALT is uitgevoerd. De processor staat dan stil en kan met een interrupt of reset weer in werking worden gezet. Het verversen van dynamisch geheugen gaat gewoon door.
* 16 (in) INT: Gewone interrupt, niveaugevoelig.
* 17 (in) NMI: Niet maskeerbare interrupt, flankgevoelig.
* 26 (in) RESET: Volledige reset, de processor start bij adres 0000.
* 24 (in) WAIT: Een extern apparaat vraagt de processor even te wachten, desnoods midden in een instructie. Dit gebeurt normaliter als een apparaat niet onmiddellijk kan reageren op het lezen of schijven van geheugen of I/O.
* 25 (in) BUSRQ: Een extern apparaat vraagt de besturing van de bus. De processor voltooit de lopende instructie en zet de adres- en datalijnen in tri-state zolang BUSRQ actief is. Deze toestand mag niet te lang duren omdat het verversen van het geheugen dan achterwege blijft, tenzij het externe apparaat het verversen overneemt.
* 23 (uit) BUSAK: De processor bevestigt dat de adres- en datalijnen in tri-state staan, zodat een extern apparaat de bus mag gebruiken. Deze toestand mag niet te lang duren omdat het verversen van het geheugen nu achterwege blijft, tenzij het externe apparaat voor het verversen zorgt.
* 6 (in) CLK: klokingang.
Alle besturingslijnen zijn laag actief.
| | M1 | MREQ | IORQ | WR | RD | RFSH |
| opcode lezen | actief | actief | | | actief | |
| geheugen lezen | | actief | | | actief | |
| geheugen schrijven | | actief | | actief | | |
| invoer | | | actief | | actief | |
| uitvoer | | | actief | actief | | |
| geheugen verversen | | actief | | | | actief |
| interruptrespons | actief | | actief | | | |

## Toepassing

De Z80A-processor wordt onder meer toegepast in spelcomputers van Sega, zoals de Master System, de Mega Drive als co-processor voor het geluid en om Master System-spellen via een adapter te kunnen spelen. De Z80 is ook breed toegepast in veel homecomputers uit de jaren 80, zoals in de Tandy TRS80, Sinclair ZX80, ZX81 en ZX Spectrum, MSX, Amstrad CPC, Philips P2000, Exidy Sorcerer, en CP/M-compatibele computers. Maar ook bijvoorbeeld in de dam- en schaakcomputers (Checker Challenger en Chess Challenger) van Fidelity. Tegenwoordig wordt de Z80 nog gebruikt in diverse apparaten, zoals taxameters en grafische rekenmachines, zoals de Texas Instruments TI-84 Plus.