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