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:
parent
bd9b4ef60c
commit
c0ce20e9cc
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user