]> git.sur5r.net Git - cc65/blobdiff - libsrc/apple2/break.s
don't use constructor to setup runtime stack
[cc65] / libsrc / apple2 / break.s
index e9e2e6dcafc16f576cb93ad1fb6458e8bdf917b9..e645bfde990243f59c6c3007209ef974e7e739af 100644 (file)
@@ -6,8 +6,11 @@
 ;
 
                .export         _set_brk, _reset_brk
-               .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
-       .import         _atexit
+       .destructor     _reset_brk
+
+        ; Be sure to export the following variables absolute
+               .export         _brk_a: abs, _brk_x: abs, _brk_y: abs
+        .export         _brk_sr: abs, _brk_pc: abs
 
        .include        "apple2.inc"
 
@@ -43,14 +46,10 @@ uservec:            jmp     $FFFF           ; Patched at runtime
        lda     BRKVec+1
        sta     oldvec+1        ; Save the old vector
 
-       lda     #<_reset_brk
-       ldx     #>_reset_brk
-       jsr     _atexit         ; Install an exit handler
-
 L1:    lda     #<brk_handler   ; Set the break vector to our routine
+               ldx     #>brk_handler
        sta     BRKVec
-       lda     #>brk_handler
-       sta     BRKVec+1
+       stx     BRKVec+1
        rts
 
 .endproc
@@ -59,11 +58,15 @@ L1: lda     #<brk_handler   ; Set the break vector to our routine
 ; Reset the break vector
 .proc  _reset_brk
 
-       lda     oldvec
-       sta     BRKVec
-       lda     oldvec+1
-       sta     BRKVec+1
-       rts
+       lda     oldvec
+       ldx     oldvec+1
+       beq     @L9             ; Jump if vector not installed
+       sta     BRKVec
+       stx     BRKVec+1
+       lda     #$00
+       sta     oldvec          ; Clear the old vector
+       stx     oldvec+1
+@L9:   rts
 
 .endproc
 
@@ -102,8 +105,8 @@ L1: lda     #<brk_handler   ; Set the break vector to our routine
        ldx     _brk_x
        ldy     _brk_y
        lda     _brk_a
-       
+
        rti                     ; Jump back...
 
 .endproc
-       
+