Save/restore jmpvec as it is used by generated code - see g_callind().
This commit is contained in:
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
.export _set_irq, _reset_irq
|
.export _set_irq, _reset_irq
|
||||||
.interruptor clevel_irq, 1 ; Export as low priority IRQ handler
|
.interruptor clevel_irq, 1 ; Export as low priority IRQ handler
|
||||||
.import popax, __ZP_START__
|
.import popax, __ZP_START__, jmpvec
|
||||||
|
|
||||||
.include "zeropage.inc"
|
.include "zeropage.inc"
|
||||||
|
|
||||||
@@ -84,6 +84,12 @@ zpsave: .res zpsavespace
|
|||||||
dex
|
dex
|
||||||
bpl @L2
|
bpl @L2
|
||||||
|
|
||||||
|
; Save jmpvec
|
||||||
|
lda jmpvec+1
|
||||||
|
pha
|
||||||
|
lda jmpvec+2
|
||||||
|
pha
|
||||||
|
|
||||||
; Set C level interrupt stack
|
; Set C level interrupt stack
|
||||||
lda irqsp
|
lda irqsp
|
||||||
ldx irqsp+1
|
ldx irqsp+1
|
||||||
@@ -93,15 +99,21 @@ zpsave: .res zpsavespace
|
|||||||
; Call C level interrupt request handler
|
; Call C level interrupt request handler
|
||||||
jsr irqvec
|
jsr irqvec
|
||||||
|
|
||||||
; Copy back our zero page content
|
; Mark interrupt handled / not handled
|
||||||
|
lsr
|
||||||
|
|
||||||
|
; Restore our zero page content
|
||||||
ldx #.sizeof(::zpsave)-1
|
ldx #.sizeof(::zpsave)-1
|
||||||
@L3: ldy zpsave,x
|
@L3: lda zpsave,x
|
||||||
sty <__ZP_START__,x
|
sta <__ZP_START__,x
|
||||||
dex
|
dex
|
||||||
bpl @L3
|
bpl @L3
|
||||||
|
|
||||||
; Mark interrupt handled / not handled and return
|
; Restore jmpvec and return
|
||||||
lsr
|
pla
|
||||||
|
sta jmpvec+2
|
||||||
|
pla
|
||||||
|
sta jmpvec+1
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.endproc
|
.endproc
|
||||||
|
|||||||
Reference in New Issue
Block a user