]> git.sur5r.net Git - cc65/commitdiff
Use a destructor instead of atexit
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 1 Dec 2000 17:58:40 +0000 (17:58 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 1 Dec 2000 17:58:40 +0000 (17:58 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@515 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/apple2/break.s
libsrc/atari/break.s
libsrc/c128/break.s
libsrc/c64/break.s
libsrc/cbm610/break.s
libsrc/pet/break.s
libsrc/plus4/break.s

index e9e2e6dcafc16f576cb93ad1fb6458e8bdf917b9..d9d029805341e91b7c082137105c5cf020f6cd73 100644 (file)
@@ -6,8 +6,8 @@
 ;
 
                .export         _set_brk, _reset_brk
+       .destructor     _reset_brk
                .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
-       .import         _atexit
 
        .include        "apple2.inc"
 
@@ -43,10 +43,6 @@ 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
        sta     BRKVec
        lda     #>brk_handler
@@ -59,11 +55,13 @@ 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
+       bne     @L1
+       ldx     oldvec
+       beq     @L9             ; Jump if vector not installed
+@L1:   sta     BRKVec
+       stx     BRKVec+1
+@L9:   rts
 
 .endproc
 
@@ -102,8 +100,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
-       
+
index 975d38774081e0f5acd026eee9f72bfce856e776..b1b58c831d3f42c53c511aa62944914bd8651ca0 100644 (file)
@@ -6,8 +6,8 @@
 ;
 
                .export         _set_brk, _reset_brk
+       .destructor     _reset_brk
                .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
-       .import         _atexit
 
        .include        "atari.inc"
 
@@ -43,10 +43,6 @@ uservec:     jmp     $FFFF           ; Patched at runtime
        lda     VBREAK+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
        sta     VBREAK
        lda     #>brk_handler
@@ -59,11 +55,13 @@ L1: lda     #<brk_handler   ; Set the break vector to our routine
 ; Reset the break vector
 .proc  _reset_brk
 
-       lda     oldvec
-       sta     VBREAK
-       lda     oldvec+1
-       sta     VBREAK+1
-       rts
+       lda     oldvec
+       bne     @L1
+       ldx     oldvec
+       beq     @L9             ; Jump if vector not installed
+@L1:   sta     VBREAK
+       stx     VBREAK+1
+@L9:   rts
 
 .endproc
 
index f0d69ceffa7ab8f38c6666870409c64e05880bc5..6f4cfe42059eed8c697da9a520e6c1fbaf049f52 100644 (file)
@@ -6,8 +6,8 @@
 ;
 
                .export         _set_brk, _reset_brk
+       .destructor     _reset_brk
        .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
-       .import         _atexit
        .importzp       ptr1
 
        .include        "c128.inc"
@@ -54,10 +54,6 @@ L1:  lda     brk_stub,y
        dey
        bpl     L1
 
-       lda     #<_reset_brk
-       ldx     #>_reset_brk
-       jsr     _atexit         ; Install an exit handler
-
 L2:            lda     #<stub_addr     ; Set the break vector to our stub
        sta     BRKVec
        lda     #>stub_addr
@@ -70,11 +66,13 @@ L2:         lda     #<stub_addr     ; Set the break vector to our stub
 ; Reset the break vector
 .proc  _reset_brk
 
-       lda     oldvec
-       sta     BRKVec
-       lda     oldvec+1
-       sta     BRKVec+1
-       rts
+       lda     oldvec
+       bne     @L1
+       ldx     oldvec
+       beq     @L9             ; Jump if vector not installed
+@L1:   sta     BRKVec
+       stx     BRKVec+1
+@L9:   rts
 
 .endproc
 
index 8b90d4fb51a51e6584a5738023554d16b54bf3fb..345f5e75fc163a394c7b9c056bb2750f668ee61d 100644 (file)
@@ -6,24 +6,24 @@
 ;
 
                .export         _set_brk, _reset_brk
+       .destructor     _reset_brk
                .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
-       .import         _atexit
 
        .include        "c64.inc"
 
 
 .bss
-_brk_a:                .res    1
-_brk_x:                .res    1
-_brk_y:                .res    1
-_brk_sr:       .res    1
-_brk_pc:       .res    2
+_brk_a:                .res    1
+_brk_x:                .res    1
+_brk_y:                .res    1
+_brk_sr:       .res    1
+_brk_pc:       .res    2
 
 oldvec:        .res    2               ; Old vector
 
 
 .data
-uservec:       jmp     $FFFF           ; Patched at runtime
+uservec:       jmp     $FFFF           ; Patched at runtime
 
 
 .code
@@ -31,26 +31,22 @@ uservec:            jmp     $FFFF           ; Patched at runtime
 ; Set the break vector
 .proc  _set_brk
 
-       sta     uservec+1
-       stx     uservec+2       ; Set the user vector
+       sta     uservec+1
+       stx     uservec+2       ; Set the user vector
 
-       lda     oldvec
-       ora     oldvec+1        ; Did we save the vector already?
-               bne     L1              ; Jump if we installed the handler already
+       lda     oldvec
+       ora     oldvec+1        ; Did we save the vector already?
+               bne     L1              ; Jump if we installed the handler already
 
-       lda     BRKVec
+       lda     BRKVec
        sta     oldvec
-       lda     BRKVec+1
-       sta     oldvec+1        ; Save the old vector
+       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
-       sta     BRKVec
-       lda     #>brk_handler
-       sta     BRKVec+1
+L1:    lda     #<brk_handler   ; Set the break vector to our routine
+       sta     BRKVec
+       lda     #>brk_handler
+       sta     BRKVec+1
        rts
 
 .endproc
@@ -59,11 +55,13 @@ 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
+       bne     @L1
+       ldx     oldvec
+       beq     @L9             ; Jump if vector not installed
+@L1:   sta     BRKVec
+       stx     BRKVec+1
+@L9:   rts
 
 .endproc
 
index 66492be719a3dbb65c204492d2018e758e94f733..67e9ca2256652e8da46a70a95bd752166fc11e26 100644 (file)
@@ -8,7 +8,7 @@
                .export         _set_brk, _reset_brk
                .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
        .import         _atexit
-                     
+
        .include        "zeropage.inc"
        .include        "page3.inc"
 
@@ -45,10 +45,6 @@ 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
        sta     BRKVec
        lda     #>brk_handler
@@ -61,11 +57,13 @@ 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
+       bne     @L1
+       ldx     oldvec
+       beq     @L9             ; Jump if vector not installed
+@L1:   sta     BRKVec
+       stx     BRKVec+1
+@L9:   rts
 
 .endproc
 
index 7fbf2b36ad38fec6b0d5158cf423a3485e9c04a0..2c85a49af9583e6065adbb3420e4570589a806f4 100644 (file)
@@ -6,8 +6,8 @@
 ;
 
                .export         _set_brk, _reset_brk
+       .destructor     _reset_brk
                .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
-       .import         _atexit
 
        .include        "pet.inc"
 
@@ -43,10 +43,6 @@ 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
        sta     BRKVec
        lda     #>brk_handler
@@ -59,11 +55,13 @@ 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
+       bne     @L1
+       ldx     oldvec
+       beq     @L9             ; Jump if vector not installed
+@L1:   sta     BRKVec
+       stx     BRKVec+1
+@L9:   rts
 
 .endproc
 
@@ -106,4 +104,4 @@ L1: lda     #<brk_handler   ; Set the break vector to our routine
 .endproc
 
 
-                             
+
index 4365534261c72d08a650fcf2c95fed28bb4e19d7..d6f1449770108ef0451662ea70265d6b3b7a1b39 100644 (file)
@@ -6,8 +6,8 @@
 ;
 
                .export         _set_brk, _reset_brk
+       .destructor     _reset_brk
        .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
-       .import         _atexit
 
        .include        "plus4.inc"
 
@@ -43,10 +43,6 @@ 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
        sta     BRKVec
        lda     #>brk_handler
@@ -59,11 +55,13 @@ 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
+       bne     @L1
+       ldx     oldvec
+       beq     @L9             ; Jump if vector not installed
+@L1:   sta     BRKVec
+       stx     BRKVec+1
+@L9:   rts
 
 .endproc