O Z80: Exemplo de um microprocessador de 8 bits

31
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

description

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 - PowerPoint PPT Presentation

Transcript of O Z80: Exemplo de um microprocessador de 8 bits

Page 1: O Z80: Exemplo de um microprocessador de 8 bits

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

Page 2: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 2

Arquitectura do Z80

Barramento de endereços (16 bit)

ALU

Controlobarr. dados

Descod.e

controloReg. deinstrução

Controlode endereços

Registosdo CPU

Sinais de controlo (internos)

Barramento de dados (8 bit)

Sinais de controlo do CPU e sistema

Page 3: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 3

Z80: Configuração de pinos

Barramento deendereços (16)

Barramentode dados (8)

/BUSRQ/BUSAK

Clock

Vcc Gnd/RESET

/NMI/INT

/WAIT

/HALT

/RFSH/WR/RD

/IORQ/MREQ

/M1

Controlodo

sistema

Controlodo

CPU

Controlo dobarramento

do CPU

Z80CPU

Page 4: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 4

Z80: Configuração de pinosA11A12A13A14A15CLKD4D3D5D6

+5 V (Vcc)D2D7D0D1

/INT/NMI

/HALT/MREQ/IORQ

1234567891011121314151617181920

4039383736353433323130292827262524232221

A10A9A8A7A6A5A4A3A2A1A00 V (Gnd)/RFSH/M1/RESET/BUSRQ/WAIT/BUSAK/WR/RD

Page 5: O Z80: Exemplo de um microprocessador de 8 bits

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

Dadosválidos

250 ns

mín. 35 ns

Page 6: O Z80: Exemplo de um microprocessador de 8 bits

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

Dadosválidos

250 ns

mín. 50 ns

250 ns

mín. 30 ns máx. 75 ns

Page 7: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 7

Ciclo de escrita em memória

CLOCK

A[0:15]

/MREQ

/WR

D[0:7]

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

Page 8: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 8

Ciclo de acesso a E/S

CLOCK

A[0:7]

/IORQ

/WR

D[0:7]

T1 T2 T3 T4

Endereço válido

Dados no barramento

250 ns

/RD

D[0:7] Dadosválidos

mín. 50 ns

máx. 80 ns

mín. 60 nsmín. 30 ns

Page 9: O Z80: Exemplo de um microprocessador de 8 bits

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

Page 10: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 10

Atendimento das interrupçõesCód. instrução

OperandoCód. instrução

Operando

Cód. instruçãoOperando

reti

(continuaçãodo

programa)

Rotina de atendimentoda interrupção (terminacom a instrução de retorno)

Execução do programaprincipal

Ao ser aceite um pedidode interrupçãosuspende-se a execuçãodo programa principal,que é temporariamentesubstituído pela rotinade atendimento dainterrupção

Ao concluir-se oatendimento dainterrupção retoma-sea execução doprograma principal

Page 11: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 11

SP e stack quando é atendida uma interrupção

IndefinidoIndefinidoIndefinido

(SP)

PCH

PCL

Indefinido

(SP)

(Antes) (Depois)

Endereçosdecrescentes

Page 12: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 12

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

Page 13: O Z80: Exemplo de um microprocessador de 8 bits

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)

Page 14: O Z80: Exemplo de um microprocessador de 8 bits

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

Page 15: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 15

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)

Page 16: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 16

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

Page 17: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 17

Modelo de programação do Z80

A FB CD EH L

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

Stack pointerProgram counterIY index registerIX index register

I R

16 bit

8 bit 8 bit 8 bit 8 bit

Apontador para a pilhaApontador de programa

IX e IY são usados com endereçamento indexado

Alternate register set (conjunto alternativo de registos)

Page 18: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 18

O registo das flags

A FB CD EH L

8 bit 8 bit

S Z H P/V

N CY

S: sign - activa quando o bit mais significativo do resultado é 1Z: zero - activa quando o resultado da instrução tem o valor 0

P/V: parity / overflow - conforme o tipo de instruçãoN: indica se a última operação foi uma adição ou uma subtracçãoCY: activa quando há transporte para além do bit 7

H: half-carry - activa quando há transporte do bit 3 para o 4

Page 19: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 19

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

Page 20: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 20

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

Page 21: O Z80: Exemplo de um microprocessador de 8 bits

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

Page 22: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 22

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

Page 23: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 23

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

Page 24: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 24

Apresentação de um pequeno sistema de apoio laboratorial

Page 25: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 25

Disposição dos componentes

Page 26: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 26

Date: December 12, 1995 Sheet 1 of 1

Size Document Number REV

