1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-26 08:32:00 +00:00

Call interrupt handlers with carry clear

git-svn-id: svn://svn.cc65.org/cc65/trunk@3499 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2005-05-05 10:07:17 +00:00
parent 107ead3211
commit 3c4cd1fff9

View File

@ -19,7 +19,9 @@
; 3. Special semantics: An interruptor called by callirq must tell by ; 3. Special semantics: An interruptor called by callirq must tell by
; setting or resetting the carry flag if the interrupt has been handled ; setting or resetting the carry flag if the interrupt has been handled
; (which means that the interrupt is no longer active at the interrupt ; (which means that the interrupt is no longer active at the interrupt
; source). callirq will call no other interruptors if this happens. ; source). callirq will call no other interruptors if this happens. To
; simplify code, all interrupt routines will be called with carry clear
; on entry.
; ;
; As the normal condes routine, this one has the limitation of 127 table ; As the normal condes routine, this one has the limitation of 127 table
; entries. ; entries.
@ -44,7 +46,8 @@
callirq: callirq:
ldy #.lobyte(__INTERRUPTOR_COUNT__*2) ldy #.lobyte(__INTERRUPTOR_COUNT__*2)
callirq_y: callirq_y:
dey clc ; Preset carry flag
loop: dey
lda __INTERRUPTOR_TABLE__,y lda __INTERRUPTOR_TABLE__,y
sta jmpvec+2 ; Modify code below sta jmpvec+2 ; Modify code below
dey dey
@ -54,7 +57,7 @@ callirq_y:
jmpvec: jsr $FFFF ; Patched at runtime jmpvec: jsr $FFFF ; Patched at runtime
bcs done ; Bail out if interrupt handled bcs done ; Bail out if interrupt handled
index: ldy #$FF ; Patched at runtime index: ldy #$FF ; Patched at runtime
bne callirq_y bne loop
done: rts done: rts