Obsah
1. Mikrořadiče eZ8 aneb potomek legendárního Z80
2. Mnemotechnické zkratky instrukcí inspirované instrukční sadou Z80
3. Programátorský pohled na mikrořadiče eZ8
4. Registry a adresovací režimy
5. Instrukční soubor mikrořadičů eZ8
8. Aritmetické posuny, bitové posuny a rotace
9. Podmíněné i nepodmíněné skoky, skoky a návraty z podprogramů
10. Instrukce Booleovského procesoru
1. Mikrořadiče eZ8 aneb potomek legendárního Z80
„Certainly, 32-bit or even 16-bit MCUs are not needed for end points such as wall plugs, switches, smart ballasts, even certain lighting fixtures. When examining deployment ratios, it is apparent that there are many more end points in many of these designs, and thus a large demand for our beloved 8-bit microcontrollers. They are not gone, and they most certainly are not forgotten!“
Další řada osmibitových mikrořadičů, s níž se v seriálu o architekturách počítačů a procesorů alespoň ve stručnosti seznámíme, je postavena na jádrech Z8 a eZ8. Mikrořadiče s jádry Z8 patří do skupiny původních osmibitových mikrořadičů navržených již na konci sedmdesátých let minulého století či na samotném začátku let osmdesátých (do této skupiny můžeme zařadit i původní architektury PIC, Motorolu 68HC05/08, Intel 8048 i Intel 8051). Jádra eZ8, která jsou již novější a modernější, vznikla rozšířením osmibitových mikrořadičů Z8 o několik nových instrukcí a taktéž rozšířením adresovacích režimů. Navíc byla architektura čipu upravena takovým způsobem, že se většina strojových instrukcí provede v menším počtu hodinových cyklů a navíc dochází i k většímu překryvu instrukcí – u původních jader Z8 se překrývala pouze fáze write back (zápis výsledků) s fází instruction fetch (a to ještě pouze z toho důvodu, že paměť s programem byla oddělena od datové paměti).
Obrázek 1: Domácí osmibitový mikropočítač ZX80. V průběhu jediného roku, kdy byl tento počítač vyráběn, se prodalo cca 70000 kusů, což je na tehdejší dobu velmi vysoké číslo.
Za vývojem mikrořadičů s jádry Z8 stojí společnost Zilog, kterou si velmi dobře pamatují zejména uživatelé domácích osmibitových mikropočítačů, protože v mnoha těchto strojích se používal mikroprocesor Zilog Z80, který byl zpětně kompatibilní s v mnoha ohledem horším čipem Intel 8080, ovšem navíc nabízel rozšířenou sadu registrů, vylepšenou sadu instrukcí, jednodušší způsob zapojení mikropočítače se Z80 (snížení počtu VLSI čipů o dva) atd. Kromě toho však Zilog Z80 můžeme najít i v dalších zařízeních, ať již se jedná o herní automaty či naopak o profesionální počítače vybavené operačním systémem CP/M. Po velkém úspěchu Z80 se firma Zilog snažila prosadit i na trhu se šestnáctibitovými mikroprocesory (což se příliš nezdařilo) a taktéž na trhu s osmibitovými mikrořadiči, pro něž vyrábí právě řadu Z8 (úspěch však není příliš oslnivý kvůli velké konkurenci), nověji řadu eZ8, ale i čipy postavené na starodávné, nicméně stále používané architektuře 8051 (mikrořadiče …).
Obrázek 2: Obal na kazetu se Zeus Assemblerem pro ZX Spectrum a tím pádem samozřejmě pro mikroprocesory Zilog Z80.
2. Mnemotechnické zkratky instrukcí inspirované instrukční sadou Z80
Instrukční soubor osmibitových mikrořadičů Z8/eZ8 se sice v mnoha ohledech odlišuje od původního mikroprocesoru Zilog Z80, ovšem mnemotechnické zkratky instrukcí zůstaly do velké míry zachovány, což znamená, že se programy psané v assembleru Z8/eZ8 do značné míry podobají například původním programům pro ZX Spectrum či pro další domácí počítače na Z80 postavené (mimochodem: firma Zilog musela z licenčních důvodů pro svůj Z80 použít odlišné zkratky instrukcí, než jaké nalezneme na zpětně kompatibilním čipu Intel 8080). Musíme však mít na paměti, že největší rozdíly mezi mikroprocesory Z80 a mikrořadiči Z8/eZ8 spočívají v použití zcela odlišného způsobu adresování pracovních registrů, což je téma, kterému se budeme více věnovat v navazujících kapitolách.
Jen pro zajímavost se podívejme na shodné i rozdílné mnemotechnické zkratky instrukcí u Z80 a Z8 (podrobnější přehled instrukcí bude opět uveden v dalších kapitolách; tabulka nezohledňuje to, že některé instrukce byly přejmenovány):
Z8 Z80 ------------------- ADC ADC ADCX ADD ADD ADDX AND AND ANDX ATM BIT BCLR BIT BRK BSET BSWAP BTJ BTJNZ BTJZ CALL CALL CCF CCF CLR COM CP CP CPC CPCX CPD CPDR CPI CPIR CPL CPX DA DAA DEC DEC DECW DI DI DJNZ DJNZ EI EI EX HALT HALT IM IN INC INC INCW IND INDR INI INIR IRET JP JP JR JR LD LD LDC LDCI LDD LDDR LDE LDEI LDI LDIR LDWX LDX LEA MULT NEG NOP NOP OR OR ORX OUT OUTD OTDR OUTI OTIR POP POP POP PUSHX PUSH PUSHX RCF RES RET RET RETI RETN RLA RL RL RLC RLC RLCA RLD RRA RR RR RRCA RRC RRC RRD RST SBC SBC SBCX SCF SCF SET SLA SRA SRA SLL SRL SRL SRP STOP SUB SUB SUBX SWAP TCM TCMX TM TMX TRAP WDT XOR XOR XORX
3. Programátorský pohled na mikrořadiče eZ8
Mikrořadiče eZ8 mají Harvardskou architekturu, což znamená, že paměť s uloženým programem je oddělená od datové paměti. Navíc jen velmi malé množství instrukcí dokáže pracovat s daty (konstantami) uloženými v paměti programu; naproti tomu možnosti adresování dat v datové paměti jsou nepoměrně větší, což je samozřejmě chování založené na reálných požadavcích.
Programová paměť může mít maximální kapacitu 64 kB, ovšem reálné čipy většinou obsahují FLASH s menší kapacitou, typicky od 1kB do 16kB. V prvních dvou bajtech je uložena konfigurace FLASH, za níž následuje vektor pro RESET (vektor=cílová adresa, která se použije po signálu RESET). Od adresy 0×0004 jsou uloženy vektory (cílové adresy) jednotlivých rutin přerušení (počet je proměnný) a za těmito vektory je již vlastní paměť s programem a konstantními daty.
Datová paměť je rozdělená mnohem zajímavěji. Její maximální kapacita je 4096 bajtů (4kB). Těchto 4096 adres je rozděleno do šestnácti banků (každý má velikost 256 bajtů) a každý bank je rozdělen do šestnácti skupin po šestnácti adresách. Vybraný bank lze adresovat s použitím osmibitové konstanty či osmibitového registru a vybranou skupinu procesor považuje za aktivní pracovní registry, které jsou adresovány (vybírány) pouhými čtyřmi bity v instrukci (výběr banku a skupiny se provádí instrukcí SRP). Díky tomuto rozdělení na banky a skupiny bylo možné zcela odstranit koncept klasického akumulátoru i pracovních registrů; navíc je možné pro přerušovací rutiny (či pro běžné subrutiny) vyhradit samostatné skupiny adres, což zcela odstraní nutnost manipulace se zásobníkem. Do datové paměti jsou navíc mapovány i řídicí registry, což je ovšem téma pro navazující článek.
Na adrese 0×fc je uložen bajt obsahující příznakové bity (FLAGS):
Příznak | Název |
---|---|
C | carry |
Z | zero |
S | sign |
V | overflow |
D | decimal adjust |
H | half carry |
Obrázek 3: Automat se hrou Pac-Man je taktéž postaven na mikroprocesorech Zilog Z80.
4. Registry a adresovací režimy
Unikátní architektura eZ8 nabízí programátorům následující adresovací režimy:
- Pracovní registr ve vybrané skupině (4bitový index)
- Registr ve vybraném banku (256 adres)
- Registrový pár (sudé adresy 0..254)
- Nepřímý pracovní registr @r
- Nepřímý registr ve vybraném banku @R
- Nepřímý registrový pár @RR
- Relativní adresa (8 bitů pro skoky)
- Rozšířená adresa (12 bitů pro datovou paměť)
- Absolutní adresa (16 bitů pro externí paměť či paměť programu)
- Pracovní registr použitý jako index
5. Instrukční soubor mikrořadičů eZ8
Instrukce mikrořadičů s jádry eZ8 obsahují 60 resp. 74 instrukcí, a to v závislosti na tom, zda instrukce s rozšířeným adresováním budeme považovat za nové instrukce či za modifikaci již existujících instrukcí. Následující kapitoly jsou pojmenovány podobně, jako tomu bylo v předminulém i minulém článku, takže si můžete rozdíly mezi instrukčními sadami snadno porovnat:
Skupina | Základních instrukcí | Rozšířené adresování | Celkem |
---|---|---|---|
Aritmetické instrukce | 11 | 6 | 17 |
Logické instrukce | 4 | 3 | 7 |
Aritmetické posuny, bitové posuny a rotace | 8 | 0 | 8 |
Podmíněné i nepodmíněné skoky, skoky a návraty z podprogramů | 9 | 0 | 9 |
Instrukce Booleovského procesoru | 5 | 2 | 7 |
Instrukce pro přenosy dat | 8 | 3 | 11 |
Blokové přenosy | 2 | 0 | 2 |
Práce s příznakovými bity | 3 | 0 | 3 |
Instrukce pro řízení CPU | 10 | 0 | 10 |
Celkem: | 60 | 14 | 74 |
6. Aritmetické instrukce
Do sady aritmetických instrukcí patří samozřejmě instrukce pro součet a rozdíl dvou operandů. V závislosti na tom, zda se při výpočtu použije příznak carry rozlišujeme instrukce ADD/ADC a SUB/SBC (zde se carry použije ve smyslu výpůjčky, tedy borrow i přesto, že se instrukce nejmenuje SBB). Následují instrukce pro zvýšení či snížení operandu o jedničku. Zde stojí za povšimnutí fakt, že můžeme inkrementovat či dekrementovat obsah registrového páru, tj. šestnáctibitového operandu, zatímco většina ostatních instrukcí pracuje jen s osmibitovými operandy (ovšem inkrementace a dekrementace se provádí i u ukazatelů, takže se tyto instrukce v praxi hodí). Následuje instrukce MULT pro vynásobení osmibitových operandů se šestnáctibitovým výsledkem, instrukce pro porovnání operandů s nastavením příznakových bitů a konečně instrukce DA pro desítkovou korekci předchozí operace součtu či rozdílu ve chvíli, kdy se pracuje v kódu BCD (korekce se provede na základě příznakového bitu H/half carry):
# | Instrukce | Operandy | Stručný popis |
---|---|---|---|
1 | ADD | dst,src | součet dst ← dst + src |
2 | ADC | dst,src | součet dst ← dst + src + C |
3 | SUB | dst,src | rozdíl dst ← dst – src |
4 | SBC | dst,src | rozdíl dst ← dst – src – C |
5 | INC | dst | inkrementace dst (osmibitový operand) |
6 | INCW | dst | inkrementace dst (šestnáctibitový operand) |
7 | DEC | dst | dekrementace dst (osmibitový operand) |
8 | DECW | dst | dekrementace dst (šestnáctibitový operand) |
9 | MULT | dst | násobení 8×8bit: dst[15:0] ← dst[15:8] × dst[7:0] |
10 | CP | dst,src | rozdíl dst – src (pouze se nastaví příznaky, výsledek se neuloží) |
11 | CPC | dst,src | rozdíl dst – src – C (pouze se nastaví příznaky, výsledek se neuloží) |
11 | DA | dst | korekce po operacích ADD a SUB, pokud jsou výpočty prováděny v BCD kódu |
Některé často používané instrukce mají další varianty, které používají „rozšířené“ adresovací režimy. Operandem dst je v tomto případě dvanáctibitová adresa v rozsahu 0×000 až 0×fff, operandem src pak taktéž dvanáctibitová adresa popř. osmibitová konstanta:
# | Instrukce | Rozšířená varianta |
---|---|---|
1 | ADD | ADDX |
2 | ADC | ADCX |
3 | SUB | SUBX |
4 | SBC | SBCX |
5 | CP | CPX |
6 | CPC | CPCX |
7. Logické instrukce
Mezi logickými instrukcemi samozřejmě nalezneme instrukce AND (logický součin) a OR (logický součet) doplněné o instrukci XOR (nonekvivalence) a taktéž o instrukci COM určenou pro negaci všech bitů operandu. Všechny tyto instrukce pracují pouze s osmibitovými operandy:
# | Instrukce | Operandy | Stručný popis |
---|---|---|---|
1 | AND | dst,src | dst ← dst ∧ src + nastavení příznaků Z a S |
2 | OR | dst,src | dst ← dst ∨ src + nastavení příznaků Z a S |
3 | XOR | dst,src | dst ← dst ⊕ src + nastavení příznaků Z a S |
4 | COM | dst | dst ← ~dst + nastavení příznaků Z a S |
Podobně jako u aritmetických instrukcí, i u instrukcí logických (přesněji řečeno u těch instrukcí, které mají dva operandy) nalezneme varianty s rozšířeným adresováním (instrukce COM však nemá rozšířený ekvivalent):
# | Instrukce | Rozšířená varianta |
---|---|---|
1 | AND | ANDX |
2 | OR | ORX |
3 | XOR | XORX |
8. Aritmetické posuny, bitové posuny a rotace
Mikrořadiče Z8 podporují instrukce pro rotaci operandu doprava i doleva s výběrem, zda se má rotace provést bez příznaku carry (rotace osmi bitů) či naopak s příznakem carry (rotace přes devět bitů). Existují i instrukce pro aritmetický a logický posun doprava SRL a SRA, ovšem podobné instrukce pro posun doprava nenalezneme, protože je lze snadno nahradit součtem. Všechny rotace a posuny jsou provedeny vždy o jediný bit. Výjimkou je instrukce SWAP, která prohodí horní a spodní čtveřici bitů a je tedy shodná s opakováním instrukce RL či RR čtyřikrát po sobě. Instrukce BSWAP otočí všechny bity v operandů, takže do této skupiny spadá jen částečně:
# | Instrukce | Operandy | Stručný popis |
---|---|---|---|
1 | RL | dst | rotace doleva |
2 | RLC | dst | rotace doleva přes příznak carry |
3 | RR | dst | rotace doprava |
4 | RRC | dst | rotace doprava přes příznak carry |
5 | SRL | dst | logický posun doprava |
6 | SRA | dst | aritmetický posun doprava |
7 | SWAP | dst | prohození čtyř horních bitů se spodními čtyřmi bity |
8 | BSWAP | dst | otočení všech bitů v operandu |
Instrukce RL:
+-------+ + Carry | +-------+ ^ | +---+---+---+---+---+---+---+---+ +---<-| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | | +---+---+---+---+---+---+---+---+ | ^ v | +-----------------------------------+
Instrukce RR:
+-------+ + Carry | +-------+ ^ | +---+---+---+---+---+---+---+---+ +-->--| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | | +---+---+---+---+---+---+---+---+ ^ | | v +-----------------------------------+
Instrukce RLC:
+-------+ +---+---+---+---+---+---+---+---+ + Carry |---<---| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | +-------+ +---+---+---+---+---+---+---+---+ | ^ v | +-----------------------------------------+
Instrukce RRC:
+-------+ +---+---+---+---+---+---+---+---+ + Carry |--->---| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | +-------+ +---+---+---+---+---+---+---+---+ ^ | | v +-----------------------------------------+
Instrukce SRL:
+---+ +---+---+---+---+---+---+---+---+ +-------+ + 0 |--->---| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |--->---+ Carry | +---+ +---+---+---+---+---+---+---+---+ +-------+
Instrukce SRA:
+---<----+ | | | +-+-+---+---+---+---+---+---+---+ +-------+ +-->---| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |--->---+ Carry | +---+---+---+---+---+---+---+---+ +-------+
9. Podmíněné i nepodmíněné skoky, skoky a návraty z podprogramů
Mezi další skupinu instrukcí patří různé typy skoků, včetně instrukcí určených pro skok do podprogramu a návrat z podprogramu. Při popisu skokových instrukcí si musíme uvědomit, že se v nich musí použít adresovací režimy odlišné od režimů použitých při adresování operandů aritmetických a logických instrukcí. Je to vlastně očekávaná vlastnost, protože operandy běžných instrukcí jsou uloženy v datové paměti (o maximální kapacitě 4096 bajtů), kdežto paměť programu je od datové paměti oddělena a její běžný adresový rozsah je 64 kB (s možností jeho zvětšení s využitím stránkování). Základní instrukce pro podmíněné a nepodmíněné skoky se jmenuje JP (absolutní skok) a JR (relativní skok), pro skok do podprogramu a návrat z podprogramu se používají instrukce CALL a RET, Booleovský procesor je doplněn instrukcemi BTJ, BTJZ a BTJNZ a zapomenout nesmíme ani na instrukci DJNZ, kterou lze použít pro implementaci počítaných programových smyček:
# | Instrukce | Operandy | Stručný popis |
---|---|---|---|
1 | JP | cc,dst | absolutní skok (s volitelnou podmínkou) |
2 | JR | cc,dst | relativní skok (s volitelnou podmínkou) |
3 | DJNZ | dst,src | snížení dst o 1 a skok v případě, že je dst nenulový |
4 | BTJ | p, bit, src, dst | skok za podmínky, že je srcbit=p |
5 | BTJZ | bit, src, dst | skok za podmínky, že je srcbit=0 |
6 | BTJNZ | bit, src, dst | skok za podmínky, že je srcbit=1 |
7 | CALL | dst | volání podprogramu (lze použít absolutní adresu či registrový pár) |
8 | RET | návrat z podprogramu | |
9 | IRET | návrat z přerušovací rutiny (obnoví FLAGS i IRQCTL) |
U instrukcí skoku je v operandu dst uložena přímá či nepřímá cílová adresa skoku.
U instrukcí JP a JR je možné do pole cc specifikovat podmínku, při jejímž splnění se skok provede. Pokud podmínka není zapsána, provede se skok v každém případě (druhý řádek tabulky):
Kód (cc) | Plný název | Testovaná podmínka |
---|---|---|
F | always false | × |
(nic) | always true | × |
C | carry | C=1 |
NC | no carry | C=0 |
Z | zero | Z=1 |
NZ | non zero | Z=0 |
PL | plus | S=0 |
MI | minus | S=1 |
OV | overflow | V=1 |
NOV | no overflow | V=0 |
EQ | equal | Z=1 |
NE | not equal | Z=0 |
GE | greater than or equal | (S ⊕ V)=0 |
LT | less than | (S ⊕ V)=1 |
GT | greater than | (Z ∨ (S ⊕ V))=0 |
LE | less than or equal | (Z ∨ (S ⊕ V))=1 |
UGE | unsigned greater than or equal | C=0 |
ULT | unsigned less than | C=1 |
UGT | unsigned greater than | (C=0 ∧ Z=0)=1 |
ULE | unsigned less than or equal | (C ∨ Z)=1 |
Poznámka: povšimněte si, že některé kódy jsou vlastně pouze aliasy na jiné kódy. Příkladem může být kód C a UGE. Ve skutečnosti existuje pouze čtrnáct unikátních podmínek doplněných o dvě „konstantní podmínky“ always true a always false.
10. Instrukce Booleovského procesoru
Podobně jako u mnoha dalších mikrořadičů nalezneme i u jader eZ8 instrukce, které lze použít pro manipulaci s jednotlivými bity, popř. pro aplikaci nějaké masky na celý bajt. Tyto instrukce jsou vypsány v následující tabulce, navíc k nim můžeme přidat i výše popsané podmíněné skoky BTJ, BTJZ a BTJNZ:
# | Instrukce | Operandy | Stručný popis |
---|---|---|---|
1 | TM | dst,src | (NOT dst) AND src s nastavením příznaků zero a sign |
2 | TCM | dst,src | (NOT dst) AND src s nastavením příznaků zero a sign |
3 | BSET | bit, dst | nastavení bitu s indexem bit na jedničku |
4 | BCLR | bit, dst | vynulování bitu s indexem bit |
5 | BIT | p, bit, dst | nastavení bitu s indexem bit na hodnotu p |
I v této skupině nalezneme instrukce s rozšířenými adresovacími režimy, které dokážou přistupovat do celé dostupné RAM:
# | Instrukce | Rozšířená varianta |
---|---|---|
1 | TM | TMX |
2 | TCM | TCMX |
11. Instrukce pro přenosy dat
Skupina instrukcí pro přenos dat je poměrně rozsáhlá, a to z toho důvodu, že je nutné rozlišit čtení/zápis do běžné datové paměti, čtení/zápis do externí datové paměti (samozřejmě pokud je připojena) a konečně čtení popř. v některém případě i zápis do paměti programu. Navíc si povšimněte, že všechny přenosové instrukce se jmenují LD (load), i když současně provádí i zápis (eZ8 má i pracovní registry uloženy v paměti):
# | Instrukce | Operandy | Stručný popis |
---|---|---|---|
1 | LD | dst,src | přenos bajtu v rámci datové paměti |
2 | LDC | dst,src | načtení konstanty z programové paměti |
3 | LDE | dst,src | přenos dat z/do externí datové paměti |
4 | LDWX | dst,src | načtení 16bitového slova |
5 | LEA | dst,X(src) | výpočet dst ← src + X |
6 | PUSH | src | uložení operandu src na zásobník |
7 | POP | dst | načtení operandu ze zásobníku a uložení na dst |
8 | CLR | dst | vynulování dst |
Poznámka: při programování FLASH paměti může být cílovým operandem LDC i paměť programu.
I v této skupině nalezneme instrukce s rozšířenými adresovacími režimy, které dokážou přistupovat do celé dostupné RAM:
# | Instrukce | Rozšířená varianta |
---|---|---|
1 | PUSH | PUSHX |
2 | POP | POPX |
3 | LD | LDX |
12. Blokové přenosy
Předchozí skupinu instrukcí doplňují ještě dvě další instrukce pojmenované LDCI a LDEI. Tyto instrukce dokážou načíst data z programové paměti resp. z externí datové paměti a posléze inkrementují adresu, z níž bylo načtení provedeno i adresu, na níž se operand uložil. Tyto instrukce je tedy možné použít pro blokové přenosy dat, například kombinací instrukcí LDCI+DJNZ či LDEI+DJNZ:
# | Instrukce | Operandy | Stručný popis |
---|---|---|---|
1 | LDCI | dst,src | načtení konstanty z programové paměti + inkrementace adresy |
2 | LDEI | dst,src | načtení konstanty z externí datové paměti + inkrementace adresy |
Poznámka: při programování FLASH paměti může být cílovým operandem LDCI i paměť programu.
13. Práce s příznaky
Mikrořadiče Z8 obsahují pouze tři instrukce, které umožňují přímou manipulaci s příznakovými bity, konkrétně pouze s příznakem carry. Všechny tyto instrukce mají délku instrukčního slova jeden bajt. Pokud je nutné manipulovat i s ostatními příznakovými bity, lze to provést přímým zápisem do registru FLAGS, který je umístěn na adrese 0×fc (ovšem zaplatíme za to nepatrně delším a pomalejším programem):
# | Instrukce | Operandy | Stručný popis |
---|---|---|---|
1 | RCF | × | vynulování příznaku carry |
2 | SCF | × | nastavení příznaku carry na 1 |
3 | CCF | × | negace příznaku carry |
Tyto tři instrukce existují z toho důvodu, že se s carry bitem manipuluje před provedením rotací.
14. Instrukce pro řízení CPU
Poslední skupinu tvoří instrukce určené pro řízení procesoru. Nalezneme zde například instrukce pro povolení či zákaz přerušení (přerušení je však registrováno v každém případě, i když je zakázáno), nastavení aktuálně používané banky registrů, práce s watchdogem, zastavení procesoru apod.:
# | Instrukce | Operandy | Stručný popis |
---|---|---|---|
1 | EI | povolení přerušení | |
2 | DI | zákaz přerušení | |
3 | ATM | zákaz přerušení a DMA přenosů pro další tři instrukce | |
4 | NOP | přeskok na následující instrukci | |
5 | SRP | src | nastavení aktuálně používané banky registrů |
6 | WDT | znovunaplnění čítače watchdogu | |
7 | STOP | režim STOP | |
8 | HALT | režim HALT | |
9 | BRK | pozastavení (v debug režimu) | |
10 | TRAP | vektor | uložení PC a FLAGS na zásobník, skok na adresu uloženou na @vector |
15. Odkazy na Internetu
- Z80 info
http://www.z80.info/ - Zilog (stránka firmy)
http://www.zilog.com/ - Řada Z8 Encore
http://www.zilog.com/index.php?option=com_product&task=product&businessLine=1&id=2&parent_id=2&Itemid=56 - New Zilog Z8051 Microcontrollers (už ne „new“, článek je z roku 2012)
http://microcontroller.com/news/Zilog_Z8051.asp - Zilog: The First Decade: Z80, Z8 and the Z8000
http://www.cpushack.com/2010/10/15/zilog-the-first-decade-z80-z8-and-the-z8000/ - Docs for: Z8 Microcontroller (archivní stránka)
http://www.oocities.org/siliconvalley/peaks/3938/z8_home.htm - 8-BIT MCU Relevancy in 2011
http://www.eeweb.com/blog/steve_darrough/8-bit-mcu-relevancy-in-2011 - Zilog Z8 (Wikipedia)
https://en.wikipedia.org/wiki/Zilog_Z8 - 8-bit S08
http://www.nxp.com/products/microcontrollers-and-processors/more-processors/8–16-bit-mcus/8-bit-s08:HCS08 - S08QB: 8-bit QB MCUs
http://www.nxp.com/products/microcontrollers-and-processors/more-processors/8–16-bit-mcus/8-bit-s08/8-bit-s08–3.6v-mcus/8-bit-qb-mcus:S08QB - 8-bit RS08
http://www.nxp.com/products/microcontrollers-and-processors/more-processors/8–16-bit-mcus/8-bit-rs08:RS08FAMILY - Wikipedia: Motorola 68HC05
http://en.wikipedia.org/wiki/Motorola_68HC05 - Wikipedia: Freescale 68HC08
http://en.wikipedia.org/wiki/68HC08 - Wikipedia: Freescale 68HC11
http://en.wikipedia.org/wiki/68HC11 - Wikipedia: Freescale 68HC12
http://en.wikipedia.org/wiki/Freescale_68HC12 - HC05 Processor Families
http://www.freescale.com/webapp/sps/site/overview.jsp?nodeId=01624684498633 - HC08 Processor Families
http://www.freescale.com/webapp/sps/site/overview.jsp?nodeId=01624684497663 - Digital Core Design 68HC08 – HDL IP Core
http://www.dcd.pl/acore.php?idcore=82 - Freescale 68HC11
http://www.freescale.com/webapp/sps/site/taxonomy.jsp?nodeId=01624684498635 - Lifecycle of a CPU:
http://www.cpushack.net/life-cycle-of-cpu.html - Great Microprocessors of the Past and Present (V 13.4.0)
http://jbayko.sasktelwebsite.net/cpu.html - SPI interface tutorial
http://www.best-microcontroller-projects.com/spi-interface.html - Serial Peripheral Interface Bus
http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus - What is SPI?
http://www.fpga4fun.com/SPI1.html - SPI – A simple implementation
http://www.fpga4fun.com/SPI2.html - Bit-banging
http://en.wikipedia.org/wiki/Bit-banging - Joint Test Action Group
http://en.wikipedia.org/wiki/JTAG - I2C
http://en.wikipedia.org/wiki/I2C - I2 Background
http://www.microport.tw/blognew.php?blog_no=7#theory - H8/3802, 38002S, 38004, 38104 (manuály k čipům)
https://www.renesas.com/en-us/document/hw-manual?hwLayerShowFlg=true&prdLayerId=184&layerName=H8%252F3802%252C%2B38002S%252C%2B38004%252C%2B38104&coronrService=document-prd-search&hwDocUrl=%2Fen-us%2Fdoc%2Fproducts%2Fmpumcu%2F001%2Frej09b0024_h83802.pdf&hashKey=c5e1fa0a18c01e6c789bc7b5c0184ed9 - Addressing mode (Wikipedia)
https://en.wikipedia.org/wiki/Addressing_mode - Renesas SH Instruction Set Summary
http://shared-ptr.com/sh_insns.html - SH-4 RISC Processor by HITACHI
http://www.cs.umd.edu/~meesh/cmsc411/website/projects/risc/risc.htm - SH-4 RISC Processor
http://www.cs.umd.edu/~meesh/cmsc411/website/projects/risc/sh-4.htm - SuperH RISC engine Family Features
https://www.renesas.com/en-us/products/microcontrollers-microprocessors/superh/superh-features.html - Orthogonal instruction set
https://en.wikipedia.org/wiki/Orthogonal_instruction_set - An introduction to the TI MSP430 low-power microcontrollers
http://mspgcc.sourceforge.net/manual/c68.html - MSP430 LaunchPad Tutorials
http://processors.wiki.ti.com/index.php/MSP430_LaunchPad_Tutorials - LaunchPad MSP430 Assembly Language Tutorial
http://robotics.hobbizine.com/asmlau.html - TI 16-bit and 32-bit microcontrollers
http://www.ti.com/lsds/ti/microcontrollers16-bit32-bit/overview.page - Z86E04 Tutorial
https://tiktakx.wordpress.com/2010/05/04/z86e04-tutorial/ - Z80 Instruction Set
http://clrhome.org/table/ - 8080/Z80 Instruction Set
http://nemesis.lonestar.org/computers/tandy/software/apps/m4/qd/opcodes.html