Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.

  1. Interrupções
  2. NMI - Non-maskable
  3. INT - Maskable
  4. RST - Usuário
  5. VDI - Vetor De Interrupções
  6. Reset - RST 0
  7. RST 1- 7
  8. Fluxo de execução
  9. Fluxo INT modo 0 e 2
  10. Fluxo interrupção do usuário

Interrupções são utilizadas para executar rotinas de tratamento para troca de informações entre o Z80 e outros periféricos ligados a esse processador.

O Z80 suporta três tipos básicos de interrupção: não-mascarável(NMI), mascarável(INT) e usuário(RST). NMI e INT são interrupções de hardware assíncronas enquanto a interrupção de usuário é de software e síncrona.

A flag IFF1 é atualizada por meio das instruções DI(Disable Interrupt) e EI(Enable Interrupt) apenas para as interrupções mascaráveis(INT). A flag IFF2 é utiliza como backup de IFF1.

A rotina de tratamento de cada tipo de interrupção deve salvar todos os registradores, desabilitar e habilitar o reconhecimento de interrupções e indicar o seu término com as instruções RETI(INT), RETN(NMI) ou RET.

Notação:
D0-7: barramento de dados
A0-15: barramento de endereço
RST: instrução de restart
PC: Contador de Programa
<<: Deslocamento

Quando uma interrupção não-mascarável(NMI) é reconhecida, pino MNI, o fluxo de execução do CPU é interrompido e a rotina de tratamento da interrupção é executada a partir do endereço fixo 0066h.

Notação:
Pino MNI <- sinal de interrupção
PC <- 00|66h

Independente do modo de interrupção 0, 1 ou 2 escolhido, uma interrupção MNI ocorre. As instruções DI e EI não podem mascarar uma NMI que por sua vez pode mascarar outras INTs.

O hardware "conectado" ao pino NMI deve fornecer uma forma de habilitar ou desabilitar, via I/O, o envio ou geração de sinal de interrupção NMI para inibição possa ser feita semelhante à INT.

Diferente da NMI, uma interrupção mascarável(INT) pode ter seu reconhecimento habilitado ou desabilitado utilizando as instruções EI e DI. As INTs podem ser configuradas para trabalhar nos 3 modos de interrupção(IM) descritos abaixo:

Modo 0

Nesse modo, quando uma interrupção INT é reconhecida, pino INT, um byte lido dos pinos D0-7 contém o opcode de uma das instruções RST que são enviadas por periférico ligados ao Z80, fazendo com que a rotina de tratamento da interrupção se inicie no endereço implícito de destino RST.

Ex:
Pino INT <- sinal de interrupção
D0-7 <- byte RST n ; n: 0-7
PC <- 00|D0-7
Modo 1

No modo 1, quando uma interrupção INT é reconhecida, o fluxo de execução do CPU é interrompido e a rotina de tratamento da interrupção é executada a partir do endereço fixo 0038h. Internamente, o opcode da instrução RST 38h(FFh) é informado.

Ex:
Pino INT <- sinal de interrupção
PC <- 0038h 111iii11b , iii: 111b
Modo 2

No modo 2, o registrador I armazena o byte mais significativo do endereço do VDI enquanto o byte menos significativo é informado pelo periférico através dos pinos D0-7 formando o endereço final da rotina que normalmente faz parte de uma tabela de endereços.

Ex:
I <- byte mais alto
D0-7 <- byte mais baixo
PC <- (I<<8)|D0-7

Esse modo é utilizado quando existe a necessidade de realocação do VDI fornecendo uma customização para o usuário do hardware.

O usuário pode utilizar os endereços RST 08-30 como "interrupções" para tratamento de dados ou rotinas de uso mais comum ou frequente da aplicação. Dessa forma, as RSTs são usadas como subrotinas sendo terminadas com a instrução RET obrigatoriamente.

Operação:
(SP) <- PC + 2
PC <- 00|RST n * 8 ; n: 0-7
Ex:
RST $08 ;
RST $38

O processador Z80 possui 8 locais (MI 0 ou 1 e Usuário) reservados para armazenar código para tratamento de interrupções localizadas no Vetor De Interrupções localizado entre $0000 a $003F. Esses locais são representados por RST 00-38.

Tab. 1: VDI Z80 Padrão
Nome Endereço Descrição
RST 00h $0000 RESET. Modo 0
RST 08h $0008 Modo 0/Usuário
RST 10h $0010 Modo 0/Usuário
RST 18h $0018 Modo 0/Usuário
RST 20h $0020 Modo 0/Usuário
RST 28h $0028 Modo 0/Usuário
RST 30h $0030 Modo 0/Usuário
RST 38h $0038 Modo 1

O desvio de fluxo de execução de programas para os locais RST acima são feitas utilizando as instruções RST(Restart) de acordo com o modo de interrupção configurado ou manualmente.

As instruções RST podem ser utilizadas como interrupções de software e invocadas a qualquer momento. As instruções EI e DI devem ser utilizadas para habilitar e desabilitar o reconhecimento de execução de interrupções, exceto por NMI.

O local RST 0 tem uma aplicação pré-definida que é armazenar código para o reset ou boot do programa. O hardware que utiliza o Z80 como processador principal é ligado, o processador precisa buscar o local onde um programa deve iniciar. Isso é feito a partir do endereço RST 0.

Os RST 1-7 devem ser utilizados de acordo com o hardware/computador para o qual foi projetado para utilizar o Z80 como processador. Normalmente são utilizados para receber interrupções de outros periféricos conectados.

Exemplo:
RST 08h		; Interrupção de vídeo
RST 10h		; Interrupção de vídeo

O hardware é responsável por providenciar o controle e quais RST devem ser utilizadas quando suas interrupções são lançadas. Como exemplo, o chip Z8420(PIO) pode ser utilizado nesse tipo de situação.

Quando um interrupção é reconhecida pelo Z80, o processador se comporta de acordo com os passos automáticos abaixo para cada tipo de interrupção:

Não-mascarável: NMI

Quando uma interrupção não mascarável(NMI) é reconhecida, pino MNI, o fluxo de execução abaixo ocorre:

Início:
  1. (SP) <- PC(a)
  2. IFF2 <- IFF1
  3. IFF1 <- 0
  4. PC <- 0066h

Após a de tratamento realizado, a rotina de tratamento deve conter a instrução RETN como última instrução executada para informar o término da interrupção MNI com posterior retorno ao fluxo principal.

Término:
  1. IFF1 <- IFF2
  2. PC <- (SP)(a)
  3. Continua fluxo anterior à interrupção
Mascarável: Modo 1

Quando uma interrupção INT(MI 1) é reconhecida, pino INT, o fluxo de execução abaixo ocorre:

Início:
  1. IFF1 e IFF2 <- 0
  2. (SP) <- PC(b)
  3. PC <- 0066h

Após a de tratamento realizado, a rotina de tratamento deve conter a instrução RETI como última instrução executada para informar o término da interrupção INT com posterior retorno ao fluxo principal.

Término:
  1. PC <- (SP)(b)
  2. Continua fluxo anterior à interrupção
  1. 17/02/2026 - versão inicial: Interrupções, NMI, INT, RST, VDI e Fluxo