]> 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:23:31 +0000 (18:23 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 22 Feb 2009 18:23:31 +0000 (18:23 +0000)
before calling initlib because initlib calls contructors and may install
drivers, which enable hardware interrupts. Similar for donelib.

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

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

libsrc/cbm510/crt0.s
libsrc/cbm610/crt0.s

index d135e96184ff4ed9168e06c220ca303b192fa923..88c9a5dfea26138d2d2abac0e5113cfe4272430c 100644 (file)
@@ -425,15 +425,15 @@ ccopy2:   lda     __VIDRAM_START__,y
         lda     ExecReg
                sta     IndReg
 
-; Call module constructors, enable chained IRQs afterwards.
+; Activate chained interrupt handlers, then enable interrupts.
 
-        jsr    initlib
         lda     #.lobyte(__INTERRUPTOR_COUNT__*2)
         sta     irqcount
+       cli
 
-; Enable interrupts
+; Call module constructors.
 
-       cli
+        jsr    initlib
 
 ; Push arguments and call main()
 
@@ -443,9 +443,9 @@ ccopy2:     lda     __VIDRAM_START__,y
 ; point for the break vector.
 
 _exit:  pha                    ; Save the return code on stack
+        jsr    donelib         ; Run module destructors
        lda     #$00
         sta     irqcount        ; Disable custom irq handlers
-        jsr    donelib         ; Run module destructors
 
 ; Address the system bank
 
index 95ba67ffe51f1d953c7d87ac0e58f74fda75c234..6627a92703bba6ac3bd4a63de5ac4fa8997f5de0 100644 (file)
@@ -346,15 +346,15 @@ Z4:     jmp     Init
 
 .segment        "PAGE2"
 
-; Call module constructors, enable chained IRQs afterwards.
+; Activate chained interrupt handlers, then enable interrupts.
 
-Init:          jsr     initlib
-        lda     #.lobyte(__INTERRUPTOR_COUNT__*2)
+Init:   lda     #.lobyte(__INTERRUPTOR_COUNT__*2)
         sta     irqcount
+       cli
 
-; Enable interrupts
+; Call module constructors.
 
-       cli
+        jsr    initlib
 
 ; Push arguments and call main()
 
@@ -364,9 +364,9 @@ Init:       jsr     initlib
 ; point for the break vector.
 
 _exit:  pha                    ; Save the return code
+        jsr    donelib         ; Run module destructors
        lda     #$00
         sta     irqcount        ; Disable custom irq handlers
-        jsr    donelib         ; Run module destructors
 
 ; Address the system bank