1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-07 07:29:33 +00:00

Save/restore jmpvec as it is used by generated code - see g_callind().

This commit is contained in:
Oliver Schmidt 2017-10-23 18:57:28 +02:00
parent bd9b4ef60c
commit c0ce20e9cc

View File

@ -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