A JMF / HCM 1.0

SITEMA Z80 - SD2

1

2C3100n

VCC

OUT3OUT2OUT1

D3D2D1D0

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

A15A7A6

KEY0

D0D1D2D3D4D5D6

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

A0A1A2A3A4A5A6A7

A0A1A2A3A4A5A6

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 2R1 2K2

1 2R2 2K2

1 2R3

2K2 1 2

R4

2K2

1 2R5 2K2

/NMI/INT

/RESET

A8A9A10A11A12A13A14A15

D0

A7A8A9A10A11A12A13A14

/M_CS

1

2C2100n

D7

VCC

KEY1KEY2KEY3/WR/RD

OUT0DA_CS

GNDVCCQ0

/M_CS

OUT0OUT1OUT2

1 23 45 67 89 1011 1213 1415 1617 1819 20

JP1

CONECTOR

OUT3KEY0KEY1KEY2KEY3/NMI/INT 1 2

R10

2K49

Q1Q2Q3Q4Q5Q6Q7

1

2C5100n

VCC

/WR/RD

D1D2D3D4D5D6D71

2C1100n

CLKVCC

1 2

U4A

74HCT141

2C8

100p 1 2

R13

1K

13 12

U4F

74HCT14

1 2Y1

4MHz

1 2R14

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

D0D1D2D3D4D5D6

B8 12

B7 11

B6 10

B5 9

B4 8

B3 7

B2 6

B1 5

VR+ 14

VR- 15

IOUT 4

IOUT 2

COMP 16

VLC 1

V+

13

V-

3

U6

DAC0800

Q0Q1Q2Q3Q4Q5Q6

3

2 1

8

4U7A

TL082

5

6 7

U7B

TL082

VEE

VDD

1

2

J1SAIDA

1 2R8

10K1

2

R910K

VCC

VCC1

2

D4LED_2

1

2C6100n

1

2C7100n

VEE

VEE1

2

R112K49

1

2

R124K99

Q7

DA_CS

D7

1

2D11N4148

VCC

1

2

R1610K

VCC

1

2

R151K

1 2S1

RESET

1

2C94u7

5 6

U4C

74HCT14

11 10

U4E

74HCT14

/RESETVCC

VCC VCC

1

2

R28390R

VCC

1

2

D5LED_3

1 2R26

10K

1

2

R27390R

2

3

1Q2BC547

1 2R25

10K

2

3

1Q1BC547

OUT2

OUT3

1

2

R23390R

1

2

R24390R

1

2

D2LED_0

1

2

D3LED_11

2

R212K2

1

2

R222K2

KEY2 KEY3

VCC VCC

1

2

R192K2

1

2

R202K2

KEY0 KEY1

VCC VCC

9 8

U4D

74HCT14

1 2R18

2K2

VCC

3 4

U4B

74HCT14

VCC

1 2R17

2K2

VCC

-12V+12V

+5V1234

JP2

ALIMENTACAO

GND

VCC

VDDVEE

VCC 1

2C4100n

1

2

S2KEY0

1

2

S3KEY1

1

2

S4KEY2

1

2

S5KEY3 OUT0 OUT1

Page 27: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 27

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

Page 28: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 28

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 ¦¦D2.TRST = MREQ*/IORQ*WR*/RD*A7*A6 ¦¦D3.TRST = MREQ*/IORQ*WR*/RD*A7*A6 ¦¦D0 = KEY0 ¦¦D1 = KEY1 ¦¦D2 = KEY2 ¦¦D3 = KEY3 ¦¦ ¦¦ ¦¦ ¦+------------------------------------------------------------------------------+

D01

Page 29: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 29

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 ld a,$00 ; comeca com o valor minimociclo out (saida),a ; escreve no D/A (saida analogica) inc a ; incrementa o valor para o D/A jp ciclo ; repete o ciclo escreve / incrementa

.end

Page 30: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 30

Geração do código objecto

• A passagem deste código em assembly pelo cross-assembler gera o seguinte ficheiro .lst:

0001 00000002 0000 inicio .org 0h0003 00000004 0000 saida .equ 40h0005 00000006 0000 3E 00 inicio ld a,$000007 0002 D3 40 ciclo out (saida),a0008 0004 3C inc a0009 0005 C3 02 00 jp ciclo0010 00080011 0008 .end0012 0008

tasm: Number of errors = 0

Page 31: O Z80: Exemplo de um microprocessador de 8 bits

FEUP / LEEC – MP (2000 / 2001)J. M. Martins Ferreira 31

Execução do código

• A execução do código objecto gerado produz a seguinte forma de onda: