]> git.sur5r.net Git - cc65/commitdiff
Don't use callax because condes is called in interrupt handlers
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 14 Dec 2003 17:41:27 +0000 (17:41 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 14 Dec 2003 17:41:27 +0000 (17:41 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@2755 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/runtime/condes.s

index 77d0b1c00707c175b1dffa1a069aa0b9c1796cf0..959ec4a0afab75b9958808c329648da96c91c586 100644 (file)
@@ -15,7 +15,6 @@
 
                .export initlib, donelib, condes
 
-        .import callax
                .import __CONSTRUCTOR_TABLE__, __CONSTRUCTOR_COUNT__
        .import __DESTRUCTOR_TABLE__, __DESTRUCTOR_COUNT__
 
@@ -52,7 +51,8 @@
 
 
 ; --------------------------------------------------------------------------
-; Generic table call handler
+; Generic table call handler. We cannot use callax here, since condes is also
+; used for interrupt handlers, and callax clobbers ptr1.
 
 .proc  condes
 
@@ -64,11 +64,12 @@ loop:       ldy     index
        beq     done
        dey
        jsr     getbyt
-        tax
+        sta     jmpvec+1
        dey
-       jsr     getbyt
+       jsr     getbyt  
+        sta     jmpvec+2
        sty     index
-       jsr     callax
+       jsr     jmpvec
 .if (.cpu .bitand ::CPU_ISET_65SC02)
        bra     loop
 .else
@@ -81,8 +82,8 @@ done: rts
 
 
 ; --------------------------------------------------------------------------
-; Data. The getbyte routine is placed in the data segment cause it's patched
-; at runtime.
+; Data. The getbyte and jmpvec routines are placed in the data segment
+; cause they're patched at runtime.
 
 .bss
 
@@ -93,4 +94,4 @@ index:        .byte   0
 getbyt:        lda     $FFFF,y
        rts
 
-
+jmpvec: jmp     $0000