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

No modo emulação (E=1), o 65816 é compatível com as interrupções do 65(C)02 que podem ser vistas em 6502: Interrupções e 6502:65C02.

O 65816 suporta as interrupções de hardware RESET, NMI, IRQ e ABORT, e as interrupções de software COP e BRK. As quatro primeiras são assíncronas, enquanto as duas últimas são síncronas.

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 RTI.

Os vetor de interrupções do 65816 é encontrado no primeiro banco de memória entre o endereço 00FFE0-FFE que pode ser visto na tabela abaixo com seus endereços, nomes, tipos e suas prioridades:

Tab. 1: VDI 65816
Vetor Nome Tipo Prioridade
00FFE0,1 Reservado - -
00FFE2,3 Reservado - -
00FFE4,5 COP Software 6
00FFE6,7 BRK Software 5
00FFE8,9 ABORT Hardware 2
00FFEA,B NMI Hardware 3
00FFEC,D RESET Hardware 1
00FFEE,F IRQ Hardware 4

Diferente de seus antecessores, as interrupções IRQ/BRK finalmente têm seus vetores de interrupção não mais compartilhados.

A flag I pode mascarar as interrupções IRQ, COP e BRK, mas não pode mascarar ABORT e NMI.

Ex:
SEI ; desabilita

Quando ligado, o processador busca o endereço 16-bits do entry-point ou local onde um programa deve iniciar para buscar a próxima instrução. Esse endereço está contido no vetor de interrupção RESET, e é carregado no PC.

Fluxo automático:
RESB <- sinal
PS[I] <- 1
PS[D] <- 0
E <- 1	;modo emulação
PS[M] <- 1
PS[X] <- 1
PBR <- 00
DBR <- 00
DPR <- 0000
SPH <- 01
PC <- ($FFEC)

A interrupção/Exceção ABORT ocorre quando há erro na leitura de memória ou em algum esquema de gerenciamento de memória(MMU). Uma vez que uma ABORT ocorre, o fluxo de execução é transferido para endereço 16-bits contido em seu vetor $00FFF8. Assim como a NMI, não é afetada pela flag I.

Fluxo automático:
ABORTB <- sinal
Termina instrução corrente. Registradores inalterados
(SP) <- PBR
(SP) <- PC ;instrução atual
(SP) <- PS
PS[I] <- 1
PS[D] <- 0
PBR <- 00
PC <- ($FFE8)

A MNI é um tipo de interrupção de hardware não-mascarável que não pode ter seu reconhecimento e execução negados. Uma vez que uma NMI ocorre, o fluxo de execução é transferido para endereço 16-bits contido em seu vetor $00FFEA.

Fluxo automático:
NMIB <- sinal
Termina a instrução corrente
(SP) <- PBR
(SP) <- PC ;instrução atual
(SP) <- PS
PS[I] <- 1
PS[D] <- 0
PBR <- 00
PC <- ($FFEA)

O chip ou periférico que utiliza a NMI deve ter um mecanismo para desabilitar e habilitar o envio de sinal para o pino NMI, inibindo assim a interrupção semelhante à ocorre com a IRQ.

Uma IRQ é uma interrupção de hardware do tipo mascarável que pode ter seu reconhecimento e execução mascarados pela flag I quando a instrução CLI é executada.

Uma vez que uma IRQ ocorre, o fluxo de execução é transferido para o endereço 16-bits contido em seu vetor $00FFEE.

Fluxo automático:
IRQB <- sinal
Termina a instrução atual
Se I = 1:
IRQ ignorada
Se I = 0:
(SP) <- PBR
(SP) <- PC ;instrução atual
PS[I] <- 1
PS[D] <- 0
(SP) <- PS
PBR <- 00
PC <- ($FFEE)

Uma IRQ pode ser mascarada ou ignorada pela COP ou BRK, pois I é setada(1) automaticamente em seus fluxos.

A interrupção COP é acionada pela instrução de mesmo COP para troca de informações com coprocessadores ligados ao 65816. Quando a COP é executada, o fluxo de execução é transferido para endereço 16-bits contido em seu vetor $00FFE4.

Fluxo automático:
COP
Se I = 1:
COP ignorada
Se I = 0:
(SP) <- PBR
(SP) <- PC + 2 ;próxima instrução
(SP) <- PS
PS[I] <- 1
PS[D] <- 0
PBR <- 00
PC <- ($FFE4)

A instrução COP é uma instrução de dois bytes. Um byte imediato ou de controle é acompanhado da instrução para armazenar informações para o coprocessador. O SP deve ser manipulado para recuperar esse byte.

A interrupção COP pode ser mascarada por IRQ, BRK, ABORT e NMI.

A interrupção BRK é acionada pela instrução BRK tendo como finalidade a depuração ou alguma rotina de tratamento do S.O, por exemplo. Quando BRK é executada, o fluxo de execução é transferido para endereço 16-bits contido em seu vetor $00FFE6.

Fluxo automático:
BRK
Se I = 1:
BRK ignorada
Se I = 0:
(SP) <- PBR
(SP) <- PC + 2 ;próxima instrução
(SP) <- PS
PS[I] <- 1
PS[D] <- 0
PBR <- 00
PC <- ($FFE6)

A instrução BRK é uma instrução de dois bytes. Um byte imediato ou de controle é acompanhado da instrução para armazenar informações para a depuração. O SP deve ser manipulado para recuperar esse byte.

A interrupção BRK pode ser mascarada por IRQ, COP, ABORT e NMI.

  1. 26/02/2026 - versão inicial: Interrupções, VDI, RESET, NMI, IRQ, COP e BRK e ABORT