]> git.sur5r.net Git - cc65/blobdiff - libsrc/atari/break.s
no TGI_ERR_NO_MEM or TGI_ERR_NO_IOCB anymore: replaced by TGI_ERR_NO_RES
[cc65] / libsrc / atari / break.s
index 975d38774081e0f5acd026eee9f72bfce856e776..ebad1cb3d9dfc5ac646d7526e59486cc7ad017a9 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"
 
@@ -36,17 +36,13 @@ uservec:            jmp     $FFFF           ; Patched at runtime
 
        lda     oldvec
        ora     oldvec+1        ; Did we save the vector already?
-               bne     L1              ; Jump if we installed the handler already
+       bne     L1              ; Jump if we installed the handler already
 
        lda     VBREAK
        sta     oldvec
        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,15 @@ 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
+       ldx     oldvec+1
+       beq     @L9             ; Jump if vector not installed
+       sta     VBREAK
+       stx     VBREAK+1
+       lda     #$00
+       sta     oldvec          ; Clear the old vector
+       stx     oldvec+1
+@L9:   rts     
 
 .endproc