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.

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

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.

Abaixo a tabela de vetores de interrupção pré-definido 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 Área disponível para uso do software

Reset SP não é uma interrupção, 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 da 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 e os predefinidos devem conter suas respectivas ISR de acordo com o necessário.

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 flags I2-0 contidas no registrador Status Register. As interrupções de Level mais baixo podem ser interrompidas pelas de Level mais alto.

Quando as flags I são configurada como 000b todas as interrupções serão ignoradas. Quando configurada como 111b(Non-Mascarable Interrupt), todas as interrupções serão aceitas e executadas com prioridade.

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 I 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 I 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 o processo execução de uma interrupção e podem ser utilizadas por sistemas operacionais. Essa instrução possui 15 vetores de interrupção configurados nos vetores #48~63.

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, e pode ser conferido em Fluxo de Execução mais adiante.

Tab.6: Vetores #48-63: TRAP Interrupt
# Endereço Nome Descrição
(...) (...) (...) (...)
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 outros usos.

O 68K não fornece instruções que forcem a chamada dos UIV como a instrução TRAP vista anteriormente.

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

Tab.6: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(IRS) deve possuir a instrução RTE obrigatóriamente para que o processo de retorno ao fluxo de execução seja feito corretamente.

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

Fluxo de execução:
  1. 68K recebe sinal de interrupção
  2. Salva PC na pilha
  3. Salva SR na pilha
  4. Lê vetor de interrupção
  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, esse devem fornecer o endereço do vetor que deve ser utilizado para a interrupção.

Por exemplo, quando as interrupções (Tab.5) Level 2, 4 ou 6 ocorrem, o hardware que utilizada 68K é 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. Restaura SR
  3. Restaura PC
  4. Continua fluxo de execução
  1. 05/09/2024 - Revisão 2 - Adição de tabelas de vetor em cada tópico, exceto Vetores #25~31
  2. 30/08/2024 - revisão 1 - Correção em links de objetivos
  3. 02/04/2024 - versão inicial