Mikroprocesor Z80
  1. Opis wyprowadzeń
  2. Rejestry
  3. Lista rozkazów
  4. Rozkazy nieoficjalne
  5. Podstawowe operacje sprzętowe
  6. Cykle pracy procesora Z80
  7. Przykładowe programy w kodzie maszynowym
  8. Instrukcja obsługi assemblera TASM

Mikroprocesor Z80 firmy "Zilog"

z80cpu.gif Mikroprocesor Z80 jest 8-bitowym CPU, który zdobył w w latach osiemdziesiątych ogromną popularność ze względu na swoje zalety. Powszechnie stosowali go producenci domowych komputerów osobistych. Jest sercem takich komputerów jak ZX 80/81, ZX Spectrum, Amstrad CPC, Spectravideo. Mało kto wie, że w ten procesor był również wyposażony Commodore 128 (w celu zachowania kompatybilności z systemem CP/M). Uniwersalność tego procesora potwierdza fakt, że znalazł on również zastosowanie w wielu innych układach, m.in. w regulatorach przemysłowych (np. MRP-41), sprzęcie pomiarowym itp. Na świecie produkowało go wiele firm, również tych z krajów socjalistycznych - NRD-owskim odpowiednikiem był układ U880D.
Procesor ten cechował się dużą szybkością pracy (najbardziej rozpowszechniona wersja Z80A taktowana była zegarem 4MHz), bogatym zestawem wykonywanych rozkazów, wbudowanym systemem przerwań, zgodnością programową z procesorem 8080 (Intel) oraz wbudowanym układem odświeżania pamięci dynamicznych RAM. Konstruktorzy wzorowali się na procesorze 8080.
Mikroprocesor wykonywany był w technologii NMOS, mieścił się w 40 nóżkowej obudowie DIL. W swoim wnętrzu kryje ok. 8,5 tys. tranzystorów.
Najważniejsze cechy:
- 8-bitowa magistrala danych
- 16-bitowa magistrala adresowa
- możliwość bezpośredniego adresowania 64 kB pamięci
- możliwość wykonywania operacji na bitach, słowach 8- i 16-bitowych
- 158 rozkazów (w tym 78 rozkazów wykonywanych przez 8080)
- dwie linie przerwań (maskowalna i niemaskowalna)
- układ automatycznego odświeżania pamięci dynamicznych RAM
- pojedyncze zasilanie +5V
- sygnały logiczne TTL

Opis wyprowadzeń

Gwiazdka (*) oznacza, że aktywnym sygnałem jest niski.
Sygnał Nazwa Rodzaj Opis
D0 - D7 DATA BUS wejścia/wyjścia trójstanowe 8-bitowa dwukierunkowa szyna danych
A0 - A15 ADDRESS BUS wyjścia trójstanowe 16-bitowa jednokierunkowa magistrala adresowa
BUSREQ* BUS REQUEST wejście (neg) Sygnał żądania zwolnienia przez CPU magistral: danych, adresowej i sterującej. Pojawienie się stanu niskiego na wejściu BUSREQ* powoduje wprowadzenie linii danych, adresów i sterujących (MREQ*, IORQ*, RD* i WR*) w stan wysokiej impedancji. W ostatnim takcie każdego cyklu badany jest stan sygnału na wejściu BUSREQ* i w momencie, gdy zmieni się on w stan wysoki, procesor przejmuje kontrolę nad magistralami. Sygnał BUSREQ* ma wyższy priorytet niż sygnał NMI*
BUSACK* BUS ACKNOWLEDGE wyjście Sygnał potwierdzenie zwolnienia magistral systemowych. Niski stan na tym wyjściu oznacza, że magistrale znajdują się w stanie wysokiej impedancji

Ciąg dalszy przygotowaniu...


Rejestry

Mikroprocesor Z80 został wyposażony w rejestry. Rejestry, w prostym tłumaczeniu, są komórkami pamięci wbudowanymi do procesora, na liczbach wpisanych do rejestrów mikroprocesor może wykonywać wszelkie dostępne działania logicze i arytmetyczne. Ponadto w rejestrach mogą znajdować się dane będące argumentami pewnych operacji (np. adres komórki pamięci do odczytu).
Są też rejestry specjalne, których przeznaczeniem jest np. informacja o stanie wykonanych operacji (rejestr flag), licznik rozkazów itp.

