Objetivos
Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.
- Interrupções
- Reset
- IRQ/Break
- MNI
Bug: IRQ atrasada
Bug: Branch e interrupção
Bug: "Roubo" de interrupção
pinos NMI e IRQ
Interrupções
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
IRQ/BRK - Interrupt Request/Break
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:
- 6502 recebe sinal de IRQ/BRK
- Salva próxima instrução no pilha
- Para BRK, a flag B = 1. Para IRQ flag B = 0
- Salvar PS na pilha
- Seta flag I para 1.
- Busca endereço de rotinas em $FFFE.
- 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
- Restaura PS. Flag B e Bit 5 são ignoradas
- Seta Flag I para 0
- Restaura PC
- Continua fluxo anterior à interrupção
NMI - Non-Maskable Interrupt / Interrupção não-mascarável
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:
- 6502 recebe sinal de MNI
- Salva próxima instrução no pilha
- Set flag B para 0)
- Salvar PS na pilha
- Seta flag I para 1.
- Busca endereço de rotinas em $FFFA.
- 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
- Restaura PS
- Restaura PC
- 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.
Histórico de atualizações
- 12/01/2026 - revisão 5 - Ajustes: pontuais; Adição: info. sobre uso de MNI por periférico e Exs 1,2 e 3
- 12/03/2025 - revisão 4 - Correções em passos IRQ/BRK e MNI; Melhorias pontuais
- 11/09/2024 - revisão 3 - correções em descrição de IRQ, MNI e vetor de interrupções
- 30/08/2024 - revisão 2 - Correção em links de objetivos
- 04/10/2023 - revisão 1 - adição de links, correção em layout, navegação e correção de erros gramaticais
- 28/04/2023 - versão inicial
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.