Interrupções são o meio pelo qual um processador interrompe seu fluxo de execução para dar atenção ou atender a algum chamado de um periférico para um determinado tratamento. Uma vez que esse tratamento foi feito, o processador retorna para seu fluxo anterior.

Assim como outros processadores, o 68K tem suporte interrupções de software e hardware. As de hardware são acionadas por periféricos enquanto as de software são acionadas por instruções TRAP.

As interrupções de hardware pode ser mascarávels(IRQ) e não mascarável(NMI) de acordo com as flags Is configuradas de acordo com o uso e prioridade de hardware que usa o 68k.

O processador 68K possui várias interrupções e suas informações são armazenadas em um Vetor de Interrupções(VDI) localizado entre $000000 a $0003FF. Esse vetor armazena endereços 32-Bits de rotinas(ISR - Interrupt Service Routine) para onde a o fluxo de execução é desviado, executado e retornado.

O uso dos vetores de interrupção ficam a cargo do usuário que podem utilizá-los. Caso não seja necessário, uma instrução RTE é utilizado no vetor para informar que não será tratada não sendo um padrão.

Abaixo a tabela de vetores de interrupção pré-definidos pelo 68K:

Tab.1: VDI 68K
# Endereço Nome Descrição
0 000000 Reset SP Usado para iniciar o SP. Não é uma interrupção.
1 000004 Entry Point Início do programa
2 000008 Bus Error Erro ocorrido no barramento
3 00000C Address Error Endereço não alinhado.
4 000010 Illegal Instruction Executar instrução ilegal
5 000014 Division by Zero Divisão por zero
6 000018 CHK Exception Instrução de checagem
7 00001C TRAPV Exception Instrução TRAPV quando flag V setada.
8 000020 Privilege violation Uso de instruções privilegiadas
9 000024 Trace Exception Modo Trace quando flag T setada.
10 000028 Line A Usado para implementar instruções via software
11 00002C Line F Usado para implementar instruções via software
12 000030 - Reservado
13 000034 Co-processor violation Violação de protocolo
14 000038 Format error -
15 00003C Uninitialized Interrupt Usado para periféricos não iniciados
16-23 000040 - 00005C Reservado -
24 000060 Spurious interrupt Sem reconhecimento do hardware
25 000064 Level 1 Interrrupt Uso do software
26 000068 Level 2 Interrrupt Uso do software
27 00006C Level 3 Interrrupt Uso do software
28 000070 Level 4 Interrrupt Uso do software
29 000074 Level 5 Interrrupt Uso do software
30 000078 Level 6 Interrrupt Uso do software
31 00007C Level 7 Interrrupt Uso do software
32-47 000080 TRAP Interrupt Instrução TRAP
48-63 0000C0 - 0000FC Reservado -
64-255 000100 - 0003FF User interrupt vectors UIV - Área disponível para uso do software

Reset SP não é um vetor, mas seu valor 32-bits é utilizado para iniciar automaticamente o registrador SP. Caso seja configurado de forma errada, bugs de código podem ocorrer.

Tab.2: Reset
# Endereço Nome Descrição
0 000000 Reset SP Usado para iniciar o SP. Não é uma interrupção.
(...) (...) (...) (...)

Esse vetor de interrupção armazena o endereço do Entry Point ou main de um programa. Deve ser configurado corretamente para evitar problema no boot de um programa.

Tab.3: Entry Point
# Endereço Nome Descrição
(...) (...) (...) (...)
1 000004 Entry Point Início do programa
(...) (...) (...) (...)

Esses grupos de vetores são de uso predefinido pelo 68K ou reservados para uso futuro em revisões ou sucessores.

Por boa prática, os vetores reservados não devem ser utilizados pelo usuãrio. Os predefinidos devem conter suas respectivas ISR(Interrupt Service Routine) de acordo a necessidade do software.

Como o 68K é um processador descontinuado, é possível o uso vetores reservados possam ser utilizados desde de que o software não seja migrado entre hardwares diferentes ou processadores sucessores.

Tab.4: Vetores #2~24 e #48-63
# Endereço Nome Descrição
(...) (...) (...) (...)
2 000008 Bus Error Erro ocorrido no barramento
3 00000C Address Error Endereço não alinhado.
4 000010 Illegal Instruction Executar instrução ilegal
5 000014 Division by Zero Divisão por zero
6 000018 CHK Exception Instrução de checagem
7 00001C TRAPV Exception Instrução TRAPV quando flag V setada.
8 000020 Privilege violation Uso de instruções privilegiadas
9 000024 Trace Exception Modo Trace quando flag T setada.
10 000028 Line A Usado para implementar instruções via software
11 00002C Line F Usado para implementar instruções via software
12 000030 - Reservado
13 000034 Co-processor violation Violação de protocolo
14 000038 Format error -
15 00003C Uninitialized Interrupt Usado para periféricos não iniciados
16-23 000040 - 00005C Reservado -
24 000060 Spurious interrupt Sem reconhecimento do hardware
(...) (...) (...) (...)