Rejestry ogólnego przeznaczenia:

A F A' F'
B C B' C'
D E D' E'
H L H' L'

Każdy z rejestrów jest 8-bitowy. Można je łączyć w pary 16-bitowe. Zatem programista ma do dyspozycji: Wyróżnionym rejestrem jest rejestr A - tzw. akumulator. W rejestrze tym umieszczony jest zazwyczaj jeden z argumentów operacji, a później wynik jej działania. W operacjach na liczbach 16-bitowych rolę akumulatora pełni para rejestrów HL.
W operacjach blokowych rejestr BC jest licznikiem.

Rejestry specjalne

Rejestr flag (F)

Rejestr F jest tzw. rejestrem flag. Flagi są jednobitowymi znacznikami.

7 6 5 4 3 2 1 0
S Z - H - P/V N C

Bit Znacznik Nazwa Opis
0 C Carry przeniesienie z najstarszego bajtu (np. przy sumowaniu)
1 N Negativ oznacza, że ostatnio wykonaną operacją było odejmowanie, informacja o tym jest istotna przy korekcji wyników
2 P/V Parity/Overflow
  • po operacjach logicznych - oznacza parzystą licznę jedynek w wyniku
  • po operacjach arytmetycznych - przepełnienie w kodzie U2
4 H Half Carry przeniesienie połókowe pomiędzy tetradami (z młodszej do starszej)
6 Z Zero znacznik jest ustawiony, gdy wynik operacji = 0
7 S Sign znak liczby w kodzie U2 (kopia najstarszego bitu wyniku)

Bank alternatywny rejestrów

Procesor Z80 dysponuje alternatywnym bankiem rejestrów A', F', ... itd. Dostęp do nich jest ograniczony - możliwy jest tylko poprzez rozkazy wymiany:
EX      AF, A'F'     ; wymiana rejestrów AF z A'F'
EXX                  ; wymiana wszystkich rejestrów

Rejestry sterujące


Lista rozkazów

Poniższa lista rozkazów jest może mało poręczna, ale jest. W przyszłości będzie lepsza. Najważniejsze uwagi: kod rozakazu jest podany szesnastkowo, jeśli są dwa kody obok siebie, to są one w odwrotnej kolejności np. 7AED oznacza, że najpierw wprowadza się do pamięci ED (prefiks), a potem dopiero 07 (kod instrukcji).

Instr.  Arg.    Kod(y)  Długość
                        (bajty)
