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

  1. Interrupções
  2. Reset
  3. IRQ/Break
  4. MNI
  5. Bug: IRQ atrasada
  6. Bug: Branch e interrupção
  7. Bug: "Roubo" de interrupção
  8. pinos NMI e IRQ

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 ou principal.

O 6502 possui suporte a 3 interrupções. Os endereços das rotinas de tratamento são armazenadas em um Vetor De Interrupções localizado entre $FFFA a $FFFF. Esse vetor armazena os endereços de rotinas(ISR - Interrupt Service Routine) para lidar com as interrupções. Esse VDI é mostrado na tabela abaixo:

Tab. 1: VDI 6502
Nome Endereço(LSB - MSB) Descrição
RESET $FFFC $FFFD Reset inicial
IRQ/BRK $FFFE $FFFF Interrupção mascarável
NMI $FFFA $FFFB Interrupção não-mascarável

A BRK é uma interrupção de software enquanto IRQ e MNI são interrupções de Hardware. Abaixo seguem as descrições sobre cada dos itens listados na tabela acima.

A IRQ normalmente é utilizada ligada a processadores de vídeo em que dados fundamentais possam ser transferidos nos intervalos de VBLANK(Vertical Blanking).

As interrupções NMI e IRQ são acionadas pelos seus respectivos pinos MNI e IRQ enquanto a interrupção BRK é acionada via software pela instrução de mesmo nome.

Quando um hardware que utiliza o 6502 como processador principal é ligado, o processador precisa buscar o local (Entry Point) onde um programa deve iniciar. O processador sabe disso utilizando o vetor de interrupção no endereço $FFFC. O processador lê dois bytes neste local e carregador para o registrador PC que irá iniciar a execução do programa.

O software no RESET fica responsável por configurar os periféricos ligados ao 6502 via registradores mapeados em memória como visto em 6502: Memória

O tipo de interrupção mascarável é aquela que o processador pode ignorar sua execução utilizando a flag I. Quando essa flag é setada para 1, qualquer interrupção mascarável pode ser ignorada. Quando setada para 0, é reconhecida e executada.

A interrupção de hardware IRQ é acionada por algum é periférico ligado ao processador 6502 enquanto BRK é acionada pela própria aplicação.

Fluxo de execução:
  1. 6502 recebe sinal de IRQ/BRK
  2. Salva próxima instrução no pilha
  3. Para BRK, a flag B = 1. Para IRQ flag B = 0
  4. Salvar PS na pilha
  5. Seta flag I para 1.
  6. Busca endereço de rotinas em $FFFE.
  7. Desvia fluxo de execução para rotina em (5)

A interrupção BREAK é acionada pela instrução BRK. A sua rotina de tratamentoI(ISR) deve checar a flag B para saber se a interrupção se trata de uma IRQ ou BRK, pois compartilham o mesmo endereço no vetor de interrupções. A rotina podem recuperar o valor imediato à instrução BRK que utilizada para depuração ou outro fim. Isso é feito manipulando a pilha.

Ex 1: BRK
BRK ;breakpoint

Ao término da execução da rotina que lida com a interrupção IRQ, o 6502 restaura os dados salvos na pilha e retorna a sua execução. A instrução RTI deve ser utilizada como última instrução de uma ISR(Interrupt Service Routine).

Ex 2: IRQ
subrotina_irqbrk:
;recupera PS
;verifica se IRQ ou BRK
;se irq
;se break
RTI
Fluxo de execução: RTI
  1. Restaura PS. Flag B e Bit 5 são ignoradas
  2. Seta Flag I para 0
  3. Restaura PC
  4. Continua fluxo anterior à interrupção

A MNI é um tipo de interrupção que não pode ter sua execução negada pelo 6502. Uma vez que um sinal é enviado ao 6502, via pino NMI, a ISR responsável em $FFFA é chamada imediatamente. O fluxo de execução é mostrado abaixo:

Fluxo de execução:
  1. 6502 recebe sinal de MNI
  2. Salva próxima instrução no pilha
  3. Set flag B para 0)
  4. Salvar PS na pilha
  5. Seta flag I para 1.
  6. Busca endereço de rotinas em $FFFA.
  7. Desvia fluxo de execução para rotina lida em (5)

Ao término da execução da rotina que lida com a interrupção MNI, o 6502 restaura os dados salvos na pilha e retorna a sua execução. A instrução RTI deve ser utilizada como última instrução de uma ISR.

Ex 3: NMI
subrotina_nmi:
;tratamento omitido
RTI
Fluxo de execução: RTI
  1. Restaura PS
  2. Restaura PC
  3. Continua fluxo anterior à interrupção

Um periférico, processador de vídeo por exempo, que utiliza a MNI deve possuir um registrador mapeado em memória para que seja possível ligar/desligar a geração e envio do sinal dessa interrupção.

  1. 12/01/2026 - revisão 5 - Ajustes: pontuais; Adição: info. sobre uso de MNI por periférico e Exs 1,2 e 3
  2. 12/03/2025 - revisão 4 - Correções em passos IRQ/BRK e MNI; Melhorias pontuais
  3. 11/09/2024 - revisão 3 - correções em descrição de IRQ, MNI e vetor de interrupções
  4. 30/08/2024 - revisão 2 - Correção em links de objetivos
  5. 04/10/2023 - revisão 1 - adição de links, correção em layout, navegação e correção de erros gramaticais
  6. 28/04/2023 - versão inicial