Os vetores #25~31 podem ser utilizados para configurar as interrupções dos periféricos "ligados" a esse hardware onde o 68K está sendo utilizado.

A prioridade de execução desses vetores, Level 1-7, são controladas pelas flagsflags I2-0 contidas no registrador Status Register. As interrupções de Level mais baixo podem ser interrompidas pelas de Level mais alto.

Quando os bits da flags Is são configurada como 000b todas as interrupções serão ignoradas. Quando configuradas como 111b(Non-Mascarable Interrupt), todas as interrupções serão aceitas e executadas com suas respectivas prioridades.

Para melhor compreensão, um exemplo real de configuração de interrupções:

Tab.5: Uso real do VDI - Vetores Level 1-7
# Endereço Nome Uso
25 000064 Level 1 Interrrupt Não usado
26 000068 Levet 2 Interrupt EXT Interrupt - Interrupção de periférico
27 00006C Level 3 Interrrupt Não usado
28 000070 Level 4 Interrrupt HBLANK - Interrupção Horizontal
29 000074 Level 5 Interrrupt Não usado
30 000078 Level 6 Interrrupt VBLANK - Interrupção Vertical
31 00007C Level 7 Interrrupt Não usado

Na tabela acima, a interrupção Level 6 tem prioridade sobre as interrupções Level 4 e 2 sendo interrompidas quando a Level 6 for acionada ou invocada.

Setando as flags Is como 010b as interrupções Level 4 e 6 não serão reconhecidas sendo apenas a interrupção Level 2 reconhecida e executada.

A configuração das flags Is são normalmente feitas no trecho de boot de programas, para carregamento e configurações iniciais, e/ou no início das rotinas de tratamento de interrupções para evitar que outras interrupções sejam executadas.

O 68K fornece a instrução TRAP para que possamos forçar uma interrupção para depuração ou pelo sistema operacional, por exemplo. Essa instrução possui 15 vetores de interrupção configurados nos vetores #32-47.

O fluxo de execução da interrupção TRAP é a mesma de realizada pelas outras interrupções nativas/predefinadas como as dos vetores Level 1-7, por exemplo. Esse fluxo pode ser conferido em Fluxo de Execução mais adiante.

Tab.6: Vetores #48-63: TRAP Interrupt
# Endereço Nome Descrição
(...) (...) (...) (...)
32-47 000007 - 0000BF TRAP #0-15
48-63 0000C0 - 0000FC Reservado -
64-255 000100 - 0003FF User interrupt vectors Área disponível para uso do software

Os vetores UIV contidos em #64~255 são de uso livre do usuário/software. Esses vetores ou região/bloco podem ser utilizadas para armazenar informações sobre o software, configurações, interrupções do usuário e outras finalidades.

O 68K não fornece instruções que forcem a chamada dos UIV como a instrução TRAP vista anteriormente. A instrução JSR e RTS devem ser utilizada para executar código nessa região.

Caso a região UIV contenha vetores de interrupção os periféricos devem gerar um interrupção e envie o endereço do vetor definida na região UIV como nos vetore Level 1-7.

Tab.7:Vetores #64~255
# Endereço Nome Descrição
(...) (...) (...) (...)
64-255 000100 - 0003FF User interrupt vectors Área disponível para uso do software

Como interrupções podem ocorrer, o processador precisar salvar dados do fluxo atual de execução para que ao fim da execução de um rotina contida em VDI possa retornar para seu fluxo de execução normal ou anterior.

No 68K, uma rotina de interrupção(ISR) deve possuir a instrução RTE obrigatóriamente para que o processo de retorno da ISR para fluxo de execução seja feito corretamente.

Quando uma interrupção é acionada, o fluxo de execução interno do 68K abaixo é executado automaticamente:

Fluxo de execução:
  1. 68K recebe sinal de interrupção
  2. Salva PC corrente na pilha
  3. Salva SR na pilha
  4. Lê vetor de interrupção Level #1-7 predefinida
  5. Desvia fluxo para rotina lida em (4)

Em (4), quando as interrupções Level 1-7 são utilizados para comunição com outros processadores, o chip responsável pelo controle das interrupções fornece o endereço do vetor que deve ser utilizado para a interrupção usada.

Por exemplo, quando as interrupções(Tab.5) Level 2, 4 ou 6 ocorrem, o hardware é responsável por enviar os endereços 000068, 000070 ou 000078 para que as respectivas ISR sejam executadas.

Ao término da execução da rotina que lida com uma interrupção, o 68K restaura os dados salvos na pilha e retorna para o fluxo de execução anterior à interrupção.

Fluxo de execução:
  1. 68K recebe sinal de fim interrupção - RTE
  2. SR <- (SP)
  3. PC <- (SP)
  4. Continua fluxo de execução
  1. 12/03/2026 - Revisão 3 - Correções: 'Vetores trap': desc. e tab. 6; Ajustes: ícone chip, intro e outras seções
  2. 05/09/2024 - Revisão 2 - Adição de tabelas de vetor em cada tópico, exceto Vetores #25~31
  3. 30/08/2024 - Revisão 1 - Correção em links de objetivos
  4. 02/04/2024 - versão inicial