Jo, bylo to sqělý.
Z80 měla kromě běžné sady shodné s 8080 (A, BC, DE, HL) tuto sadu ještě jednou - tedy zdvojení. Typické využití při obsluze přerušení, kdy je potřeba zachovat obsahy registrů přerušeného programu a přitom ukládání do zásobníku je časově příliš náročné ...
Kromě toho tam byly ještě indexové registry IX a IY (nezdvojené), které adresovaly s ofsetem - tedy např. LD A,(IX+0x2A)
No a samozřejmostí bylo to, že se mnoho instrukcí (např. rotace, IN/OUT ze sběrnice apod.) daly dělat s kterýmkoliv registrem (dokonce šly i rotace půlky A registru), že se 16-ti bitová aritmetika dala honit i s přenosy a odčítat (to u 8080 docela chybělo), že se daly kterékoliv registry resp. konstanta ukládat kamkoliv (u 8080 jen A registr) , že se dal nastavit / vynulovat / otestovat kterýkoliv bit kteréhokoliv registru a/nebo bytu adresovaného pomocí dvojregistru (třeba i s ofsetem) ...
Sqělé byly relativní skoky (to u 8080 hóóódně chybí) a úplně nejskvělejší byly blokové instrukce, které uměly vyhledávat znak v řetězci, přenášet řetězce z místa na místo, případně IN / OUT na / ze sběrnice ...
No a přerušní má u Z80 taky něco do sebe. Původně (tj. v 8080) byly pro přerušení vyhrazeny instrukce RST (restart = CALL na předem danoé adresy), které měly v bitech 3-5 "adresu" a zbytek bylu samé 1. Výhodou bylo, že přerušení se dalo snadno vyvolat a v krajním případě se nemuselo dělat nic (CPU přečetl 0xFF a provedl to jako instrukci), případně mohlo zařízení přizemněním příslušných bitů vyvolat jinou RST instrukci a tím pádem i jinou rutinu. To celé je naprd a obvykle se to řešilo přídavným broukem 8259 (programovatelný 8-mi úrovňový řadič přerušení).
V Z80 se to dělá mazaněji - v paměti jsou v tabulce uloženy 2B adresy obslužných rutin (kdekoliv v paměti). Ukazatel do tabulky se skládá ze dvou bytů - vyšší (registr I) se dá nastavit, nižší uloží volající zařízení na sběrnici ... Pro obsluhu si vystačí samotný CPU a volající zařízení se jednoduše poskládají do kaskády - v krajním případě je možné obsloužit bez přídavných obvodů 128 úrovní přerušení !
A kromě toho je u Z80 ještě nemaskovatelné přerušení, které se obsouží vždy. vyvolává se rutina na pevné adrese, ale na druhou stranu je jeho vyvolání naprosto primitivní.
Perlička na závěr - pro občerstvení pamětí se během dekódování instrukce provádí refresh cyklus. Na sběrnici se objeví obsah spec. registru, příslušný řádek v pamětech se občerství a tento registr se automaticky inkrementuje. Až sem je to obvyklé. Ale u Z80 se tento registr (R) dá číst / zapisovat. Cpát do něj furt stejné číslo byla docela psina :)
Nechci říkat, že 8080 nesahala Z80 po kotníky, aby se Z80 neurazila.