FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
1
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
2
Arquitectura do Z80
Barramento de endereços (16 bit)
ALU
Controlo
barr. dados
Descod.
e
controlo
Reg. de
instrução
Controlo
de endereços
Registos
do CPU
Sinais de controlo
(internos)
Barramento de dados (8 bit)
Sinais de
controlo
do CPU e
sistema
FEUP / LEEC – MP (2000 / 2001)
Z80: Configuração de pinos
Barramento de
endereços (16)
Barramento
de dados (8)
/BUSRQ
/BUSAK
Clock
Vcc
Gnd
/RESET
/NMI
/INT
/WAIT
/HALT
/RFSH
/WR
/RD
/IORQ
/MREQ
/M1
Controlo
do
sistema
Controlo
do
CPU
Controlo do
barramento
do CPU
Z80
CPU
FEUP / LEEC – MP (2000 / 2001)
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
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
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
5
Leitura de um código de
instrução
CLOCK
A[0:15]
/MREQ
/RD
/M1
D[0:7]
T1
T2
T3
T4
Endereço válido
Dados
válidos
250 ns
mín. 35 ns
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
6
Leitura de um operando
CLOCK
A[0:15]
/MREQ
/RD
D[0:7]
T1
T2
T3
T4
Endereço válido
Dados
válidos
250 ns
mín. 50 ns
250 ns
mín. 30 ns
máx. 75 ns
Ciclo de escrita em memória
CLOCK
A[0:15]
/MREQ
/WR
T1
T2
T3
T4
Endereço válido
Dados no barramento
250 ns
mín. 220 ns
mín. 80 ns
mín. 60 ns
Ciclo de acesso a E/S
CLOCK
A[0:7]
/IORQ
/WR
T1
T2
T3
T4
Endereço válido
250 ns
/RD
D[0:7]
Dados
válidos
mín. 50 ns
máx. 80 ns
mín. 60 ns
mín. 30 ns
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
9
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
10
Atendimento das interrupções
Cód. instrução
Operando
Cód. instrução
Operando
Cód. instrução
Operando
reti
(continuação
do
programa)
Rotina de atendimento
da interrupção (termina
com a instrução de retorno)
Execução do programa
principal
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
Ao concluir-se o
atendimento da
interrupção retoma-se
a execução do
programa principal
FEUP / LEEC – MP (2000 / 2001)
SP e stack quando é atendida
uma interrupção
Indefinido
Indefinido
Indefinido
(SP)
PC
H
PC
L
Indefinido
(SP)
(Antes)
(Depois)
Endereços
decrescentes
FEUP / LEEC – MP (2000 / 2001)
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
13
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
14
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
RETN e RETI
• Durante o atendimento a /NMI deve
suspender-se o atendimento a /INT, para evitar que uma
interrupção de baixa prioridade possa
sobrepor-se 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)
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
17
Modelo de programação do
Z80
A
F
B
C
D
E
H
L
A’
F’
B’
C’
D’
E’
H’
L’
Stack pointer
Program counter
IY index register
IX index register
I
R
16 bit
8 bit
8 bit
8 bit
8 bit
Apontador para a pilha
Apontador de programa
IX e IY são usados com
endereçamento indexado
Alternate
register set
(conjunto
alternativo
de registos)
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
18
O registo das flags
A
F
B
C
D
E
H
L
8 bit
8 bit
S
Z
H
P/
V
N C
Y
S: sign - activa quando
o bit mais significativo
do resultado é 1
Z: zero - activa quando
o resultado da
instrução tem o valor 0
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
H: half-carry - activa quando
há transporte do bit 3 para o 4
FEUP / LEEC – MP (2000 / 2001)
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)
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
21
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
22
Tipos de instruções
• Aritméticas e lógicas para dados de 8 bits
(8bit 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
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
Apresentação de um pequeno
sistema de apoio laboratorial
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
25
Disposição dos componentes
FEUP / LEEC – MP (2000 / 2001)
J. M. Martins Ferreira
Date: December 12, 1995 Sheet 1 of 126
Size Document Number REV A JMF / HCM 1.0 SITEMA Z80 - SD2 1 2C3100n VCC OUT3 OUT2 OUT1 D3 D2 D1 D0 I1/CLK 1 I2 2 I3 3 I4 4 I5 5 I6 6 I7 7 I8 8 I9 9 I10 10 I11 11 I12 13 O1 23 O2 22 O3 21 O4 20 O5 19 O6 18 O7 17 O8 16 O9 15 O10 14 U3 22V10 CLK /MREQ /IOREQ A15 A7 A6 KEY0 D0 D1 D2 D3 D4 D5 D6 A0 10 A1 9 A2 8 A3 7 A4 6 A5 5 A6 4 A7 3 A8 25 A9 24 A10 21 A11 23 A12 2 A13 26 A14 1 CE 20 WE 27 OE 22 Q0 11 Q1 12 Q2 13 Q3 15 Q4 16 Q5 17 Q6 18 Q7 19 U2 DS1230Y A0 A1 A2 A3 A4 A5 A6 A7 A0 A1 A2 A3 A4 A5 A6 A0 30 A1 31 A2 32 A3 33 A4 34 A5 35 A6 36 A7 37 A8 38 A9 39 A10 40 A11 1 A12 2 A13 3 A14 4 A15 5 D0 14 D1 15 D2 12 D3 8 D4 7 D5 9 D6 10 D7 13 M1 27 MREQ 19 IORQ 20 WR 22 RD 21 REFSH 28 HALT 18 WAIT 24 INT 16 NMI 17 RESET 26 BUSRQ 25 BUSAK 23 CLK 6 U1 Z80 /MREQ /IOREQ /WR /RD VCC 1 2 R12K2 1 R22K22 1 R3 2 2K2 1 2 R4 2K2 1 R52K22 /NMI /INT /RESET A8 A9 A10 A11 A12 A13 A14 A15 D0 A7 A8 A9 A10 A11 A12 A13 A14 /M_CS 1 2C2100n D7 VCC KEY1 KEY2 KEY3 /WR /RD OUT0 DA_CS GND VCC Q0 /M_CS OUT0 OUT1 OUT2 1 2 3 4 5 6 7 8 9 10 1112 1314 1516 1718 1920 JP1 CONECTOR OUT3 KEY0 KEY1 KEY2 KEY3 /NMI /INT 1 R102 2K49 Q1 Q2 Q3 Q4 Q5 Q6 Q7 1 2 C5 100n VCC /WR /RD D1 D2 D3 D4 D5 D6 D7 1 2C1100n CLK VCC 1 2 U4A 74HCT14 1 2100pC8 1 R132 1K 13 12 U4F 74HCT14 1 Y12 4MHz 1 R142 1K CLK D0 3 Q0 2 D1 4 Q1 5 D2 7 Q2 6 D3 8 Q3 9 D4 13 Q4 12 D5 14 Q5 15 D6 17 Q6 16 D7 18 Q7 19 OC 1 G 11 U5 74LS373 D0 D1 D2 D3 D4 D5 D6 B8 12 B7 11 B6 10 B5 9 B4 8 B3 7 B2 6 B1 5 VR+ 14 15 IOUT 4 IOUT 2 COMP 16 VLC 1 V + 1 3 V -3 U6 DAC0800 Q0 Q1 Q2 Q3 Q4 Q5 Q6 3 2 1 8 4 U7A TL082 5 6 7 U7B TL082 VEE VDD 1 2 J1 SAIDA 1 2 R8 10K 1 2 R9 10K VCC VCC 1 2 D4 LED_2 1 2C6100n 1 2C7100n VEE VEE 1 2 R11 2K49 1 2 R12 4K99 Q7 DA_CS D7 1 2 D1 1N4148 VCC 1 2 R16 10K VCC 1 2 R15 1K 1 S1 2 RESET 1 2C94u7 5 6 U4C 74HCT14 11 10 U4E 74HCT14 /RESET VCC VCC VCC 1 2 R28 390R VCC 1 2 D5 LED_3 1 R262 10K 1 2 R27 390R 2 3 1 Q2 BC547 1 R252 10K 2 3 1 Q1 BC547 OUT2 OUT3 1 2 R23 390R 1 2 R24 390R 1 2 D2 LED_0 1 2 D3 LED_1 1 2 R21 2K2 1 2 R22 2K2 KEY2 KEY3 VCC VCC 1 2 R19 2K2 1 2 R20 2K2 KEY0 KEY1 VCC VCC 9 8 U4D 74HCT14 1 R182 2K2 VCC 3 4 U4B 74HCT14 VCC 1 R172 2K2 VCC -12V +12V+5V 1 2 3 4 JP2 ALIMENTACAO GND VCC VDD VEE VCC 1 2C4100n 1 2 S2 KEY0 1 2 S3 KEY1 1 2 S4 KEY2 1 2 S5 KEY3OUT0 OUT1