ADC     A,(HL)  8E      1
ADC     A,(IX*) 8EDD    3
ADC     A,(IY*) 8EFD    3
ADC     A,A     8F      1
ADC     A,B     88      1
ADC     A,C     89      1
ADC     A,D     8A      1
ADC     A,E     8B      1
ADC     A,H     8C      1
ADC     A,L     8D      1
ADC     A,*     CE      2
ADC     HL,BC   4AED    2
ADC     HL,DE   5AED    2
ADC     HL,HL   6AED    2
ADC     HL,SP   7AED    2
ADD     A,(HL)  86      1
ADD     A,(IX*) 86DD    3
ADD     A,(IY*) 86FD    3
ADD     A,A     87      1
ADD     A,B     80      1
ADD     A,C     81      1
ADD     A,D     82      1
ADD     A,E     83      1
ADD     A,H     84      1
ADD     A,L     85      1
ADD     A,*     C6      2
ADD     HL,BC   09      1
ADD     HL,DE   19      1
ADD     HL,HL   29      1
ADD     HL,SP   39      1
ADD     IX,BC   09DD    2
ADD     IX,DE   19DD    2
ADD     IX,IX   29DD    2
ADD     IX,SP   39DD    2
ADD     IY,BC   09FD    2
ADD     IY,DE   19FD    2
ADD     IY,IY   29FD    2
ADD     IY,SP   39FD    2
AND     (HL)    A6      1
AND     (IX*)   A6DD    3
AND     (IY*)   A6FD    3
AND     A       A7      1
AND     B       A0      1
AND     C       A1      1
AND     D       A2      1
AND     E       A3      1
AND     H       A4      1
AND     L       A5      1
AND     *       E6      2
BIT     *,(HL)  46CB    2
BIT     *,(IX*) CBDD    4
BIT     *,(IY*) CBFD    4
BIT     *,A     47CB    2
BIT     *,B     40CB    2
BIT     *,C     41CB    2
BIT     *,D     42CB    2
BIT     *,E     43CB    2
BIT     *,H     44CB    2
BIT     *,L     45CB    2
CALL    C,*     DC      3
CALL    M,*     FC      3
CALL    NC,*    D4      3
CALL    NZ,*    C4      3
CALL    P,*     F4      3
CALL    PE,*    EC      3
CALL    PO,*    E4      3
CALL    Z,*     CC      3
CALL    *       CD      3
CCF     ""      3F      1
CP      (HL)    BE      1
CP      (IX*)   BEDD    3
CP      (IY*)   BEFD    3
CP      A       BF      1
CP      B       B8      1
CP      C       B9      1
CP      D       BA      1
CP      E       BB      1
CP      H       BC      1
CP      L       BD      1
CP      *       FE      2
CPD     ""      A9ED    2
CPDR    ""      B9ED    2
CPIR    ""      B1ED    2
CPI     ""      A1ED    2
CPL     ""      2F      1
DAA     ""      27      1
DEC     (HL)    35      1
DEC     (IX*)   35DD    3
DEC     (IY*)   35FD    3
DEC     A       3D      1
DEC     B       05      1
DEC     BC      0B      1
DEC     C       0D      1
DEC     D       15      1
DEC     DE      1B      1
DEC     E       1D      1
DEC     H       25      1
DEC     HL      2B      1
DEC     IX      2BDD    2
DEC     IY      2BFD    2
DEC     L       2D      1
DEC     SP      3B      1
DI      ""      F3      1
DJNZ    *       10      2
EI      ""      FB      1
EX      (SP),HL E3      1
EX      (SP),IX E3DD    2
EX      (SP),IY E3FD    2
EX      AF,AF'  08      1
EX      DE,HL   EB      1
EXX     ""      D9      1
HALT    ""      76      1
IM      0       46ED    2
IM      1       56ED    2
IM      2       5EED    2
IN      A,(C)   78ED    2
IN      B,(C)   40ED    2
IN      C,(C)   48ED    2
IN      D,(C)   50ED    2
IN      E,(C)   58ED    2
IN      H,(C)   60ED    2
IN      L,(C)   68ED    2
IN      A,(*)   DB      2
INC     (HL)    34      1
INC     (IX*)   34DD    3
INC     (IY*)   34FD    3
INC     A       3C      1
INC     B       04      1
INC     BC      03      1
INC     C       0C      1
INC     D       14      1
INC     DE      13      1
INC     E       1C      1
INC     H       24      1
INC     HL      23      1
INC     IX      23DD    2
INC     IY      23FD    2
INC     L       2C      1
INC     SP      33      1
IND     ""      AAED    2
INDR    ""      BAED    2
INI     ""      A2ED    2
INIR    ""      B2ED    2
JP      (HL)    E9      1
JP      (IX)    E9DD    2
JP      (IY)    E9FD    2
JP      C,*     DA      3
JP      M,*     FA      3
JP      NC,*    D2      3
JP      NZ,*    C2      3
JP      P,*     F2      3
JP      PE,*    EA      3
JP      PO,*    E2      3
JP      Z,*     CA      3
JP      *       C3      3
JR      C,*     38      2
JR      NC,*    30      2
JR      NZ,*    20      2
JR      Z,*     28      2
JR      *       18      2
LD      (BC),A  02      1
LD      (DE),A  12      1
LD      (HL),A  77      1
LD      (HL),B  70      1
LD      (HL),C  71      1
LD      (HL),D  72      1
LD      (HL),E  73      1
LD      (HL),H  74      1
LD      (HL),L  75      1
LD      (HL),*  36      2
LD      (IX*),A 77DD    3
LD      (IX*),B 70DD    3
LD      (IX*),C 71DD    3
LD      (IX*),D 72DD    3
LD      (IX*),E 73DD    3
LD      (IX*),H 74DD    3
LD      (IX*),L 75DD    3
LD      (IX*),* 36DD    4
LD      (IY*),A 77FD    3
LD      (IY*),B 70FD    3
LD      (IY*),C 71FD    3
LD      (IY*),D 72FD    3
LD      (IY*),E 73FD    3
LD      (IY*),H 74FD    3
LD      (IY*),L 75FD    3
LD      (IY*),* 36FD    4
LD      (*),A   32      3
LD      (*),BC  43ED    4
LD      (*),DE  53ED    4
LD      (*),HL  22      3
LD      (*),IX  22DD    4
LD      (*),IY  22FD    4
LD      (*),SP  73ED    4
LD      A,(BC)  0A      1
LD      A,(DE)  1A      1
LD      A,(HL)  7E      1
LD      A,(IX*) 7EDD    3
LD      A,(IY*) 7EFD    3
LD      A,A     7F      1
LD      A,B     78      1
LD      A,C     79      1
LD      A,D     7A      1
LD      A,E     7B      1
LD      A,H     7C      1
LD      A,I     57ED    2
LD      A,L     7D      1
LD      A,R     5FED    2
LD      A,(*)   3A      3
LD      A,*     3E      2
LD      B,(HL)  46      1
LD      B,(IX*) 46DD    3
LD      B,(IY*) 46FD    3
LD      B,A     47      1
LD      B,B     40      1
LD      B,C     41      1
LD      B,D     42      1
LD      B,E     43      1
LD      B,H     44      1
LD      B,L     45      1
LD      B,*     06      2
LD      BC,(*)  4BED    4
LD      BC,*    01      3
LD      C,(HL)  4E      1
LD      C,(IX*) 4EDD    3
LD      C,(IY*) 4EFD    3
LD      C,A     4F      1
LD      C,B     48      1
LD      C,C     49      1
LD      C,D     4A      1
LD      C,E     4B      1
LD      C,H     4C      1
LD      C,L     4D      1
LD      C,*     0E      2
LD      D,(HL)  56      1
LD      D,(IX*) 56DD    3
LD      D,(IY*) 56FD    3
LD      D,A     57      1
LD      D,B     50      1
LD      D,C     51      1
LD      D,D     52      1
LD      D,E     53      1
LD      D,H     54      1
LD      D,L     55      1
LD      D,*     16      2
LD      DE,(*)  5BED    4
LD      DE,*    11      3
LD      E,(HL)  5E      1
LD      E,(IX*) 5EDD    3
LD      E,(IY*) 5EFD    3
LD      E,A     5F      1
LD      E,B     58      1
LD      E,C     59      1
LD      E,D     5A      1
LD      E,E     5B      1
LD      E,H     5C      1
LD      E,L     5D      1
LD      E,*     1E      2
LD      H,(HL)  66      1
LD      H,(IX*) 66DD    3
LD      H,(IY*) 66FD    3
LD      H,A     67      1
LD      H,B     60      1
LD      H,C     61      1
LD      H,D     62      1
LD      H,E     63      1
LD      H,H     64      1
LD      H,L     65      1
LD      H,*     26      2
LD      HL,(*)  2A      3
LD      HL,*    21      3
LD      I,A     47ED    2
LD      IX,(*)  2ADD    4
LD      IX,*    21DD    4
LD      IY,(*)  2AFD    4
LD      IY,*    21FD    4
LD      L,(HL)  6E      1
LD      L,(IX*) 6EDD    3
LD      L,(IY*) 6EFD    3
LD      L,A     6F      1
LD      L,B     68      1
LD      L,C     69      1
LD      L,D     6A      1
LD      L,E     6B      1
LD      L,H     6C      1
LD      L,L     6D      1
LD      L,*     2E      2
LD      R,A     4FED    2
LD      SP,(*)  7BED    4
LD      SP,HL   F9      1
LD      SP,IX   F9DD    2
LD      SP,IY   F9FD    2
LD      SP,*    31      3
LDD     ""      A8ED    2
LDDR    ""      B8ED    2
LDI     ""      A0ED    2
LDIR    ""      B0ED    2
NEG     ""      44ED    2
NOP     ""      00      1
OR      (HL)    B6      1
OR      (IX*)   B6DD    3
OR      (IY*)   B6FD    3
OR      A       B7      1
OR      B       B0      1
OR      C       B1      1
OR      D       B2      1
OR      E       B3      1
OR      H       B4      1
OR      L       B5      1
OR      *       F6      2
OTDR    ""      BBED    2
OTIR    ""      B3ED    2
OUT     (C),A   79ED    2
OUT     (C),B   41ED    2
OUT     (C),C   49ED    2
OUT     (C),D   51ED    2
OUT     (C),E   59ED    2
OUT     (C),H   61ED    2
OUT     (C),L   69ED    2
OUT     (*),A   D3      2
OUTD    ""      ABED    2
OUTI    ""      A3ED    2
POP     AF      F1      1
POP     BC      C1      1
POP     DE      D1      1
POP     HL      E1      1
POP     IX      E1DD    2
POP     IY      E1FD    2
PUSH    AF      F5      1
PUSH    BC      C5      1
PUSH    DE      D5      1
PUSH    HL      E5      1
PUSH    IX      E5DD    2
PUSH    IY      E5FD    2
RES     *,(HL)  86CB    2
RES     *,(IX*) CBDD    4
RES     *,(IY*) CBFD    4
RES     *,A     87CB    2
RES     *,B     80CB    2
RES     *,C     81CB    2
RES     *,D     82CB    2
RES     *,E     83CB    2
RES     *,H     84CB    2
RES     *,L     85CB    2
RET     ""      C9      1
RET     C       D8      1
RET     M       F8      1
RET     NC      D0      1
RET     NZ      C0      1
RET     P       F0      1
RET     PE      E8      1
RET     PO      E0      1
RET     Z       C8      1
RETI    ""      4DED    2
RETN    ""      45ED    2
RL      (HL)    16CB    2
RL      (IX*)   CBDD    4
RL      (IY*)   CBFD    4
RL      A       17CB    2
RL      B       10CB    2
RL      C       11CB    2
RL      D       12CB    2
RL      E       13CB    2
RL      H       14CB    2
RL      L       15CB    2
RLA     ""      17      1
RLC     (HL)    06CB    2
RLC     (IX*)   CBDD    4
RLC     (IY*)   CBFD    4
RLC     A       07CB    2
RLC     B       00CB    2
RLC     C       01CB    2
RLC     D       02CB    2
RLC     E       03CB    2
RLC     H       04CB    2
RLC     L       05CB    2
RLCA    ""      07      1
RLD     ""      6FED    2
RR      (HL)    1ECB    2
RR      (IX*)   CBDD    4
RR      (IY*)   CBFD    4
RR      A       1FCB    2
RR      B       18CB    2
RR      C       19CB    2
RR      D       1ACB    2
RR      E       1BCB    2
RR      H       1CCB    2
RR      L       1DCB    2
RRA     ""      1F      1
RRC     (HL)    0ECB    2
RRC     (IX*)   CBDD    4
RRC     (IY*)   CBFD    4
RRC     A       0FCB    2
RRC     B       08CB    2
RRC     C       09CB    2
RRC     D       0ACB    2
RRC     E       0BCB    2
RRC     H       0CCB    2
RRC     L       0DCB    2
RRCA    ""      0F      1
RRD     ""      67ED    2
RST     00H     C7      1
RST     08H     CF      1
RST     10H     D7      1
RST     18H     DF      1
RST     20H     E7      1
RST     28H     EF      1
RST     30H     F7      1
RST     38H     FF      1
SBC     A,(HL)  9E      1
SBC     A,(IX*) 9EDD    3
SBC     A,(IY*) 9EFD    3
SBC     A,A     9F      1
SBC     A,B     98      1
SBC     A,C     99      1
SBC     A,D     9A      1
SBC     A,E     9B      1
SBC     A,H     9C      1
SBC     A,L     9D      1
SBC     HL,BC   42ED    2
SBC     HL,DE   52ED    2
SBC     HL,HL   62ED    2
SBC     HL,SP   72ED    2
SBC     A,*     DE      2
SCF     ""      37      1
SET     *,(HL)  C6CB    2
SET     *,(IX*) CBDD    4
SET     *,(IY*) CBFD    4
SET     *,A     C7CB    2
SET     *,B     C0CB    2
SET     *,C     C1CB    2
SET     *,D     C2CB    2
SET     *,E     C3CB    2
SET     *,H     C4CB    2
SET     *,L     C5CB    2
SLA     (HL)    26CB    2
SLA     (IX*)   CBDD    4
SLA     (IY*)   CBFD    4
SLA     A       27CB    2
SLA     B       20CB    2
SLA     C       21CB    2
SLA     D       22CB    2
SLA     E       23CB    2
SLA     H       24CB    2
SLA     L       25CB    2
SRA     (HL)    2ECB    2
SRA     (IX*)   CBDD    4
SRA     (IY*)   CBFD    4
SRA     A       2FCB    2
SRA     B       28CB    2
SRA     C       29CB    2
SRA     D       2ACB    2
SRA     E       2BCB    2
SRA     H       2CCB    2
SRA     L       2DCB    2
SRL     (HL)    3ECB    2
SRL     (IX*)   CBDD    4
SRL     (IY*)   CBFD    4
SRL     A       3FCB    2
SRL     B       38CB    2
SRL     C       39CB    2
SRL     D       3ACB    2
SRL     E       3BCB    2
SRL     H       3CCB    2
SRL     L       3DCB    2
SUB     (HL)    96      1
SUB     (IX*)   96DD    3
SUB     (IY*)   96FD    3
SUB     A       97      1
SUB     B       90      1
SUB     C       91      1
SUB     D       92      1
SUB     E       93      1
SUB     H       94      1
SUB     L       95      1
SUB     *       D6      2
XOR     (HL)    AE      1
XOR     (IX*)   AEDD    3
XOR     (IY*)   AEFD    3
XOR     A       AF      1
XOR     B       A8      1
XOR     C       A9      1
XOR     D       AA      1
XOR     E       AB      1
XOR     H       AC      1
XOR     L       AD      1
XOR     *       EE      2

