User Tools

Site Tools


base:launching_long_tasks_from_irq_handler

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
base:launching_long_tasks_from_irq_handler [2016-03-15 12:31] bitbreakerbase:launching_long_tasks_from_irq_handler [2016-11-23 10:54] (current) bitbreaker
Line 17: Line 17:
  
        ;... your desired irq handler code goes here        ;... your desired irq handler code goes here
 +       lda some_condition
        beq skip_long        beq skip_long
                
Line 27: Line 28:
        lda #$00        lda #$00
        pha        pha
-        
                
 skip_long skip_long
Line 41: Line 41:
          
 task task
 +       ;store registers again
        sta reg_a_        sta reg_a_
-       sta reg_x_ +       stx reg_x_ 
-       sta reg_y_+       sty reg_y_
  
        ;...some long long code        ;...some long long code
          
-       ;restore the copied over registers+       ;restore registers
        lda reg_a_        lda reg_a_
        ldx reg_x_        ldx reg_x_
Line 75: Line 76:
         sta $d012         sta $d012
                  
-        ;now allow irq2 happen on top of this task and return to this task when done+        ;now allow irq2 to happen on top of this task and return to this task when done
         cli         cli
                  
Line 109: Line 110:
         rti         rti
 </code> </code>
 +
 +A even more convenient variant is to use the stack for register saving:
 +
 +<code>
 +irq1
 +        pha
 +        txa
 +        pha
 +        tya
 +        pha
 +        dec $d019
 +        
 +        dec counter
 +        bne +
 +        
 +        lda #$08
 +        sta counter
 +        cli
 +        jsr long_task
 ++
 +        pla
 +        tay
 +        pla
 +        tax
 +        pla
 +        rti
 +</code>
 +
 +Now you can run a long task that can finish somewhen between the next 8 interrupts.
base/launching_long_tasks_from_irq_handler.1458041471.txt.gz · Last modified: 2016-03-15 12:31 by bitbreaker