O Z80: Exemplo de um
microprocessador de 8 bits
• A abordagem ao microprocessador Z80 tem
por objectivos principais:
– Analisar uma arquitectura com boas
características pedagógicas e inúmeras
aplicações aos longo dos (muitos) anos
– Relacionar a arquitectura do microprocessador
com os elementos exteriores necessários à
implementação de um pequeno sistema
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
1
Arquitectura do Z80
Barramento de dados (8 bit)
Descod.
e
controlo
Sinais de
controlo
do CPU e
sistema
Controlo
barr. dados
Reg. de
instrução
Registos
do CPU
Sinais de controlo
(internos)
ALU
Controlo
de endereços
Barramento de endereços (16 bit)
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
2
Z80: Configuração de pinos
/M1
Controlo /MREQ
/IORQ
do
/RD
sistema
/WR
/RFSH
/HALT
Controlo /WAIT
do
/INT
CPU
/NMI
/RESET
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
Barramento de
endereços (16)
Z80
CPU
Barramento
de dados (8)
/BUSRQ Controlo do
barramento
/BUSAK
do CPU
Clock
Vcc
Gnd
3
Z80: Configuração de pinos
A11
A12
A13
A14
A15
CLK
D4
D3
D5
D6
+5 V (Vcc)
D2
D7
D0
D1
/INT
/NMI
/HALT
/MREQ
/IORQ
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
A10
A9
A8
A7
A6
A5
A4
A3
A2
A1
A0
0 V (Gnd)
/RFSH
/M1
/RESET
/BUSRQ
/WAIT
/BUSAK
/WR
/RD
4
Leitura de um código de
instrução
T1
T2
T3
T4
250 ns
CLOCK
A[0:15]
Endereço válido
/MREQ
/RD
/M1
D[0:7]
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
mín. 35 ns
Dados
válidos
5
Leitura de um operando
T1
T2
T3
T4
250 ns
CLOCK
A[0:15]
Endereço válido
/MREQ
/RD
mín. 50 ns
D[0:7]
250 ns
mín. 30 ns
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
Dados
válidos
máx. 75 ns
6
Ciclo de escrita em memória
T1
T2
T3
T4
250 ns
CLOCK
Endereço válido
A[0:15]
/MREQ
mín. 220 ns
/WR
mín. 80 ns
D[0:7]
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
mín. 60 ns
Dados no barramento
7
Ciclo de acesso a E/S
T1
T2
T3
T4
250 ns
CLOCK
Endereço válido
A[0:7]
/IORQ
/RD
mín. 50 ns
D[0:7]
Dados
válidos
máx. 80 ns
/WR
mín. 30 ns
D[0:7]
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
mín. 60 ns
Dados no barramento
8
Interrupções no Z80
• Quando o Z80 aceita um pedido de
interrupção pára temporariamente o que
está a fazer para o atender
• /NMI: Permite o pedido de interrupções não
mascaráveis
• /INT: Os pedidos de interrupção neste pino
serão atendidos se o programador o
permitir
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
9
Atendimento das interrupções
Cód. instrução
Operando
Cód. instrução
Operando
Ao concluir-se o
atendimento da
interrupção retoma-se
a execução do
programa principal
(continuação
do
programa)
Ao ser aceite um pedido
de interrupção
suspende-se a execução
do programa principal,
que é temporariamente
substituído pela rotina
de atendimento da
interrupção
Cód. instrução
Operando
reti
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
Execução do programa
principal
Rotina de atendimento
da interrupção (termina
com a instrução de retorno)
10
SP e stack quando é atendida
uma interrupção
(SP)
Indefinido
Indefinido
Indefinido
(Antes)
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
Endereços
decrescentes
PCH
PCL
Indefinido
(SP)
(Depois)
11
Pedidos de interrupção em
/NMI
• O pedido de interrupção em /NMI (activo à
transição descendente) força a execução
da rotina de atendimento, que terá que
começar no endereço 0066H
• Esta rotina deverá terminar com a instrução
RETN, que garante a manutenção do
estado imediatamente anterior ao pedido
ser aceite
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
12
Pedidos de interrupção em
/INT
• O pedido em /INT é activo ao nível lógico 0, pode
ser atendido nos modos 0, 1 ou 2 (ou ignorado) e
o retorno deve ser feito com RETI
– No modo 0 deverá ser forçado no barramento de
dados uma instrução de restart
– No modo 1 tem lugar um salto para a rotina de
atendimento com início em 0038H
– No modo 2 o endereço será dado pelo registo I (MSB)
e pelo barramento de dados (LSB)
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
13
Permitir / inibir pedidos em
/INT
• As instruções EI (enable interrupts) e DI
(disable interrupts) permitem / inibem o
atendimento de interrupções no pino /INT
• O Z80 dispõe de um flip-flop interno (IFF1),
onde armazena a informação sobre a
permissão ou inibição do atendimento a /INT
• Existe ainda um outro flip-flop deste tipo (IFF2),
usado durante o atendimento em /NMI
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
14
RETN e RETI
• Durante o atendimento a /NMI deve suspenderse o atendimento a /INT, para evitar que uma
interrupção de baixa prioridade possa sobreporse a uma de alta prioridade
• O processo de atendimento a /NMI copia IFF1
para IFF2 e coloca IFF1 em 0, pelo que o valor
de IFF1 deve ser reposto no fim (e por isso o
retorno de /NMI difere do de /INT)
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
15
Modelo de programação do
Z80
• O modelo de programação do Z80 pode
representar-se por um diagrama de blocos que
inclui os registos e as flags de um
microprocessador
• Esta informação permite-nos o desenvolvimento
de programas, mesmo que não conheçamos a
evolução temporal dos sinais nos pinos ou
outros detalhes de funcionamento
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
16
Modelo de programação do
Z80
8 bit
8 bit
A
B
D
H
F
C
E
L
8 bit
A’
B’
D’
H’
8 bit
F’
C’
E’
L’
16 bit
Stack pointer
Program counter
IY index register
IX index register
I
R
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
Apontador para a pilha
Apontador de programa
IX e IY são usados com
endereçamento indexado
Alternate
register set
(conjunto
alternativo
de registos)
17
O registo das flags
8 bit
8 bit
A
B
D
H
F
C
E
L
S: sign - activa quando
o bit mais significativo
do resultado é 1
Z: zero - activa quando
o resultado da
instrução tem o valor 0
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
H: half-carry - activa quando
há transporte do bit 3 para o 4
S Z
H
P/ N C
V
Y
P/V: parity / overflow conforme o tipo de instrução
N: indica se a última operação foi
uma adição ou uma subtracção
CY: activa quando há transporte
para além do bit 7
18
Modos de endereçamento
• Imediato (immediate) - LD A,$FF / 3E FF
• Imediato estendido (immediate extended) LD HL,1000H / 21 00 10
• Página zero modificado (modified page
zero) - RST 00H / C7
• Relativo (relative) - JR Z,MARCA / 28 05
• Estendido (extended) - LD HL,(1000H) /
2A 00 10
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
19
Modos de endereçamento
• Indexado (indexed) - LD C,(IX) / DD 4E 00
• Ao registo (register) - LD A,B / 78
• Indirecto por registo (register indirect) LD A,(BC) / 0A
• Implícito (implied) - CPL / 2F
• Ao bit (bit) - BIT 3,(IX+7FH) / DD CB 7F
5E
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
20
Tipos de instruções
• Transferência de dados de 8 bits (8-bit
load) - LD A,B / 78
• Transferência de dados de 16 bits (16-bit
load) - LD HL,1000H / 21 00 10
• Troca, transferência de blocos e pesquisa
em blocos (exchange, block transfer, block
search) - EX DE,HL / EB
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
21
Tipos de instruções
• Aritméticas e lógicas para dados de 8 bits
(8-bit arithmetic and logical) ADD A,(IY+10H) / FD 86 10
• Genéricas do tipo aritmético e para controlo
do CPU (general-purpose arithmetic and
CPU control) - CCF / 3F
• Aritméticas para dados de 16 bits (16-bit
arithmetic) - ADC HL,DE / ED 5A
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
22
Tipos de instruções
• Rotação / deslocamento (rotate / shift)- RLA / 17
• Manipulação ao bit (bit set, reset and test) - BIT
5,A / CB 6F
• Salto (jump) - JP 20FFH / C3 FF 20
• Chamada de subrotinas e retorno (call and return)
- CALL 1000H / CD 00 10
• Entrada e saída (input and output) IN A,(7FH) / DB 7F
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
23
Apresentação de um pequeno
sistema de apoio laboratorial
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
24
Disposição dos componentes
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
25
U1
27
M1
19
20
22
21
/MREQ
/IOREQ
/WR
/RD
MREQ
IORQ
WR
RD
VCC
28
R1 2K2
2
R2 2K2
2
R3 2K2
2 /INT
2 /NMI
2K2
R4
/RESET
R5 2K2
2
1
1
1
1
1
VCC
REFSH
18
HALT
24
WAIT
16
17
INT
NMI
26
RESET
25
23
CLK
1
C1
100n
2
U2
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
14
15
12
8
7
9
10
13
D0
D1
D2
D3
D4
D5
D6
D7
BUSRQ
BUSAK
6
CLK
30
31
32
33
34
35
36
37
38
39
40
1
2
3
4
5
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
D0
D1
D2
D3
D4
D5
D6
D7
/M_CS
/WR
/RD
10
9
8
7
6
5
4
3
25
24
21
23
2
26
1
20
27
22
U3
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
11
12
13
15
16
17
18
19
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
D0
D1
D2
D3
D4
D5
D6
D7
1
2
3
4
5
6
7
8
9
10
11
13
CLK
/MREQ
/IOREQ
A15
A7
A6
KEY0
KEY1
KEY2
KEY3
/WR
/RD
VCC
I1/CLK
I2
I3
I4
I5
I6
I7
I8
I9
I10
I11
I12
23
22
21
20
19
18
17
16
15
14
O1
O2
O3
O4
O5
O6
O7
O8
O9
O10
D3
D2
D1
D0
OUT3
OUT2
OUT1
OUT0
DA_CS
/M_CS
VCC
1
2
22V10
J P1
1
2
CE
WE
OE
GND
VCC
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
C2
100n
DS1230Y
VCC
R10
1
2
1
Z80
2
1
3
5
7
9
11
13
15
17
19
2K49
C5
100n
C3
100n
OUT0
OUT1
OUT2
OUT3
KEY0
KEY1
KEY2
KEY3
/NMI
/INT
2
4
6
8
10
12
14
16
18
20
CONECTOR
VEE
Y1
1
2
U4A
U4F
1
2
13
12
D0
D1
D2
D3
D4
D5
D6
D7
CLK
1
C8
2 100p
74HCT14
R13
2
1
74HCT14
R14
2
1
1K
1K
VCC
1
3
U5
4MHz
3
4
7
8
13
14
17
18
D0
D1
D2
D3
D4
D5
D6
D7
1
DA_CS 11
2
5
6
9
12
15
16
19
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
Q0 12
Q1 11
Q2 10
Q3 9
Q4 8
Q5 7
Q6 6
Q7 5
14
OC
G
VCC
B8
B7
B6
B5
B4
B3
B2
B1
1
15
2
R16
10K
2
1
U4E
2
2
5
6
11
10
1
2
2
1
VDD
2
1
V
-
1
VLC
2
C7
100n
1
10K
R9
10K
VCC
2
VEE
3
2
1
C6
100n
D4
LED_2
VCC
/RESET
74HCT14
2
1
74HCT14
C9
4u7
VCC
VCC
VCC
VCC
VCC
VCC
U4B
U4D
R17
1
R18
2
3
4
1
2
9
1
R19
2K2
8
1
R20
2K2
1
D2
LED_0
1
R21
2K2
2K2
2
74HCT14
74HCT14
KEY0
2
KEY1
2
KEY2
2
+5V VCC
+12V
-12V
GND
VCC
VDD
VEE
1
2
ALIMENTACAO
C4
100n
S2
KEY0
1
2
S3
KEY1
1
D3
LED_1
D5
LED_3
Q1
BC547
10K
3
2
1
R27
390R
2
1
2
S4
KEY2
2
S5
KEY3
1
R23
390R
R24
390R
2
OUT0
2
1
R26
OUT3 1
2
22
10K
Q2
BC547
3
OUT1
SITEMA Z80 - SD2
1
Siz e
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
22
2
KEY3
1
OUT2 1
R22
2K2
VCC
J P2
2
1
R25
2
2K2
1
VCC
1
VCC
VCC
R28
390R
2
1
2
3
4
TL082
R8
VCC
R15
1K
1
1
6
TL082
16
COMP
VEE
RESET
1
7
8
2
1
2
3
DAC0800
R12
4K99
J1
SAIDA
5
1
U4C
S1
U7B
U7A
2
1
IOUT
VR-
1
R11
2K49
D1
1N4148
4
4
V IOUT
+
VR+
74LS373
1
U6
Document Number
A
Date:
REV
J MF / HCM
December 12, 1995
1.0
Sheet
1
of
1
26
Descodificação do sistema
• Os endereços atribuídos a cada bloco
presente estão ilustrados na tabela
seguinte:
RD
WR
MREQ
IORQ
A15
A7
A6
Acesso seleccionado
0 (1)
1 (0)
0
1
0
X
X
Memória
-
-
1
0
X
0
0
-
1
0
1
0
X
0
1
Saída analógica
1
0
1
0
X
1
0
Saídas digitais
0
1
1
0
X
1
1
Entradas digitais
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
27
PAL de descodificação:
Equações
+L 64
C 1
IAW
123k
*d:\palasm\examples\z80jmf.pds
+
¦
¦
¦
¦
¦EQUATIONS
¦
¦
¦
¦/MEM_CS = /MREQ*IORQ*/A15
¦
¦DA_CS = MREQ*/IORQ*/WR*RD*/A7*A6
¦
¦
¦
¦OUT0 := (MREQ*/IORQ*/WR*RD*A7*/A6)*D0 + /(MREQ*/IORQ*/WR*RD*A7*/A6)*OUT0
¦
¦OUT1 := (MREQ*/IORQ*/WR*RD*A7*/A6)*D1 + /(MREQ*/IORQ*/WR*RD*A7*/A6)*OUT1
¦
¦OUT2 := (MREQ*/IORQ*/WR*RD*A7*/A6)*D2 + /(MREQ*/IORQ*/WR*RD*A7*/A6)*OUT2
¦
¦OUT3 := (MREQ*/IORQ*/WR*RD*A7*/A6)*D3 + /(MREQ*/IORQ*/WR*RD*A7*/A6)*OUT3
¦
¦
¦
¦D0.TRST = MREQ*/IORQ*WR*/RD*A7*A6
¦
¦D1.TRST = MREQ*/IORQ*WR*/RD*A7*A6
¦
0
D
1
¦D2.TRST = MREQ*/IORQ*WR*/RD*A7*A6
¦
¦D3.TRST = MREQ*/IORQ*WR*/RD*A7*A6
¦
¦D0 = KEY0
¦
¦D1 = KEY1
¦
¦D2 = KEY2
¦
¦D3 = KEY3
¦
¦
¦
¦
¦
¦
¦
+------------------------------------------------------------------------------+
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
28
Exemplo de aplicação
• O exemplo de aplicação que aqui se ilustra
corresponde a uma situação simples que
gera uma onda em dente de serra
inicio
.org
0h
; posiciona o codigo a partir de 0000
saida
.equ
40h
; endereco do conversor D/A
inicio
ciclo
ld
out
inc
jp
a,$00
(saida),a
a
ciclo
;
;
;
;
comeca com o valor minimo
escreve no D/A (saida analogica)
incrementa o valor para o D/A
repete o ciclo escreve / incrementa
.end
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
29
Geração do código objecto
• A passagem deste código em assembly pelo
cross-assembler gera o seguinte ficheiro .lst:
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0000
0000
0000
0000
0000
0000
0002
0004
0005
0008
0008
0008
3E 00
D3 40
3C
C3 02 00
inicio
.org
0h
saida
.equ
40h
inicio
ciclo
ld
out
inc
jp
a,$00
(saida),a
a
ciclo
.end
tasm: Number of errors = 0
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
30
Execução do código
• A execução do código objecto gerado
produz a seguinte forma de onda:
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
31