Rozkazy nieoficjalne

W przygotowaniu...


Cztery podstawowe operacje sprzętowe:

  1. odczyt danych MEM --> CPU
  2. zapis danych CPU --> MEM
  3. odczyt z portu we/wy I/O --> CPU
  4. zapis do portu we/wy CPU --> I/O

Operacja/sygnały MREQ* IOREQ* RD* WR*
MEM --> CPU 0 1 0 1
CPU --> MEM 0 1 1 0
I/O --> CPU 1 0 0 1
CPU --> I/O 1 0 1 0


Cykle pracy


Cykl pracy procesora:
  1. Pobranie kodu rozkazu z komórki pamięci adresowanej przez licznik rozkazów (pc)
  2. Dekodowanie rozkazu / pobranie argumentów z pamięci
  3. Wykonanie rozkazu
  4. Modyfikacja rejestru pc o liczbę zależną od długości wykonanego rozkazu (są wyjątki np. skoki)

Cykl pobrania rozkazu (M1)

Czas trwania: 4 takty CLK + ewentualne takty oczekiwania
Jeśli jest aktywny sygnał WAIT* (stan L), procesor nie robi nic - takty WAIT

przebiegi M1


Odczyt/zapis pamięci (MR/MW)

Czas trwania: 3 takty CLK (odczyt) + 3 takty CLK (zapis)

przebiegi MR/MW


Odczyt/zapis wejścia/wyjścia (IOR/IOW)

Przebiega analogicznie jak cykl odczytu/zapisu pamięci. Różnice:
- zamiast syganału MREQ* jest sygnał IOREQ*
- procesor wstawia 1 takt oczekiwania pomiędzy taktami T2 i T3
Tak jak we wszystkich cyklach - pojawienie się aktywnego sygnału WAIT* powoduje wykonywanie cykli oczekiwania.

Inne cykle

Powrót do strony głównej...