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 
            
         
     
    
        
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.
            
            
                O processador 6502 possui 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 é explicado 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 invocada via programação, enquanto IRQ e MNI são interrupções de Hardware
                que são sinalizadas externamente. Abaixo seguem as descrições sobre cada dos itens listados na tabela acima.
            
         
     
    
    
        
            
                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.
            
         
     
    
        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 setado para 0, esse tipo de interrupção é reconhecida e executada. 
            
            
                A interrupção de hardware IRQ é acionada por algum é periférico ligado ao processador 6502 enquanto 
                BRK é acionada pelo próprio programa.
            
            
                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, e também a rotina deve recuperar o valor imediato à instrução BRK que utilizada para 
                depuração ou outro fim.
            
            
                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 ou fim da execução de uma ISR.
            
            
                Fluxo de execução:
                
                    - 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 a ISR 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.
                
                Fluxo de execução:
                
                    - Restaura PS
                    
 
                    - Restaura PC
                    
 
                    - Continua fluxo anterior à interrupção
                    
 
                
             
         
     
    
        Histórico de atualizações
        
     
    
        
            
                - 12/03/2023 - 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.