]> git.sur5r.net Git - cc65/commitdiff
Fixed problems with the startup code (Greg King): Interrupts must be hooked
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 22 Feb 2009 18:10:01 +0000 (18:10 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 22 Feb 2009 18:10:01 +0000 (18:10 +0000)
before calling initlib because initlib calls contructors and may install
drivers, which enable hardware interrupts. Similar for donelib.

See also R3897 where this change was done for other platforms.

git-svn-id: svn://svn.cc65.org/cc65/trunk@3951 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/pet/crt0.s
libsrc/plus4/crt0.s

index 1d5641a7c75efec33b5511d297245a20cf444526..1e63617c23157485816b6435fadc831e033e268a 100644 (file)
@@ -70,10 +70,6 @@ L1:  lda     sp,x
        lda     MEMSIZE+1
                sta     sp+1            ; Set argument stack ptr
 
-; Call module constructors
-
-       jsr     initlib
-
 ; If we have IRQ functions, chain our stub into the IRQ vector
 
        lda     #<__INTERRUPTOR_COUNT__
@@ -89,13 +85,21 @@ L1: lda     sp,x
        stx     IRQVec+1
        cli
 
+; Call module constructors
+
+NoIRQ1: jsr     initlib
+
 ; Push arguments and call main()
 
-NoIRQ1:        jsr     callmain
+        jsr    callmain
 
 ; Call module destructors. This is also the _exit entry.
 
-_exit:         pha                     ; Save the return code on stack
+_exit:  pha                    ; Save the return code on stack
+        jsr    donelib
+
+; Reset the IRQ vector if we chained it.
+
        lda     #<__INTERRUPTOR_COUNT__
        beq     NoIRQ2
        lda     IRQInd+1
@@ -105,13 +109,9 @@ _exit:     pha                     ; Save the return code on stack
        stx     IRQVec+1
        cli
 
-; Run module destructors
-
-NoIRQ2:        jsr     donelib         ; Run module destructors
-
 ; Copy back the zero page stuff
 
-       ldx     #zpspace-1
+NoIRQ2: ldx     #zpspace-1
 L2:    lda     zpsave,x
        sta     sp,x
        dex
index 42833b87a594d11a963e677f5b4d6d45053f40b9..c5ce0c7a1db4886bde49718143ca74345b50ba38 100644 (file)
@@ -80,16 +80,16 @@ L1: lda     sp,x
 
        jsr     zerobss
 
-; Call module constructors
-
-       jsr     initlib
-
 ; Initialize irqcount, which means that from now own custom linked in IRQ
 ; handlers (via condes) will be called.
 
         lda     #.lobyte(__INTERRUPTOR_COUNT__*2)
         sta     irqcount
 
+; Call module constructors
+
+       jsr     initlib
+
 ; Push arguments and call main()
 
        jsr     callmain
@@ -97,9 +97,12 @@ L1:  lda     sp,x
 ; Back from main (this is also the _exit entry). Run module destructors.
 
 _exit:         pha                     ; Save the return code
+        jsr    donelib         ; Run module destructors
+
+; Disable chained IRQ handlers
+
        lda     #0
         sta     irqcount        ; Disable custom IRQ handlers
-        jsr    donelib         ; Run module destructors
 
 ; Copy back the zero page stuff