1 / 31

O Z80: Exemplo de um microprocessador de 8 bits

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

justis
Télécharger la présentation

O Z80: Exemplo de um microprocessador de 8 bits

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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

  2. Arquitectura do Z80 Barramento de dados (8 bit) Descod. e controlo Controlo barr. dados Reg. de instrução Sinais de controlo do CPU e sistema Registos do CPU ALU Sinais de controlo (internos) Controlo de endereços Barramento de endereços (16 bit)

  3. Z80: Configuração de pinos /M1 Barramento de endereços (16) /MREQ Controlo do sistema /IORQ /RD Z80 CPU /WR Barramento de dados (8) /RFSH /HALT Controlo do barramento do CPU Controlo do CPU /WAIT /BUSRQ /BUSAK /INT /NMI Clock /RESET Gnd Vcc

  4. Z80: Configuração de pinos

  5. Leitura de um código de instrução

  6. Leitura de um operando

  7. Ciclo de escrita em memória

  8. Ciclo de acesso a E/S

  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

  10. Atendimento das interrupções

  11. SP e stack quando é atendida uma interrupção

  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

  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)

  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

  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)

  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

  17. Modelo de programação do Z80 8 bit 8 bit 8 bit 8 bit A F A’ F’ B C B’ C’ D E D’ E’ H L H’ L’ 16 bit Alternate register set (conjunto alternativo de registos) Stack pointer Apontador para a pilha Program counter Apontador de programa IY index register IX e IY são usados com endereçamento indexado IX index register I R

  18. O registo das flags 8 bit 8 bit H: half-carry - activa quando há transporte do bit 3 para o 4 A F B C D E S Z H P/V N CY H L S: sign - activa quando o bit mais significativo do resultado é 1 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 Z: zero - activa quando o resultado da instrução tem o valor 0 CY: activa quando há transporte para além do bit 7

  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

  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

  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

  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

  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

  24. Apresentação de um pequeno sistema de apoio laboratorial

  25. Disposição dos componentes

  26. Descodificação do sistema • Os endereços atribuídos a cada bloco presente estão ilustrados na tabela seguinte:

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

  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 ld a,$00 ; comeca com o valor minimo ciclo 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

  29. Geração do código objecto • A passagem deste código em assembly pelo cross-assembler gera o seguinte ficheiro .lst: 0001 0000 0002 0000 inicio .org 0h 0003 0000 0004 0000 saida .equ 40h 0005 0000 0006 0000 3E 00 inicio ld a,$00 0007 0002 D3 40 ciclo out (saida),a 0008 0004 3C inc a 0009 0005 C3 02 00 jp ciclo 0010 0008 0011 0008 .end 0012 0008 tasm: Number of errors = 0

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

More Related