]> git.sur5r.net Git - cc65/blobdiff - libsrc/common/atexit.s
Merge pull request #14 from groessler/something_to_pull
[cc65] / libsrc / common / atexit.s
index c8c14e26885b3abade3ae35498f567f50f04728f..6edfd4a5dc220806c9a69191de704d68dceab611 100644 (file)
@@ -4,45 +4,44 @@
 ; int atexit (void (*f) (void));
 ;
 
-       .export         _atexit
-               .destructor     doatexit, 5
-       .import         __errno
-       .import         jmpvec
+        .export         _atexit
+        .destructor     doatexit, 17
+        .import         callax
 
-       .include        "errno.inc"
+        .include        "errno.inc"
+
+        .macpack        cpu
 
 ; ---------------------------------------------------------------------------
 
-.proc  _atexit
+.proc   _atexit
 
-       ldy     exitfunc_index
-               cpy     #exitfunc_max           ; Slot available?
-               beq     @Error                  ; Jump if no
+        ldy     exitfunc_index
+        cpy     #exitfunc_max           ; Slot available?
+        beq     @Error                  ; Jump if no
 
 ; Enter the function into the table
 
-       sta     exitfunc_table,y
-       iny
-       txa
-       sta     exitfunc_table,y
-       iny
-       sty     exitfunc_index
+        sta     exitfunc_table,y
+        iny
+        txa
+        sta     exitfunc_table,y
+        iny
+        sty     exitfunc_index
 
 ; Done, return zero
 
-       lda     #0
-       tax
-       rts
+        lda     #0
+        tax
+        rts
 
 ; Error, no space left
 
-@Error:        lda     #ENOSPC         ; No space left
-       sta     __errno
-       ldx     #$00
-       stx     __errno+1
-       dex                     ; Make return value -1
-       txa
-       rts
+@Error: lda     #ENOSPC         ; No space left
+        jsr     __seterrno
+        ldx     #$FF            ; Return -1
+        txa
+        rts
 
 .endproc
 
 
 .code
 
-.proc  doatexit
-
-               ldy     exitfunc_index          ; Get index
-               beq     @L9                     ; Jump if done
-       dey
-       lda     exitfunc_table,y
-       sta     jmpvec+2
-       dey
-       lda     exitfunc_table,y
-       sta     jmpvec+1
-       sty     exitfunc_index
-       jsr     jmpvec                  ; Call the function
-.ifpc02
-       bra     doatexit
+.proc   doatexit
+
+        ldy     exitfunc_index          ; Get index
+        beq     @L9                     ; Jump if done
+        dey
+        lda     exitfunc_table,y
+        tax
+        dey
+        lda     exitfunc_table,y
+        sty     exitfunc_index
+        jsr     callax                  ; Call the function
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        bra     doatexit
 .else
-       jmp     doatexit                ; Next one
+        jmp     doatexit                ; Next one
 .endif
 
-@L9:   rts
+@L9:    rts
 
 .endproc
 
@@ -79,8 +77,8 @@
 ; ---------------------------------------------------------------------------
 
 .bss
-exitfunc_index:        .res    1       ; Index into table, inc'ed by 2
-exitfunc_table:        .res    10      ; 5 exit functions
-exitfunc_max   = <(* - exitfunc_table)
+exitfunc_index: .res    1       ; Index into table, inc'ed by 2
+exitfunc_table: .res    10      ; 5 exit functions
+exitfunc_max    = <(* - exitfunc_table)